机器人系统里常有这样的现象:Publisher 按计划周期发送消息,Subscriber 也能够收到,但控制器仍然感到“慢半拍”。把原因归结为网络延时很容易,问题却可能出在消息队列、Executor 回调、线程调度,或者指令本身已经过期。
这里从一个简单场景展开:规划节点发送某个关节的目标位置,执行节点检查命令后交给控制接口。 我们不预设运行平台、不声称这是任何实机的实现;用公开的 ROS2 机制和一个虚拟案例,建立可以逐步验证的时序模型。
1. 先看清消息经过的几段路
Planner Node Control Node
│
│ ① 生成 joint target、seq、stamp
│
├── ② rclcpp Publisher::publish()
│ │
│ ▼
│ RMW / DDS(匹配QoS、缓存与传输)
│ │
│ └──────────────────► ③ 消息变为可获取
│ │
│ ④ Executor 发现就绪
│ │
│ ⑤ 调用 Subscription 回调
│ │
│ ⑥ 检查时效、状态与限幅
│ │
│ ⑦ 交给控制接口
│ │
│ ⑧ 控制循环 / 驱动写入
│ │
◄────────────── ⑨ 关节状态或异常反馈 ────┘