Missing sensors on ELRS <> MAVLink connection

Hi All,

Not sure where to start, I open this topic here to see if someone can help me or kick me in the right direction :wink:

My issue is that I am missing a lot of (maybe all of them, not 100% sure here) sensors on my Radio on my ELRS <> MAVLink, the goal is to view them in the yaapu widget, but since they don’t even exist in the telemetry sensor list, my guess is that the cause lays some where in my configuration or hardware.

What I did:

I followed the setup instructions on the ExpressLRS Wiki and payed attention to the yaapu notes, I’ll repeat the settings I made below

My setup:

  • Quadcopter on speedybeef4v4 running 4.7.3
    attached are:
    • Uart1: VTX
    • Uart2: 2.4g ExpressLRS receiver.
    • Uart3: DIY IR Photo camera that listens to mavlink camera messages
    • Uart5: ESC
    • Uart6: GPS
  • Radiomaster TX16s flashed with ExpressLRS v4.0.1, Backpack is on v1.5.7
  • Ground station accesspoint
  • Old Laptop running Mission Planner.

Everything works so far except for the sensors on my RC

Relevant parameters:

serial*_:

SERIAL0_BAUD     1500
SERIAL0_PROTOCOL 2
SERIAL1_BAUD     57
SERIAL1_OPTIONS  0
SERIAL1_PROTOCOL 37
SERIAL2_BAUD     460
SERIAL2_OPTIONS  0
SERIAL2_PROTOCOL 2
SERIAL3_BAUD     115
SERIAL3_OPTIONS  0
SERIAL3_PROTOCOL 2
SERIAL4_BAUD     115
SERIAL4_OPTIONS  0
SERIAL4_PROTOCOL -1
SERIAL5_BAUD     115
SERIAL5_OPTIONS  0
SERIAL5_PROTOCOL 16
SERIAL6_BAUD     115
SERIAL6_OPTIONS  0
SERIAL6_PROTOCOL 5
SERIAL_PASS1     0
SERIAL_PASS2     -1
SERIAL_PASSTIMO  15

sr*_:

SR0_ADSB	    0
SR0_EXTRA1	    4
SR0_EXTRA2	    4
SR0_EXTRA3	    2
SR0_EXT_STAT	2
SR0_PARAMS	    0
SR0_POSITION	2
SR0_RAW_CTRL	0
SR0_RAW_SENS	2
SR0_RC_CHAN     2
SR1_ADSB	    0
SR1_EXTRA1	    0
SR1_EXTRA2	    0
SR1_EXTRA3	    0
SR1_EXT_STAT    0
SR1_PARAMS	    0
SR1_POSITION	0
SR1_RAW_CTRL	0
SR1_RAW_SENS	0
SR1_RC_CHAN	    0
SR2_ADSB	    0
SR2_EXTRA1	    1
SR2_EXTRA2	    1
SR2_EXTRA3	    1
SR2_EXT_STAT	1
SR2_PARAMS	    0
SR2_POSITION	1
SR2_RAW_CTRL	0
SR2_RAW_SENS	1
SR2_RC_CHAN	    1
SR3_ADSB	    0
SR3_EXTRA1	    5
SR3_EXTRA2	    5
SR3_EXTRA3	    5
SR3_EXT_STAT	5
SR3_PARAMS	    0
SR3_POSITION	5
SR3_RAW_CTRL	5
SR3_RAW_SENS	5
SR3_RC_CHAN	    5
SR4_ADSB	    0
SR4_EXTRA1	    0
SR4_EXTRA2	    0
SR4_EXTRA3	    0
SR4_EXT_STAT	0
SR4_PARAMS	    0
SR4_POSITION	0
SR4_RAW_CTRL	0
SR4_RAW_SENS	0
SR4_RC_CHAN	    0

RC_OPTIONS: (15136)

RC_PROTOCOLS: (512) also tried “All”, no luck

Thanks in advanced, If my question is completely at the wrong place, please point me in the right direction.

I assume the SR1_* params are the decisive ones for your MAVLink stream.
They shouldn’t be 0. The elrs setup guide says:
“Configure all SRx_ parameters to be 1, except for SRx_ADSB, SRx_PARAMS, SRx_RAW_CTRL that should stay 0 (otherwise yaapu will see a few sensors only and GCS might not be able to connect)”.

Also MAVRadio should be selected in RC Protocols if you want RC control.

Thanks for your reply!

Here is how I assumed it works, :

USB:   USB == SERIAL0 == SR1
Uart1: VTX == SERIAL1 == SR1
Uart2: RX  == SERIAL2 == SR2
Uart3: CAM == SERIAL3 == SR3
Uart4: --- == SERIAL4 == SR4
Uart5: ESC == SERIAL5
Uart6: GPS == SERIAL6

So my assumption is that my RX (ExpressLRS receiver) is on SERIAL2 so we need SR2_x

In one of my tries I tried putting the SR1_x and also SR4_x to 1 but it didn’t change anything… now I think about it I’m not sure if I rebooted that time.

Is there documentation for this? (I searched, but probably used the wrong keywords :wink: )

SRx refers to Mavlink stream number, you have 2 serials configured as mavlink SERIALx_PROTOCOL == 2:
SERIAL0 - USB
SERIAL2 - actual uart
so you will need to confgure SR0 and SR1.

Are you missing sensors compared to just using ELRS with CRSF??

Simply you don’t get all the sensors when using ELRS mavlink. When using CRSF the data is generated by ardupilot and sent to the transmitter via CRSF. On ELRS - mavlink the CRSF data is generated by the ELRS module from the mavlink telemetry so it can only display what mavlink contains.

@mike_tk and @twistedwings
I adjusted the values and (I think) all the sensors are comming in now. There was one strange thing. After setting the the SR1_x values to 1, writing them to the FC and reboot the FC it and the vaues where back to 0… after 2nd try the values remained. I cannot reproduce it again.

But this also means that there is a mistake on the ExpressLRS wiki…
it says “Replace x with the UART number you are using”:

For the below steps, when a UART connection is mentioned, it will be written as SERIALx. Replace x with the UART number you are using.

  1. Configure SERIALx_PROTOCOL=2, SERIALx_BAUD=460, and RSSI_TYPE=5
  2. Configure all SRx_ parameters to be 1, except for SRx_ADSB, SRx_PARAMS, SRx_RAW_CTRL that should stay 0 (otherwise yaapu will see a few sensors only and GCS might not be able to connect)
  3. Save parameters and reboot the flight controller

[source]

I think this is where my assumption comes from :wink: I will make an issue on the ExpressLRS wiki repo… Does someone knows where this is explained in the Ardupilot documentation? so I can link to it in the issue.

@geofrancis I am probably missing them all but flight mode and ground speed where coming in… while the SR1_* values where all 0. Not sure how this exactly works or where this info comes from… As far as my knowledge goes, CRSF is the serial-based wire protocol ExpressLRS is the Lora-based air protocol.
The initial goal was to setup a ground station and use my existing ExpressLRS hardware. Which I already had working. I was trying to get the sensors working on my RC.

Anyway, everyone thanks for the help!

Crsf is only used between the handset and the transmitter module when using ELRS in mavlink mode, only mavlink telemetry is transmitted from the receiver to the tx module where it is then converted.

Regular ELRS uses CFSF telemetry to the handset all the way from the flight controller so you get all the crsf data ardupilot generates not the data the ELRS Tx module is converting from mavlink data it receives.

great that it’s working now.
Yes, the ELRS documentation is wrong.
The Ardupilot documentation is here:

Confusingly the params have changed in 4.7.0.
SRX_* changed to MAVX_ *.
I have no idea where the old documentation can be found.

@twistedwings Thanks for pointing me at this. I opened an issue for this on the ardupilot_wiki repo, because the stable versions are still on v4.6.3… and the page you linked is already quite old, the last change (4months ago) does not invlolve the MAVx <> SRx conversion.

Lets get this cleared and than move on to ExpressLRS