Arbitrary robot direct PWM control through MAVlink

Hello,

I am trying to use PX4 (or similar) on a PixRacer mRo Pro along with a companion computer on an arbitrary robot for research purposes.

In my project, I want to use PX4 only as a way to aggregate a few sensors (mRo IMU & compass + external minilidar) into a reliable pose estimate, and to generate PWM to talk to the ESCs controlling my brushless motors. My companion computer must handle the entire control stack and provide PX4 with raw PWM commands for each individual motor.

I am a bit unsure how to achieve this with PX4, as it seems to force me to choose one of the available “airframes” and doesn’t seem to provide an “airframe” for generic arbitrary robots controlled externally (I tried “Generic Rover Differential” because I don’t need a GPS module but this fails to activate, when I try to select it the FC just restarts without activating this airframe).

Could you point me toward the best direction for achieving this project, please?

Kind regards.

PS1: related topic for direct MAVlink control, which is the way I am trying to achieve this right now (pymavlink): Can I control PWM signals to esc directly via Mavlink?

PS2: relevant documentation found by ChatGPT on offboard control mode: Offboard Mode (Generic/All Frames) | PX4 Guide (main)

For now I am still trying to use MAVlink/MAVSDK (and failing) as this would be simpler than setting up docker and ROS2 on my tiny RPI Zero (a maintainer suggested that I try the ROS2 DDS bridge route because it has less overhead, but my application is low-frequency so I don’t really care about overhead).

I am trying to use the offboard mode to control the motors directly from the RPI via System.offboard.set_actuator_control or System.action.set_actuator . But I cannot figure out how to disable all safety checks in order to arm the robot (I just want PX4 to translate my motor commands into bi-directional DShot600, not perform safety checks other than critical battery level perhaps):

- Navigation error: No valid position estimate, description: The available positioning data is not sufficient to execute the selected mode (ERROR, ealth_component: local_position_estimate)
- Navigation error: No valid global position estimate, description: The available positioning data is not sufficient to execute the selected mode. (ERROR, health_component: global_position_estimate)
- No valid mission available, description: Upload a mission first. (INFO, health_component: system)
- No offboard signal, description: The offboard component is not sending setpoints or the required estimate (e.g. position) is missing. (ERROR, health_component: system)
- Home position not set (INFO, health_component: system)
- No manual control input, description: Connect and enable stick input or use autonomous mode.
 Sticks can be enabled via COM_RC_IN_MODE parameter. (ERROR, health_component: remote_control)

Is there a way to disable those safety checks in QGroundControl for direct motor control in offboard mode please? I have tried changing many parameters but cannot seem to figure it out. (IDK if that’s relevant but I am using the “generic underwater” frame ATM because the “differential rover” frame fails to activate on my PixRacer).