I saw this feature in INAV firmware documentation. I didn’t flied anything INAV-based but I like the idea:
To regain control after a failsafe event, you must move the roll/pitch sticks more than failsafe_stick_threshold in order to regain control.
In Ardupilot to cancel RTL you must explicitly re-set the flight mode by a switch on your RC Tx.
This is not very conveniently, just imagine a common situation:
You flying in Loiter and RC link was lost (just a transient / short-term disconnect); RTL engaged.
After a seconds you want to return back to Loiter mode, but your mode switch is already on Loiter position.
So you need to switch to some another mode first; then switch back to Loiter.
At least this is not conveniently, it does require extra attention (taking into account that unexpected radio FS gives you some stress). Also switching to different modes could cause unwanted jerks because of transitions.
Finally it could be dangerous, depending on what neighboring modes you have on your mode switch.
Does it make sense to have similar option in ArduCopter?
Also I’m not sure why in toy_mode this is implemented by rely on throttle_near_max. Just from the safety standpoint it looks much more safely to pull pitch/roll stick instead of playing with throttle level.
So I believe RTL cancel should happen if roll/pitch is outside of dead zone.
One more usage example: Operator flying forward in Loiter (i.e. pushing the pitch stick). Then short-term radio FS occured. Operator don’t need to do anything because he already holds pitch stick forward. So Loiter mode restores automatically.
There is anyway a number of things to design:
Do not cancel RTL if throttle is way out of center position?
Do we need to restore ANY previous mode? Or do we need to restore previous mode only if it “safe” (Loiter/PosHold/AltHold)? Or do we need to always switch to Loiter interdependently of what mode was before RTL?
Must this “cancel RTL” feature be available only if RLT was caused by Radio FS? Or it is OK that RTL can be canceled that way anytime?