图 11-4 · 节点主流程:一次采样如何从触发走到发布

本图回答的问题:定时器回调里哪一行取时刻、哪一行盖章,没有 spin 会怎样?

__init__:建两个定时器 rclpy.spin 在运行? 事件循环检测到点 否 回调永不触发 节点"假死" 是 · 到点 哪个定时器? timer1 · 1.0s ① now = get_clock() .now() 采集时刻 · 就在这里取 ② now_msg = now.to_msg() API Time → 消息 Time ③ stamp 盖戳 → 发布 publish(/sensor_data) 日志 + 计数 等待下一周期 timer2 · 5.0s 读 now().nanoseconds 累计次数 + 总纳秒 → 日志
✅ 结论:时刻取在①采集行,盖章在③,两步之间不做耗时操作 ⚠️ 风险:忘 spin → 全部回调不触发;同线程串行,一个堵全堵 🔍 验证:02 节 hz≈1.000;04 节逐行代码与终端输出
EXP-11 · 时间 API 与双时钟体系