Точки маршрута и длина пути
Автономный полёт задаётся списком точек; научимся считать длину такого маршрута и время на него.
Точка маршрута (waypoint) — заданная координата, которую аппарат должен пройти; маршрут — упорядоченный список таких точек.
Маршрут как ломаная
Полётное задание — это последовательность точек: аппарат летит от первой ко второй, потом к третьей и так далее. Для небольшого района землю можно считать плоской и работать в метрах. Длина участка между соседними точками — обычное расстояние:
$$ d = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} $$
Полная длина маршрута — сумма длин всех участков. Время на крейсерской скорости — длина, делённая на скорость.
import math
waypoints = [(0, 0), (100, 0), (100, 80), (0, 80)]
cruise = 12.0 # крейсерская скорость, м/с
total = 0.0
for i in range(len(waypoints) - 1):
x1, y1 = waypoints[i]
x2, y2 = waypoints[i + 1]
leg = math.hypot(x2 - x1, y2 - y1)
total += leg
print("Участок", i + 1, "длина", round(leg, 1), "м")
print("Полная длина:", round(total, 1), "м")
print("Время полёта:", round(total / cruise, 1), "с")Вывод:
Участок 1 длина 100.0 м Участок 2 длина 80.0 м Участок 3 длина 100.0 м Полная длина: 280.0 м Время полёта: 23.3 с
Три участка, 280 метров, около 23 секунд лёта. Эту оценку планировщик считает заранее, чтобы понять, уложится ли аппарат в запас батареи.
Поправки реальности
Идеальный расчёт занижает время: на поворотах аппарат тормозит и разгоняется, при ветре путевая скорость меняется, на висении над точкой съёмки время идёт, а путь — нет. Поэтому к «геометрическому» времени добавляют запас, обычно 15–30%.
Как работает под капотом
Автопилот ведёт аппарат к текущей точке, считая вектор от своего положения (по GPS) к цели, и переключается на следующую, когда подходит ближе порога (radius of acceptance). На больших дистанциях вместо плоской геометрии берут формулу гаверсинуса по широте и долготе — там Земля уже не плоская.
Частые ошибки
- Считать время по идеальной длине без запаса на повороты, ветер и висения.
- Применять плоскую геометрию на больших дистанциях вместо сферической.
- Забывать обратный путь к точке старта/посадки при планировании батареи.
Итог
- Маршрут — список waypoints; длина — сумма расстояний между соседними точками.
- Время на крейсере — длина, делённая на скорость, плюс запас 15–30%.
- На больших дистанциях нужна сферическая формула (гаверсинус).