Servers by jDrones

Pozyx with ArduPilot for non-GPS navigation


(rmackay9) #1

Over the past month or so a few of us have been experimenting with using the Pozyx system (based on the decawave DWM1000 chip) for non-GPS navigation.

We’ve made quite good progress and it’s just been integrated into ArduPilot master and should go out with Copter-3.5 in a few months. You can see a video of a flight using Pozyx here:

The system works by setting up 4 anchors (aka “beacons”) in a rectangle (see image below). Then a “tag” is mounted to the vehicle (see IRIS above). This tag is a pozyx sensor plus an arduino uno which runs a fairly simple sketch which tells ArduPilot’s the length of the sides of the rectangle and the vehicle’s distance to each beacon. ArduPilot’s EKF has been enhanced to consume this information and come up with a position estimate.

Some extra info:

  • the range of the sensors seems to be a bit longer than 50m.
  • there’s some indication that the system suffers from multipathing so it really needs a clear line-of-sight from the vehicle to the beacons.
  • so far we use 4 beacons. The minimum is 3, the EKF supports up to 10.
  • the hardware is quite bulky but we hope smaller hardware will be manufactured by someone eventually. There seems to be interest from several groups to do this.

For developer who want to experiement with the system, we’ve created a fairly detailed setup wiki page here.

Some credit for the work so far:

  • idea to use the DWM1000 was brought to the team by long-time ArduPilot developer Jonathan Challinger
  • strategy to use Pozyx and first GPS_INPUT implementation by the Drone Japan School members including Kitaoka-san, Matsuura-san and Murata-san.

As per usual, if you’re interested in getting involved with ArduPilot development, you can find many of us on Gitter.

Pixhawk with FAKEGPS signal
(Patrick M) #2

ive got a decawave uwb system … anybody tried putting the anchors in the air to create a constellation above the target ? I want to try this in mountainous terrain where gps is sketchy w/ poor gdop pdop + severe multipath /shadowing fading for real time centimeter positioning . I don’t dgps can help with the occlusion … I saw someone offering on kickstarter a cheap gps survey system

(rmackay9) #3

We don’t yet allow combining GPS with Beacon data but Paul will do that next.
There’s also more improvements that might be necessary to tell the vehicle where the beacons are. At the moment, the Pozyx/Arduino on the vehicle figures out where the beacons are at start-up. If the beacons are not visible immediately (i.e. they’re 500m away up the hill), then we would need to make some changes to the arduino code to handle that.

(Patrick M) #4

thanks mr MacKay! uwb rtls might be good for drone racing since the tags are small in size +not very expensive to integrate (see this guys solution or ) and can achieve cm location .in rt … longines is using this in horse racing + will field a version for ski racing next year … however i cant afford dozens of anchors to cover a mountain slope this is why I thought of the uwb rtls mr uav constellation. in the end I’m not sure if pattern matching with imagery would result in an easier solution, since I am just looking at relative position to gates on a course… one could use visible/eo/lidar/flash lidar for precise position like slam in the google car. have you come across any good 3 d mapping s/w for stitching images in real time with elevation data ? I see Microsoft has a video stitching program to create panoramic pictures …

(Ulix Dev) #5

Hello rmackay9
I’m working on a pozyx system that will supply the measured coords to an ardupilot to steer a rover.
I’m facing a big problem with the algorithm that computes the coords.
I’m using a rectangular layout like the one you suggest but with a different ordering of IDs - does it really matter?
Moreover, I set the 4 anchors at different heights from the floor.
The results are: oscillating values for z coord from positive to negative (or vice versa) and completely wrong in value and x/y values sometimes centered on the expected values and sometimes on very different ones?
Did you ever tackle this issue?

Thank you in advance


Help requested for POZYX guided rover
(rmackay9) #6


For now, I’m afraid you need to keep the beacons placed in a rectangle using the order as specified on the wiki. It really does matter.
Unless you modify the arduino sketch, the beacons all need to be at the same height and ideally 1.2m off the ground. If you’re happy to modify the arduino sketch it should be possible to set different altitudes for each beacon but I haven’t tested.
thanks for giving it a try!

(JoshW) #7

Hey rmackay. Great post, thanks for pushing things forward with Pozyx. I’m eager to see how it develops.

Question: You mention some of your progress has been integrated into Ardupilot master, and should go out wth Copter-3.5. How does this affect ArduRover? Will Pozyx functionality also be available for rovers soon?


(rmackay9) #8

It’s actually quite easy to integrate with Rovers (and Plane, Trackers and Subs) as well but I haven’t done it. I’m sure it’ll happen eventually I just can’t promise when. Ideally Grant or Khancyr would take this on… but if they don’t get to it then I will eventually.

(Ulix Dev) #9

@rmackay9 Thank you so much rmackay9 I’ll try the new layout

bye bye

(wifiguru10) #10

Hey rmackay, i’ve got a of these setup in my lab and outdoor. If you need help testing i’d be more than happy to help test.

(rmackay9) #11


The code is pretty much complete now. It’s included in Copter-3.5 which is in beta testing and is already quite stable.
It can be loaded onto any compatible flight controller using MP’s Install Firmware screen’s “Beta Firmware” link. Here’s a wiki page on the setup:

(Debupt) #12

Very Impressive work.
Recently I just want to use fake gps signal to make the drone fix indoors in Loiter mode with Pixhawk. ( I programed to convert the UWB xyz position info to NMEA protocol and pluged in gps port, the altitude is really terrible, so I use lidar instead )

Now the drone can fix in one position, but it still drifts, not that still. The error on mission planner like Error pos horiz variance often happens. The test log link :

BTW, because I don’t buy the Pozyx module. So I don’t know the format of the data which sent to pixhawk. So I cannot use your method. Could you please give me a short message of that data so that I could program to send one to pixhawk. Also, my module doesn’t have mpu6050 sensor, is this may have influence for positioning? But the module is really small, just 20mm*16mm.

(Wuhaixiang) #13

hello ,I have seen two pictures in the web to place the anchor. One is this
and the other one is this

which one is right to place ?
and my UWB calculate the pos is right but pixhawk EKF2 get the pos not right?
The message send POS_bean the pos is right and the pos calculated by pixhawk is POS_APM looks like not right

and I place my anchor in this way in NED frame
can you help me to get the right positon?

(RoboBill) #14

I’m experimenting with a POZYX guided rover. I’ve set up the anchors per the “N” pattern. But my anchors are not in a perfect square and the Y axis is -55 deg west from true north. The end result is my mission planner shows the path to be rotated approximately 90 deg to the east.

Any help would be appreciated



(Daniel Clemente) #15

Hi all,

I am trying to localize where do you transform in the Ardupilot Library, the coordinates sent by Pozyx ( in mm) to lat lon. I have implement your code and I am retrieving the coordinates of the quadcopter in the latlon system ( and I’d like to undo the transformation you made.

Thank you very much