Repository navigation
Add the PAA KX2 arm driver - #880
rickwierenga wants to merge 3 commits into
Conversation
6384d83 to
b7a5688
Compare
6643004 to
6d93d02
Compare
|
Hi @rickwierenga! First off thanks for the incredible work, we are big fans :). Tested at HEAD 1.
-from pylabrobot.capabilities.arms.orientable_arm import OrientableArm
+from pylabrobot.capabilities.arms.orientable_arm import OrientableGripperArm
@@
- self.arm = OrientableArm(backend=backend, reference_resource=self.reference)
+ self.arm = OrientableGripperArm(backend=backend, reference_resource=self.reference)2.
@property
def min_gripper_width(self) -> Optional[float]:
if self._config is None:
return None
axis_cfg = self._config.axes.get(Axis.SERVO_GRIPPER)
return None if axis_cfg is None else axis_cfg.min_travel
@property
def max_gripper_width(self) -> Optional[float]:
if self._config is None:
return None
axis_cfg = self._config.axes.get(Axis.SERVO_GRIPPER)
return None if axis_cfg is None else axis_cfg.max_travel
async def move_gripper(
self,
width: float,
force_sensing: bool = False,
backend_params: Optional[BackendParams] = None,
) -> None:
if force_sensing:
await self.close_gripper(gripper_width=width, backend_params=backend_params)
else:
await self.open_gripper(gripper_width=width, backend_params=backend_params)The properties intentionally read A note while you're in this area: the capability-level wrappers on 3. Our KX-2 has the rail axis on the bus (node 5).
So - if has_rail or not has_servo_gripper:
- raise NotImplementedError(
- "KX2 has only been tested with the default 4-axis arm + servo "
- "gripper topology (has_rail=False, has_servo_gripper=True). "
- ...
- )
+ if not has_servo_gripper:
+ raise NotImplementedError(
+ "KX2 has only been tested with the default servo-gripper "
+ "topology (has_servo_gripper=True). The gripper-less path has "
+ "shim code but the setup / homing layer needs work — see "
+ "KX2ArmBackend._on_setup and servo_gripper_initialize."
+ )
+ if has_rail:
+ warnings.warn(
+ "has_rail=True: rail (node 5) is included in CAN bus discovery "
+ "and PDO remapping, but the rail motor is NOT enabled and "
+ "kinematics / motion code paths ignore it. Rail position is "
+ "not queried. Verify your task does not need to move the rail."
+ )( What's working on real hardware as of today
Multi-axis moves and rail-axis support are next on our side. Happy to |
038f9be to
b4db1ab
Compare
6af085c to
1ae9dc6
Compare
08ae58e to
a22dae1
Compare
Adds a direct asynchronous
KX2API for calibrated joint and Cartesian motion, with the physical servo gripper exposed askx2.gripperand an independently usable barcode reader.Uses a
pylabrobot.io.CANopentransport and PLR serial I/O, with local kinematics, scoped register configuration, cancellation cleanup, and setup guides.