待解决

ros2 dds共享内存这块到底怎么榨性能啊兄弟们

1132705544
1132705544
2026/07/25 09:12

项目上现在跑ros2 humble,机器人本体里4个节点全是同一进程组起来的,话题频率高的有几个,一个200hz的力矩指令,一个1khz的关节状态,还有几个100hz的传感器融合结果。用的cyclonedds,iceoryx共享内存那个zerocopy transport也开了,按理说走共享内存应该很快对吧,但我用rt测试从发布回调到订阅回调算出来单向延迟还要80us左右,cpu还吃挺高,i7-12700的单核已经跑到40%多了。

想问下做过ros2 dds调优的兄弟们,共享内存路径下还有啥参数能继续榨?我现在transport_mode用的是intra-process那个,感觉应该还能再压一压。另外domain id、共享内存队列深度那些参数实际影响大不大,有没有量化过的兄弟分享下数据。还有就是消息定义里那种嵌套的std_msgs和sensor_msgs类型,pou走共享内存的时候是不是其实没完全共享底层数据?这个我看官方文档没写明白。

81 4

全部回复 (4)

laojie
laojie#1

你这是intra-process还是inter-process?先确认zerocopy transport是不是真生效了,开起来不代表走通了。

2026/07/25 17:53
一本万利
一本万利#2

另外cyclonedds那套共享内存路径在大包小包场景表现差距挺大,你1khz状态包如果每帧超过512字节建议先量下。

2026/07/27 12:57
年年有余
年年有余#3

关掉rclcpp的enable_topic_statistics和logging。

2026/08/06 11:14
王超
王超#4

我们厂里12代i5跑1khz同进程节点,端到端稳定25us,你80us肯定还有空间。先把publisher_history和subscriber_history改成1试试。

2026/08/07 17:08