Pozyx with ArduPilot for non-GPS navigation

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.

2 Likes

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 https://www.kickstarter.com/projects/141973618/one-button-survey-obs/

Patrick,
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.

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 https://www.youtube.com/user/wayneholder or https://hackaday.io/project/7183/logs ) 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 …

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

ulix

Ulix,

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!

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?

Thanks!

JoshW,
Thanks!
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.

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

bye bye
ulix

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.

1 Like

@wifiguru10,

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: http://ardupilot.org/copter/docs/common-pozyx.html

@rmackay9
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 :https://drive.google.com/open?id=0B1XJyGUjIacXdW9OdWtMb21UOHc

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.

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?

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

Thanks

RoboBill

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 (GLOBAL_POSITION_INT.data) and I’d like to undo the transformation you made.

Thank you very much

After several months of trying to make Marvelminds work outside in the wind and with anchors almost 30 meters apart, I’ve returned to POZYX and found the answers to some questions here and elsewhere.

To @wuhaixiang … the 2nd one… with 1156 as the origin, 256B as the X axis and 3325 as the Y axis. The YAW is measured from True North to the X axis.

To @guglie With thanks to my computer programming son, who explained that computer programming coordinates are sometimes different from Cartesian coordinates. In this case X is to the right and Y is DOWN not up.

To @nickthequik My initial update rate is around 11.5 Hz. I have not looked at it when the sketch slows the readings down after running for a minute. I hope to eventually remove that READ slow down from the sketch.

To @rmackay9 The loiter sketch provided works fine except for the beacon TX power configuration function. I’ve never had any luck with that one. But now that POZYX has released their new web app, I can manually bump up the TX power on all my anchors. This app also gets me the all the anchor to anchor distances I need.

But still… I’m using the latest rover beta and while my Pixhawk can read the POZYX, my HUD says no GPS. Is there some parameter I still need to adjust? I tried connecting it directly to the GPS port but got no GPS localization at all.

Thanks

RoboBill

1 Like

To @RoboBill - thanks for the summary!
You mention bumping up the output power of the beacons and that you can reach the anchor distances you need.
What is the reach you were able to realize in an outdoor line of sight environment?
And would you know, if by adding anchors, say by going from 4 anchors to 6 or 8, the effective area covered can be extended or even doubled?
Would love to get some more insights in order to better evaluate if it’s worth pursuing this route further.
Thanks, camti

My outside test area is 120’ x 60’. It seems to be OK with 4 anchors at maximum power albeit I’ve not yet determined the minimum Tx power required.

I’ve not experimented with larger areas.

RoboBill

Hi, I have same problem as you do, and I assume that the reason of the drift is EKF.

Hi,

I am trying to use POZYX system instead of GPS in Ardupilot, and there exists some issues about the EKF estimation. There are oscillations in the EKF output of NE position, so GPS glitch prearm error always occurs, although the NE position of the POZYX system is quite robust( ± 10cm).
The POZYX system D value(altitude) is not great(about 50cm errors), so I set the EKF2 alt source as rangefinder. I followed everything from the Ardupilot wiki instructions, and I can tell that my setups are provided with line-of-sight environment without any errors in parameter settings.
(Still can’t figure out the z estimation failure, but setting main sensor as rangefinder should fix the problem right?). I really cannot understand this because the provided position is much more robust than the GPS provided positions. Theoretically, beacon based positioning should result better loiter performances, but it seems not.
Is there anybody who have progress with the range beacons?
Or does anyone know more info about additional EKF2 parameter settings needed for the correct estimation of EKF2?