感谢b站up 机器人工匠阿杰
文章仅供个人学习使用
文章目录
地图
地图消息
map_serve节点发布/map话题,消息类型是nav_msgs::OccupancyGrid
(占据栅格)
消息类型OccupancyGrid:
其中地图的描述信息info:
SLAM
全称Simultaneous Locallization And Mapping,即同时定位与地图创建。
ROS系统中使用雷达传感器进行机器人的环境感知。雷达传感器可以通过发射电磁波,如激光束或者声波,来探测周围环境并获取其反射回来的信号,进而获得环境的信息。其中最为常用的是激光雷达。
激光雷达会把激光束发射出去,然后等待激光束被障碍物反射回来,再通过接收器捕获反射回来的激光束。激光雷达会记录下激光束的反射时间、角度和位置等信息,并将这些信息转换成二维或三维坐标系中的点云数据,用于表示周围环境的物体形状和位置。
在ROS系统中,我们可以订阅激光雷达发布的数据,获取机器人周围的点云数据,然后通过建图算法和SLAM技术来处理这些数据,实现机器人的自主导航和环境感知功能。
在视觉SLAM中,我们可以使用环境中的固定物品、二维码、颜色标记、电子标签等作为参照物。ROS系统中使用栅格地图来表示环境。在初始状态下,所有的栅格值都被设为-1,表示未知状态。因此,我们需要使用激光雷达扫描这些未知状态的栅格。激光被投射到地图上,并通过障碍物的反射返回激光雷达,从而我们可以确定哪些栅格没有障碍物。没有障碍物的栅格的值被设置为0,而被阻挡的位置则被设置为100,其他未扫描到的栅格仍然保持-1的状态。激光束扫描一周,就能把机器人当前位置所能探测到的有障碍物和没有障碍物的栅格全都标注出来了。机器人在移动时不断扫描周围的栅格,并记录当前位置和探测到的栅格状态。一旦机器人移动到另一个位置,再次进行扫描,通过对不同观测点扫描的局部地图进行特征匹配和拼接,我们就可以将这些局部地图拼合起来,形成一个更大的全局地图。在导航时,我们可以在栅格值为0的区域进行路径搜索,而未被扫描到的栅格属于“未探明”区域。实际应用中,我们会对局部地图进行更频繁的扫描,以提高栅格地图的可靠性。
Hector_Mapping
安装
sudo apt install ros-noetic-hector-mapping
执行
roslaunch wpr_simulation wpb_stage_slam.launch
新终端:
rosrun rviz rviz