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).
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?
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
This is really useful thank you!
I have a few questions:
What precision were you reliably able to maintain for each landing?
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?
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.
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?