基于ROS节点多机协同(无人机/无人车)分析

1.背景

无论是民用领域,还是军用领域。无人机/机器人的小型集群化,都是一个趋势。目前应用比较多的物流机器人,也是很多机器人协同配合完成任务。

随着技术的发展,进入机器人时代,机器与机器之间的通信协同工作,是必然趋势。集群机器人各自的数据共享,传感器状态数据共享,相互控制接口。要做到集群中任何一个机器人都可以获取其他机器人的状态数据,控制其他机器人的移动,实现群体协同工作。通信机制的选择比较重要,涉及到集群机器人的组网。

本文就是讨论和测试利用ROS通信的机制来实现多台的无人机集群,网内的每台无人机都可以实现相互数据读取和相互控制,无人机组网的队形变换和感知协同。

和普通的编队表演不一样,编队表演,地面站一控多,预先设置好无人机队形即可。多机协同是每台无人机要和全体无人机或者周边的无人机进行信息交互,互相控制的,整个无人机队形不是预先设置好的,是无人机相互感知,相互控制的结果,通过算法收敛到一个最佳的无人机运动轨迹,来实现协同工作。

 

2.系统功能框图

图1

 

群体协同工作要考虑两个方面:

第一通信硬件系统要支持每个节点(无人机/无人车)的组网互联,要求就是双工通信,组成网络,双工通信的数传模块很多,但是可以大规模组网的就有点少了,一般TCP/IP局域网就是一种路由器为中心节点的星形网络,所有数据都是通过路由器做IP地址转发,每个节点就可以相互通信,那么路由器这个中心节点的数据流动带宽,就是整个网络的数据传输带宽上限,我们平时说的百兆带宽,千兆带宽就是这个意思,千兆的数据容量肯定比百兆大。还有一些无中心节点的通信硬件系统,一般价格比较高,且带宽有一定限制,这里不做描述,咨询做通信的厂家也可以寻得一些方案。

第二软件系统的结构,每个无人机/无人车运行的节点,组成的群体是什么样子的结构,如果采用ROS的方案,ROS是支持分布式运行的节点,也就是1号无人机和2号无人机可以用ROS节点的方式相互通信。目前的ROS1就是用中心点的通信方式,也就是说在图1中ROS Master是整个ROS节点的中心,组成一个星状网络结构,这个ROS Master是和其他节点的通信桥梁。有点不好的因素是ROS Mater这个中心节点出现异常,整个组网就失效了。

硬件来讲WIFI路由器(TCP/IP)的方案也是路由器中心节点异常,网络就失效了。

软件层面来说用ROS1的方式,也是一样ROS Master异常网络也就失效了。

 

但是采用以上的好处是:WIFI的局域网设备成熟可选方案多。

ROS1也是提供了分布式多节点,解决了软件构架的问题,不用考虑相互通信的软件问题,ROS1组网消息列表中有所有当前网络节点的所有数据和控制指令,无人机1获得无人机2的传感器数据,无人机1和无人机2相互控制对方的飞行速度,飞行位置都可以实现。这就构成了群体智能的基础。提供相互感知和相互控制的接口。

但是这种方式的群体容纳个数的问题有待考虑,我们认为这种方式容纳10台无人设备,无论是在三维仿真和真实无人机飞行都是相对比较容易的。如果想容纳更多的无人系统,那么消息流要精简,和选择通信带宽更高的硬件设备。理论上一个网段的局域网可以容纳255台设备。

还有一点就是ROS2的推出,支持了无中心节点的通信方式DDS,软件通信层面没有中心点这一说,稳定性大为提升,在软件的消息通信层面,是非常适合组网的群体智能,因为ROS2推出不久,后续还是非常值得研究的。尤其是真正的分布式运行DDS的模式。

 

ROS1系统软件运行图

部分消息节点图

 

利用ROS分布式消息的模式,比如1号无人机给2号无人机发送指令,只需要加一个前缀/uav2/****  或者/uav1/****,就可以读取或者发送控制指令到2号无人机。ROS系统会维护一个所有无人机的消息指令队列(Topic),根据索引消息指令队列,就可以实现集群内部的所有无人机的传感器消息和控制指令的共享。

 

仿真视频

利用ROS环境仿真代码和实机代码高度一致,不用考虑仿真代码不能用于实机的问题。

仿真环境下5台无人机进行多机队形切换

 

实际测试视频

无人机编队测试:4台无人机室外飞行编队测试

以上是4台无人机的测试,因为采用的是一般的普通GPS,精度有限(0.5到2米),所以队形的保持不是很理想。但是可以看到多机协同的基本效果,是以后的智能算法协同的软件和硬件基础。

 

5台无人机编队协同测试视频

基于ROS节点多机协同的无人机编队测试

 

构架PX4固件410轴距无人机,ROS,MAVROS

通信组网硬件设备如下:

系统涉及组网硬件介绍:https://homer-wiki.readthedocs.io/en/latest/

实际工作硬件带宽状态,通信方式和通信带宽是很重要的考虑因素,我们记录了5台ROS1的通信带宽数据。

只有ROS主节点的系统带宽占用如下:

峰值在347KB这是一台主无人机启动ROS的数据流交互所占用的带宽。

5台无人机同时启动系统所占用的带宽如下:

峰值在1.16MB/S,这个硬件的图数传的设计带宽是100M,理论的传输带宽在12MB/S。所以五台无人机的组网协同,远远没有达到上线。估算10台左右的ROS无人机组网还是可以实现的。

如果要所有图像视频数据共享,那么带宽的压力会比较大。但是一般的传感器位置数据,速度数据,状态数据,控制指令数据等这些数据的共享还是相对比较容易的,带宽还是可以满足要求。其次还可以对通信数据的精简,在协同状态下,只保留位置,速度,姿态,状态等数据,也可以在带宽有限的情况下,容纳更多的无人机。

拉距带宽测试:(通信带宽会受到距离的影响,拉锯测试很有必要,但是限制于场地,后期我们会进行地面拉锯带宽测试)

这个产品和项目我们想最终进化成10台左右无人机的融合避障,图像的智能协同,比如其中一台无人机的云台发现兴趣目标,联动所有无人机的智能协同,实现初步的群体智能。也在寻求有实力的高校研究所合作,我们提供硬件平台和通用接口,共同实现无人机智能协同控制系统。

微信公众号关注《阿木实验室》第一时间获取无人机前沿科技技术干货以及测评内容。

  • 28
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
ROS是一种用于机器人开发的开源框架,而无人车自主跟随基于视觉的仿真教程,可以让我们了解如何使用ROS框架实现无人车的自主跟随功能。本教程将提供以下步骤: 1. 安装ROS 2. 下载并安装仿真环境 3. 配置ROS工作环境 4. 编写ROS节点 5. 测试程序 以下是详细的步骤说明: 1. 安装ROS 在开始之前,您需要先安装ROS。您可以按照ROS官方网站上的说明进行安装: http://wiki.ros.org/ROS/Installation 2. 下载并安装仿真环境 在本教程中,我们将使用Gazebo仿真环境和RViz视觉化工具。您可以使用以下命令安装: ```bash sudo apt-get install ros-<distro>-gazebo-ros-pkgs ros-<distro>-gazebo-ros-control sudo apt-get install ros-<distro>-rviz ``` 其中,`<distro>`应该替换为您正在使用的ROS版本,例如“kinetic”或“melodic”。 3. 配置ROS工作环境 在开始编写ROS程序之前,您需要设置ROS工作环境。请按照以下步骤执行: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make source devel/setup.bash ``` 这将创建一个名为“catkin_ws”的工作空间,并为ROS设置必要的环境变量。 4. 编写ROS节点 在此步骤中,我们将编写ROS节点以实现无人车的自主跟随功能。您可以使用以下命令在“src”文件夹中创建一个新的ROS包: ```bash cd ~/catkin_ws/src catkin_create_pkg follow_car rospy ``` 这将创建一个名为“follow_car”的ROS包,并使用Python编写ROS节点。现在,您可以使用文本编辑器打开“follow_car”文件夹中的“src”文件夹,并创建一个名为“follow_car_node.py”的新文件。请在该文件中添加以下代码: ```python #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2 class FollowCar: def __init__(self): self.bridge = CvBridge() self.image_sub = rospy.Subscriber('/camera/image_raw', Image, self.callback) def callback(self, data): cv_image = self.bridge.imgmsg_to_cv2(data, 'bgr8') # 在此添加跟随功能代码 cv2.imshow('Follow Car', cv_image) cv2.waitKey(1) if __name__ == '__main__': rospy.init_node('follow_car_node') fc = FollowCar() rospy.spin() ``` 上述代码使用OpenCV库接收摄像头图像,并在回调函数中实现跟随功能。您可以按照您的需求更改代码以实现想要的跟随方式。 5. 测试程序 现在,您可以使用以下命令运行ROS节点: ```bash roscore ``` 在新的终端中,使用以下命令启动Gazebo仿真环境: ```bash roslaunch gazebo_ros empty_world.launch ``` 接下来,您需要将无人车模型添加到仿真环境中。您可以使用以下命令将无人车模型添加到仿真环境中: ```bash roslaunch gazebo_ros spawn_model -file ~/catkin_ws/src/follow_car/models/car.urdf -urdf -x 0 -y 0 -z 1 -model car ``` 这将在仿真环境中添加一个名为“car”的无人车模型。现在,您可以使用以下命令将无人车模型的摄像头图像发布到ROS话题中: ```bash rosrun gazebo_ros gzclient ``` 在新的终端中,您可以使用以下命令运行ROS节点: ```bash rosrun follow_car follow_car_node.py ``` 现在,您应该可以在新的窗口中看到无人车的视频流,并且车辆应该开始跟随。 总结 本教程提供了如何使用ROS框架实现无人车自主跟随功能的步骤。在完成此教程后,您应该熟悉ROS的基本概念,并可以使用ROS框架开发自己的机器人应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值