Precision Landing with High Precision RTK GPS

Hi, I’m working on a project where I need to get a drone to land in a VERY tight spot, so a precision of ±5 could work in the worst case, but i’m aiming for ± 2cm.

I have a highly accurate GPS module and an excellent RTK system where Mission Planner reports 1cm Horizontal GNSS accuracy.

When testing, I find the GNSS coordinates never drift beyond 3cm while stationary, often this figure is ±2cm.

Currently, when flying, I can only land within 30 - 50cm of the target and I’m not sure why. When landing, I can see the drone reported GNSS coordinates around 30 - 50cm away from the Home position, however the drone doesn’t attempt to move closer once it’s reached this proximity to Home and seems to think this is precise enough.

My question is, am I missing something here?
Is there an ArduCopter parameter that I might need to change to make the drone continue adjusting it’s LAT and LON until it reaches a desired landing precision?

Is there a setting in Mission Planner that needs to be changed to enable this?

Any advice is much appreciated, so thanks for reading.

For RTK, do you have your own RTK base, or are you connecting to a NTRIP server to receive the RTK corrections?

If you’re using your own RTK base, that might be where the problem is coming from. If you setup your base before each flight session, you’ll only have a high relative precision, but not a high absolute precision. That means that your drone can keep its current position very well, or you can tell it to move 5 meters with a precision of 1-2cm. But if you tell it to land at Lat = xx.xxxxx degrees and Lon = xx.xxxxx degrees, then it is highly likely that you’ll land next to that position. That’s because your RTK base station does not know its absolute position with high precision.

It takes 24 hours for the u-blox F9P to know its absolute position with a precision of 1cm. That means you have to leave your RTK base in survey-in mode for 24 hours.

However, if your RTK base has a precision of 1 meter, if you takeoff from your desired landing location, fly around and then Return-To-Home (using the home point created by Ardupilot the moment it arms), you should land exactly back at your takeoff point.

If you want to specify the landing zone with a latitude and longitude, you must first measure the position of that landing zone. Either you:

  • wait for 24 hours for your RTK base to have a 1 cm precision, then measure the landing zone position with your drone (place your drone on the landing zone (while having a RTK Fix), then look at the log). If you leave your RTK base for weeks/months, then that measured landing position will remain valid.
  • setup your RTK base station every flight session with a precision of 1-2 meters, but you need to measure the landing zone position every time you set it up (by placing your drone on the landing zone, then looking at the log).

If you’re connecting to an NTRIP server, then you should measure the landing zone position with your drone (while the GPS has a RTK fix).

1 Like

I’m currently using an NTRIP correction service, but that’s very interesting to know as I was planning on drawing comparisons between NTRIP and standard RTK so thank’s very much!

Currently, I think I am measuring the launch and landing positions using the drone (unless i’m doing this incorrectly), however I still don’t see landing precision of less than 30cm.

I can see as the drone comes in for landing that the reported coordinates are about 30 - 50 cm off the landing position.

My assumption is that the drone know’s it’s 30 - 50 cm away from the landing position, but thinks this is good enough due to a parameter i’m unaware of in the firmware (ie. the way point radius or something similar).
Am I thinking along the right tracks?

You can test that by taking off and landing on a pin and comparing measured deviation and actual deviation.

Precision landing needs both a good position estimate (RTK does a good job at this) and a methodical PID tuning.

You did take care of the first. What steps have you taken to take care of the second?

1 Like

This is what I have been doing so far, but thank you for your interest. I’m sure I’m missing something so all advice is appreciated :slightly_smiling_face:

I’m currently using the stock PID so you might be on to something here, thanks for the link to the PID tuning tool!
I’ve been talking to some other engineers and they recommend increasing the control loop rate to around 100 Hz. Hopefully the H743 chip running at 480 MHz can handle that. Only issue is i’m not sure how to change this yet.
I’m sure Dr Google can help me there though

The control loop runs at 400Hz by default.How big is your copter?

Only copter < 1Kg benefit from faster loop rates.

The tool that I posted does that for you, no need to use google. Learn and use the tool.

2 Likes

Can you share a log file, where the drone lands off-target?

And how far off it actually was in that particular case including direction it was off in.

Yes, here’s a link to a flight log, Wireshark packet dump between Mission Planner and the Drone, and a video of the flight.

https://drive.google.com/drive/folders/1sj4MV3xQKw1h8ZeVIqBKTseYE3l6Kdvy?usp=sharing

This hop test landed about 20cm from the launch site.

I have successfully done precision landings using RTK.
Just a few pointers that might help you:

  1. Position the UA in the heading and location where you want to land. It really helps, take the Lat/Long from there.
  2. If you change the heading, even though you might have set the offsets properly, there is still a chance the you might be off.
  3. Tuning is very important, since you are using stock PIDs, it will be better to follow the tuning guidelines.
  4. Make sure you have “RTK Fixed” when capturing coordinates or before TO.
  5. If you do not have the accurate location of the base, use the UA to get the precise coordinates every time you setup the base to a new location.
1 Like

This is really useful thank you!
I have a few questions:

  1. What precision were you reliably able to maintain for each landing?

  2. When landing, the drone looks VERY stable, so it does look like the PID is working well, what could I improve when it’s already stable?

  3. Are there any python tutorials in automatically setting the Launch location and heading for the drone or do you need to do this in Mission Planner?

I was thinking of writing a Python script that could read the drones current position and nudge it in the right direction using MAVLink commands for the final approach.
So far it gets to within 30cm and seems to think it’s good enough.

Hi Jake,

  1. Always under 5-10cm.
  2. Try reducing the WP_RADIUS parameter. You cannot make it too small otherwise you will have issue during flight testing, but test. Also, is your GPS and IMU offsets correct?
  3. Can do through mission planner.

@Jake1999 did you follow the instructions I posted here to configure and tune the vehicle.

If not, there is no wonder that it drifts 30cm.

Thiel explains the “democratization” of precision GNSS and how its X20 GNSS platform addresses applications that require centimeter-level position accuracy in challenging environments