186、ROS2基础与机器人中间件:节点通信话题服务与DDS 186、ROS2基础与机器人中间件:节点通信话题服务与DDS从一次诡异的“节点失联”说起上周调试一台六轴机械臂的抓取管线,三个节点跑在工控机上,一个视觉节点跑在隔壁的GPU工作站上。一切正常跑了半小时,突然机械臂控制节点报出“waiting for service /grasp_plan to become available…”,然后一直卡死。我第一反应是视觉节点崩了,ssh上去一看,进程活着,日志还在刷。再查网络,两个机器能ping通。最后折腾了二十分钟,发现是DDS的domain ID不一致——工控机上设了ROS_DOMAIN_ID=1,工作站上没设,默认是0。两个节点各自在自己的“虚拟局域网”里自嗨,谁也看不见谁。这种问题,没经历过的人可能觉得离谱,但搞过ROS2的人都知道,这几乎是入门第一课。今天这篇笔记,就把ROS2的通信机制掰开揉碎讲清楚,从节点到话题、服务、动作,再到底层的DDS,全部用实际调试经验说话。节点:不是进程,是“逻辑实体”很多人刚接触ROS2,会把节点和进程划等号,这是第一个坑。一个进程里可以跑多个节点,一个节点也可以跨进程存在(虽然不常见)。节点本质上是DDS参与者(Participant)的封装,它负责向DDS全局数据空间注册自己,然后通过话题、服务、动作这些“管道”和其他节点交互。写节点的时候,我习惯用面向对象的写法,而不是直接写main函数里堆逻辑。比如:im