Passthrough telemetry over CRSF (crossfire)

this is a follow up to @james_pattison great summary

There are some differences between CRSF and ELRS.
ArduPilot 4.1 supports official CRSF and as long as ELRS behaves the same as CRSF it will work.
Current ELRS stable version is 1.x.
With ELRS 1.x RC works fine with SERIAL_PROTOCOL 23 just beware of the way ELRS handles RC channels since it uses compression to save bandwidth.
Telemetry is another story, right now ELRS 1.x only supports a small subset of all CRSF telemetry frames:

  • GPS
  • BATTERY
  • ATTITUDE
  • FLIGHT_MODE

OpenTX will be able to discover them and use them as standard sensors.

For this project (passthrough over CRSF) I added custom telemetry frames to the CRSF protocol and shared the specs with TBS who agreed to include it in their firmware. ELRS 1.x does not support this custom extension and my scripts will not work with it!

Now the good news.

I’m collaborating with the ELRS devs to add official ArduPilot support to ELRS 2.x. We agreed on adding dedicated queues for our custom frames which paired with some tuning in the ArduPilot code allowed to have passthrough over ELRS 2.x even on a 50:2 link which is not bad at all considering that the bandwidth is only 125B/s. It’s not perfect, we drop a status text every once in a while and there’s some latency on the artificial horizon but IMO is plain good for a long range setup.
Right now this requires a custom ELRS branch, a custom ArduPilot branch and a custom version of my scripts.
ELRS 2.x will also support device ping frames (not yet in the ELRS 2.x custom branch) allowing ELRS auto detection and auto configuration of the ArduPilot custom ELRS code.

cheers,
Alex

3 Likes

Not sure what I am missing. Running RadiomasterTX16S w/ OpenTX (v2.3.9) with Full TBS Crossfire connected to Nano Rx. Flight Controller is Matek F765 Wing w/ Arduplane v4.1.2.
I know the telemetry is working between the transmitter and receiver, as I can browse the Telemetry screen (on the radio) and I see all the sensors and their data.
However, I don’t see any of the output on the Yapuu screen. Oddly, after about 10 minutes the GPS coordinates show up - but nothing else.
Any ideas?

Hi, double check you enabled passthrough on Ardupilot by setting RC_OPTIONS += 256 and CRSF in my script by enabling it in the config menu

1 Like

Great stuff. Does the MatekF765-Wing image work for the newer -WSE? the -Wing is currently EOL.

Here:
Matek F765-WSE
And here:
Matek F765-WSE

Good news: current ELRS master branch now includes support for ArduPilot.

For testing you need:

cheers,

Alex

6 Likes

Hello!
Nice news!

But what do you mean “support”?

I was flying with “non-support” versions and everything was working fine. (Ardupilot + elrs + yaapu scrip)

:slight_smile:

Hi, good question :slight_smile:

ELRS support means being able to detect ELRS vs CRSF and tune telemetry for high and low data rates. Just as an example a 100Hz air rate with 1:64 telemetry ratio was wrongly detected as fast telemetry whereas the patched code would detect it as a slow rate.
With ELRS “support” 50:2 (50Hz air rate and 1:2 telemetry ratio) is quite ok delivering both status text messages and telemetry.

1 Like

Hello,

what parameters would we need to set in this to run yaapu? would it be the same as in your post here?; >Passthrough telemetry over CRSF (crossfire)

@yaapu, I’ve just tried setting up the 1.9.6dev version of the script you posted here for EdgeTX 2.5. It doesn’t seem to be working with CRSF Micro TXv2. I’ve only got the one quad on CRSF and it was working before on OpenTX. The radio is getting sensor data as you can see in the photo.

If you think this is a bug or error, let me know what data I can get for you.

Thanks!


From the screenshot you have not enabled CRSF support in the widget config menu

is there any thing new on 1.9.6 for open tx=horus 10s

Well I’m a little embarrassed. That was it. Thanks for the easy fix!

image1.jpeg

2 Likes

Hi Martin, 1.9.6 has EdgeTX support and ELRS compatibility fixes

1 Like

I have recently been working to get the kinks worked-out with wifi connection/telemetry from the Crossfire TX to a device (laptop/tablet/phone). Finally, it looks like there is a stable, working solution. In my tests, I noticed I had to set the crossfire nano rx to output mavlink and on my matek f405 I had to use serial 1, presumably due to the dma issue discussed in this thread. As a result, I am unable to use yaapu telemetry over crossfire and have the yaapu script telemetry working now. I guess I can’t have the best of both worlds.

Two questions:

  1. Which FCs have dma on multiple UARTs? I have a mix of F405 Wings and pixhawk cubes in my fleet.

  2. If I were to enable CRSF and Mavlink on the nano RX and TX, would there be a conflict/instability since the FC would be receiving commands from two different protocols?

Did you ever get yappu working with the kakute F7? The script works just fine on all my other systems, but the kakute F7. I’ve tried all serial ports. I’m now running 4.2-dev. and btw I’m using tracer.

I think there is something missing in the ardupilot firmware for the kakute F7 . But I don’t have the skill set to investigate that. These are only 3-4 sensors showing up in the Telemetry list on the radio, aside from their normal Tracer sensors. And those sensors don’t update. I understand yappu doesn’t need sensors but it’s a sign that ardupilot is not communicating over crsf

Hi, you need to use the custom build server and manually enable CRSF and all other features that you need, note that the build can fail if you enable too much and exceed the KakuteF7 flash size

please note that the current version of the build server only supports building latest master

I am using the custom build with crsf, crsf text turned on.

Btw I also have msp osd turned on, which does work with my dji hd system. I also tried turning on as many sensors as I could. This is on a 5” quad. “Copter” build.

I did just rebuild the custom kakute F7 code maybe you could have a quick look at the log?

Does regular CRSF work? Are you able to discover standard CRSF sensors?

…and

  • did you enable passthrough on ArduPilot by setting RC_OPTIONS = current_value + 256
  • did you enable CRSF support in my script/widget?
  • are you using version 1.9.5 or 1.9.6 of my scripts/widgets?