ГоловнаСтаттіАвтономні системи

Планування шляху для БПЛА: RRT* та Потенціальні поля

Два планувальники, один дрон: як зразок-орієнтоване дерево знаходить майже оптимальний маршрут, а реактивна сила може застрягти у вигрібній пастці.

mysimulator teamОновлено — червень 2026≈ 9 хв читання▶ Відкрити симуляцію

Планування шляху для БПЛА: Два родинки планувальників, одна задача

Отримання дрона з точки А в точку B через перешкоди – це проблема планування шляху, і майже кожне рішення належить до однієї з двох родин. Планувальників на основі семплінгу будують дискретний граф здійсненних станів шляхом випадкового відбору у вільному просторі та підключення сусідніх вибірок; реактивні планувальники обчислюють силу або градієнт у поточному положенні дрона та слідують за ним миттєво, без карти всього простору. RRT* є основною робочою задачею першої родини, штучні потенційні поля – класичним прикладом другої, і ця симуляція запускає обидва на одному 3D полі перешкод, щоб ви могли спостерігати за відношенням безпосередньо.

жива демонстрація · пов'язана симуляція● LIVE

RRT*: формування дерева до мети

Швидке дослідження випадкових дерев (RRT, LaValle 1998) будує дерево, вкорінене у початкову позицію. Кожний етап включає відбір випадкової точки у 3D просторі, знаходження найближчого існуючого вузла дерева та розширення зафіксованого довжиною кроку з цього вузла до вибірку. Якщо новий край не суперечить зіткненням, він приєднується до дерева. Повторюйте це протягом тисячі етапів, і листки дерева з високою ймовірністю достатньо щільні, щоб один з них був близький до мети.

Цикл: x_rand = sample_free_space() x_near = nearest(tree, x_rand) x_new = steer(x_near, x_rand, step) // рух на фіксований крок до x_rand if collision_free(x_near, x_new): tree.add(x_new, parent = x_near) if in_goal_region(x_new): done Ранній RRT швидко знаходить шлях, але він рідко є хорошим — він звивається, оскільки ніколи не відвідує попереднє рішення. RRT* (Karaman & Frazzoli, 2011) виправляє це двома додатковими кроками на кожному етапі: коли додається новий вузол, він переглядає всі вузли дерева в межах стискаючогося радіусу та (1) обирає батьківський серед них, який дає найдешевший шлях від кореня, а потім (2) перепідключає будь-які з цих сусідніх вузлів через новий вузол, якщо це знижує їхній власний вартість. Це локальне оптимізація, повторювана тисячами вибірок, доводить збіжність до найкоротшого зіткнення безперешкодного шляху, коли збільшується кількість вибірок — RRT* асимптотично оптимальний, ранній RRT не є.

Вартість більша обробки на кожному етапі (пошук найближчого сусіда та радіусний запит замість одного), тому практичні реалізації зберігають вузли дерева в k-d дереві замість масиву, а не в ньому — без цього кожен з цих запитів деградує до O(n) і весь планувальник стає O(n квадрат) під час виконання.

loop:
  x_rand  = sample_free_space()
  x_near  = nearest(tree, x_rand)
  x_new   = steer(x_near, x_rand, step)      // move one fixed step toward x_rand
  if collision_free(x_near, x_new):
    tree.add(x_new, parent = x_near)
    if in_goal_region(x_new): done

Потенційні поля: без планування, лише градієнтний спуск

Штучні потенційні поля (Khatib, 1986) повністю ігнорують граф. Мета створює притягальний потенціал, який тягне дрон до неї, як до улоговини; кожен перешкода створює відштовхувальний потенціал, який відштовхує дрон, сильний поблизу та зникаючий за межами безпечної радіусу. У кожний момент дрон просто літає вниз по суміжному градієнту – без будь-якого дерева, без пам’яті про простір, з незначним обчислювальним навантаженням на крок, що пояснює, чому це є стандартним вибором для швидкої внутрішньої петлі керування квадрокоптера, яка реагує на дані лідара, які він щойно прочитав.

F_total(x) = -grad(U_attract(x)) - sum_i grad(U_repel_i(x)) U_attract(x) = 0.5 * k_att * ||x - x_goal||^2 U_repel(x) = 0.5 * k_rep * (1/d(x) - 1/d0)^2 if d(x) Проблема полягає в тому, що цей демо паралелює два методи: повністю реактивна система керування не має провідного погляду, тому може потрапити в локальний мінімум – точку, де притягання до мети точно компенсується відштовхуванням від відкосів, наприклад, внутрішньої сторони U-подібної стіни. Дрон сидить там, сила дії нульова, мета не досягнута, незалежно від того, як довго ви чекаєте. Планувальників на основі семплювання не має цієї помилки, оскільки вони досліджують весь простір, а не спускаються по єдиному скалярному полю; ціна полягає в тому, що RRT* потребує глобальної карти заздалегідь та займає помітно більше часу для створення шляху.

F_total(x) = -grad(U_attract(x)) - sum_i grad(U_repel_i(x))
U_attract(x) = 0.5 * k_att * ||x - x_goal||^2
U_repel(x)   = 0.5 * k_rep * (1/d(x) - 1/d0)^2   if d(x) < d0, else 0

Розгляд реальних стеків БПЛА

Виробничі стеки автономності рідко обирають один і відкидають інший. Типова архітектура працює з використанням планувальника на основі семплінгу або пошуку (RRT*, або варіант гратки/A*) з низькою частотою над відомою картою для створення грубого коридору шляхів, а швидкий реагуючий шар — потенційні поля або його глазуватий родич об’єкти швидкості — для локального, високочастотного уникнення зіткнень з об’єктами, які не відображаються на карті. Планувальник забезпечує оглядовий горизонт, що виходить за межі локальних мінімумів; реагуючий шар забезпечує мілісекундну реакцію від рухомого об'єкта або циклу перепланування глобального рівня.

Інший практичний аспект — кінодинамічна здійсненність: квадрокоптер не може миттєво змінювати швидкість або різко повертатися, тому необроблений шлях RRT*, побудований на основі прямих керуючих команд, повинен бути згладженим і перепараметризованим відповідно до фактичних обмежень прискорення транспортного засобу (зазвичай за допомогою підгонки мінімального «розрізу» або мінімальної «нерівності» траєкторії) перед тим, як він стане літабельним. Геометрично найкоротший шлях не є однаковим з літабельним.

Часті запитання

Чому демо з потенціальним полем іноді застрягає?

Воно потрапило в локальний мінімум: точку, де притягальна сила мети точно компенсується відштовхуванням від сусідніх перешкод, зазвичай всередині вогнутої, U-подібної перешкоди. Реактивні контролери не мають пам'яті про всю карту, тому ніщо не витягує дрон звідти. Перехід на RRT*, який досліджує глобально, повністю усуває цю проблему.

Чи знаходить RRT* найкоротший можливий шлях?

Воно сходиться до оптимального шляху, коли кількість зразків прямує до нескінченності – це асимптотично оптимальний шлях, а не миттєво оптимальний. З обмеженим бюджетом зразків ви отримуєте шлях, який зазвичай близький до найкоротшого і стає ближчим до довшого дерева росту, завдяки кроку переналагодження, який постійно оптимізує сусідні зв’язки.

Який метод швидший для обчислень?

Потенціальні поля – набагато швидше – один розрахунок градієнту за крок, без дерева, без пам'яті про весь простір, що робить їх ідеальними для швидкого реактивного контрольного циклу. RRT* потребує тисяч зразків, запитів найближчого сусіда та переналагоджень, але в обмін на це він генерує глобально узгоджений, майже оптимальний шлях, який не може застрягти.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте UAV Path Planning і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію UAV Path Planning

Що ви знайшли?

Додати кроки відтворення (опційно)