2.3 KiB
2.3 KiB
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:
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 与本轮统计改动混在一起。