既然想做一个小车,就干脆把小车做的有趣一点,小车现在已经可以接受键盘的控制实现行走了,下一步就是给它加一个新功能,比如利用激光slam实现定位与导航。
1.直接通过命令安装(前提是安装好了ros kinetic环境)
sudo apt-get install ros-kinetic-slam-gmapping
2.下载用于测试的数据包,这里直接通过网盘下载,因为原链接已经失效
测试数据.bag
1.运行roscore
roscore
2.新开终端,设置参数,确保在任何节点使用前设定use_sim_time参数为true,这个参数当回放bag数据集是设置为true,此时说明系统使用的是仿真时间
rosparam set use_sim_time true
3.新开终端,运行slam_gmapping节点,它将在base_scan主题上收听激光扫描数据
rosrun gmapping slam_gmapping scan:=base_scan
4.新开终端,进入下载的数据的位置,并play,例如我的就是basic_localization_stage_indexed.bag
,把它改成你下载的数据的名字,它的作用是把激光数据发送给slam_gmapping
节点。
rosbag play --clock basic_localization_stage_indexed.bag
5.利用ros的rviz工具可以看到你建立的地图,新开终端,打开rviz。
rviz rviz
点击add,让其topic为/map
,即可看到创建的2D地图。
到这里,安装测试就已经完成了,需要进一步了解的可以继续往下看。
7.节点、话题、发布者和订阅者之间关系可以通过状态图(graph)直观地表示。
执行:
rqt_graph
或
rosrun rqt_graph rqt_graph
状态图是当前正在运行的消息通信的图形表示,通过它我们可以直观的看到我们使用数据集测试slam_gmapping时节点和话题之间的关系。
———————————————————————————————————————————————————————
我们已经成功安装了Gmapping,下一步会介绍如何使用激光传感器,而不是测试数据来实现建图过程。最终实现让ros小车搭载激光传感器自主建图与定位,在这个过程中,我们将会逐渐了解ros机器人系统的工作原理与使用方式,同时学习Gmapping的数学原理。
1.硬件需求
To use slam_gmapping, you need a mobile robot that provides odometry data and is equipped with a horizontally-mounted, fixed, laser range-finder. The slam_gmapping node will attempt to transform each incoming scan into the odom (odometry) tf frame. See the “Required tf transforms” for more on required transforms.
gmapping需要一个能提供里程数据的移动机器人,水平安装的激光雷达。slam_gmapping节点把传进的激光扫描数据转换为tf框架下的里程数据(odom)。
2.节点
slam_gmapping
The slam_gmapping node takes in sensor_msgs/LaserScan messages and builds a map (nav_msgs/OccupancyGrid). The map can be retrieved via a ROS topic or service.
slam_gmapping节点接收sensor_msgs/LaserScan消息,创建网格地图。
3.订阅
tf (tf/tfMessage)
Transforms necessary to relate frames for laser, base, and odometry (see below)
scan (sensor_msgs/LaserScan)
Laser scans to create the map from
slam_gmapping订阅tf和scan话题。
4.发布话题
map_metadata (nav_msgs/MapMetaData)
Get the map data from this topic, which is latched, and updated periodically.
map (nav_msgs/OccupancyGrid)
Get the map data from this topic, which is latched, and updated periodically
~entropy (std_msgs/Float64)
Estimate of the entropy of the distribution over the robot’s pose (a higher value indicates greater uncertainty).
slam_gmapping发布map_metadata(地图元数据),map(地图网格数据),~entropy(机器人估计位置)等话题。
订阅:/scan /tf
发布:/map /map_metadata /slam_gmapping/entropy