大家好,我是小鱼。最近来问小鱼问题的同学越来越多了,实在是回答不过来,大家尽量先在我们的鱼群
里将问题完整的描述出来,和群友们互相交流问题。
今天说一个很多同学遇到的,也是一位鱼粉问了小鱼很久的问题,所以来说一说,已经完成建图和导航的仿真,接着如何在真实机器人上做建图和导航。
一、搞清楚数据流图
在开始动手在真实机器人上做导航之前,我们要搞清楚整个建图导航的数据流图,也就是建图和导航功能包的输入和输出。
1.1 首先是建图
建图算法有很多种,这里小鱼拿比较常见的gmapping功能包来说。
整体数据流图如下图。
我们观察一下图中gazebo的作用,输入cmd_vel用于控输gazebo中的小车,输出里程计odom、雷达数据scan和小车link之间的关系。
1.2 导航功能包
导航我们一般使用amcl进行定位,move_base进行规划避障。
我们看一下整个导航导航的数据流图,如果我们将整体分为导航和gazebo两个部分。
跟上面的建图时有所不同,我们不需要键盘控制机器人了,而且我们需要建好的地图(通过map_server)作为输入给到导航定位模块。
二、将gazebo替换成你的真实机器人
2.1 真实机器人的建图
假如我们是在真实机器人上进行的建图,就要把gazebo去掉,把gazebo的原本的输出让真实机器人来输出,对gazbeo的输出cmd_vel也变成对真实机器人的输入。
真实机器人建图数据流程图如下:
这个流程看起来就很清晰了,将gazebo换成真实的机器人就行,等下我们再说说一般真实机器人是如何接收cmd_vel控制信息的,又是如何发布odom和scan话题的。
2.2 真实机器人的导航
这个和刚刚的建图如法炮制,直接上图
总结一下可以发现,只要把现在仿真的机器人gazebo干掉,将urdf的link关系改成真实机器人的link关系。然后将真实机器人的数据发布出来,再订阅一个话题cmd_vel话题给真实机器人即可。
三、如何连接真实机器人和建图导航定位程序
这一点做过嵌入式和上位机的同学很清楚(小鱼高中时玩过一段时间单片机,后面大学也搞了下rtos之类的),但是做软件的同学可能就不知道怎么做了,小鱼这里多说两句。
从上面的流程图可以看出来,我们需要真实机器人提供的是里程计信息和雷达信息。
3.1 里程计获取与控制指令的发布
里程计信息获取一般是如下结构。
这个方法其实也有很多,比如走can、串口都是可以。如果你是买的底盘,厂家会提供好通信的接口和线,都是可以直接用的。
我们一般会在ROS端编写一个base_control节点,这个节点具备和嵌入式通信的能力。
3.2雷达信息
雷达信息直接使用厂家的雷达驱动即可拿到对应话题数据。
四、总结
今天小鱼算是把整个结构图都画了出来,导航部分没有展开来说,大家可以使用rqt_graph查看计算图。
如果还有不明白的地方,欢迎关注公众号《鱼香ROS》加入鱼群一起交流。