Gurkengewuerz / mLRS

2.4 GHz & 915/868 MHz & 433 MHz/70 cm LoRa based telemetry and radio link for remote controlled vehicles

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mLRS

The goal of the mLRS project is an open source 2.4 GHz & 915/868 MHz & 433 MHz/70 cm LoRa-based high-performance long-range radio link, which provides transparent bidirectional serial connection combined with full remote control.

The 'm' in the project name alludes to 'Mavlink', as it will have features which optimizes performance for Mavlink systems. However, it always will also provide a transparent serial link and hence will be of wider use and by no means limited to Mavlink systems only. The 'LR' in the project name alludes to 'long range', which however should not be understood in terms of an absolute range, like 100 km, but - of course - as the best possible range under the given conditions. Physical laws simply say that the higher the data rate the shorter the range. So, mLRS cannot compete range-wise with systems which achieve their range by reducing data rate to the minimal, at the cost of the associated compromises. The goal of mLRS is to achieve a high range under the condition of a relatively high data rate.

Typical specs could be 'plenty' of full-resolution RC channels, with 50 Hz update rate and serial data rates of about 3-5 kBytes/s at 2.4 GHz.

Many LRS or radio links with telemetry exist, among them open source projects such as SiK radios, OpenLRS, ExpressLRS, but also befinitiv wifibroadcast based projects like OpenHD or Ruby, closed source hobbyist projects such as UltimateLRS, QczekLRS, as well as commercial systems such as DragonLink, RFD900, Dronee Zoon, Siyi, but also TBS Crossfire and alike.

However, while all these systems are truely excellent and achieve their goals, and some of them are indeed close to what the project aims at, none of them checks all points, like

  • relatively cheap
  • 2.4 GHz, 915/868 MHz, 433 MHz/70 cm
  • LoRa
  • full-duplex serial link with sufficient data rate
  • plenty full-size RC channels
  • open source
  • rich features for Mavlink systems

The mLRS project fills this gap. In addition, as another main feature, we want it to

  • integrate with MAVLink for OpenTx

as this yields the most fluid user experience.

Disclaimer

You of course use the project fully at your own risk.

Project Status

The project is work in progress, and there is still plenty of room for ideas and improvement.

However, the essential features, i.e., the RC link and the serial (MAVLink) data link, are stable and robust, and perform quite well.

The mLRS system also provides a high level of usability such as a variety of options for input/output, parameter setting via the mLRS transmitter, optimization for ArduPilot/PX4 systems, wireless connection to ground control stations like MissionPlanner or QGC, support of the Yaapu telemetry app, and it also integrates well with the MAVLink for OpenTx project.

It supports the SX1280, SX1276, SX1262 and LLCC68 Semtech chips, and thus the 2.4 GHz, 915/868 MHz and 433 MHz/70 cm frequency bands.

It provides 16 RC channels; the layout is as follows:

  • 8 channels with 11 bit resolution (CH1 - CH8), 4 of them with a higher reliability margin (CH1 - CH4)
  • 4 channels with 8 bit resolution (CH9 - CH12)
  • 4 channels with three steps (CH13 - CH16), 2 of them with a higher reliability margin (CH13, CH14)

It provides these operation modes:

  • 50 Hz Mode
    frequency bands: 2.4 GHz (SX1280 chip)
    RC channels: 8 x 11 bit + 4 x 8 bit + 4 x three-step
    uplink serial rate: 3200 Bytes/sec
    downlink serial rate: 4100 Bytes/sec
    receiver sensitivity: -105 dBm
  • 31 Hz Mode
    frequency bands: 2.4 GHz, 915/868 MHz, 433 MHz/70 cm (SX1280 and SX1262/LLCC68 chips)
    RC channels: 8 x 11 bit + 4 x 8 bit + 4 x three-step
    uplink serial rate: 2000 Bytes/sec
    downlink serial rate: 2562 Bytes/sec
    receiver sensitivity: -108 dBm
  • 19 Hz Mode
    frequency bands: 2.4 GHz, 915/868 MHz, 433 MHz/70 cm (SX1280, SX1276, SX1262/LLCC68 chips)
    RC channels: 8 x 11 bit + 4 x 8 bit + 4 x three-step
    uplink serial rate: 1207 Bytes/sec
    downlink serial rate: 1547 Bytes/sec
    receiver sensitivity: -112 dBm

Further features:

  • full diversity: mLRS transmitters and receivers which feature two Semtech Lora chips provide full diversity, for both receiving and transmitting. This really improves link quality in the far range.
  • all options selectable via parameters: There is no need to recompile the firmware for a given board or reflash the firmware in order to change an option or parameter setting.
  • the receiver parameters can be set from within the mLRS transmitter or the radio; no need to mess with the receiver in any way.
  • the transmitter and receiver parameters can be set via a Lua script, a CLI, or an OLED display.
  • bind mode for binding "unknown" receivers to a transmitter.
  • the mLRS system can be configured through the parameters for a wide range of applications and use cases. For a pictoral representation of some typical examples see mLRS Setup examples, and for more details Documentation.
  • 10 model configurations stored in the mLRS transmitter, selected by "Receiver" number in OpenTx/EdgeTx radios.
  • support of CRSF and ArduPilot Passthrough protocol; enables using the Yaapu Telemetry app on standard radios (out of the box, no need for extra dongles anymore!).
  • support for buzzer, OLED display & five-way button, serial2.
  • support of ESP32 modules for wireless connection to a ground control station.
  • optimizations for ArduPilot and PX4 systems.
  • support of plenty platforms: STM32F103, STM32G4, STM32L4, STM32WLE5, Wio-E5, E28, E22, E77, SX1280, SX1262, SX1276, LLCC68.

Community

Discussion thread at rcgroups: https://www.rcgroups.com/forums/showthread.php?4037943-mLRS-Lora-based-Mavlink-oriented-open-source-radio-link

Discord server by LELE2022: https://discord.gg/vwjzCD6ws5

Range

The range which one may expect can be estimated from the standard math; the ImmersionRc RF Link Range calculator comes in very handy here. Let's assume: power = 20 dBm (100 mW), antenna gain = 2 dBi, link margin = 12 dB (note: 12 dB link margin is conservative). Then:

50 Hz 31 Hz 19 Hz
2.4 GHz 7 km 10 km 15 km
868/915 MHz - 26 km 42 km
433 MHz/70 cm - 55 km 87 km

For the 2.4 GHz band, the available range test reports consistently exceed the above estimated ranges (e.g., 8.3 km were reported for 2.4 GHz, 50 Hz, 9 dBm (8 mW), which translates to 29 km at 100 mW). For the other frequency bands less information is available. Note that mLRS supports full diversity, which when enabled has been found to significantly improve performance at lower link budget, i.e., allow to operate at larger ranges.

Hardware

Hardware is still a problem. One might be tempted to think that the recent commercial ExpressLRS hardware should be good platforms, but this is unfortuantely not so. The ESP's they use simply do not offer the peripherals which are desired for mLRS transmitters, and STM32's were hence chosen as main platform. However, this is not a decission against ESP32, to the contrary: If anyone wants to add ESP32 support for mLRS then please join.

The code currently supports:

  • Flysky FRM303 transmitter module (2.4 GHz)
  • Frsky R9M transmitter module and R9MX and R9MM receivers (868/915 MHz)
  • SeeedStudio Wio-E5 Mini and Grove Wio-E5 boards (868/915 MHz, 433 MHz/70 cm)
  • EByte E77 MBL board (868/915 MHz, 433 MHz/70 cm)
  • several DIY boards you can find in https://github.com/olliw42/mLRS-hardware

In the 915/868 MHz range, the Frsky R9M & R9MX system provides a simple and readily available entry into mLRS. In this sense it is the best option available currently. Its big disadvantage is however that the receiver's transmission power is quite low and telemetry range thus relatively short. This can be mitigated by using the R9M transmitter module as receiver, which is supported by mLRS.

The SeeedStudio Wio-E5 boards and the EByte E77-MBL board are also readily available, and hence excellent options too to enter mLRS. The "easy-to-solder" module, which uses an Ebyte E77 module, is a simple DIY option for building a mLRS receiver (it can also be used to build a mLRS transmitter). These boards are all based on the STM32WL5E chip and thus provide all the advantages of the SX1262, like the 31 Hz mode. Their maximum power is 22 dBm, and they can be used in the 915/868 MHz and 433 MHz/70 cm frequency ranges.

In the 2.4 GHz range, the Flysky FRM303 transmitter module is a great and readily available, albeit expensive, option. mLRS supports using it as transmitter as well as receiver. Concerning receivers, the DIY options are however probably the way to go. The DIY options also offer transmitters, including the most capable mLRS transmitters available.

Don't hesitate to join the discussion thread at rcgroups or the discord channel for more details.

Firmware: Flashing

Ready-to-flash firmware can be found in the "firmware" folder. All you need to do is to flash the .hex file appropriate for your board into the device (it is not required to install the software for compiling as described in the next chapter). The mLRS transmitter can then be configured to your needs via the CLI, the mLRS Configuration Lua script, or the OLED display if available. The mLRS receiver is configured by first binding it to the transmitter, and then configuring it through the transmitter, exactly like the transmitter is configured.

Software: Installation Bits and Bops

This is a STM32CubeIDE project. I don't have much experience with this framework, and it seems it is not ideal for shared projects. This procedure should work:

Let's assume that the project should be located in the folder C:/Me/Documents/Github/mlrs.

  1. Clone and setup the project files
  • open a command line processor
  • cd into C:/Me/Documents/Github (not C:/Me/Documents/Github/mlrs !)
  • git clone https://github.com/olliw42/mLRS.git mlrs
  • cd mlrs
  • run run_setup.py. This does two steps: initializes submodules, and generates mavlink library files.

For cloning you of course can use any other tool you like, but ensure that the submodules are also retrieved (git submodule --init --recursive).

  1. STM32CubeIDE
  • download and install STM32CubeIDE
  • start STM32CubeIDE
  • in Launcher select Workspace by hitting [Browse...] button, and browse to C:/Me/Documents/Github/mlrs/mLRS. Hit [Launch] button. Note: it is not C:/Me/Documents/Github/mlrs but C:/Me/Documents/Github/mlrs/mLRS! If you proceed with the wrong path then there will be a compile error "undefined reference to main_main()"!
  • in the IDE's top bar go to File->Open Projects from File System
  • in the Importer select Import source by hitting [Directory...] button, and browse to the desired project. E.g. select C:/Me/Documents/Github/mlrs/mLRS/rx-diy-board01-f103cb. Hit [Finish] button.
  • change from Debug to Release configuration: Go to the 'hammer' icon in the top icon bar, click on the down arrow right to it, and select Release. Note: if you don't do that then there will be a compile error "undefined reference to main_main()"!
  • open the file mlrs-rx.cpp or mlrs-tx.cpp into the editor
  • compiling should work now: Go to the green 'right-pointing triangle' icon in the top icon bar and click it
  • Repeat the last five steps for each board you are interested in

The STM32CubeIDE has its weirdness, so you may have to get used to it.

In case of issues with this procedure, don't hesitate to join the discussion thread at rcgroups or the discord channel, or submit an issue in the github repository.

Dependencies

You need to have git and python3 installed.

Further Documentation

You find many more information here:

mLRS Documentation

About

2.4 GHz & 915/868 MHz & 433 MHz/70 cm LoRa based telemetry and radio link for remote controlled vehicles

License:GNU General Public License v3.0


Languages

Language:C 75.8%Language:C++ 13.0%Language:Assembly 7.1%Language:Lua 2.7%Language:Python 1.4%