前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS2/ROS1开发过程中的一些记录

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

作者头像
zhangrelay
发布2022-08-10 15:39:44
8450
发布2022-08-10 15:39:44
举报

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


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档