I live in the mountains, so I wanted to test how well Ardupilot hits waypoint position and altitudes and unfortunately according to my tests it appears that ardupilot just "attempts" to hit the altitude of each waypoint, but if it misses, even significantly it still considers that waypoint to be completed and moves on to the next one.
To test this what I did is place a single way point about 200m from home at an altitude of 200m. By the time the plane reached this way point it had only hit the 50-75m altitude mark, and it immediately returned to launch once it was within the way point radius.
Is there anyway to force hard altitudes so ardupilot will circle around the waypoint ascending/descending until its within a given altitude threshold set by the waypoint before moving on?
I don't think altitudes are considered as part of the waypoint.
If you give it three waypoints at 200m high, then it will just keep on climbing through the waypoints until it reachs 200m.
You need to put enough distance between the waypoints to achieve the target altitude.
I just discovered (by mistake) the CONDITION_CHANGE_ALT flight plan command which apparently should do exactly what I want, so I will have to test it in the simulator.
I don't think it will help. I have had the same problem. In theory, if you don't use a CONDITION_CHANGE_ALT the plane should try to climb there as fast as possible to minimize the error between alt command and actual alt. I have tried the CONDITION_CHANGE_ALT command, but as I increase it, at some point I reach the same limit that I get without the CONDITION_CHANGE_ALT command, so it does me no good. I haven't dove into the code yet, but it seems that there is some sort of limit to how far you can pitch (about 12 degrees for me). I would like to get in and change it. If anyone knows how let me know!
On another note, auto take off will allow you to climb at just about any angle you want. You just can't hit WP's.
Right, but I want ardupilot to circle in place until it reaches the specified altitude, then head towards the next waypoint.
I think it will do this if you have some sort of "dummy" waypoint after the change altitude one to
keep it on the change altitude task long enough to complete it.
I swear I had this working at one point, but haven't been able to replicate it yet. The way the waypoint file is executed seems quite strange to me.
I currently use the autotake off for this but its not ideal as it keeps flying in a straight line until it reaches the destination (you can use autotakeoff mid flight).
A loiter to altitude would be very useful and would save racking up a lot of distance.
+1 as well.
Loiter_To_Alt would definitely need to be a hybrid waypoint with both altitude and lat/lon so it loiters around that exact position specified. Ideally a separate loiter radius could be defined because if its too tight the plane may have a hard time climbing. Or in the case for descending someone may want it tighter than a normal loiter radius.
there has been talk of a loiter to alt for landing sequences, but has not been persuded as of yet.
+1 - I would like this as well.
Try mission scripting video, example mission b, starting with time 4:13 s.
Thanks for pointing that out. It seems more complicated than it should be, but it does work for ascending...
However I think there might be a bug in Ardupilot as it fails for descending. Attached is an example flight plan where the plane takes off, hits waypoint #1, then ascends to 1500m around waypoint #2 then heads to waypoint #7 and descends to 528m, then basically returns to launch.
The problem is as soon it reaches waypoint #7 it just returns to launch without descending at all.
In the advanced parameter list, change Alt_Ctrl_Alg to 1. This tells Ardu to make reaching altitude
the top priority. (Don't forget to write the new param list).
Also, make Lim_Pitch_Max = 90. This will allow a steep climb.
If you find any bugs, please report them in the Issue Tracker.