With Scanse Sweep installed underneath (yes, she has blind spots from her legs and the WiFi antenna), any object detected between 50cm (the distance to tip of her props) and 1m (her personal space boundary) now triggers a controlled landing. The same thing would happen if the obstacle wasn’t me approaching her, but instead, her approaching a brick wall: a vertical controlled descent to ground.
There’s a lot more that can be built on this; the Sweep is rotating at 1Hz (it can do up to 10Hz), and its taking about 115 samples per loop, each reporting both the rotation position (azimuth) and distance to the nearest object at that rotation. Currently the code only collects the shortest distance per loop, and if under 1m, the standard file-based flight plan is replaced with a dynamically created descent flight plan based upon the height that Hermione should have reached at that point with the file-based flight plan.
Here’s the layout of communication between the 5 processes involved:
+—————+ +—————————+ |Sweep|——>——|Autopilot|——>——+ +—————+ +—————————+ | | +———+ +——————+ |GPS|——>——|Motion| +———+ +——————+ | +—————+ | |Video|——>——+ +—————+
The latest code updates are on GitHub.
Next step is to move GPS to also feed into Autopilot. The move is easy, just a couple of minutes to move who starts the GPS process; the difficult bit is how the autopilot should handle that extra information. Currently the plan is that before a flight, Hermione is taken to the desired end-point of the flight, and she captures the GPS coordinates. Then she’s moved to somewhere else, and pointing in any direction; on take-off, she finds her current GPS position, and the autopilot builds a dynamic flight plan to the end-point; all the constituent parts of the code are already in place. It’s just the plumbing that needs careful creation.
P.S. That was the first live test flight, hence the slightly nervous look on my face, and my step backwards once she’d detected my intrusions!
P.P.S: Proof that the abort was triggered courtesy of the logs:
[CRITICAL] (MainThread) fly 3467, ASCENT [CRITICAL] (MainThread) fly 3467, HOVER [CRITICAL] (MainThread) fly 3467, ABORT (0.88m) [CRITICAL] (MainThread) fly 3467, STOP [CRITICAL] (MainThread) fly 4087, Flight time 16.627974
An uninterrupted flight would have run for 22s where descent would have started at 18s.