作者:mobiledu2502887153 | 来源:互联网 | 2023-08-25 21:35
gmapping 功能包
基于激光雷达
Rao-Blackwellized 粒子滤波算法
二维栅格地图
需要机器人提供里程计信息
OpenSlam开源算法
输出地图话题:nav_msgs/OccupancyGrid
kinetic@vm:~$ rosmsg show nav_msgs/OccupancyGrid
std_msgs/Header header
uint32 seq
time stamp
string frame_id
nav_msgs/MapMetaData info
time map_load_time
float32 resolution
uint32 width
uint32 height
geometry_msgs/Pose origin
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
int8[] data
参考:http://openslam.org/gmapping.html
gmapping 功能包框架图 (即时定位与地图建模)
安装gmapping
kinetic@vm:~$ sudo apt-get install ros-kinetic-gmapping
gmapping 功能包中话题和服务
gmapping 功能包中的TF变换
栅格地图取值原理
致命障碍:栅格值为254,障碍物与机器人的中心重合,此时机器人必然与障碍物发生碰撞。
内切障碍:栅格值为253,障碍物处于机器人轮廓的内切圆内,此时机器人也必然与障碍物发生碰撞。
外切障碍:栅格值为252~128,障碍物处于机器人的轮廓的外切圆内,此时机器人与障碍物临界接触,不一定发生碰撞。
非自由空间:栅格值为128~0,障碍物附近区域,一旦机器人进入该区域,将有较大概率发生碰撞,属于危险警戒区,机器人应该尽量避免进入。
自由区域:栅格值为0,此处没有障碍物,机器人可以自由通过。
未知区域:栅格值为255,此处还没有探知是否有障碍物,机器人可以前往继续建图。
参考: http://wiki.ros.org/gmapping
catkin_ws/src/mbot_navigation/launch/gmapping.launch
设置要订阅的里程计信息在那一个坐标系下的,里程计的坐标系一般是odom坐标系。
地图的更新频率,5秒钟更新一次地图
最大范围5米
激光雷达所检测的最大范围4.5米
设置功能包的输入的激光雷达的话题
启动gmapping演示(激光雷达)
kinetic@vm:~/catkin_ws$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
kinetic@vm:~/catkin_ws$ roslaunch mbot_navigation gmapping_demo.launch
kinetic@vm:~/catkin_ws$ roslaunch mbot_teleop mbot_teleop.launch
建图完毕,保存地图
kinetic@vm:~/catkin_ws$ rosrun map_server map_saver -f cloister_gmapping
启动gmapping(kinect)
ubuntu@T430:~$ roslaunch mbot_gazebo mbot_kinect_nav_gazebo.launch
ubuntu@T430:~$ roslaunch mbot_navigation gmapping_demo.launch
ubuntu@T430:~$ roslaunch mbot_teleop mbot_teleop.launch