Files
acRealman_xr/docs/superpowers/specs/2026-07-28-rm75-feedback-thread-timing-design.md
T

54 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RM75 关节反馈线程计时统计设计
## 目标
在不改变关节反馈轮询、QP、关节指令和安全停止行为的前提下,测清当前
RealMan 反馈线程的两个关键时间:
- `rm_get_joint_degree()` 单次调用耗时;
- 相邻两次成功写入关节反馈缓存的实际更新间隔。
本轮只增加统计。高跟随、TCP 速度、反馈调度和 QP 控制方式均保持现状,待
真机日志确认根因后再修改。
## 方案
`RealManAdapter``_read_joint_state_once()` 中使用单调高精度时钟记录:
- `feedback_read`:从调用 `rm_get_joint_degree()` 前到调用返回后的耗时;
- `feedback_interval`:本次成功反馈时间戳与上次成功反馈时间戳之差。
两个数值随 `JointStateSnapshot` 写入现有线程安全缓存。首次成功反馈没有可靠
的前序时间戳,因此不提供 `feedback_interval`
`SingleArmVelocityTeleop` 只在看到新的反馈时间戳时,将这两个数值各记录一次,
避免 125 Hz 控制循环重复读取同一缓存而造成重复统计。统计加入现有约 5 秒
timing 窗口,并输出各自的样本数、mean、P95、P99 和 max
```text
feedback_read[n=<样本数> mean=<均值> p95=<P95> p99=<P99> max=<最大值> ms]
feedback_interval[n=<样本数> mean=<均值> p95=<P95> p99=<P99> max=<最大值> ms]
```
读取失败不产生成功样本,继续沿用现有一次告警、反馈超时和安全停止逻辑。
Mock 模式不伪造厂商 API 调用耗时。
## 验证
- 扩展现有关节控制单元测试,使用确定性快照验证新反馈只统计一次、重复缓存
不重复计数、首次反馈没有更新间隔。
- 运行 `xr_rm_teleop` 相关 pytest。
- 按项目规则在工作空间根目录运行 `colcon build --symlink-install`
- 真机测试仍由用户使用 `arm_debug.launch.py arm:=right use_mock:=false` 执行;
本轮不自动连接机械臂。
## 后续决策
用户提供真机 timing 日志后再判断:
-`feedback_interval` 主要由 `feedback_read + 8 ms` 构成,再评估绝对周期
调度;
-`feedback_read` 本身经常超过 8 ms,优先定位厂商查询或同一连接的读写
竞争;
- 反馈问题确认前,不把高跟随或预测式 QP 与本轮统计改动混在一起。