Hello,
I’m trying to implement dual SBUS receiver redundancy on ArduPlane (latest version). I’ve tested this setup on two flight controllers: a Cube Orange+ and a CUAV X7 with CAN PDB carrier board. The behavior is significantly different between the two, and I’d like to understand why.
On the Cube Orange+, I connect the main SBUS receiver to the RCIN port and the secondary receiver to SERIAL2, configured with SERIAL2_PROTOCOL = 23
(RCIN). Without changing any special parameters like RC_OPTIONS
, everything works as expected. If the main receiver loses signal, the system switches to the secondary receiver. When the main receiver comes back online, it takes control again. Failover and failback both work automatically.
Now on the CUAV X7, I’m using the DSM/SBUS input for the main receiver (they renamed RCIN that way) and SERIAL2 for the secondary, also set to protocol 23. Initially, the second receiver is not detected at all when both are connected. If I boot the flight controller with only the secondary receiver, it works fine. To get failover to work, I had to enable RC_OPTIONS = 8
(Enable multiple receivers). With that setting, if the main receiver goes offline, the secondary is correctly selected and starts working.
However, the main issue is that once the system switches to the secondary receiver, it never switches back to the primary even when it comes back online, and even if the secondary itself is disconnected. So the failback functionality is missing on the CUAV X7.
Both tests were done with the same firmware and same parameter configuration. After digging deeper, I found that the Cube Orange+ includes an IOMCU, while the CUAV X7 does not have an IOMCU. I saw this difference in /ardupilot/libraries/AP_HAL_ChibiOS/hwdef
This raises a few questions:
Is this the expected behavior on the CUAV X7?
Is there a way to implement proper failback to the primary RC input when it becomes valid again?
Would it make sense to modify the RCInput_ChibiOS
backend to add this logic? I’m comfortable modifying the code and rebuilding ArduPilot if needed, and I’d be happy to contribute a patch if this functionality is useful to others.
Thanks in advance for any insights.