Tradheli Users,
I had a user report that their heli took off before the rotor was completely spooled up when using the continue after land feature in an auto mission. I think this primarily applies to aircraft using an ESC with an internal governor (H_RSC_MODE 2). Copter 4.1 is the first time Tradheli users were able use this kind of feature because of another issue that prevented spool up in auto modes. So that is why this issue just surfaced.
The reason for the premature takeoff is due to how the autopilot determines when spool up is complete. The run up time (H_RUNUP_TIME) is what it uses during spool up to determine run up complete (ie rotor at flight capable RPM). The autopilot counts up from when the motor interlock switch is enabled. When it reaches runup time it declares runup complete and the autopilot raises the collective to take off. When the motor interlock is disabled, the autopilot counts down until it reaches the critical speed (H_RSC_CRITICAL) and at that point declares that the rotor is below critical and the autopilot allows disarming if in an auto mode like RTL or. LAND.
What happens in the continue after land situation is the aircraft lands and waits for rotor speed below critical. Once that occurs, the autopilot initiates spool up. But only counts up from the critical speed instead of counting from zero. So it you had the runup time set to 10 seconds and the critical speed at 50%, the autopilot would only count 5 seconds to declare below critical rotor speed and then count up 5 seconds (instead of the full 10 seconds) to declare runup complete. For heli’s that use the governor of the ESC (H_RSC_MODE set to 2), this may not be enough time for the ESC to complete its spool up and thus the autopilot will try to take off before the ESC is ready.
I believe the way to fix this is to set the H_RSC_CRITICAL to 50% and set the H_RUNUP_TIME to twice the time it takes your ESC to reach flight capable rotor speed. This will allow enough time for the rotor to spool up before takeoff is initiated. I have shown this to work in the SITL and will try it soon in my own heli.
I am drafting a change to the code to fix this. My plan is to always make the spool down time the runup time. That way the autopilot will always have to count up for the full runup time. If there any thoughts on this, please post here and let me know.