合肥网站建设技术托管,江西响应式网页建设,唐山网站建设方案报价,企业网站程序源码0. 前言
Github 仓库链接#xff1a;Hikvision Camera ROS2 package
0.1 问题背景
上一篇[博客](【图像与点云融合教程#xff08;四#xff09;】海康相机 ROS2 功能包 - 古月居 (guyuehome.com))介绍了我开源的海康相机 ROS2 功能包#xff0c;在本地机器上可以实时订…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 ServiceQoS选项用于控制数据传输的各个方面如数据可靠性、优先级、历史数据存储等。通过正确配置QoS参数可以满足应用对数据传输的不同需求。 网络适应性 在跨越不同网络环境的分布式系统中DDS需要适应各种网络条件如高延迟、不稳定连接等。调优可以帮助DDS在不同网络环境下保持稳定的通信并减少数据丢失的可能性。 安全性 对于一些安全性要求较高的应用DDS需要配置加密和认证机制以保护数据的机密性和完整性。 调试和故障排除 调优也有助于发现和解决DDS在系统中可能出现的问题提高系统的稳定性和可靠性。
综上所述DDS调优是为了使DDS能够更好地适应特定的应用场景和硬件平台提高系统的性能、实时性和可靠性确保分布式系统能够顺利地进行数据通信和协作。
1. 具体操作
1.1 Cyclone DDS 调优参数设置
下面内容需要同时在边缘端和 PC 端进行设置。
首先安装并配置环境变量
sudo apt install ros-foxy-rmw-cyclone-cpp
echo export RMW_IMPLEMENTATIONrmw_cyclonedds_cpp gt;gt; ~/.bashrc接着在终端中直接设置下面三个参数
sudo sysctl net.ipv4.ipfrag_time3
sudo sysctl -w net.core.rmem_max2147483648
sudo sysctl net.ipv4.ipfrag_high_thresh2147483648然后创建一个 config.xml 文件内容如下
lt;CycloneDDS xmlnshttps://cdds.io/config xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttps://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsdgt;
lt;Domain idanygt;
lt;Internalgt;
lt;MinimumSocketReceiveBufferSizegt;1024MBlt;/MinimumSocketReceiveBufferSizegt;
lt;/Internalgt;
lt;/Domaingt;
lt;/CycloneDDSgt;最后在终端中临时加载上面参数文件
CYCLONEDDS_URI/path/to/config.xml1.2 局域网配置
确保边缘计算设备和 PC 通过 Wi-Fi 或有线连接到同一个局域网如果设备很多都是通过同一个局域网且想对设备进行分组进行分布式通信可以设置下面参数设置了相同编号的设备之间就可以进行通信了不设置的话就是所有设备之间都可以进行通信
echo export ROS_DOMAIN_ID5 gt;gt; ~/.bashrc1.3 测试
克隆 Github 上的功能包代码怎么创建工作空间和编译这里就不再赘述了ROS2 新手移步上一篇博客学习。
将海康相机连接在边缘设备上执行测试程序
# 边缘端执行发布
ros2 run hk_camera hk_camera_compressed_pub_test_reliable
# PC 端执行订阅
ros2 run hk_camera hk_camera_compressed_sub_test_reliablePC 端订阅图像效果如下虽然相机最高帧率可达到 40Hz但是这里我的边缘设备最高发布速率只能达到 20 fps在 PC 端可以实现实时接收图像 边缘端图像发布大概 8MiB/s PC 端接收的速率也大概是 8MiB/s 点击海康相机 ROS2 多机分布式实时通信功能包------古月居可查看全文