ROS2学习(七) Foxy版本ros2替换中间件。

news2025/1/16 1:34:44

      在ros2使用的过程中,一开始选用的foxy版本,后来发现,foxy版本的ros2有很多问题。一个是foxy版本已经停止维护了。另一个问题是这个版本有很多bug, 后续的版本在功能实现上做了很大的改动,甚至说进行了重写。修复的一些问题,foxy版本上的问题也没有修复。
      最近遇到的问题是,service有时候没有应答,根据输出的log看是中间件出的问题,错误的的日志如下

E0229 15:04:57.981310  2354 main.cpp:43] [me] rclcpp::exception::RCLError caught! failed to send response: client will not receive response, at /tmp/binarydeb/ros-foxy-rmw-fastrtps-shared-cpp-1.3.2/src/rmw_response.cpp:127, at /tmp/binarydeb/ros-foxy-rcl-1.1.14/src/rcl/service.c:356

后面查看源码发现如下的内容,看到这个if条件是Maybe就很崩溃了。
在这里插入图片描述

      遇到节点启动时,负载很高,通过perf工具查看,是启动的时候共享内存一直创建失败。抛出异常,
然后进入某种死循环,一直在创建共享内存。一直在find_segment()函数中转。
在这里插入图片描述
目前没有从网上找到很好的处理方法,其实也无法确定是ros2的问题导致的,还是中间件导致的。
所以采取的方式是换中间件。

ros2 中间件

       foxy版本的中间件使用的是fast-rtps, 这个版本默认是使用共享内存的。也就是遇到了上面的问题。通过查一些资料,用的比较多的是cyclone-dds. 所以决定先替换中间件。
替换方法比较简单。
直接apt安装,再加声明环境变量RMW_IMPLEMENTATION就可以。
安装方法:

sudo apt install ros-foxy-rmw-cyclonedds-cpp

安装完后使用export声明变量。

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

然后启动ros2工程,使用的就是cyclone dds了。

Foxy版本ROS2使用 cyclonedds_ccp遇到的一些问题

  1. 默认使用UDP通信,不支持共享内存
    cyclonesdds_cpp对应的foxy版本默认使用的是udp通信,二进制安装是不只是共享内存的。从网上看一些资料说源码编译应该可以,不过我试过没有编译成功,提示有一些接口变了。这个也是foxy版本的ros2比较麻烦的一点。后面的ros2版本和以前的版本兼容性不好。
    所以只能用udp的方式通信。

  2. 关于upd通信单播和组播的问题
    cyclonesdds_cpp对应的foxy版本默认是组播方式,会根据网卡质量选择一个比较好的网卡进行组播。我遇到到的情况是,我自己的设备有有线网卡eth0, 连接的是激光,无线网卡wlan0. ros2默认选择了质量比较好的eth0进行组播,导致eth0的负载非常高,影响了激光的通信。
    在这里插入图片描述
    可以看到eth0的负载拉满了。
    所以此时需要通过中间件的配置文件去控制网络。
    在本地机器任一位置创建一个名为cyclonedds.xml的文件。
    添加如下内容:

<?xml version="1.0" encoding="UTF-8" ?>
<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">
        <General>
            <NetworkInterfaceAddress>wlan0</NetworkInterfaceAddress>
            <AllowMulticast>true</AllowMulticast>
        </General>
        <Discovery>
            <ParticipantIndex>auto</ParticipantIndex>
            <MaxAutoParticipantIndex>30</MaxAutoParticipantIndex>
            <Peers>
                <Peer address="localhost"/>
            </Peers>
        </Discovery>
    </Domain>
</CycloneDDS>

然后声明环境变量

export CYCLONEDDS_URI=file:///etc/systemd/system/cyclonedds.xml

再启动工程的时间,就会根据xml的配置,组播数据走wlan0, eth0上的负载降下来了。当然也可以完全关闭,修改xml只使用本地回环,也是没有问题的。只是注意使用本地回环lo的时候是不支持组播的,要设置成false.
其他关于配置文件的设置,可以参考官网文档。

参考

cyclonedds官网配置文件
foxy安装中间件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sora正在颠覆游戏行业,CEO们该怎么应对?

文 | 魏力 发布 | 大力财经 摘要&#xff1a;AI 提升游戏制作效率&#xff0c;带来多样化和技术突破。在 AI 为游戏行业带来新机遇的时代&#xff0c;游戏公司应如何把握&#xff1f; 随着ChatGPT技术的快速发展&#xff0c;游戏行业正迎来一场AI技术变革。AI技术的应用为游…

长沙银行数字化案例入选《2024IDC中国金融业数据资产管理实践与案例报告》

全球数字化经济浪潮下&#xff0c;以数字技术为代表的的新一轮技术变革正跨步引领经济发展趋势。中国金融业作为2026年底数据要素应用总体目标所聚焦的十二个行业和领域之一&#xff0c;金融业数据资产管理成功经验正逐步被探索应用。 近日&#xff0c;全球权威知名市场调研机构…

开源的前端思维导图库介绍

在开源社区中&#xff0c;有许多优秀的思维导图库可供开发者使用。这些库通常具有丰富的功能和灵活的API&#xff0c;可以满足不同需求的前端开发。以下是一些流行的开源前端思维导图库&#xff0c;以及它们的特点和区别。 1. **MindMap** 特点&#xff1a; - 基于原生…

神经网络算法——反向传播 Back Propagation

文章目录 前言 1、反向传播的本质 &#xff08;1&#xff09;前向传播&#xff08;Forward Propagation&#xff09; &#xff08;2&#xff09;反向传播&#xff08;Back Propagation&#xff09; 2、反向传播的原理 &#xff08;1&#xff09;链式法则&#xff08;Chain Rule…

arm架构服务器使用Virtual Machine Manager安装的kylin v10虚拟机

本文中使用Virtual Machine Manager安装kylin v10的虚拟机 新建虚拟机 新建虚拟机 选择镜像&#xff0c;下一步 设置内存和CPU&#xff0c;下一步 选择或创建自定义存储&#xff08;默认存储位置的磁盘空间可能不够用&#xff09; 点击管理&#xff0c;打开选择存储卷页…

“轻松掌握财务状况:智能筛选银行卡收支明细,一键统计总花销”

在快节奏的现代生活中&#xff0c;财务管理成为我们日常的重要任务。你是否经常为了查看银行卡账户的收支明细而烦恼&#xff1f;是否想要快速统计出账户的总花销&#xff0c;以便更好地掌握自己的财务状况&#xff1f;现在&#xff0c;我们为你带来了一款全新的财务管理工具&a…

校招中的“熟悉linux操作系统”一般是指达到什么程度?

校招中的“熟悉linux操作系统”一般是指达到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&am…

【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件

文章目录 一、Cloth组件解释基本介绍出于性能的考虑, 可以对Cloth产生影响的Collider只有两种打开编辑模式绘制 二、基本使用1. 创建出一个空物体2. 在空物体上添加cloth组件&#xff0c;可以直接点击Add Component搜索cloth添加&#xff0c;也可以在工具栏 Component–>phy…

动态规划(算法竞赛、蓝桥杯)--树形DP树的中心

1、B站视频链接&#xff1a;E34 树形DP 树的中心_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N20010; int n,a,b,c,ans2e9; struct edge{int v,w;}; vector<edge> e[N]; int d1[N],d2[N],path[N],up[N];//path记录d1 void dfs1(in…

【Datawhale组队学习:Sora原理与技术实战】

Transformersdiffusion技术背景简介 Transformers diffusion背景 近期大火的OpenAI推出的Sora模型&#xff0c;其核心技术点之一&#xff0c;是将视觉数据转化为Patch的统一表示形式&#xff0c;并通过Transformers技术和扩散模型结合&#xff0c;展现了卓越的scale特性。 被…

iStoreOS系统-HomeAssistant服务下载安装HACS

iStoreOS系统-HomeAssistant服务下载安装HACS 1. HACS HACS&#xff08;Home Assistant Community Store&#xff09;是Home Assistant的一个插件商店&#xff0c;它允许用户轻松地浏览、安装和管理各种为Home Assistant开发的自定义插件和集成。通过HACS&#xff0c;用户可以…

Linux Ubuntu系统安装MySQL并实现公网连接本地数据库【内网穿透】

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…

创新驱动!HubSpot引领CRM革命

在当今高速发展的数字化时代&#xff0c;企业的国际化布局和市场开拓已经成为了一种必然的趋势。随着企业出海步伐的加快&#xff0c;有效的客户关系管理&#xff08;CRM&#xff09;和营销自动化工具变得尤为重要。这就是HubSpot发力的领域。HubSpot&#xff0c;作为一家领先的…

【MATLAB】 CEEMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 CEEMD信号分解算法 CEEMD 分解又叫互补集合经验模态分解&#xff0c;英文全称为 Complementary Ensemble Empirical Mode Decomposition。 CEEMD是对EEMD的改进&#xff0c;它在EEMD的基础上引入了一个…

CRichEditUI中文乱码问题(Duilib)

这是遇到问题的时候&#xff0c;我还以为是韩文 解决方案&#xff1a; //HMODULE hmod LoadLibrary(_T("msftedit.dll"));HMODULE hmod LoadLibrary(_T("riched20.dll"));//修改一下使用的动态库&#xff0c;兼容性问题需要自己测

[HackMyVM]靶场 Wild

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 …

【MySQL】用户管理 -- 详解

如果我们只能使用 root 用户&#xff0c;这样存在安全隐患。这时就需要使用 MySQL 的用户管理。 一、 用户 1、用户信息 MySQL 中的用户都存储在系统数据库 MySQL 的 user 表中。 字段解释&#xff1a; host&#xff1a;表示这个用户可以从哪个主机登陆&#xff0c;如果…

【深度学习笔记】优化算法——随机梯度下降

随机梯度下降 在前面的章节中&#xff0c;我们一直在训练过程中使用随机梯度下降&#xff0c;但没有解释它为什么起作用。为了澄清这一点&#xff0c;我们刚在 :numref:sec_gd中描述了梯度下降的基本原则。本节继续更详细地说明随机梯度下降&#xff08;stochastic gradient d…

销售管理之反向与正向目标控制

在销售活动中&#xff0c;控制力是关键。但控制力其实分为两种&#xff1a;反向控制和正向控制。本文将深入探讨这两种控制方式&#xff0c;并阐述如何在销售活动中加以应用&#xff0c;以提升销售效果。 一、反向控制&#xff1a;以客户为中心&#xff0c;引导客户需求 反向控…

BJFU|算法设计与分析-期末考试凡人AK备考模板

感谢这套模板&#xff0c;本人不是ACM佬但是在期末的时候打出了凡人AK的成绩&#xff0c;真的很强&#xff0c;谁用谁赞。 另外还给我押中了压轴题&#xff0c;非常幸运。 文件下载地址在文章末尾 文件下载地址&#xff1a;【免费】BJFU算法设计与分析备考模板.docx资源-CSD…