ROS2/ROS1开发过程中的一些记录

本文探讨了在ROS2和ROS1中高效管理60+节点的技巧,包括使用taskset设置CPU亲和性以提高性能,eventsexecutor的运用避免重启问题,以及FastDDS的配置建议。还提及了ROS_DOMAIN_ID对网络负载的影响和Colcon构建参数的优化。

其实,在进行ROS2/ROS1程序编写的时候,通常需要启动很多节点,有时候大于60+节点也非常常见的。

那么,就需要调度这些节点。不同节点工作频率不同,有些是10Hz就可以,有些需要1000Hz。

基础概念:

  • taskset
  • isolcpus

taskset 用于在给定 pid 的情况下设置或检索正在运行的进程的 CPU 亲和性,或者启动具有给定 CPU 亲和性的新命令。 CPU 亲和性是一种调度程序属性,它将进程“绑定”到系统上的一组给定 CPU。 Linux 调度程序将遵循给定的 CPU 亲和性,并且该进程不会在任何其他 CPU 上运行。请注意,Linux 调度程序还支持自然 CPU 亲和性:出于性能原因,调度程序会尝试将进程保持在同一个 CPU 上,只要可行。因此,强制特定的 CPU 亲和性仅在某些应用程序中有用。

CPU 亲和性表示为位掩码,最低位对应于第一个逻辑 CPU,最高位对应于最后一个逻辑 CPU。并非所有 CPU 都可能存在于给定系统上,但掩码可能指定比现有更多的 CPU。检索到的掩码将仅反映与系统上物理 CPU 对应的位。如果给出了无效的掩码(即,对应于当前系统上没有有效 CPU 的掩码),则会返回错误。掩码通常以十六进制给出。例如,

  •            0x00000001 是处理器#0
  •            0x00000003 是处理器#0 和#1
  •            0xFFFFFFFF 是所有处理器(#0 到 #31)

当任务集返回时,可以保证给定程序已被调度到合法的 CPU 上。

isolcpus需要注意amd和intel的差异性,如果是arm或nVidia……

极端情况下性能不稳定,或者CPU占满。

采用 "events executor",这个在ROS 2 Humble可以直接使用,其他之前版本需要对应源码编译。

回调函数或时间

FastDDS需要配置后再使用,这样更好一些。

否则,有时 FastDDS 在其他节点正在运行时重新启动节点后无法列出节点/主题。

具体查看discovery_server;或者切换到CycloneDDS 

如果选择CycloneDDS,也需要进行配置,而非直接使用默认参数。

ROS_DOMAIN_ID配置相同在大量网络需求或多机器人情况下会使得网络不堪重负……

colcon build 最好加一些参数否则不怎么好用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值