I’d be happy to talk about it. The modifications made are actually incredibly minimal. We are using the APM as more of a hardware input/output layer than as an actual controller right now. If you look at our fork of the ArduPilot repo, you’ll see that there is a branch called
br-ros-rov. We only made one small change to that branch, namely enabling MavLink PWM output through all available channels. (By default most of the channels are disabled).
mavros to interact with everything onboard the APM, including the PWM outputs. The actual motor commands are all calculated in ROS instead of on the APM.
Here’s a diff of the changes for you to see: