【图像与点云融合教程(五)】海康相机 ROS2 多机分布式实时通信功能包
0. 前言
Github 仓库链接:Hikvision Camera ROS2 package
0.1 问题背景
上一篇[博客](【图像与点云融合教程(四)】海康相机 ROS2 功能包 - 古月居 (guyuehome.com))介绍了我开源的海康相机 ROS2 功能包,在本地机器上可以实时订阅和发布图像消息,但是在通过局域网进行多机通信的测试时,PC 端收不到边缘端发布的图像消息,不过可以通过 ros2 topic list 查看到图像话题是存在的。
经过查询资料,这主要是由于 DDS 的不同实现的实时性和可靠性存在不同。
0.2 ROS2 下的 DDS 的不同实现
以下是一个简单的表格,介绍ROS 2中四种不同的DDS实现:Fast DDS、OpenSplice DDS、Connext DDS和Eclipse Cyclone DDS。
| DDS实现 | 介绍 | 优点 | 缺点 |
|---|---|---|---|
| Fast DDS | - 前身为Fast RTPS,是ROS 2中默认的DDS实现。 | - 高性能和可靠性。<br>- 支持大规模的分布式系统。<br>- 配置灵活,易于集成。<br>- 开源免费。 | - 部分功能可能仍在演进中。<br>- 可能需要一些时间来适应配置和优化。<br>- 社区相对较小。 |
| OpenSplice DDS | - 另一个受欢迎的DDS实现,已与ROS 2集成。 | - 成熟稳定,可靠性较高。<br>- 支持多种平台。<br>- 支持实时性和安全性。<br>- 良好的工具和支持。 | - 闭源商业软件,可能需要购买许可证。<br>- 社区支持相对较少。<br>- 文档可能不如其他实现全面。 |
| Connext DDS | - 来自RTI的商业DDS实现,广泛应用于实时系统。 | - 高度可靠,性能优秀。<br>- 支持广泛的平台和编程语言。<br>- 强调实时性和安全性。<br>- 良好的支持和文档。 | - 商业软件,需要购买许可证。<br>- 可能对资源占用较高。<br>- 开源版本功能有限。 |
| Eclipse Cyclone DDS | - 开源且高效的DDS实现,可用作Fast DDS的替代方案。 | - 开源免费,社区活跃。<br>- 性能良好,轻量级实现。<br>- 支持多种平台和语言。 | - 可能缺乏一些高级功能和工具。<br>- 文档相对较少。<br>- 社区支持较其他实现略少。 |
0.3 如何挖掘 DDS 的性能
在这里我选择的是 Eclipse Cyclone DDS 这个 DDS 实现,但想要实现我想要的效果,还需要对其进行调优,参数设置得不好的话,最终效果会很差。下面具体介绍一下为什么要对 DDS 进行调优。
DDS需要调优的主要原因是确保它能够满足应用程序的性能和可靠性要求。由于不同的应用场景和硬件平台有着不同的特点和约束,因此需要进行调优以使DDS能够最大程度地发挥优势。
以下是为什么DDS需要调优的几个主要原因:
-
性能优化: DDS的性能对实时应用至关重要。通过调优,可以降低通信延迟,提高数据传输速率,增加系统的吞吐量,以满足实时系统对数据传输的实时性要求。
-
资源利用: 在分布式系统中,资源(如带宽、CPU、内存)是有限的。DDS调优可以帮助合理利用这些资源,减少资源浪费,提高系统的效率和稳定性。
-
QoS配置: DDS提供了丰富的Quality of Service(QoS)选项,用于控制数据传输的各个方面,如数据可靠性、优先级、历史数据存储等。通过正确配置QoS参数,可以满足应用对数据传输的不同需求。
-
网络适应性: 在跨越不同网络环境的分布式系统中,DDS需要适应各种网络条件,如高延迟、不稳定连接等。调优可以帮助DDS在不同网络环境下保持稳定的通信,并减少数据丢失的可能性。
-
安全性: 对于一些安全性要求较高的应用,DDS需要配置加密和认证机制,以保护数据的机密性和完整性。
-
调试和故障排除: 调优也有助于发现和解决DDS在系统中可能出现的问题,提高系统的稳定性和可靠性。
综上所述,DDS调优是为了使DDS能够更好地适应特定的应用场景和硬件平台,提高系统的性能、实时性和可靠性,确保分布式系统能够顺利地进行数据通信和协作。
1. 具体操作
1.1 Cyclone DDS 调优参数设置
下面内容需要同时在边缘端和 PC 端进行设置。
首先,安装并配置环境变量:
sudo apt install ros-foxy-rmw-cyclone-cpp
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
接着,在终端中直接设置下面三个参数:
sudo sysctl net.ipv4.ipfrag_time=3
sudo sysctl -w net.core.rmem_max=2147483648
sudo sysctl net.ipv4.ipfrag_high_thresh=2147483648
然后,创建一个 config.xml 文件,内容如下:
<CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd">
<Domain id="any">
<Internal>
<MinimumSocketReceiveBufferSize>1024MB</MinimumSocketReceiveBufferSize>
</Internal>
</Domain>
</CycloneDDS>
最后,在终端中临时加载上面参数文件:
CYCLONEDDS_URI=/path/to/config.xml
1.2 局域网配置
确保边缘计算设备和 PC 通过 Wi-Fi 或有线连接到同一个局域网,如果设备很多,都是通过同一个局域网,且想对设备进行分组进行分布式通信,可以设置下面参数,设置了相同编号的设备之间就可以进行通信了,不设置的话就是所有设备之间都可以进行通信:
echo 'export ROS_DOMAIN_ID=5' >> ~/.bashrc
1.3 测试
克隆 Github 上的功能包代码,怎么创建工作空间和编译这里就不再赘述了,ROS2 新手移步上一篇博客学习。
将海康相机连接在边缘设备上,执行测试程序:
# 边缘端执行发布
ros2 run hk_camera hk_camera_compressed_pub_test_reliable
# PC 端执行订阅
ros2 run hk_camera hk_camera_compressed_sub_test_reliable
PC 端订阅图像效果如下,虽然相机最高帧率可达到 40Hz,但是这里我的边缘设备最高发布速率只能达到 20 fps,在 PC 端可以实现实时接收图像:

边缘端图像发布大概 8MiB/s:

PC 端接收的速率也大概是 8MiB/s:

点击海康相机 ROS2 多机分布式实时通信功能包------古月居可查看全文
相关文章:
【图像与点云融合教程(五)】海康相机 ROS2 多机分布式实时通信功能包
0. 前言 Github 仓库链接:Hikvision Camera ROS2 package 0.1 问题背景 上一篇[博客](【图像与点云融合教程(四)】海康相机 ROS2 功能包 - 古月居 (guyuehome.com))介绍了我开源的海康相机 ROS2 功能包,在本地机器上可以实时订…...
正则截取字符窜数字,字母,符号部分
Testvoid test20() {String str "BJRabG11325F9**0**";// 提取字母部分String letterPart str.replaceAll("[^a-zA-Z]", "");String noLetterPart str.replaceAll("[a-zA-Z]", "");System.out.println("字母部分&am…...
【ChatGPT】让ChatGPT生成跨语言翻译的精确提示
让ChatGPT生成跨语言翻译的精确提示 在跨语言交流中,为了确保翻译的准确性,生成精确的提示(Prompt)来指导ChatGPT翻译内容是至关重要的。无论是要处理复杂的技术术语、俚语,还是保持特定的语言风格,使用有…...
Vue3父传子
1. App.vue - 父组件 咱们先来看左边的 App.vue,它扮演的是“父亲”角色——你可以想象它是一位热心的老爸,手里拿着一条消息,正准备把这条消息送到“儿子”那里。 <script setup> // 这个 setup 就像一个神奇的开关,一开…...
使用VBA宏合并多个Excel文件的Sheet页
使用VBA宏合并多个Excel文件的Sheet页 在日常的Excel数据处理工作中,我们经常需要将多个Excel文件中的工作表合并到一个Excel文件中。这种操作可以极大地提高数据处理效率,但如果文件数量较多,手动合并会非常繁琐。本文将介绍如何使用VBA宏来…...
Anolis8防火墙安全设置
一、账号安全 1、禁止root远程登录 首先创建一个普通用户,然后修改系统配置禁止root登录,因为root作为系统默认的超级管理员,权限过大,日常操作使用易导致安全风险。 1.1、首先要建立一个新的登录用户 useradd username #增…...
标题:自动化运维:现代IT运维的革新力量
标题:自动化运维:现代IT运维的革新力量 随着信息技术的飞速发展,企业对于IT系统的依赖日益加深,运维工作的重要性也愈发凸显。传统的运维模式,往往依赖于人工操作,效率低下且容易出错,难以满足…...
无人机之姿态融合算法篇
无人机的姿态融合算法是无人机飞行控制中的核心技术之一,它通过将来自不同传感器的数据进行融合,以实现更加精确、可靠的姿态检测。 一、传感器选择与数据预处理 无人机姿态融合算法通常依赖于多种传感器,包括加速度计、陀螺仪、磁力计等。这…...
Redis系列---数据管理
目录标题 数据类型String优点缺点底层结构使用场景实际使用 List优点缺点底层结构使用场景实际使用 Hash优点缺点底层结构使用场景实际使用 Set优点缺点底层结构使用场景实际使用 Zset优点缺点底层结构使用场景实际使用 HyperLogLog优点缺点底层结构使用场景实际使用 GEO优点缺…...
【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、线程创建 2、线程异常 3、线程用途 4、进程 VS 线程 5、线程控制 5.1、创建和等待线程 1、线程创建 线程能看到进程的大…...
Rust 力扣 - 2379. 得到 K 个黑块的最少涂色次数
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 本题可以转换为求长度为k的子数组中白色块的最少数量 我们遍历长度为k的窗口,我们只需要记录窗口内的白色块的数量即可,遍历过程中刷新白色块的数量的最小值 题解代码 impl Solution {…...
“单元测试”应该怎么写比较好
如何正确写单元测试 单元测试重要性写单元测试时存在的问题1、如何命名测试类&方法1.1、测试类命名规范1.2、测试方法命名规范 2、测试类的要求2.1测试行覆盖率100%2.2、单一职责2.3、可重复2.4、外部隔离,无任何外部依赖2.5、正确的使用断言2.6、不应该为了测试…...
腾讯开源首个文图生3D大模型Hunyuan3D-1.0
🦉 AI新闻 🚀 腾讯开源首个文图生3D大模型Hunyuan3D-1.0 摘要:腾讯混元于11月5日开源了Hunyuan3D-1.0,这是首个同时支持文本生成和图像生成的3D开源大模型。该模型采用两阶段生成方法,可以在10秒内生成3D资产。第一阶…...
c语言简单编程练习10
1、typedef和#define的区别 在用作数据类型替换时的区别: #include <stdio.h> #include <unistd.h>typedef char * A; //typedef需要; #define B char *int main(int argc, char *argv[]) {A a,b;B c,d;printf("a_size%ld\n"…...
时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多步时间序列预测
时序预测 | Matlab基于TSA-LSTM-Attention多变量多步预测 目录 时序预测 | Matlab基于TSA-LSTM-Attention多变量多步预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多…...
数据结构[2016]
一、设有二维数组A[6][8],每个元素占6个字节存储,实现存放,A[0][0]的起始地址为1000,计算: (10分) (1)数组最后一个元素A[5][7]的起始地址; (2)按行优先存放时,元素A[1][4]的起始地址; (3)按列优先存放时…...
DBAPI连接阿里云 maxcompute 报错
使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar ,这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar,这个不是完整的,它还…...
Web3对社交媒体的影响:重新定义用户互动方式
随着互联网的发展和人们对隐私、安全、所有权的需求不断提高,Web3 的概念逐渐深入人心。Web3 的出现标志着一个去中心化、用户主导的网络时代的到来,这也将对社交媒体产生深远的影响。Web3 不仅推动社交媒体从中心化模式向用户主导的去中心化模式转变&am…...
【LeetCode】【算法】322. 零钱兑换
LeetCode 322. 零钱兑换 题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1。 你可以认为每…...
人工智能技术:未来生活的“魔法师”
想象一下,未来的某一天,你醒来时,智能助手已经为你准备好了早餐,你的智能家居系统根据你的心情和日程安排调整了室内的光线和音乐,而你的自动驾驶汽车已经在门口等你。这不是科幻小说,这是人工智能技术为我…...
LoRA 部署:微调后的模型怎么上线
本文基于昇腾CANN和昇腾NPU,围绕 cann-recipes-infer 仓库的相关技术展开。 LoRA 训练完出来两个东西——基础模型权重不动,外加一个小 rank 矩阵。部署时你不能直接丢原始权重,LoRA 矩阵要合并进去或者通过算子注入。CANN 上 LoRA 部署有两种…...
解锁Midjourney V6复古风生产力:3步精准控制颗粒度、褪色曲线与时代错位感(附12组实测Prompt参数表)
更多请点击: https://codechina.net 第一章:Midjourney V6复古美学的底层逻辑重构 Midjourney V6 并非简单迭代,而是对“视觉时间性”的一次系统性重编码——其复古美学并非依赖滤镜叠加或风格迁移模型,而是将胶片颗粒、暗房化学…...
如何快速掌握洛雪音乐音源:新手小白也能轻松解锁全网高品质音乐
如何快速掌握洛雪音乐音源:新手小白也能轻松解锁全网高品质音乐 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为找不到心仪歌曲的高品质音源而烦恼吗?lxmusic-项目为…...
Splunk紧急推送安全补丁:三枚高危漏洞同时曝光,企业数据面临泄露与瘫痪双重风险
2026年5月20日,Splunk官方安全团队一次性披露了旗下多款核心产品的重大安全隐患。此次波及范围相当广泛,从本地部署的Splunk Enterprise到云端服务Splunk Cloud Platform,再到新推出的Splunk AI Toolkit,无一幸免。三枚漏洞编号分…...
5分钟快速上手gInk:Windows上最轻量级的免费屏幕画笔工具完整指南
5分钟快速上手gInk:Windows上最轻量级的免费屏幕画笔工具完整指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk gInk是一款专为Windows设计的屏幕画笔工具…...
CANN-昇腾NPU梯度累积-显存不够时怎么模拟大batch训练
大模型训练的最佳 batch size 通常在 1M-4M tokens。8 卡 Atlas 800I A2 的总显存 512GB,batch size 能开到 50 万 tokens 左右——不够。梯度累积让你用小 batch 跑多次前向,累积梯度后一次性更新,等效于大 batch 训练。 梯度累积的原理 标准…...
3步快速上手OneMore:让你的OneNote效率翻倍的完整指南
3步快速上手OneMore:让你的OneNote效率翻倍的完整指南 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款专为OneNote设计的免费增强插件&#…...
普通人必学!巧用 AI 轻松提升日常办事效率
一、为什么现在必须学会用 AI?先说一个事实:2025 年以来,国内大模型赛道迎来了爆发式增长。DeepSeek 横空出世,以极高的性价比引发全行业关注;字节跳动的豆包、月之暗面的 Kimi、阿里的通义千问、百度的文心一言等产品…...
跨平台串口调试终极指南:SSCom让硬件开发更简单
跨平台串口调试终极指南:SSCom让硬件开发更简单 【免费下载链接】sscom Linux/Mac版本 串口调试助手 项目地址: https://gitcode.com/gh_mirrors/ss/sscom 作为硬件开发的必备工具,串口调试工具SSCom凭借其跨平台特性和高效性能,为Lin…...
多模态LLM落地实战:从架构选型到推理部署的12个生死关卡
1. 这不是“多模态大模型”的科普文,而是一份一线工程师拆解真实系统时的现场笔记“Understanding Multimodal LLMs: The Next Evolution of AI”——这个标题在2024年已经刷屏了太多次。但你有没有发现,几乎所有公开资料都在讲“它能看图说话”“它能理…...
