Odrive + openpnp?

Hi there,

I haven’t been able to find much info on openpnp & odrive combinations and wondering if there’s anyone here who has tried this or has comments on working setups. It’s not really clear to me how to interface the odrive through what motion controller with openpnp and how.

Thanks a bunch in advance,

I think the only thing missing from ODrive that would be needed is a G-Code interpreter.
Depending on the subset of commands they actually use, it may be a fairly simple job to write a python script that reads G-Code from a TCP or serial port, and sends ODrive commands over USB or CAN.


The easy way would be to connect your ODrive to a separate motion controller using step/dir signals for X/Y axis. OpenPnP would then only need to interface to this motion controller using GCode.

However, I plan to implement a new driver in OpenPnP to use the ODrive ASCII or Native protocol. In the newest version of OpenPnP, multiple motion controllers should be supported. But I still have some work to get everything up and running…

Best Regards


Why not use CAN? Wouldn’t it be more robust?

I don’t know wheter there is any motion controller available that supports external drivers using CAN.
I think most people just use USB or something like RS485 to communicate with their controller.

In my setup I intend to just use two independent controllers, probably both connected using USB. I don’t want to trade accuracy for speed just to use step/dir signals…

Oh I see what you mean. OpenPnP isn’t doing the motion control, it’s talking to a controller which is talking to the drivers. Got it.

There are lots. here’s one example PCMM | Controller Hardware | Kollmorgen Automation Suite\

Yaskawa, Siemens, Parker all make some. I’m sure there are plenty more

Hey Simon,

I too am looking to build a pnp machine using openPnP. I love the concept of servos and would like to use them. Bypassing additional hardware like a smoothie board would be fantastic. Any updates on your plans?

Hi Camden

Seems like not too many are using ODrive for their PnP machines. :wink:
Unfortunately I was busy with other projects and I intend to finish most of the mechanical stuff first…
We quickly talked about using the ASCII protocol with OpenPnP’s GCodeDriver but there is no easy way, as ODrive is not responding to every command.
Oskar clearly stated, that the prefered interface would be CAN. I think this will be the way to properly interface ODrive.
If I find time and achieve any progress I’ll leave a note over here! I need to find a solution anyway, as I already spent too much time and money. XD

I appreciate the response. Do you think It’s worth investing in BLDCs over Steppers as I start my PnP project? As mentioned earlier, using a smoothieboard is still a valid option I would think.

I think the best way to do this would be with a Python script running on a raspberry pi with a CAN ‘Hat’.

The python script could open a TCP socket (or serial port) and accept G-Code instructions from openpnp. It would then pass them to a G-Code interpreter, for example “pycnc”.
Assuming pycnc can compute motion profiles and output axis positions in real time, it would then be trivial for the python script to send these axis positions as position setpoint CAN messages to the ODrive(s).