一、介绍物理模拟器 Gazebo 与可视化工具 Rviz
Gazebo:机器人的'物理模拟器'
Gazebo 是一个 3D 物理仿真环境。它不仅仅有图像,还严格地遵守物理定律,比如重力、摩擦力、碰撞、光线等等。
- 它是什么? Gazebo 是一个3D 物理仿真环境。
- 它做什么? 你可以在 Gazebo 里搭建一个虚拟世界(比如一个有家具的房间、一条马路),然后把你的机器人模型放进去。
在 ROS 系统中利用激光雷达数据实现机器人避障。通过创建订阅节点获取雷达扫描信息,判断前方障碍物距离,并根据阈值发布速度控制指令。结合 Gazebo 物理仿真与 Rviz 可视化工具,验证机器人在遇到障碍物时自动转向并继续前行的功能。
Gazebo 是一个 3D 物理仿真环境。它不仅仅有图像,还严格地遵守物理定律,比如重力、摩擦力、碰撞、光线等等。
简单来说,Gazebo 就是:
一个为机器人打造的、高度逼真的'虚拟现实游戏引擎'。它负责'创造世界'和'执行物理规律'。
Rviz 是一个 3D 数据可视化工具。它本身不模拟任何物理现象,它只是一个'显示器'或'仪表盘'。
简单来说,Rviz 就是:
一个为机器人打造的'超级仪表盘'或'X 光透视眼'。它负责'把机器人的内部状态和感知数据,变得肉眼可见'。
打开终端:
roslaunch wpr_simulation wpb_simple.launch //打开 Gazebo 仿真
//打开一个新的终端 rviz
红色细线即为激光雷达检测到的数据。
打开终端:
cd catkin_ws/src
catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs
使用编辑器在 ~/catkin_ws/src/lidar_pkg/src 目录下创建文件:lidar_node.cpp
编辑新建的节点文件,输入以下内容并保存。
#include<ros/ros.h>
#include<sensor_msgs/LaserScan.h>
void LidarCallback(const sensor_msgs::LaserScan msg)
{
float fMidDist = msg.ranges[180];
ROS_INFO("前方测距 ranges[180] = %f 米", fMidDist);
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "");
ros::init(argc, argv, "lidar_node");
ros::NodeHandle nh;
ros::Subscriber lidar_sub = nh.subscribe("/scan", 10, &LidarCallback);
ros::spin();
return 0;
}
在与节点同一地址中打开 CMakeLists.txt 文件,将下方内容复制黏贴到末尾。
add_executable(lidar_node src/lidar_node.cpp)
target_link_libraries(lidar_node ${catkin_LIBRARIES})
cd ~/catkin_ws/
catkin_make
roslaunch wpr_simulation wpb_simple.launch
# 在新的终端运行
rosrun lidar_pkg lidar_node
也可在 Gazebo 中移动机器人或者障碍物的位置观察输出的距离。
打开 VScode 软件在 ~/catkin_ws/src/lidar_pkg/src 目录下的文件:lidar_node.cpp
修改其中内容:
#include<ros/ros.h>
#include<sensor_msgs/LaserScan.h>
#include<geometry_msgs/Twist.h>
ros::Publisher vel_pub;
int nCont = 0;
void LidarCallback(const sensor_msgs::LaserScan msg)
{
float fMidDist = msg.ranges[180];
ROS_INFO("前方测距 ranges[180] = %f 米", fMidDist);
geometry_msgs::Twist vel_cmd;
if(nCont > 0)
{
nCont--;
return;
}
if(fMidDist < 1.5)
{
vel_cmd.angular.z = 0.5;
nCont = 50;
}
else
{
vel_cmd.linear.x = 0.5;
}
vel_pub.publish(vel_cmd);
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "");
ros::init(argc, argv, "lidar_node");
ros::NodeHandle nh;
ros::Subscriber lidar_sub = nh.subscribe("/scan", 10, &LidarCallback);
vel_pub = nh.advertise<geometry_msgs::Twist>("/cmd_vel", 10);
ros::spin();
return 0;
}
cd ~/catkin_ws
catkin_make
roslaunch wpr_simulation wpb_simple.launch
rosrun lidar_pkg lidar_node
机器人直行到距离前方障碍物 1.5 米时,绕 Z 轴转向,继续直行,绕开障碍物。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online