ABB参赛作品:基于ROS的工厂作业机器人Plantbot

ROS 官方提供了hector_mappinggmapping两种方法来实现SLAM,其中gmapping采用的是比较古老的经典算法,而hector_gmapping采用较新的算法。两者在应用上的主要区别在于前者可以不借助里程计实现SLAM,而gmapping必须提供里程计信息。
hector_mapping订阅主题是scan(提供激光雷达消息)和syscommand(提供重启等系统命令,可缺省),坐标变换关系为:

可以看到,运行该结点需要提供激光雷达坐标系(laser)到机器人基础坐标系(base_link) 的转换,这是因为激光雷达感知周围物体的距离信息是以自身为坐标中心的,而机器人的移动、定位是以机器人基础坐标系为参考坐标系的,因此有必要添加机器人基础坐标系到激光雷达坐标系的转换。如图是我选用激光雷达的坐标系规定:

如果使用官方驱动,就必须按照规定的坐标系布置激光雷达、配置坐标系。激光雷达坐标系到基础坐标系之间的转换由运动平台确定,通常是静态的。在Plantbot中,激光雷达架设在在第三层中心, 而基础坐标系中心为第一层中心 ,两坐标系的转换只需沿z轴平移两板的间距。静态坐标系转换可以使用static_transform_publisher命令来定周期发布,也可以采用更通用的方法,即利用建立的URDF(Unified Robot Description)模型,调用joint_state_publisher和robot_state_publisher来完成,后一种方法在机械臂中尤为常见。

激光雷达采用了自带的驱动包,运行结点rplidarNode,发布/scan主题。需要注意的是默认情况下串口没有写的权限,因此运行结点之前先要修改串口权限,也可以写相应的规则文件。

一切配置好后运行hector_mapping,可以看到RVIZ中绘制的周围地图,此时ROS的工作状态如下所示:

继续运行底层框架中的相关结点或对应的启动文件,然后通过键盘或app控制机器人移动,直到绘完整个环境地图。下图是绘制的室内环境地图:

补充资料:RPLidar For ROS Based SLAM

---------------------------------------------------------------------------------------------------------------------

目录:

基于ROS的自主导航小车Plantbot--底层驱动

基于ROS的自主导航小车Plantbot--SLAM

基于ROS的自主导航小车Plantbot--自主导航