ExpressLRS / CRSF laggy

Tried to use Express LRS 900Mhz and found weird lag.
It is noticeable on this video


In the video I configured RC IN to directly passthrough to servo out. The ELRS is configured for 40Hz update rate. I.e. the delay should be 1/40 sec. that should not be noticeable. But in fact is feels like 1/3 second delay between RC Stick movement and servo reaction.

Asked in ELSR discord chat and found no issues with Radio/module setup.

in logs it looks like that (though I’m not sure what is RCIL log rate):

Is there any way troubleshoot CRSF input?
Anyone using 900mhz ELRS on Arducopter 4.1?

Just out of curiosity – are you using one of the four primary full-resolution channels that are updated on each packet, or an auxiliary channel, whose value is submitted once in few packets in a round-robin fashion? (Check the description of HYBRID_CHANNELS_8 at the official website).

Shorter - is 40 Hz the packet rate, or you have already compensated for hybrid switches in your speech?

I’m configured for hybrid switches, but yes here I’m using channel #3 that should be in full resolution. Also I was told by ELRS support that values for channels 1-4 are passed in each radio frame. So I’m expecting 40 Hz update rate.

Sorry, I have missed the channel number in the picture. Then you shall indeed have the full frequency for these updates.

Next blind guess - could it be some RC input dampening? Have you experienced a better response with a different receiver and the rest unchanged?

(The ELRS I have is 2.4 GHz, and it works instantly, hence my guesses are blind…)

EDIT: I should have read your post better, you do passthrough, hence no other ArduPilot config options shall affect you.

Next few guesses, this time maybe not so dumb:

  • Do you have ADC filter enabled in your radio? Everyone recommends switching it off for smoother response.
  • Which kind of UART do you use? Ardupilot complains about non-DMA ports used for CRSF, and in some setups this may indeed be harmful.
  • Do you have inverted/non-inverted RX and TX? For common 2.4 hardware, not having that right just stops everything, but it might be different for 900 (aka works but at reduced speed). Pay attention that the UART may be (surprisingly) pre-inverted, so you shall un-invert it through the config (this has hit me in the very beginning).

There are debug flags in the CRSF protocol and telemetry handlers - not sure whether that will help you.

  • I believe I did tried with disabled ADC, but I will doublecheck that
  • Tried UART and USART - no difference. Now I think these two were non-DMA enabled. That’s a good idea to try DMA enabled one. @andyp1per could you please help here what would the best option? USART1 or UART7 or maybe USART6 with ALT config?
  • It’s F7 based MatekF765, but I didn’t use inversion. Yes I believe it will either work or don’t work at all.

@andyp1per I never tried to use debug output, but I can print some debug info into OSD. Maybe I will find some counter re missed or corrupted frames, or frame rate etc. BTW there is a CRSF v3 implementation in master, but not in Copter 4.1. Though I tried master build - there was no difference.

On the Wing only USART1 has full DMA

To see debug output use mavproxy with USB

CRSFv3 will onl kick in if you have the latest RX firmware and turn your TX on first.

2 Likes

So I tried on USART1, and it is hard to say if it really better or it’s only autosuggestion. I think it is slightly smoother now at 40 Hz. And at 100 Hz it feels almost like FrSky. On 200 Hz it is good.

Did you ever properly get to the bottom of this? I’ve recently upgraded my quad to use ELRS and it is reacting a bit…drunk. The inputs appear very ‘steppy’ and laggy like you described.

I tried upping packet rate to 250Hz and it made no difference at all.

I didn’t played with servos on ELRS+Ardupilot setup since than. So cannot say if it resolved for low refresh rate and servos.
From the other hand I have a FC-less plane on ELRS and the reaction looks good there. I don’t think I tried low rates, but 200Hz definitely good. This is on ELRS v2.2 / 915Mhz.
Also I have a copter with same ELRS setup, again I feel no issues with control.

I was able to work out my drunk drone in the end. The rx was wired into a UART that is only for certain types of receiver. Long story short and lots of experimentation later, I wired the rx into another UART and reconfigured it within Ardupilot. Now it reacts very nicely.

1 Like

I have the same kind of problem with my matek F765 wse and happymodel 2.4 elrs. I have connected the tx and rx channels of the receiver to rx6 e tx6 of matek.
Then as reported in expresslrs site under ardupilot setup, I have changed the Serial6_protocol = 23 , Serial6_baudrate= 115 an RC_OPTIONS to supprrss crsf mode. But it is still laggy.
How have you solved ?
Thank you very much in advance
Alberto

On the MatekF765 Wing only SERIAL1 has full DMA

Thank you for the information. What does full DMA mean ?
I’m coming from an old APM 2.6 with 3.2 ardupilot where things were a little bit easier.
I soldered tx and rx of the receiver to RX6 and TX6 as shown in the instruction for crsf receiver.
So if have to change the values I wrote in the previous post for the serial1 instead of serial6 correct ?
I though it was serial6 because they are rx and tx 6.
Thank you very much in advance

Actually sorry - I mean SERIAL2 - if this is the board you have http://www.mateksys.com/?portfolio=f765-wing#tab-id-5 - then you need to solder to TX1/RX1 and configure SERIAL2

No I have the wse version.
https://www.mateksys.com/?portfolio=f765-wse
I soldered the pin to rx6 e tx6 because I followed the instruction for crsf receiver.

Do I have to use tx1 rx1 ?

Yes same deal - the firmware is almost identical

Thank you. I have connected rx and tx of receiver to tx1 and rx1 and changed serial2_protocol to 23 but now I don’t have any feedback from the radio, indeed if I go to radio calibration and I move the sticks, nothing happens.
Have I done something wrong ?
Thank you very much in advance

Make sure you don’t have SERIALx_PROTOCOL set to 23 in two places