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

      在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.hqwc.cn/news/527269.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言-写一个简单的Web服务器(一)

基于TCP的web服务器 概述 C语言可以干大事&#xff0c;我们基于C语言可以完成一个简易的Web服务器。当你能够自行完成web服务器&#xff0c;你会对C语言有更深入的理解。对于网络编程&#xff0c;字符串的使用&#xff0c;文件使用等等都会有很大的提高。 关于网络的TCP协议在…

论文学习——一种新的具有分层响应系统的动态多目标优化算法

论文题目&#xff1a;A Novel Dynamic Multiobjective Optimization Algorithm With Hierarchical Response System 一种新的具有分层响应系统的动态多目标优化算法&#xff08;Han Li , Zidong Wang , Fellow, IEEE, Chengbo Lan, Peishu Wu , and Nianyin Zeng , Member, IE…

QT----云服务器部署Mysql,Navicat连接1698 -Access denied for user ‘root‘@‘‘

阿里云有活动&#xff0c;白嫖了一年的新加坡轻量级服务器&#xff0c;有点卡&#xff0c;有时候要开梯子 白嫖300元优惠券 目录 1 安装启动Mysql服务2 更改连接权限2.1 Navicat连接报错1698 -Access denied for user root 3 qt连接云服务器数据库 1 安装启动Mysql服务 我使用…

Draco点云压缩测试

ref&#xff1a;https://github.com/google/dracohttps://codelabs.developers.google.com/codelabs/draco-3d/index.html#6 Draco Draco 是一个用于编码压缩和解压缩 3D 几何网格和点云的库&#xff0c;从而改进 3D 图形的存储和传输该代码支持压缩点、连接信息、纹理坐标、颜…

Oracle VM VirtualBox安装Ubuntu桌面版

背景&#xff1a;学习Docker操作 虚拟机软件&#xff1a;Oracle VM VirtualBox 7.0 系统镜像&#xff1a;ubuntu-20.04.6-desktop-amd64.iso 在Oracle VM VirtualBox新建一个虚拟电脑 选择好安装的目录和选择系统环境镜像 设置好自定义的用户名、密码、主机名 选择一下运行内…

51单片机基础篇系列-人人都能学会单片机

&#x1f308;个人主页: 会编程的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 什么是单片机 在一片集成电路芯片上集成计算机所有基 本部分&#xff08;中央处理器CPU、存储器RAM、ROM、 定时计数器T/C&#xff0c;输入输出接口IO、中断系 统&#xff09;都集成…

Linux系统架构----LNMP平台部署中部署wordpress

Linux系统架构----LNMP平台部署中部署wordpress 一、LNMP的概述 LNMP为Linux平台&#xff0c;Nginx web服务软件&#xff0c;mysql数据库软件&#xff0c;PHP编辑语言LNMP系统架构相对于LAMP的优点是LNMP比较节省内存&#xff0c;主要支持静态请求&#xff0c;但在访问量大的…

基于神经网络的偏微分方程求解器再度取得突破,北大字节的研究成果入选Nature子刊

目录 一.引言:神经网络与偏微分方程 二.如何基于神经网络求解偏微分方程 1.简要概述 2.基于神经网络求解偏微分方程的三大方向 2.1数据驱动 基于CNN 基于其他网络 2.2物理约束 PINN 基于 PINN 可测量标签数据 2.3物理驱动(纯物理约束) 全连接神经网路(FC-NN) CN…

计算机网络-数据链路层

一、认识以太网 "以太网" 不是⼀种具体的网络&#xff0c;而是一种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容。 例如&#xff1a;规定了网络拓扑结构&#xff0c;访问控制方式&#xff0c;传输速率等; 例如&#xff1a;以太网中的网线必须使用…

Day23:安全开发-PHP应用后台模块SessionCookieToken身份验证唯一性

目录 具体安全知识点 身份验证-Cookie使用 身份验证-Session使用 唯一性判断-Token使用 总结 源码 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&…

PaddlePaddle----基于paddlehub的OCR识别

Paddlehub介绍 PaddleHub是一个基于PaddlePaddle深度学习框架开发的预训练模型库和工具集&#xff0c;提供了丰富的功能和模型&#xff0c;包括但不限于以下几种&#xff1a; 1.文本相关功能&#xff1a;包括文本分类、情感分析、文本生成、文本相似度计算等预训练模型和工具。…

【C++】二叉树进阶之二叉搜索树

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握二叉搜索树&#xff0c;能自己模拟实现二…