Skip to content

Things worth knowing

Staging and committing are separate on purpose

Section titled “Staging and committing are separate on purpose”

One packet can carry all four joints, and that is the only way to move them in step. Sending a packet per joint makes the movement visibly ragged.

robot.arm_left.to(1800) # staged
robot.arm_right.to(1200) # staged
robot.commit() # one packet, both joints

ServoFaultError means a power cycle, not a bug hunt

Section titled “ServoFaultError means a power cycle, not a bug hunt”

When every joint reads position 0, the servo controller has stopped. Unplugging USB will not fix it: Eilik has an internal battery, so it has to be switched off at the power switch.

A second connection raises PortBusyError. Use the context manager so the port is always released.

Every command waits for its acknowledgement

Section titled “Every command waits for its acknowledgement”

The firmware parses one frame at a time. Sending a second command while it is still reading a 1032-byte display frame drops the device off the USB bus entirely. The library waits, so you do not have to — but it is why a display write is not instant.