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

举报
zhangrelay 发表于 2022/07/30 00:33:57 2022/07/30
【摘要】 其实,在进行ROS2/ROS1程序编写的时候,通常需要启动很多节点,有时候大于60+节点也非常常见的。 那么,就需要调度这些节点。不同节点工作频率不同,有些是10Hz就可以,有些需要1000Hz。 基础概念: tasksetisolcpus taskset 用于在给定 pid 的情况下设置或检索正在运行的进程的 CPU 亲和性,或...

其实,在进行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 最好加一些参数否则不怎么好用。


文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/126042780

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。