Driving Elmo Servo Driver (CANopen) with Ardupilot

The overall goal of the project I’m working on is to use the Elmo Gold Twitter servo drivers to run voice coil actuators to operate a collective pitch system on an ardupilot based multirotor (heliquad). The drivers are communicated with and operated using the CANopen standard for actuators (DS402).

I am hoping to get suggestions on how to implement the servo control in the context of ardupilot.

These are the options I see:

  1. Companion Computer to be the interpreter between servo commands and CANopen commands to the servo driver. This seems like a decent option because I could use a CANopen library to make the code easier. However I believe that would make the collective control reliant on the rate that mavlink messages can be read, converted, then sent to the servo controller which may not be fast enough for heliquad control.
  2. Microprocessor/companion computer that reads PWM to build CANopen commands. Assuming the controller can successfully read PWM accurately this may get around the frequency issues of relying on mavlink.
  3. Lua script to send CANopen compliant commands from the flight controller can port to comply with CANopen. I’m not 100% sure this is possible but if possible this would eliminate the companion computer
  4. Modify/Add to AP_Periph or ardupilot in general to add support for CANopen. This seems like a stretch since this would be an intensive coding endeavor similar adding DroneCAN to ardupilot.

If there are better/easier ways I am open to anything at this point. With the Elmo driver being a closed hardware platform I think I have to work around it’s requirements.

I know someone who has written a CANopen driver for PX4. He is controlling multiple servos with this driver. I am unclear as to how he implemented the solution, but let me know if you would like to connect.