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) # stagedrobot.arm_right.to(1200) # stagedrobot.commit() # one packet, both jointsServoFaultError 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.
Only one process can hold the port
Section titled “Only one process can hold the port”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.