引言
这是一个困扰了我很久的问题-------关于如何实现无人机集群的**去中心化分布式通信**。对于现在大多数通信,比较多的就是**星型通信拓扑**与**树状通信拓扑**,这两种方式并不是说不好,只是有一个很大的缺点就是,当中心节点或者父节点挂掉时,会影响该其余所有子节点挂掉!很严重的影响集群的动态组网的鲁棒性。直到我深入了解了计算机网络当中一个网络概念叫做 **Ad hoc**,困扰很久的问题终于解开。本篇文章会介绍一些基本的相关概念,然后会讲解在**Linux**上具体实现步骤,最后再讲解如何在**ROS(机器人操作系统)**上实现真正意义的**多机分布式通信**!
一、基本概念学习
1.什么是去中心化点对点自组织网络?
去中心化点对点自组织网络是一种无需中心化设备(如路由器或接入点)的无线网络结构。每个节点(设备)都可以与其他节点直接通信,并且通过多跳路由实现跨节点的消息传递。
这种网络的一个常见应用是无人机群或机器人集群,每个节点可以独立运行和通信,组建动态网络。这种架构可以在设备之间传输数据,即使没有互联网连接。
树状组网星型组网
去中心化点对点自组织网
2.什么是ad hoc?
Ad hoc是一种**多跳的、无中心的、自组织无线网络**,又称为**多跳网(MulTI-hop Network)**、**无基础设施网(Infrastructureless Network)**或**自组织网(Self-organizing Network)**。
整个网络没有固定的基础设施,每个节点都是移动的,并且都能以任意方式动态地保持与其它节点的联系。在这种网络中,由于终端无线覆盖取值范围的有限性,两个无法直接进行通信的用户终端可以借助其它节点进行分组转发。每一个节点同时是一个路由器,它们能完成发现以及维持到其它节点路由的功能。
Ad hoc网络是一种**特殊的无线移动网络**。网络中所有结点的地位平等,无需设置任何的中心控制结点。网络中的结点不仅具有普通**移动终端**所需的功能,而且具有报文转发能力。与普通的移动网络和固定网络相比,它具有以下特点:
(1)无中心
Ad hoc网络没有严格的控制中心。所有结点的地位平等,即是一个对等式网络。
(2)自组织
网络的布设或展开无需依赖于任何预设的网络设施。结点通过分层协议和分布式算法协调各自的行为,结点开机后就可以快速、自动地组成一个独立的网络。
(3)多跳路由
当结点要与其覆盖范围之外的结点进行通信时,需要中间结点的多跳转发。与固定网络的多跳不同,Ad hoc网络中的多跳路由是由普通的网络结点完成的,而不是由专用的路由设备(如路由器)完成的。
(4)动态拓扑
Ad hoc网络是一个动态的网络。网络结点可以随处移动,也可以随时开机和关机,这些都会使网络的拓扑结构随时发生变化。
3.常用多跳通信的路由协议
这里我列举两种协议:B.A.T.M.A.N.(Better Approach To Mobile Ad-hoc Networking) 和 OLSR(Optimized Link State Routing Protocol),这两种协议都是为无线自组织网络(Ad-hoc 网络)设计的路由协议,但它们在路由决策方式、工作原理和适用场景上存在显著区别。
(1)B.A.T.M.A.N.(Better Approach To Mobile Adhoc Networking)
B.A.T.M.A.N. 是一种分布式的、无中心化的路由协议,设计目的是在动态的无线网络中简化路由过程。
** 工作原理**
- 去中心化路由决策:与传统的链路状态协议不同,B.A.T.M.A.N. 并不试图构建整个网络的全局视图。每个节点只知道从自己到其他节点的下一跳信息,而不需要了解整个网络的拓扑结构。
- 本地视角的路由:路由的选择基于每个节点对其邻居节点的通信质量判断,而非全局链路状态。这样可以减少路由开销并且适应动态变化的网络。
- 多跳通信:消息可以通过多个中继节点传播到远程目的地,路由是动态调整的,基于节点之间的最短路径质量。
** 优点**
- 适应动态网络:B.A.T.M.A.N. 对于节点频繁加入或退出的网络非常有效,适合高移动性环境,例如无人机群或移动机器人网络。
- 较低的网络开销:由于每个节点只需要维护到其邻居的路由信息,而不是全网的链路状态,B.A.T.M.A.N. 生成的路由开销较低。
- 弹性强:网络中的单点故障不会影响整个网络,具有较高的故障容忍度。
- 易于扩展:由于不需要全网拓扑信息,B.A.T.M.A.N. 更适合大规模的分布式网络。
(2)OLSR 协议
OLSR 是一种链路状态协议,设计用于移动自组织网络(MANET),它通过定期广播链路状态信息,维持网络中的全局路由信息。
** 工作原理**
- 链路状态协议:OLSR 定期向整个网络广播链路状态信息。每个节点根据接收到的全局信息构建完整的网络拓扑图,并根据该拓扑计算最短路径路由。
- 多点中继(MPR):为了减少广播的冗余,OLSR 使用 MPR 机制。只有被选为 MPR 的节点才会转发链路状态信息,这有效减少了广播开销。
- 持续更新路由:即使在不传输数据时,OLSR 也会不断更新路由表,确保网络中的路由信息始终是最新的。
** 优点**
- 全局最优路由:OLSR 基于全网的链路状态信息进行路由计算,能确保从源到目的地的路径是全局最优的。
- 适合较大的网络:通过使用 MPR 机制,OLSR 在较大规模的网络中也能保持相对低的广播开销,并且确保高效的路由传播。
- 稳定性高:由于 OLSR 的路由信息是基于全网的链路状态广播生成的,因此在网络拓扑变化不频繁的情况下,路由非常稳定。
(3)B.A.T.M.A.N. 与 OLSR 的对比
对比两种路由协议,B.A.T.M.A.N. 更适合无人机集群分布式通信的实现!
二、在Linux系统上的实现方式
步骤 1:检查网卡设备是否支持 ad hoc 模式
iw list | grep -A 10 'Supported interface modes'
如果输出中包含
IBSS
,表示设备支持 ad hoc 模式。
步骤2:安装 B.A.T.M.A.N协议
sudo apt-get install batctl
步骤 3:配置 ad hoc 网络
注意这里的eth1是网卡名称,可通过ifconfig自行查看设备网卡名称
ubuntu官方参考链接:WifiDocs/Adhoc - Community Help Wiki
1.确保网络管理与网卡关闭
sudo service network-manager stop
sudo ip link set eth1 down
2.选择网卡模式ad-hoc
sudo iwconfig eth1 mode ad-hoc
3.设置通信信道(确保所有设备均在同一信道上)
sudo iwconfig eth1 channel 1
4.添加网络名称
sudo iwconfig eth1 essid 'name'
5.添加WEP加密密钥
sudo iwconfig eth1 key 1234567890
6.恢复网卡工作
sudo ip link set eth1 up
7.设置ip地址(可自行配置)
sudo ip addr add 192.168.1.100/24 dev eth1
步骤 4:加入 ad hoc 网络
1.其他设备需要使用相同的网络名称(SSID)和信道来加入已经创建的 ad hoc 网络,并手动配置 IP 地址以确保在同一子网中。
2.使用B.A.T.M.A.N协议
sudo batctl if add eth1
步骤5:测试通信
使用网络命令**ping <IP地址>**测试设备之间的相互通信
三、ROS1(机器人操作系统)上实现多机分布式通信
这部分是借鉴了一位大佬利用ZeroMQ的通信中间件开发了一个指定话题通信的开源项目:
详情链接:集群多机ROS通信中间件:swarm_ros_bridge_swarm ros bridge-CSDN博客
其可以将任意ROS话题发送到其他机器人实现多机通信。只需要将你需要发送或接收的ROS话题信息写在ros_topics.yaml文件里。
例如,两个机器人之间通信的示例如下图所示(可以扩展到多个机器人):
核心工作:
利用ROS1自带的serialization对ROS话题消息进行序列化和反序列化,然后利用zeroMQ的PUB/SUB模式将消息发送,并为每个ROS接收话题建立一个接收线程。
与ROS1多机器人无线通信相比,它具有以下优点:
鲁棒:无需先启动基站ROS主站。支持每个机器人以随机顺序启动并自主连接。
灵活:您可以选择发送/接收 ROS 话题,而不是像 ROS1 那样传输所有话题。
易于使用:在一个配置文件中指定所有IP和ROS话题。
与ROS2 DDS通信相比,它具有以下优点:
轻量化:是一个订阅和发送远程ROS主题的小型ROS桥接节点,因此很容易与其他ROS1节点对接。
可靠:它使用基于TCP协议的zmq套接字通信,而ROS2基于DDS,其默认协议为UDP(不可靠)。事实上,DDS主要用于有线通信下的本机进程之间的数据交换,而不是远程无线通信。
四、总结
无人机集群的去中心化分布式通信实现需要克服传统星型和树状拓扑的局限性,这两种架构依赖中心节点,一旦中心节点失效,整个网络通信将会中断。为了提高集群的鲁棒性和动态组网能力,我们可以引入 Ad hoc 无中心的自组织网络结构。Ad hoc 网络通过多跳路由技术,可以实现节点之间的动态通信,即使没有中心节点也能保持网络的正常运行。
B.A.T.M.A.N. 路由协议是特别适合这种场景的协议之一,它不依赖全局的网络拓扑视图,而是通过每个节点局部判断路由,从而大大减少了路由开销并提高了网络的扩展性和故障容忍度。相比之下,虽然 OLSR 协议能够提供全局最优的路由信息,但在面对频繁拓扑变化的动态网络时,其高开销和复杂性并不理想。
通过在 Linux上配置 Ad hoc网络,并使用 B.A.T.M.A.N. 协议,可以轻松实现无人机集群的分布式通信。此外,借助 ROS1和 ZeroMQ 的结合,开发者可以进一步实现跨机器人系统的高效通信,构建出一个具有自主连接、鲁棒性和灵活性的多机分布式系统。
版权归原作者 爱尔兰的楠小楠 所有, 如有侵权,请联系我们删除。