基于ROS的多机器人导航+编队仿真

4253
18
2020年6月28日 12时28分

前几篇文章中分别讲了如何在gazebo中加载多机器人,在gazebo中多机器人的编队以及如何在rviz中实现多机器人仿真。这一篇文章的主要内容是将前几篇文章所讲内容做一个集合,实现在ROS环境下的多机器人导航加编队的仿真。

1.自主导航+编队框架

前两篇文章已经分别介绍了移动机器人自主导航以及多移动机器人编队的软件框架。这一节介绍如何将其二者结合,思路为将领航者作为自主导航的机器人,跟随者在保持队形的同时进行避障,以避免发生事故。这样结合的好处是仅领航者需要自主导航,编队中其余机器人只需要保持编队和避障即可,使系统的整体工作量减少,系统实现难度减小。图1-1为导航+编队程序框架图。
基于ROS的多机器人导航+编队仿真插图

图1-2是仿真中运行移动机器人自主导航以及编队时的节点关系图。图中ares1作为领航者,ares2作为跟随者。ares1接收move_base规划路径的运动指令, ares2接收领航者与自己的位置偏差,在slave节点中作出控制指令并发布,从而实现编队。
基于ROS的多机器人导航+编队仿真插图(1)

2.效果展示
运行指令:
启动仿真环境:roslaunch ares_gazebo ares_cloister_gazebo.launch
打开rviz,进行领航者导航:roslaunch ares_navigation navigation_demo.launch
启动编队程序:roslaunch stage_first OnYourMarkGetSetGo.launch

效果展示:
基于ROS的多机器人导航+编队仿真插图(2)

3.实现步骤
1)在gazebo中实现多机器人仿真,各个机器人运动可独立控制。
具体实现步骤:《如何在gazebo中实现多机器人仿真》
2)在gazebo多机器人仿真条件下,在rviz中实现其中任何一机器人的自主导航。
具体实现步骤:《如何在RVIZ中实现多机器人导航仿真》
3)将实现自主导航的小车指定为领航者,其余机器人小车指定为跟随者,从而实现在指定环境中的自主导航加仿真。
编队原理及具体实现步骤:《基于ROS的多机器人编队仿真》

4.总结与展望

前前后后也写了四篇文章,从最基础的在gazebo中加载多个机器人,到一步步实现导航即编队功能,最后将其结合,这期间走过不少弯路,不过也是跌跌撞撞地做出了简单的效果。对于整个项目,我认为还有以下可以改进的地方,希望以后可以升级完善:
1) 编队队形较简易单一,编队控制为最基础的开环控制,之后可以将论文中的控制理论在此系统中验证;
2) 由于项目需要,多机器人的导航中只指定编队中领航者小车实现自主导航。理论上是可以同时实现多车导航的,有兴趣的小伙伴也可以参考项目进行配置;
3) 有关多机器人协作方面,项目中只实现了简单的编队及编队导航效果。系统搭建好后多机器人还可以进行多方面的协作,比如多机器人共同建图等。
当下多机器人协作方向在机器人研究领域越来越火,在此方向的论文理论也层出不穷;ROS作为机器人系统的应用也越来越普遍,众多实践也证明了ROS的优越性。综其二者,多机器人协作在ROS上的运用看来也会是大势所趋。而在学习过程中,ROS1对于多机器人仿真实验的众多不方便也逐渐体现了出来,具体在前文中都有所提及,在ROS2中应该也会相应的得到改进。
“怕什么真理无穷,进一寸有一寸的欢喜。”学习工作及文章多有不足疏漏之处,希望大家来一起学习探讨!

发表评论

后才能评论

评论列表(18条)

  • 念桥 2020年11月21日 下午6:40

    一直撞墙这个问题怎么解决呀

  • 是吧哈哈哈 2020年8月27日 下午7:52

    您好,我想问一下领航者单车导航是可以正常运行的,但是启动编队程序之后领航者就一直直走然后撞墙,再也不动了,我按照您说的去掉了master.cpp但是还是撞墙,这个是什么问题呢?谢谢!

    • 付雷雷 回复 是吧哈哈哈 2020年9月15日 下午1:47

      master.cpp里面有一个一直让他往前走的move子函数,需要把那个注释掉的。然后可以看看运行时候的节点图,看是什么节点再给小车发一直往前走的指令。

    • 是吧哈哈哈 回复 付雷雷 2020年9月17日 下午3:53

      好的,谢谢,我看看,GitHub上面的项目是更新了吗

  • 付雷雷 2020年8月4日 下午1:24

    大家有问题也可以移步古月居论坛-多机器人专区讨论,避免重复问题https://www.guyuehome.com/forum/%e6%96%b9%e6%a1%88%e5%ba%94%e7%94%a8/%e5%a4%9a%e6%9c%ba%e5%99%a8%e4%ba%ba

  • L. 2020年7月31日 下午3:42

    为什么我启动编队程序以后 我的领航者就无法转向了呀

    • 付雷雷 回复 L. 2020年8月4日 下午1:25

      单车导航可以正常运行吗?

    • 3ot2b_5608 回复 付雷雷 2020年8月12日 下午4:47

      单车的可以导航,但是多车的就一直走然后撞墙
      我还想请教一下启动编队程序以后为什么小车就直接开始动了呀?我在那个launch文件里没看见让他运动的节点或者什么呀

    • 是吧哈哈哈 回复 3ot2b_5608 2020年8月12日 下午10:05

      我也是这样,启动编队程序之后就一直直走然后撞墙,请问你解决了吗?

    • Sea 回复 是吧哈哈哈 2020年8月13日 上午9:21

      没有,我是新手不太会解决,我连那个启动编队程序为什么会直接开始导航都还没看明白呢

    • L. 回复 Sea 2020年8月14日 下午3:00

      将那个master。cpp去掉就行了

    • Sea 回复 L. 2020年8月17日 上午9:14

      好的,非常感谢,不知道能不能加个QQ以后有什么问题一起交流呢?

    • 是吧哈哈哈 回复 Sea 2020年8月18日 下午7:02

      你解决了吗?我把master.cpp去掉了他还是老样子

    • Sea 回复 是吧哈哈哈 2020年8月18日 下午8:17

      我去掉了就可以自己在rviz里面手动设置目标点导航了

    • 是吧哈哈哈 回复 Sea 2020年8月18日 下午8:38

      但是我自己设置目标导航点,他还是按照直线走撞墙,不往我标记的点走

  • xq453_0317 2020年7月20日 下午4:06

    请问这个错误是什么原因呢?ERROR] [1595231302.887674999]: “ares2” passed to lookupTransform argument target_frame does not exist.

    • 付雷雷 回复 xq453_0317 2020年7月21日 下午9:04

      这个不需要管他,不影响功能实现的

    • 王蔚 回复 付雷雷 2020年10月9日 上午10:32

      老哥,我想请教下,就是我复现代码后,领航者到达终点以后,为啥后面的两个小车就撞到领航者了?