I would like to share my recent project about indoor positioning system based on UWB modules. I’m really appreciated about what Randy had done Pozyx with ArduPilot for non-GPS navigation. I would like to have a try with other methods.
The original idea is based on ArduPilot which can set to Loiter mode in an open environment, the natural idea is making a Fake GPS signal to cheat the drone as if it flies outdoors.
There are two ways for making a Fake GPS signal:
a. NMEA0183, this is a common GPS protocol which used for transporting information from GNSS receiver to other devices. The information contains latitude, longitude, altitude, satellite numbers, position fix, etc. As for ArduCopter firmware, it just uses GGA, RMC, VTG messages for getting enough information to locate position outdoors.
b. Mavlink GPS_INPUT(#232) command, this is a GPS sensor input message which is a raw sensor value.
I test these two ways and find that GPS_INPUT command is much better. My drone is not right here, so I may not supply some datas to indicate my judgement, really sorry.
Here is some diagrams to introduce that I have done.
A QT GroundStation shows the drone position and sends Waypoint command
- Diagram shows the process to get GPS_INPUT message from UWB module
- Setting position of four anchors, ZYX refers to really distance between two anchors
- how to choose the original latitude and longitude. (It is based on degree precision, as UWB module has 15-20cm error, we can get from figure that 11 degrees is a better choice)
ps. I refer the Hendrik’s way for changing the firmware code of ArduCopter