Single-drone (unchanged)
Drone.Mission.new()
|> Drone.Mission.takeoff()
|> Drone.Mission.hover(seconds: 3)
|> Drone.Mission.move(:up, 30)
|> Drone.Mission.rotate(:cw, 90)
|> Drone.Mission.land()
|> Drone.Mission.run(drone)
Swarm run modes
# 1) Built-in formation
Drone.Swarm.run(swarm, :front)
Drone.Swarm.run(swarm, :vee)
# 2) Per-drone missions
Drone.Swarm.run(swarm, %{
good: good_mission,
bad: bad_mission
})
# 3) Custom script
Drone.Swarm.run(swarm, fn members ->
# members is %{good: :good, bad: :bad} names
:ok
end)
Execution order for mode 1 and 2: sequential by members list order for
determinism. Mode 3 is caller-controlled.
Optional small extension on Drone.Mission:
Mission.validate/1 — shape-only validation without a live drone
- Document dry-run: connect members with
safety: [dry_run: true]
Concurrent missions, async fan-out, and swarm-level DSL are deferred — see
docs/design/v0_2_0_deferred.md.
Single-drone (unchanged)
Swarm run modes
Execution order for mode 1 and 2: sequential by
memberslist order fordeterminism. Mode 3 is caller-controlled.
Optional small extension on
Drone.Mission:Mission.validate/1— shape-only validation without a live dronesafety: [dry_run: true]Concurrent missions, async fan-out, and swarm-level DSL are deferred — see
docs/design/v0_2_0_deferred.md.