Repository navigation
fix(follower): 左手 RS00 力位闭合失败 —— CAN ID 左 17 / 右 18;随包从爪 1.2.16 - #24
Merged
Merged
Conversation
从爪固件(<= 1.2.15)把超时后才到的 MIT 故障应答(字节 1-4 故障字、5-7 为 0) 按普通状态帧解码:温度 0.0、力矩 -t_max、位置被钳到行程另一端。0089s(RS00 左手)闭合时每秒十几帧,ForcePositionController 按它们算出 ~8 rad 外的设定点, 爪子被甩开 4-7 rad/s,闭合到 0 永远不收敛。 Motor::on_status 在本订阅见过非零温度之后,丢掉温度恰为 0.0 的帧(真实电机 不会回到 0.0 C),按 2 的幂次限频告警。 注意:这只挡住主机侧。固件自己也用这些帧更新状态,0089s 闭合仍被甩开, 需要固件修复。 C++ 468 passed(新增 2 条,去掉过滤后 pty 用例失败)。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
根因(0089s,诊断固件 2026-10-10):MIT 运动帧第 0 字节是目标位置的高字节,电机把 第 0 字节等于自己 CAN ID 的运动帧当成别的命令,在 0xFD 上回显前 4 字节、后 4 字节 补 0。出厂 ID 127 = 0x7F,正是 -0.098..0 rad 的位置字节 —— 左手 RS00 的闭合端;右手 那里是 0x80,所以从没出过。目标 0.07/0.05/0.03 每 2 s 约 1000 帧,0.10 一帧没有。 - detail::expected_motor_can_id(model_id, side):RS00 左 17、右 18,其它 nullopt。 ±π 内的位置字节是 0x60..0x9F,固件兜底扫描 1..0x7F,所以必须 < 0x60;单双对应 SN 左右。EL05 不区分左右,不纳入。Python 导出 expected_motor_can_id。 - FollowerGripper 打开时 RS00 的 CAN ID 与左右不符就告警(英文),不改写设备 —— 由产线配置工具写入。开合方向的告警同样改为英文。 - 状态帧过滤保留作兜底,注释与告警改为上述根因。 实机:0089s 写 17、0094s 写 18 并拔插 24V 后,诊断固件在 0089s 闭合端计数 0 帧 (改前约 1000/目标);不带过滤的 SDK 3baac3f 上 force_position_control.py 两台各 3 次全部通过(闭合 0.90-0.93 s,HOLDING_POSITION)。 C++ 471 passed;pytest 129 passed / 2 skipped。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
固件 tc-gu-01 PR #22(a7dc07f)。镜像 167,544 B,CRC32 0x4a8cd360。主爪 1.2.6 不变。 README / CHANGELOG 写明 RS00 电机 CAN ID 左 17 / 右 18 的规则与原因。 实机 0089s(左,ID 17)/ 0094s(右,ID 18),OTA 1.2.16 + 拔插 24V: force_position_control.py 各 3 次、impedance_control.py 各 5 步全部通过。 C++ 471 passed;pytest 129 passed / 2 skipped;协议镜像对固件 a7dc07f 全绿。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
根因
RobStride 电机把第 0 字节等于自身 CAN ID 的 MIT 运动帧当成别的命令,在 0xFD 回「前 4 字节 + 4 个 0」。运动帧第 0 字节是目标位置高字节,出厂 ID 127 = 0x7F = −0.098..0 rad,即左手 RS00 的闭合端(右手为 0x80)。从爪固件 ≤ 1.2.15 把它当状态解,包络按假位置钳位,爪子被甩开,力位闭合到 0 失败(0089s,factorytool 1.4.8 实测发现)。定位过程:诊断固件逐帧记录异常帧及其前 4 条 CAN 发送,定向实验目标 0.07/0.05/0.03 每 2 s 约 1000 帧、0.10 时 0 帧。
改动
detail::expected_motor_can_id(model_id, side)/ Pythonexpected_motor_can_id:RS00 左 17、右 18(< 0x60,避开 ±π 内位置字节 0x60..0x9F);EL05 不纳入。FollowerGripper打开时 CAN ID 与 SN 左右不符就告警(英文),不写设备,由产线配置工具写入。Motor::on_status丢弃温度为 0.0 的回显帧(兜底),限频告警。a7dc07f,CRC320x4a8cd360):固件侧同样不再把回显帧当状态。验证
3baac3f+ 新 ID:两台力位闭合各 3 次通过。a7dc07f全绿。不发 SDK 版本(仍 0.4.2)。
🤖 Generated with Claude Code