3、多机编队

3.1、简介

关于如何配置多机通讯和同步时间的问题,具体参考【多机手柄控制】这一节课;有网络的情况下直接同步网络系统时间,无需设置。

在使用多机手柄控制时,首先需要确保机器人在同一局域网下,配置同一个【ROS_MASTER_URI】;多个机器人控制运动,只可以有一个主机。本节案例设置虚拟机为主机,其他机器人为从机,有几个从机都可以;当然也可以设置某一机器人为主机其他为从机。

根据针对不同车型,只需在【.bashrc】中设置购买的车型即可,X1(普通四驱) X3(麦轮)X3plus(麦轮机械臂) R2(阿克曼差速) 等等,本节以X3为例

打开【.bashrc】文件

查找【ROBOT_TYPE】参数,修改相应的车型

3.2、使用

以虚拟机是主机,3台机器人是从机为例;使用前必须有地图。3台从机分别【robot1】、【robot2】、【robot3】,又将【robot1】设定位领航者,【robot2】、【robot3】设定为跟随着。玩该功能时确保场地足够大,以免撞机。且无避障功能。

【该例程不适合树莓派5主板驱动】

3.2.1、开启机器人

虚拟机端

启动命令(robot1端),为方便操作,本节以【mono + laser + yahboomcar】为例。

启动命令(robot2端),为方便操作,本节以【mono + laser + yahboomcar】为例。

更多机器人以此类推。

3.2.2、开启多机编队

手柄控制开启过程参考【多机手柄控制】这一节课。

虚拟机端

启动之后,需要对机器人进行初始化位姿设置,具体设置方法参考【多机导航这一节课】,设置后如下图。

image-20220303115213924

3.2.3、编队控制

打开动态参数调整工具

image-20220303115458962

该工具可对每台机器人单独设置。

参数解析

【lin_Kp】、【lin_Ki】、【lin_Kd】:小车线速度PID调试。

【ang_Kp】、【ang_Ki】、【ang_Kd】:小车角速度PID调试。

参数范围解析
【teams】默认【vertical】队形:【convoy,vertical, horizontal】
【robot_model】默认【omni】车型:【omni,diff】
【navigate】【False,True】是否以导航模式运行
【Switch】【False,True】功能开关【开始/暂停】
【dist】【0.5,2.0】队列之间的距离

开启【Switch】功能开关后,机器人自动保持【teams】参数设定的队形,【teams】参数只识别最近一次设定的值。如下图所示

image-20220303115549842

image-20220303115812961

image-20220303120656866

队形设定后,当我们控制【robot1】时,其他机器人无需控制自动保持该队形。

3.3、launch文件

tf_queuebroad.launch

3.4、框架分析

节点查看

rosgraph

【QueueBroad】节点订阅来自每一个机器人的队列指令,该节点只会识别最近一次队形设置。

查看tf树

frames

由上图可知【robot1】会发出两个坐标系【point1】和【point2】,【robot2】和【robot3】实时监听自身与该坐标系的关系,并使得自身坐标系与该坐标系重合。在【tf_queuebroad.launch】文件中,我们可以看出【robot2】跟随【point1】坐标系;【robot3】跟随【point2】坐标系。