Точки маршрута и длина пути

Автономный полёт задаётся списком точек; научимся считать длину такого маршрута и время на него.

Точка маршрута (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%.
  • На больших дистанциях нужна сферическая формула (гаверсинус).
Проверьте себя
1. Как вычисляется полная длина маршрута из точек?
AРасстояние от первой до последней точки
BСумма расстояний между всеми соседними точками
CЧисло точек, умноженное на скорость
DПлощадь, охваченная маршрутом
2. Почему к геометрическому времени полёта добавляют запас 15–30%?
AИз-за округления чисел
BИз-за торможения на поворотах, ветра и висений над точками
CЧтобы батарея зарядилась
DЧтобы GPS успел включиться