ROS多机通信(三)——Ubuntu Ad-Hoc 组网通信配置指南
基本概念
Ad-Hoc 网络是一种简单的点对点无线网络,设备(称为节点)可以直接相互通信或者通过中继间接通信,而无需依赖中央接入点。在这种网络中,所有设备是对等的,没有固定的路由器或基础设施支持。
特点
- 快速部署:无需基础设施,适合快速建立网络。
- 简单配置:设置过程简单,易于操作。
- 安全性较低:常使用较弱的加密方式(如 WEP),安全性不高。
- 基本 Ad-Hoc 模式通常支持单跳通信,多跳通信需通过 B.A.T.M.A.N. 或 OLSR 等路由协议实现。
以下是在 Ubuntu 系统上实现 Ad-Hoc 组网通信的详细步骤。通过配置无线接口,创建一个Ad-Hoc的无线网络,与其他设备进行通信。本指南提供三种配置方式:
- 基本 Ad-Hoc 模式:适用于简单、临时的设备间通信。(只支持单跳通信)
- B.A.T.M.A.N. 协议:适用于移动性高、拓扑变化频繁的网络。
- OLSR 协议:适用于大型、相对稳定的网络。
使用 B.A.T.M.A.N. 或 OLSR 协议后,Ad-Hoc 网络具备 Mesh 网络特性,支持网状拓扑和多跳传输(支持多跳通信)
准备工作
- 硬件要求:确保您的 Ubuntu 系统配备支持 Ad-Hoc 模式的无线网卡,并已正确安装驱动。
- 权限要求:需要管理员权限,使用
sudo执行命令。 - 工具检查:确认已安装
iwconfig和ip命令(通常默认可用)。若使用 B.A.T.M.A.N. 或 OLSR,需额外安装相关工具。
配置步骤
1. 检查无线接口
首先,确认您的无线接口名称(例如 wlan0 或 wlp2s0):
iwconfig
或者
ip link
记下您的接口名称,后续步骤将以 wlan0 为例。
2. 停止 Network Manager(可选)
Network Manager 可能会干扰手动配置,可暂时停止:
sudo systemctl stop NetworkManager
提示:如果希望 Network Manager 永久不管理该接口,可编辑 /etc/NetworkManager/NetworkManager.conf,在 [ifupdown] 下添加 managed=false。
3. 配置基本 Ad-Hoc 模式
将无线接口设置为 Ad-Hoc 模式并指定网络名称和频道:
sudo ip link set wlan0 down # 关闭接口
sudo iwconfig wlan0 mode ad-hoc # 设置为 Ad-Hoc 模式
sudo iwconfig wlan0 essid "MyAdHocNet" # 设置网络名称(自定义)
sudo iwconfig wlan0 channel 6 # 设置频道(1-11 可选)
sudo ip link set wlan0 up # 启用接口
或者
sudo ip link set wlan0 down # 关闭网卡
sudo iw wlan0 set type ibss # 设置 Ad-Hoc 模式并加入网络
sudo iw wlan0 ibss join MyAdHocNetwork 2412 # 设置 Ad-Hoc 模式并加入网络
sudo ip link set wlan0 up # 开启网卡
MyAdHocNet 是自定义的网络名称,所有设备需保持一致。
设置静态 IP 地址
为接口分配一个静态 IP,确保与其他设备在同一网段:
sudo ip addr add 192.168.1.1/24 dev wlan0
示例中 IP 为 192.168.1.1,其他设备可设为 192.168.1.2、192.168.1.3 等。
验证连接
在其他设备上重复上述步骤,配置相同的网络名称(ESSID)和频道,然后测试连接:
ping 192.168.1.2 # 替换为其他设备的 IP
如果返回正常,说明基本 Ad-Hoc 网络已成功建立。
(可选)添加安全性
为网络设置简单加密(WEP,仅建议测试使用,因安全性较低):
sudo iwconfig wlan0 key s:yourpassword # 设置密钥
所有设备需使用相同密钥。
4. 使用 B.A.T.M.A.N. 协议增强网络
什么是 B.A.T.M.A.N.?
B.A.T.M.A.N.(Better Approach To Mobile Ad-hoc Networking)是一种去中心化的路由协议,适用于多跳移动自组织网络。它通过分散路由决策,减少控制开销,适合拓扑频繁变化的场景。
安装 B.A.T.M.A.N. 工具
sudo apt update
sudo apt install batman-adv batctl
sudo modprobe batman-adv # 加载内核模块
配置步骤
- 设置无线接口为 Ad-Hoc 模式(同上):
sudo ip link set wlan0 down
sudo iwconfig wlan0 mode ad-hoc
sudo iwconfig wlan0 essid "MyAdHocNet"
sudo iwconfig wlan0 channel 6
sudo ip link set wlan0 up
- 创建并配置 B.A.T.M.A.N. 接口:
sudo batctl if add wlan0
sudo ip link set bat0 up
- 为
bat0接口分配静态 IP:
sudo ip addr add 192.168.1.1/24 dev bat0
- 验证配置:
sudo batctl n #检查 B.A.T.M.A.N. 网络状态,将显示邻居节点的信息,表明你的设备已加入 B.A.T.M.A.N. 网络
ping 192.168.1.2 # 测试连接
5. 使用 OLSR 协议增强网络
什么是 OLSR?
OLSR(Optimized Link State Routing Protocol)是一种主动式链路状态路由协议,通过优化消息传播提供最佳路由路径,适合大型、相对稳定的网络。
安装 OLSR 工具
sudo apt-get install olsrd
配置步骤
- 设置无线接口为 Ad-Hoc 模式(同上):
sudo ip link set wlan0 down
sudo iwconfig wlan0 mode ad-hoc
sudo iwconfig wlan0 essid "MyAdHocNet"
sudo iwconfig wlan0 channel 6
sudo ip link set wlan0 up
- 编辑 OLSR 配置文件:
sudo nano /etc/olsrd/olsrd.conf
在文件中,找到 Interface 部分并添加你的无线网卡名称(例如 wlan0):
Interface "wlan0"
{# 可选:调整 HelloInterval 等参数
}
- 启动 OLSR 服务:
sudo systemctl start olsrd
sudo systemctl enable olsrd # 可选:开机自启
- 为
wlan0接口分配静态 IP:
sudo ip addr add 192.168.1.1/24 dev wlan0
- 验证配置:
sudo olsrd -d 1 # 查看路由表和拓扑
ping 192.168.1.2 # 测试连接
6. (可选)恢复 Network Manager
完成后,若需恢复 Network Manager:
sudo systemctl start NetworkManager
注意:恢复后可能需额外配置以避免冲突。
自动化配置(可选)
若需开机自动配置基本 Ad-Hoc 网络,编辑 /etc/network/interfaces:
sudo nano /etc/network/interfaces
添加以下内容:
auto wlan0
iface wlan0 inet staticaddress 192.168.1.1netmask 255.255.255.0wireless-mode ad-hocwireless-essid MyAdHocNetwireless-channel 6
保存后重启网络服务:
sudo systemctl restart networking
注意:若使用 B.A.T.M.A.N. 或 OLSR,自动化配置需相应调整。
故障排除
-
无法连接:
- 确认所有设备的 ESSID 和频道一致。
- 检查 IP 地址是否在同一网段(例如
192.168.1.x)。 - 检查防火墙是否阻止 ping(ICMP)流量。
-
查看状态:
基本 Ad-Hoc:iwconfig wlan0 # 检查 Ad-Hoc 配置 ip addr show wlan0 # 检查 IP 配置B.A.T.M.A.N.:
sudo batctl n # 查看网络节点OLSR:
sudo olsrd -d 1 # 查看路由表和拓扑
注意事项
- 安全性:Ad-Hoc 模式默认不加密或仅支持 WEP 加密(安全性较低),仅适合受信任环境。B.A.T.M.A.N. 和 OLSR 本身不提供加密,建议结合其他安全措施。
- 高级加密:若需 WPA/WPA2,可尝试使用
wpa_supplicant,但配置较复杂。 - 协议选择:
- 基本 Ad-Hoc:适合简单、临时网络。
- B.A.T.M.A.N.:适合移动性高、拓扑变化频繁的网络。
- OLSR:适合大型、相对稳定的网络。
- 备份配置:建议在配置前备份网络配置文件(如
/etc/network/interfaces),以便出错时恢复。
总结
本指南提供了在 Ubuntu 上配置 Ad-Hoc 网络的三种方式:
- 基本 Ad-Hoc 模式:快速部署,适合临时网络。
- B.A.T.M.A.N. 协议:增强移动性和适应性,适合动态网络。
- OLSR 协议:优化路由路径,适合大型网络。
根据您的网络需求选择合适的配置方式,确保所有设备配置一致即可开始使用!
相关文章:
ROS多机通信(三)——Ubuntu Ad-Hoc 组网通信配置指南
基本概念 Ad-Hoc 网络是一种简单的点对点无线网络,设备(称为节点)可以直接相互通信或者通过中继间接通信,而无需依赖中央接入点。在这种网络中,所有设备是对等的,没有固定的路由器或基础设施支持。 特点 …...
23种设计模式-状态(State)设计模式
状态设计模式 🚩什么是状态设计模式?🚩状态设计模式的特点🚩状态设计模式的结构🚩状态设计模式的优缺点🚩状态设计模式的Java实现🚩代码总结🚩总结 🚩什么是状态设计模式…...
ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子)
ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子) 架构学习需要学习哪一些部分呢?笔者接触过的架构有Intel-X86, AMD64,RISC-V和Arm架构(V7最多),笔者简单的翻了一些课本和教材,…...
STM32C011 进入停止模式和待机模式
对于STM32C011J4M3微控制器,你可以使用HAL库来实现进入停止模式(Stop Mode)和待机模式(Standby Mode)。下面是进入停止模式和待机模式的示例代码: 进入停止模式代码示例: #include "stm3…...
kaggle上经典泰坦尼克项目数据分析探索
之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…...
影刀魔法指令3.0:开启自动化新篇章
在数字化飞速发展的今天,自动化工具已经成为提升工作效率、优化工作流程的重要手段。影刀RPA作为一款强大的自动化软件,其最近推出的魔法指令3.0版本,更是让人大开眼界,为自动化操作带来了全新的可能性。 影刀魔法指令3.0简介 影…...
15 python 数据容器-字典
在 Python 的编程世界里,字典是一种超实用的数据类型,它就像打工人的工作资料夹,能把各种不同类型的信息有条理地存起来,还能快速找到你需要的内容。对于刚开始学习编程的小伙伴来说,掌握字典的用法,能让你…...
Linux的一些常见指令
一、ls指令 语法: ls (选项) 功能: ls可以查看当前目录下的所有文件和目录。 常用选项: -a:列出目录下的所有文件,包括以点(.)开头的隐含文件 。-d:将目录像文件一样显示,不显示其下的文件。…...
Pre-flash和Main flash
在相机拍照过程中,Pre-flash(预闪光) 和 Main flash(主闪光) 是常见的两种闪光灯使用模式,通常用于提高低光环境下的拍摄质量,尤其在自动曝光(AE)和自动对焦(…...
jmm-java内存模型
java内存模型----底层原理 底层原理 从Java代码到最终执行的CPU指令的流程: 最开始,我们编写的Java代码,是*.java文件在编译(javac命令)后,从刚才的*.java文件会变出一个新的Java字节码文件(…...
合宙780E开发学习-LUATOS-SOC云编译自定义固件
登录https://luatos.com 点击登录,使用合宙erp账号登录即可 点击右上角构建,点击右上角菜单新构建,自定义构建名称,可新建多个 勾选想要的组件 点击右上角保存修改,只有点击准备就绪(注意:一定…...
解决Centos使用yum命令报错“Cannot find a valid baseurl for repo: base/7/x86_64”问题
一、问题描述 我们在使用Centos7.9使用【sudo yum install influxdb2】命令安装influxDB数据库的时候提示“Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/release=7&arch=x86_64&repo=os&infra=stock …...
好用的Markdown阅读编辑器Typora破解记录
Typora破解 一、下载Typora二、安装Typora三、破解Typora 😀 记录一下Typora破解记录,怕不常用忘记咯,感觉自己现在的脑子就像我的肠子一样,刚装进去就么得了。。。😔 Typroa算是用起来很舒服的Markdown阅读器了吧&am…...
c#在work线程中怎样更新UI控件
最近笔者调试修改项目,碰到了c#在work线程中怎样更新UI控件中的场景,简单总结了下,主要有两个方法: 方法1:通过System.Windows.Application.Current.Dispatcher.Invoke来更新UI控件 System.Windows.Application.Curre…...
RabbitMQ三种队列深度解析:区别、场景与未来趋势
嗯,用户让我分析RabbitMQ三种队列的区别、应用场景、技术原理和未来趋势,还要写一篇三千字的文章。首先,我需要回顾一下搜索结果,看看有哪些资料可用。 根据搜索结果,RabbitMQ的三种队列是经典队列(Classi…...
自然语言处理(13:RNN的实现)
系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设,共现矩阵,向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...
WebSocket接入SSL证书
目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...
无人机宽带自组网机载电台技术详解,50KM超远图数传输系统实现详解
以下是关于无人机宽带自组网机载电台技术以及50KM超远图数传输系统实现的详解: 无人机宽带自组网机载电台技术详解 无人机宽带自组网机载电台是一种专门为无人机设计的通信设备,它支持宽带数据传输和自组网功能。这种电台的实现技术涉及多个方面&#x…...
MySQL 表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效
文章目录 联合索引 abc 均范围扫描时的索引生效情况无回表 表数据量非常少无回表 表数据量多有回表总结 联合索引 abc 均范围扫描时的索引生效情况 场景:表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效…...
Spring Boot定时任务设置与实现
Spring Boot定时任务设置与实现 在Spring Boot中,可以使用Scheduled注解来创建定时任务。以下是一个简单的示例,展示了如何在项目启动后每5秒调用一次指定的方法。 1. 添加依赖 首先,确保你的pom.xml文件中包含Spring Boot的依赖ÿ…...
#vue中解决异步请求的竞态
// composables/useFetchWithoutRace.js import { ref } from vue; import axios from axios;// 定义一个可复用的 Composition 函数,处理带有竞态控制的异步请求 export function useFetchWithoutRace() {// 定义响应式变量 latestRequestId,用于追踪最…...
BP神经网络+NSGAII算法(保真)
BP神经网络NSGAII算法 非常适合用来当作实验验证自己的结论,构建一个神经网络模型,并使用NSGAII多目标优化算法来实现多领域的毕业论文的设计。仅仅使用简单的matlab代码就可以实现自己的多目标优化任务。 BP神经网络算法 我的任务是预测三个变量的值…...
【CXX-Qt】4.1 extern “RustQt“
QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心,用于声明 Rust 类型和签名,使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...
每日一题-力扣-2829. k-avoiding 数组的最小总和 0326
解决"k-avoiding 数组的最小总和"问题 这道题有两种主要解法。 解法一:直接数学计算(最优解) 通过数学推导直接计算出结果,不需要构建实际的数组。 class Solution:def minimumSum(self, n: int, k: int) -> int…...
React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误
大白话React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误 在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉。接下来我会详…...
OSI模型_TCP/IP模型_五层模型
文章目录 OSI模型_TCP/IP模型_五层模型模型对比模型层级对比关键区别对比 OSI模型OSI模型概述举例说明流程图示 TCP/IP 四层模型模型结构举例说明流程图示 TCP/IP 五层模型模型的结构举例说明流程图示 OSI模型_TCP/IP模型_五层模型 学OSI,用TCP/IP,分析选…...
HarmonyOS Next应用架构设计与模块化开发详解
引言 在HarmonyOS Next开发中,合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路,并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…...
SpringCould微服务架构之Docker(2)
Docker和虚拟机的差别: 虚拟机是在操作系统中模拟硬件设备,然后运行另外一个操作系统。...
LINUX基础IO [六] - 文件理解与操作
目录 前言 C语言文件操作回顾 文件的打开与关闭 文件的增删改查 文件系统调用 比特位方式的标志位传递原理 访问文件的本质 文件描述符fd 理解文件描述符fd 三个流的理解 文件描述符的分配规则 重定向再理解 输出重定向 输入重定向 如何理解一切皆文件 理解…...
拥抱人工智能大模型时代:大模型会改变我们的生活吗?
在这个科技日新月异的时代,人工智能(AI)正以前所未有的速度改变着我们的生活和工作方式。尤其是随着人工智能大模型(如ChatGPT、DeepSeek等)的崛起,人们对于AI技术的期待和关注达到了前所未有的高度。那么&…...
