Tutorials/guides on how to setup corrections over USB (M+)

My and other teams’ robots have struggled with shamefully poor wifi connection/correction on many reach M+ units for months now. We are all actively looking for a better/more stable way.

Unfortunately, there are literally no instructions, guides, tutorials, or examples on how to do that anywhere on the internet. The only official note is : Yes, you can, but I won’t tell you howl

We are trying to accomplish a reliable correction be it correction over serial or by ditching the wifi onboard and using ethernet over USB (if possible?)

We are using 2 Reach M+ devices, Reach RS2 with TCP correction, and Nvidia jetson computer. There is a wifi adapter on the robot.

Looking forward to all the examples, tutorials, and thought on this :slightly_smiling_face:

Hi @Aaus,

May I ask you to elaborate on which step of establishing a TCP connection you face any issues? It will help me to check what might be wrong.

If you’d like to work with Serial, you can input and output corrections using the S1 port for UART or Micro-USB for USB connection. You can check Reach M+ pinout in this sketch.

The baud rate shows how many bits can be transferred in a communication channel per second. Some devices like external radios usually require a particular baud rate. If you connect Reach M+ to PC, you may choose any supported baud rate that suits your project’s needs.

It should be possible to work with Ethernet using an Ethernet adapter. We have users that worked fine with Reach M+ and the following adapters:

  • TP-Link UE200

  • Asix AX88772B

Hi!

We just figured out how to send corrections over USB. It turns out to be much, much more simple than first anticipated. Something like this worked for us and poor wifi reception is no longer an issue:

import socket
import serial

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

ip=socket.gethostbyname("x.x.x.x")  # Base address
port=8002
address=(ip,port)

client.connect(address)

gps_device = serial.Serial('/dev/ttyACM1', timeout=1, baudrate=115200)
gps_device.flushInput()
gps_device.flushOutput()


while True:
    gps_device.flushOutput()

    correction_data = client.recv(115200)

    gps_device.write(correction_data)

It’s a real shame an example like this isn’t on the Emlid docs. Would have spared multiple headaches and hours wasted.

Hi @Aaus,

Thank you for sharing your solution.

Serial ports are usually used for radio connection that undertakes the job of transferring corrections. Writing a custom script for such a purpose is not an easy task. Also, there is no single solution that approaches either project. That’s why we don’t have such examples in the docs. However, we’ll think about how we can improve our docs in the future.

This topic was automatically closed 100 days after the last reply. New replies are no longer allowed.