Getting a delta-robot to move in straight line

I’m building a delta-robot using 3 ODrive S1’s and an Arduino. I’ve got a prototype set up and I can get the robot to move from one point to another.

I’m using UART with the ODrive Arduino library, so I call SetPosition (TrapezoidalMove also works) to get the motors to move, which in turn moves the end-effector.

The issue is that the end-effector doesn’t move in a straight line because motor 1 might have to move 2 turn, whereas motor 2 and 3 might only have to move 1 turn, which means that the actual movement will not be a straight line:

Could I somehow use TrapezoidalMove or set velocity_feedforward and current_feedforward in SetPosition to get the motors to move within the same timeframe? Or would you simply call SetPosition many times to from point A to point B to get it to move straight? Any suggestions on what the best way would be to handle this issue?

Delta won’t move in a straight line with a single command. What 3D printers to is something called “segmentation” where they approximate straight trajectory with many tiny lines and follow those lines with separate commands (which is in reality a lot of tiny arcs with lengths small enough to be perceived as straight lines).
RepRap firmware claim to do “segmentation free moves” which is true to some extent, but in practice it’s just a segment recalculate every cycle of the control loop. But it’s still an appropriation of a straight line using many tiny arcs.

1 Like