Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,15 @@ because that is the side the feed-forward pushes.
This is a runaway detector, not an accuracy bound: raise `hold_runaway_rad` only if a jaw that is
genuinely holding something is being released. The watch is off until the config is calibrated.

**An empty `grasp()` is the case that reaches it.** The closing leg presses onto the closed-side
stop and the hold keeps pushing there, so a stop that is not where the calibration says — or one
that has been knocked out — lets the hold walk the jaws past it. The trip leaves them sitting
outside the calibrated travel, and the release frames leave the drive *enabled* but carrying no
torque: it holds nothing, but it is not off either. Get the jaws back inside the travel before
commanding anything else — `disable()` the motor, push them clear of the stop by hand, then
`enable()` and carry on. Do not just call `grasp()` again: the closing leg re-approaches the same
stop and the hold presses it again.

Need more force than the default? `MotionConfig.force_n` is `20.0` N (`2.0 Nm`), inside the
DM4310's `3 Nm` rating. Its peak is `7 Nm` and the protocol ceiling is `10 Nm`.

Expand Down Expand Up @@ -508,7 +517,7 @@ the config as their first argument rather than being called on the gripper.
| `HardwareError` from `enable()` | The motor never reported `err == 1`. Check power, then `clear_fault()`. |
| The jaws move the wrong way | The unit is reverse-mounted, not normal. Construct with `mount="reverse"`. |
| `close()` returns `ok=False` | The jaw parked further than `stop_tol` from the limit. The gap comes from `zero()` probing harder than `close()` presses, so raising `stop_lead_mm` barely moves it — check that the calibration describes the real travel, and raise `stop_tol` if the unit is genuinely parked on the stop. |
| `travel_guard` is set | The runaway watch tripped: the jaw walked past the closed-side stop while a force was held. Check the calibration describes the real travel, and that nothing has removed the stop. |
| `travel_guard` is set | The runaway watch tripped: the jaw walked past the closed-side stop while a force was held — an empty `grasp()` does this when the stop is not where the calibration says. Check the calibration describes the real travel, and that nothing has removed the stop. The jaws are now outside the calibrated travel: `disable()`, push them back clear of the stop by hand, then `enable()`, before commanding anything else. |
| A `can1` unit's `load_calibration()` returns `False` | A no-argument load reads the factory file, which declares `channel: can0`, so this unit has no implicit source. Give it a template, or name its own file with `path=` or `LITEGRIP_CALIB`. |
| The held force sags below the setpoint | You changed the hold gains, or something is back-driving the jaws faster than the feed-forward. `hold_kp` / `hold_kd` are deprecated and ignored. |
| `import litegrip` loads older code than the checkout you are reading | An installed copy does not update itself across `git pull`. Check `litegrip.__file__`, or `pip install -e .` in the checkout. |
Expand Down
8 changes: 7 additions & 1 deletion readme_zn.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@ LiteGrip(channel="can0", can_id=0x08, mst_id=None, canfd_mode=None,
压的。这是**失控检测,不是精度上限**:
只有当**确实夹着东西**的爪子被释放时,才去调大 `hold_runaway_rad`。未标定时监视不启用。

**空载 `grasp()` 正是会踩到它的工况。** 闭合段压上闭合侧限位,保力段继续在那里顶,所以只要
限位不在标定说的位置上(或者被顶掉了),保力就会把爪子推到它外面去。中止之后爪子停在标定
行程之外,而释放帧只撤力矩、**不失去使能** —— 电机不出力了,但也没关。继续下发任何指令之前
先把爪子弄回行程里:`disable()` 失能,用手把爪子从限位上挪开,再 `enable()` 接着用。不要就
这么再喊一次 `grasp()`——闭合段会重新压上同一个限位,保力段再压一次。

需要比默认更大的力?`MotionConfig.force_n` 是 `20.0` N(`2.0 Nm`),在 DM4310 的 `3 Nm`
额定之内。它的峰值是 `7 Nm`,协议上限是 `10 Nm`。

Expand Down Expand Up @@ -472,7 +478,7 @@ logger 挂个 handler 就能看到,注意即使不挂 handler,告警也会
| `enable()` 抛 `HardwareError` | 电机始终没报 `err == 1`。先查供电,再 `clear_fault()`。 |
| 爪子朝反方向动 | 这台机器是反装,不是正装。构造时传 `mount="reverse"`。 |
| `close()` 返回 `ok=False` | 爪子停的位置离限位超过了 `stop_tol`。这个缺口来自 `zero()` 探测时压得比 `close()` 更狠,所以调 `stop_lead_mm` 基本看不出变化 —— 先核对标定描述的是不是真实行程,如果这台确实停在限位上,再调大 `stop_tol`。 |
| `travel_guard` 置位 | 失控监视触发了:保力期间爪子走到了闭合侧限位之外。核对标定描述的是不是真实行程,以及限位还在不在。 |
| `travel_guard` 置位 | 失控监视触发了:保力期间爪子走到了闭合侧限位之外 —— 限位不在标定位置上时,空载 `grasp()` 就是这么顶出去的。核对标定描述的是不是真实行程,以及限位还在不在。此时爪子停在标定行程之外:先 `disable()`,用手把它挪回限位内侧,再 `enable()`,然后才能下发别的指令。 |
| `can1` 上的机器 `load_calibration()` 返回 `False` | 不带参数的加载读的是出厂文件,而它声明的是 `channel: can0`,所以这台没有隐式来源。给它一个模板,或者用 `path=` / `LITEGRIP_CALIB` 点名它自己那份文件。 |
| 保住的力比设定值低 | 你改过保力增益,或者有东西把爪子推得比前馈还快。`hold_kp` / `hold_kd` 已弃用,会被忽略。 |
| `import litegrip` 拿到的代码比你在读的源码树旧 | 装过的副本不会跟着 `git pull` 自己更新。先看 `litegrip.__file__`,或者在代码仓里 `pip install -e .`。 |
Expand Down
Loading