feat(manipulation): UFactory Lite 6 support - #4053
Conversation
The Lite 6 speaks the xArm SDK, so it rides the existing XArmAdapter — the adapter now detects it on connect (axis 6 + device_type 9) and drives its gripper over tool GPIO, which is open/close with no position feedback, so reads echo the last command. Model config selects robot_type=lite in the xacro (no xArm gripper collision pairs, they don't exist on this arm). Blueprints: coordinator-lite6, lite6-planner-coordinator, keyboard-teleop-lite6. Address comes from --lite6-ip. Review: mypy + pytest-fast green. Test plan: unit tests cover Lite 6 detection, the GPIO gripper path and the lite model config; ran keyboard-teleop-lite6 against the arm at 10.55.1.40.
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## main #4053 +/- ##
=======================================
Coverage 78.22% 78.22%
=======================================
Files 1431 1428 -3
Lines 135204 135141 -63
Branches 11711 11712 +1
=======================================
- Hits 105762 105713 -49
+ Misses 26167 26105 -62
- Partials 3275 3323 +48
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 8 files with indirect coverage changes 🚀 New features to boost your workflow:
|
|
| if target == self._lite6_gripper and self._lite6_gripper_sent: | ||
| return True # tool GPIO write per tick spams the controller; send transitions only |
There was a problem hiding this comment.
After a Lite 6 gripper command succeeds, disconnecting and reconnecting creates a new controller but retains the previous command as sent. When the first command to the new controller has the same target, this branch returns success without issuing its GPIO command, so the physical gripper can remain in its prior or unknown state. Reset the sent-command state during disconnect or after connecting.
Knowledge Base Used: Hardware adapters and device interfaces
Artifacts
- The authored pytest installs a mocked xArm SDK, issues the command-disconnect-reconnect-command sequence, and checks both current and reset-flag behavior, proving the controller-local delivery difference.
- Executed focused pytest against the unchanged adapter and recorded one open call on the original controller and zero on the newly connected controller, confirming the defect.
- Executed the same sequence with only a test-local disconnect flag reset and recorded one open call on each controller, demonstrating the required lifecycle reset.
The Lite 6 speaks the xArm SDK
New blueprints:
coordinator-lite6,lite6-planner-coordinator,keyboard-teleop-lite6. Address comes from--lite6-ip