One of the coolest new features in Betaflight Version 2025.12 would probably be GPS Position Hold and Altitude Hold. Flip a switch and your FPV drone can hover in place hands-off—extremely useful for emergency situations, as well as for cinematic and long-range flying.
Imagine someone approaches you while you’re flying: you can now stop instantly to talk to them. Or if you feel tired mid-flight, you can take your goggles off and grab a sip of water before continuing. It’s an amazing feature, but it requires proper setup and should be used with caution. In this tutorial, I’ll show you how to set it up and share what I’ve learned from testing it.
Before setting up Position Hold, I strongly recommend setting up GPS Rescue Mode as well. I have a dedicated tutorial here: https://oscarliang.com/setup-gps-rescue-mode-betaflight/
Table of Contents
Demo Footage
Check out some footage how well position hold works in Betaflight:
Official Documentation
I’ll try to keep this guide concise, but you should also check out the official documentation written by the Betaflight developers: https://www.betaflight.com/docs/wiki/guides/current/Position-Hold-2025-12
Hardware Required
For Altitude Hold and Position Hold to work, all you need is a GPS module (barometer and magnetometer are optional).
Many flight controllers these days also include a barometer. If yours doesn’t, that’s not end of the world—Position Hold will still work, because GPS also provides altitude data. However, a barometer is usually more accurate and respond more quickly than GPS modules for altitude estimation by measuring air pressure, resulting in more precise altitude control and more reliable landings.
And remember, if you are applying conformal coating for water resistance, avoid coating the barometer, as this can cause incorrect altitude readings.
GPS Recommendations
See my GPS testing here: https://oscarliang.com/gps-review/
Top Performer: GEPRC M1025Q (With Compass)
- AliExpress: https://s.click.aliexpress.com/e/_DCihHmP
- GetFPV: https://oscarliang.com/product-zixk
Top Performer: HGLRC M100 5883 (With Compass)
- AliExpress: https://s.click.aliexpress.com/e/_DlLhgFd
- GetFPV: https://oscarliang.com/product-bf3p
- RDQ: https://oscarliang.com/product-0yby
Smallest Worth Having: GOKU GM10 Nano V3 (With Compass)
- AliExpress: https://s.click.aliexpress.com/e/_DEqdlNV
- Flywoo: https://oscarliang.com/product-lfo7
- GetFPV: https://oscarliang.com/product-tort
- RDQ: https://oscarliang.com/product-plki
Smallest Worth Having: FlyFishRC M10 Mini
- AliExpress: https://s.click.aliexpress.com/e/_DkCU7qr
Smallest Worth Having: HGLRC M100 Mini
- GetFPV: https://oscarliang.com/product-knfl
- RDQ: https://oscarliang.com/product-6zvg
- AliExpress: https://s.click.aliexpress.com/e/_DCXKBFj
Do You Really Need a Magnetometer?
Some GPS modules come with a magnetometer (also known as a compass). While it can improve position hold accuracy, it’s not mandatory.
I tested Position Hold both with and without a compass, and the difference in performance wasn’t as dramatic as I initially expected.
The main advantage of having a compass is that you can activate Position Hold immediately after takeoff, and it generally holds heading more accurately throughout the whole flight.
Without a compass, you cannot activate Position Hold right away—you need to fly in a straight line for a few seconds first, otherwise you’ll get a “Position Hold Fail” error. This is because Betaflight needs forward motion to estimate the heading direction. It also uses the gyro to track heading. Since gyros can drift over time, heading accuracy can slowly degrade, causing the drone to drift.
That said, in my testing, the quad held position and heading surprisingly well for almost 8 minutes even without a compass. Realistically, that’s more than enough for most people, as it’s longer than a typical battery will last anyway.
Setting up and calibrating a compass is not easy, to say the least. If it’s done incorrectly, it can actually make Position Hold less reliable. There’s also additional maintenance involved—you ideally need to recalibrate the compass when flying in a different location to get the most accurate readings.
So yes, it’s a fair amount of work. If you can get away without a compass, I probably wouldn’t bother. However, if you plan to use Position Hold regularly and want the best possible performance, then a compass can definitely be beneficial.
Here is a step-by-step tutorial on how to setup and calibrate a magnetometer: https://oscarliang.com/setup-calibrate-compass-betaflight/
Where to Mount GPS
You should place the GPS as far away as possible from the following sources of interference:
- VTX antennas
- ESC, motors, and motor wires
- Power cables (e.g. XT60)
- Action cameras (such as a GoPro)
Good locations for mounting a GPS module include:
- Above the FPV camera
- At the rear of the drone (as long as it’s not too close to the VTX antennas)
- On the battery strap
How to Connect GPS to FC
Connecting a GPS module to an FC is fairly straightforward. Simply connect it to an available UART on the FC (TX to RX, RX to TX), and power it with 5V. If you have a compass, you also need to connect the i2c port (SDA and SCL wires):
- GPS RX → FC TX
- GPS TX → FC RX
- GPS 5V → FC 5V
- GPS GND → FC GND
- GPS SDA → FC SDA (if the GPS has a compass)
- GPS SCL → FC SCL (if the GPS has a compass)
Reminder: Avoid using SoftSerial for GPS connections. SoftSerial is limited to a 19200 baud rate, which is too slow and can compromise GPS reliability—especially for features like Rescue Mode and Position Hold. Always use a hardware UART for the most stable and reliable performance.
Update Betaflight
Flash Betaflight to version 2025.12 or newer.
Important: To flash and configure the latest firmware, you must use the Betaflight web app, not the standalone desktop application:
https://app.betaflight.com/
When selecting build options, make sure the following features are enabled:
- Altitude Hold
- Position Hold
- GPS
- Magnetometer (if you are using a compass)
Not sure how to flash Betaflight? Check out this guide: https://oscarliang.com/flash-update-betaflight/
Betaflight Setup
Ports Tab
Enable GPS on the UART to which the GPS module is connected.
Configuration Tab
Enable the following options:
- Accelerometer (MUST be enabled)
- Barometer (if your have one)
- Magnetometer (if you have one)
If you are not using a magnetometer, enter the following command in the CLI:
set pos_hold_without_mag = ON
save
GPS Tab
These are my settings for GPS module.
Modes Tab
It’s recommended to use Altitude Hold and Position Hold together, so I assign them to the same switch.
- Altitude Hold: ALTHOLD
- Position Hold: POS HOLD
I use a 3-position switch:
- Position 1: Both modes OFF
- Position 2: Altitude Hold ON
- Position 3: Altitude Hold + Position Hold ON
This setup allows you to test or use Altitude Hold independently if needed.
OSD Tab
Enable “Fly Mode” so you can clearly see which mode is active.
The “Home Direction” arrow is also very useful for validating heading—especially if you’re flying without a compass.
Hover Throttle
Finally, go to the CLI tab, and set the hover throttle value (this is the same value used for GPS Rescue mode btw):
set ap_hover_throttle = 1275
save
Replace 1275 with your own hover throttle value based on testing. You might need to fine tune it a few times, not be exactly the same as the value you see in OSD.
Accelerometer Calibration
Just like Rescue Mode, both Position Hold and Altitude Hold rely on Angle Mode, which uses the accelerometer. Therefore, you should calibrate the accelerometer before using these modes to minimize drifting.
Place your quad on a level surface, then go to the Setup tab and click Calibrate Accelerometer.
To test Angle Mode, try hovering the drone and see if it self-levels as expected. Keep in mind that Angle Mode uses only the accelerometer and gyro, so it won’t hold position perfectly like a DJI drone. That’s exactly why we’re setting up Position Hold.
A small amount of drift caused by sensor error, weight distribution, or wind is normal. You can minimize this by trimming the accelerometer using stick commands after landing, trim in the opposite direction of the drift, for instance:
- If the drone drifts left, use Trim ACC Right
- If it drifts backward, use Trim ACC Forward
It’s unlikely you’ll eliminate drift completely. The goal is to minimize it—as long as the drift isn’t excessive, it should be fine.
Magnetometer Calibration
You can skip this section if you are not using a magnetometer.
If you are using one, here’s the tutorial: https://oscarliang.com/setup-calibrate-compass-betaflight/
How to Use Altitude Hold
Now we’re ready to try these flight modes.
Altitude Hold can be activated independently of Position Hold.
Once activated, Altitude Hold behaves similarly to Angle Mode (self-leveling), but with automatic throttle control. When your throttle stick is centered, the drone will attempt to maintain a fixed altitude. You can also lower the throttle stick all the way to 0%, it does the same thing.
If you raise or lower the throttle from center, the drone will climb or descend.
However, just like Angle Mode, the drone will still drift, and you’ll need to correct that drift using the pitch and roll sticks. This is normal and expected.
Important: Getting the hover throttle value right is important. If the value is too low, the quad will immediately drop when Altitude Hold is activated. If the value is too high, the quad will immediately climb. You can adjust the hover throttle in the OSD menu under GPS Rescue, or via the CLI using the ap_hover_throttle setting.
Finally, don’t expect DJI-level altitude stability. Altitude Hold in Betaflight uses only the barometer to estimate altitude, so going up and down slightly is normal.
How to Use Position Hold
To use Position Hold, it’s recommended to activate Altitude Hold at the same time, ideally using the same switch.
Before testing Position Hold, you should first test Altitude Hold on its own. Make sure there’s no sudden drop or climb in altitude when you engage it. If the quad immediately climbs or sinks, adjust the hover throttle first.
Once Altitude Hold is working smoothly, you can move on to testing Position Hold.
When Position Hold is active, the OSD flight mode will display POSH.
Using Position Hold With a Compass
If you are using a magnetometer (compass), you can activate Position Hold at any time during flight, as long as you have a good GPS lock (at least 8 satellites) before takeoff.
When engaged, the quad should hold its position automatically. A small amount of drift—typically within 1m—is normal according to the Betaflight developers.
You can still move the quad using pitch, roll, and yaw, similar to Angle Mode, but stick responsiveness is significantly reduced compared to normal Angle Mode.
Using Position Hold Without a Compass
If you are not using a compass, Position Hold is not immediately available after takeoff.
If you try to activate it too early, you’ll see a “POSHOLD FAIL” warning in the OSD. You must first fly in a straight line for a few seconds (or roughly 100 meters) so Betaflight can estimate the heading from GPS data.
To verify you are ready, check the home arrow in the OSD—if it points in the correct direction, Position Hold should work.
In my testing, Position Hold worked surprisingly well without a compass. The quad held both position and heading for over 7 minutes, until the battery ran out (probably could have gone on for longer). However, if drifting starts to occur, you may need to disengage Position Hold, fly straight again briefly to refresh the heading estimate, and then re-engage it. This is the main downside of not having a compass.
Is This the Same as DJI’s Panic Button?
Not quite.
On the DJI Avata 2, pressing the panic button immediately brakes and stops the drone almost instantly. Position Hold behaves similarly, but it’s not as aggressive, especially if you’re flying fast.
If you want stronger braking, you can increase the ap_max_angle value (default is 50°, maximum is 70°). Higher values result in more aggressive braking behavior.
Potential Issues and Troubleshooting
My Quad Won’t Arm
You cannot arm the quad while Position Hold or Altitude Hold is already engaged. Make sure both modes are disengaged before arming.
Altitude Wavering
According to the Betaflight documentation, altitude stability within about 1 meter is normal. It won’t be as stable as DJI drones, which use LiDAR and other camera sensors. Betaflight relies only on barometer.
Wind and high airspeed can also cause errors, as airflow over the barometer affects air pressure and readings. You can reduce this by covering the barometer with a small piece of open-cell foam, allowing pressure changes but limiting airflow.
“POSHOLD FAIL” Warning in OSD
This usually happens when:
- You don’t have a compass and haven’t flown straight long enough to establish heading, or
- There aren’t enough GPS satellites locked
Quad Flies Off at a Bad Angle or Circles
If the quad immediately flies off at an odd angle or starts circling, the heading information (from GPS or magnetometer) is likely incorrect.
If you’re not using a magnetometer, disengage Position Hold and fly straight for 50–100 meters at a steady speed with minimal roll or yaw input, then try again.
Compass Not As Accurate on Smaller Quad
I tested magnetometer on both 5inch and 3inch cinewhoop, the cinewhoop was overall less accurate than the 5inch. I think it might have something to do with the smaller frame size and how close the GPS is to all the sources of interference like motors, wires etc.
Conclusion: Position Hold Is Useful, but Not Foolproof (Yet)
In my experience, when Position Hold works, it works really well. However, there were times it was doing weird stuff like pulsating, wandering, or was just wobbly—and on a couple of occasions, it just didn’t work.
This is a powerful and genuinely useful feature, but it’s not foolproof yet. You should test it thoroughly before relying on it in real-world situations.
Personally, I’ll mainly use it for emergency scenarios—when you need to take your goggles off or put the radio down briefly. That alone can be a lifesaver. However, I would not trust it to hover over people without actively controlling the quad. Use common sense.
22 comments
How about Airmode? On or off in POS/ALT hold? Or it doesn’t matter?
doesn’t matter
Thank you Oscar for this article. I wouldn’t had been aware of this new feature if it weren’t that you did write about it.
I did test the Position Hold after following the steps that you documented, inducing the CLI command input, and the function worked out perfectly, in a wonderful manner.
The 5 Inch drone held position indeed, and was leaning on one side most likely due to resisting the soft wind.
Thank you
Hello.
yes I did, before that the mode didn’t appear on modes tab.
Thanks again for your help.
Thanks for the reply.
Yes, I already enabled Flight Mode in the OSD and tested it properly in flight.
Angle, Horizon and Air Mode display correctly in the OSD.
GPS Rescue displays correctly when activated.
Flip Over After Crash also displays correctly.
However, Position Hold and Altitude Hold never appear in the OSD, even when:
The quad is armed
GPS has 3D Fix
The AUX switch is correctly configured (I can see the marker moving in the Modes tab)
Thanks again for your help.
Did you flash Betaflight with Position hold included in the build option?
Hi Oscar, I’m trying to use Betaflight Altitude Hold (ALTHOLD) and Position Hold (POSHOLD) but they don’t engage. Here’s my setup and what I’ve confirmed so far:
Betaflight 2025.12.2 (Configurator app 2025.12.2)
FC target: AIKO/AIKONF4V2 (STM32F405), 6S quad
Sensors detected (CLI status):
Gyro/ACC: ICM42688P
MAG: QMC5883
Accelerometer is ON
Magnetometer is ON (QMC5883)
GPS protocol set to UBLOX, autoconfig ON, Galileo ON
GPS: connected on UART2 @ 57600, configured, GPS module version shows M10
No BARO sensor (FC doesn’t have barometer)
GPS tab shows Fix 3D = true
Receiver AUX channel works and I can see the marker moving in the Modes tab when flipping the switch although ALTHOLD/POSHOLD won’t engage/turn yellow
ALTHOLD assigned to AUX5, range approx 1300–2100
GPS Rescue also configured (on another AUX4)
AIRMODE and FLIPOVERAFTERCRASH are both on AUX3
However ALTHOLD/POSHOLD never highlight yellow in Modes when the switch is active
Also in the fiel with more than 20 Sats It does not engage. And I get no error on OSD
Thanks a lot
Can you display Flight Modes in OSD, and see if it changes to POSH when you activate Position Hold during flight?
Position hold only works after you arm the quad.
Does the “altitude hold” mode works without gps on my radiolink f722 which has dps310 barometer sensor which has a resolution of ±2cm. Just let me know if that’s possible so that I can plan to install the gps later.
Yes, altitude hold works without gps.
Can this be done on a tinywhoop? Like the Betafpv Air65.
Yes if you managed to put a gps on it.
Thx. Great article. Does ALTHOLD implement ANGLE mode, or do you have to be in ANGLE mode for ALTHOLD to work.
No, you can activate ALTHOLD in Air mode too (acro mode).
thx
Hello Oscar, is it preferreble to engage the Angle Mode at the same time than ALT/POS Hold ? Does ALT/POS Hold engage automaticaly Angle Mode ? I was thinking to have a 3 position switch: a) Air Mode ; b) Angle Mode ; c) Angle Mode + ALTHold + POSHold.
Does this makes sense ?
Chears
You don’t have to. You can activate position hold in acro mode. But you can also activate it in Angle mode too, of course. It’s up to you.
Thank you for the clear and thorough explanation. After carefully following the instructions, I tested the altitude hold on my Cinelog 35v2 (without a barometer) and it seemed to perform quite well, although I hadn’t yet verified the correct hovering setting. But when I exited altitude hold to return to “air” mode, the drone stopped responding and crashed. What could have happened? What can I do to prevent this from happening again?
Thank you very much for your kindness.
Did it lose power and drop to the ground? Did you drop throttle to 0% when you switch back to air mode? You need to take control of throttle as soon as you exit altitude/position hold mode.
Hello Oscar! I have a question if you would like to make an article about different types of helicopters, about the program for configuring Rotorflight software, it is very interesting to read, there is little information about it!
I tested this twice, altitude holds works good, but I still have Position Hold Fail” error after flying straight about 80-100m. I will test it again…
Put “compass bar” in your OSD, and keep flying straight until the heading is roughly correct until you try.