你这个15ms+偶尔30ms,6个节点串行不算离谱,但确实有水分。先把几个硬指标摆出来再说优化:CPU单核50%看着没满,但ros2默认调度是单线程reactor,6个节点如果都跑在同一个executor里,某个节点回调一卡整条链路全抖。强烈建议改成MultiThreadedExecutor,或者干脆每个节点单独起一个进程,串行链路用callback group隔开,这步做完基本能砍掉3-5ms。
QoS那块你reliable+depth10是给自己挖坑,sensor往control走这种链路用reliable纯属浪费,control指令发丢了下一帧补就行,没人care。点云+图像特征这种高频的,best_effort+depth1+transient_local别用,正常best_effort+depth1就够了。reliable只留给最后下发到执行器那一条。
DDS别折腾cyclonedds,没意义。humble默认fastrtps问题不在DDS层,在你executor调度和内存分配上。共享内存transport要开起来,FASTDDS_DEFAULT_PROFILES.xml里配SHM,或者fastrtps那边用iceoryx零拷贝中间件,图像特征走共享内存这一项下来又能省4-6ms。
还有一点容易被忽略:QoS的reliability和durability要算兼容,不兼容的话题之间会直接丢弃,根本没传到应用层,你以为是丢包其实是根本没匹配上。用ros2 topic info -v挨个查一遍。
先把executor拆了再说别的,6节点单线程跑本身就是反模式。