Математичне моделювання та обчислювальні методи
Розширений фільтр Калмана (завершення) і планування руху кількох дронів методом потенційних полів, частина 1
Пасічник Роман Мирославович
Підсумок
Курс: «Математичне моделювання та обчислювальні методи». Лектор: Пасічник Роман Мирославович.
Про запис. Це частина 1 з двох записів цієї пари. Запис почався об 11:19 посеред фрази, тож початок заняття втрачено. Перші 1:15 лектор завершив розширений фільтр Калмана для радарного стеження і розібрав код першого практичного заняття: рух трьох дронів, у кожного своя ціль, з обходом перешкод і тимчасовими зупинками. Потім оголосив перерву на 20 хвилин. Після перерви в лектора зникли світло й інтернет, і останні хвилини запису (≈1:48–1:55) пішли на спроби його перепідключити. Хтось запропонував скинути нове посилання на Zoom у Viber-групу, а лектору — почати «на другу годину». Частина 2 (2026-11-06_1316, 49 хв) почалася о 13:16. У ній були перекличка, тема 5 (рій дронів зі спільною ціллю й децентралізовані пріоритети через геш-функцію), запуск симуляції та індивідуальне завдання з номерами варіантів.
⚠️ Що потрібно від мене
| Коли | Що зробити |
|---|---|
| Див. частину 2 | Індивідуальне завдання до цього практичного заняття (свої старт, ціль і перешкоди для алгоритму з цієї частини) лектор оголосив у частині 2. Там же номер мого варіанта. |
| Для завдання | Розібратися в коді з цієї частини: класи дрона й рою, compute_velocity, оновлення через zip, візуалізація. Саме його треба буде адаптувати під свій варіант. |
Інших завдань і дедлайнів у цій частині не було.
📬 Що обіцяв лектор
- Наступне заняття присвятити моделюванню руху рою, де в дронів спільна мета (це він і зробив у частині 2).
💡 Головні тези
Розширений фільтр Калмана (завершення)
- Навіщо фільтр. Дешева апаратура дає великі високочастотні похибки вимірювань. Фільтр Калмана їх згладжує, і оцінка траєкторії стає набагато точнішою за самі виміри. На графіку червоні точки позначають виміри, синій пунктир — оцінку фільтра, зелена лінія — реальну траєкторію.
- Фільтр має інерцію на маневрах. Коли ціль змінює напрямок (азимут), оцінка якийсь час адаптується і лише потім знову «захоплює» прямолінійний рух.
- Дві моделі. Модель руху має вектор стану (x, y, vₓ, v_y) на площині і матрицю переходу F з блоками [1, Δt; 0, 1] для кожної координати (швидкість вважаємо приблизно сталою). Модель вимірювань (радар) дає полярні координати: дальність ρ = √(x² + y²) і азимут θ відносно осі абсцис.
- Коваріаційна матриця дає не просто можливу траєкторію, а оцінку з мінімальною дисперсією. Ідеологія та сама, що в методі найменших квадратів. Шум радара задають через середньоквадратичні відхилення по дальності й азимуту.
atan2замість арктангенса. Функціяatan2з Python уникає ділення на нуль і стрибків кута при переході через період, тому для переходу від декартових до полярних координат беруть саме її.- Матриця Якобі (2 рядки × 4 стовпці) складається з похідних полярних координат за декартовими й пов'язує виміри з параметрами моделі. Далі програмна реалізація розширеного фільтра на Python, на цьому тему закрито.
Рух кількох дронів, у кожного своя ціль (практичне заняття 1)
- Постановка. Три дрони мають свої стартові точки (кружечки) і цілі (хрестики). Посередині стоять круглі перешкоди. Дрони мають обійти перешкоди, не зіткнутися між собою, а в складних ситуаціях один може зависнути й пропустити інший. Такі зупинки на графіку позначені коричневими квадратами. Проблему вимірювань тут свідомо не розглядають.
- Архітектура. Модель оточення → планування через штучні потенційні поля (так зручно поєднувати різні сили) → інтегрування полів у команду керування для кожного дрона → запам'ятовування траєкторій → візуалізація (можлива й анімація).
- Досягнення цілі. Коли дрон ближче до своєї цілі, ніж допуск
d_target, його швидкість обнуляють і більше не рахують. Так економиться обчислення і немає хаотичного «тремтіння» біля цілі. - Тимчасова зупинка. Якщо інший дрон ближче за допуск і має вищий пріоритет (менше число), наш дрон переходить у стан очікування (
is_waiting) зі швидкістю 0. - Притягання до цілі: k · (p_goal − pᵢ) / (‖p_goal − pᵢ‖ + ε). Це одиничний вектор напрямку, помножений на коефіцієнт. Біля цілі в знаменнику домінує ε, вектор прямує до нуля, і дрон плавно гальмує.
- Обхід перешкод. Сила пропорційна різниці обернених величин 1/(d − rᵢ − r_m) − 1/d_detect, де rᵢ і r_m — радіуси дрона й перешкоди. Ближче ніж на суму радіусів підійти не можна. Якщо різниця від'ємна (перешкода далеко), її не враховують і не витрачають ресурси. Інакше сила спрямована від перешкоди з коефіцієнтом, який задає, як швидко реагувати.
- Відштовхування між дронами працює за тим самим механізмом. Це складніше, ніж з перешкодами, бо дрони рухаються. У рої можуть бути десятки й сотні дронів, тож реагують лише на найближчих.
- Правило правого гвинта (правої руки). На зустрічних курсах кожен дрон зміщується вправо відносно свого руху, і вони розходяться по колу. Поворот вправо задає матриця з нулями на головній діагоналі та 1 і −1 поза нею («аналітична геометрія, перший курс»). Діє теж лише на близькій відстані.
- Підсумкова швидкість дорівнює сумі чотирьох складових: ціль, інші дрони, правий поворот, перешкоди. Якщо сума більша за v_max, вектор нормують і множать на v_max: напрямок той самий, модуль максимально допустимий. Нова позиція p + v·Δt записується в траєкторію.
Програмна реалізація
- Клас дрона. Конструктор (частина параметрів фіксована, решта з аргументів,
.copy()для позицій) і порожній контейнер траєкторії. Ключовий методcompute_velocity: скинутиis_waiting, у циклі по інших дронах пропустити тих, що досягли цілі, перевірити пріоритет і відстань, далі порахувати сили. У коді ε = 10⁻⁵, амплітуду обрізають знизу нулем черезmax(…, 0). - Клас рою має методи
add_obstacle,add_droneі симуляцію з обмеженням 300 кроків. - Оновлення через
zip: спершу всім дронам рахують швидкості, потім усі одночасно змінюють положення. Інакше перший у списку дрон мав би перевагу, а решта підлаштовувалися б під його вже нове положення. - Конфігурація: Δt = 0,1, три перешкоди з різними центрами й радіусами, три дрони з пріоритетами 1, 2, 3, кожен зі своїм стартом, фінішем і кольором. Точки тимчасових зупинок малюються з
waiting_events. - Результат. Усі дрони досягли цілей, обійшли перешкоди й не зіткнулися. Там, де траєкторії перетнулися, дрон із пріоритетом 2 зупинився й пропустив синій дрон з пріоритетом 1. Лектор підсумував, що неочевидний на вигляд алгоритм розв'язав непросту ситуацію.
- Що далі. Рух рою простіший: тут на кожну ціль один дрон, а при виході на спільну ціль зручніше керувати групою як цілим.
Транскрипція
Автоматичне розпізнавання мовлення, можливі помилки.
00:00:03 В принципі, або спостережені за ціллю, або нашого цього безпілотника, яким ми керуємо, можуть бути численні. Численні похибки наслідок такої досконалий апаратури, в принципі, яка береться, щоб здешевити сам процес вимірювання або сам процес передачі цієї інформації, і тому присутні деякі похибки великі. І вони такі мають устилюючий характер, тобто високочастотних коливань. А внаслідок того, що ми моделюємо з допомогою фільтру Калмана, ми ці високочастотні коливання можемо, скажімо, зменшити чистоту цих коливань і перейти до низькочастотних, при цьому
00:01:13 точність вимірювань покращується. Давайте оце тут і демонструє. Цей графік, де червоними крапочками показані передані вимірювання, а синій пунктир - це оцінована траєкторія з допомогою фільтру Калуна. Ще відфільтрування. Ну і візуально спостерігаємо, що, а також зелена, показана реальна траєкторія, що ця оцінка кам'яна штрихпунктирна штрихова синенька, вона набагато
00:02:02 точніша, ніж наші експериментальні спостереження. Але тут видно й динаміку при маневрах видно, що при здійсненні маневру присутня деяка інерція фільтра кауна. Бачимо, що зберігається, яким чином здійснюється перехід від одного азимуту до іншого на зміну напрямку руху, і тут відбувається таке зміщення або адаптація до зміни напрямку руху і потім уже таке нормальне захоплення
00:02:53 цього такого прямо лінійного простого. Тобто така реальна, можливо сказати, картина. І вона пов'язана із моделюванням руху одного одного нашого цього. Або цілі, або безпілотного об'єкта. Значить, давайте подивимося, ще пригадаємо, який тут апарат. Без великої деталізації задіємо який апарат. Вертор стану. Тут давайте пригадаємо фільтр Камуна з яких частин складається. Значить, він складається з моделі руху і з моделі вимірювань.
00:03:54 Рух описується з допомогою вектору стану. В даному випадку ми розглядаємо такий спрощену спрощений рух. У площині. У площині, тому у нас дві координати. Х та і. Декартові дві координати, і от є, Х, і. Так, і відповідно, описуємо також фактор швидкості. Ще трошки збільшує. Так, вектор швидкості. Має компоненти вік.
00:04:41 Так, і це для опису руху цілі або безпілотника. А Ну відповідно динаміки примильні. А для динаміки спостережень ми використовуємо кріволінійну систему або Так, або, або, або, або. Привольні системи координат, яка складається звіддалі,
00:05:27 полярну систему координат, яка характеризується також двома координатами, це віддаль до до нашого об'єкту Р і кут кут азиму, тобто кут вектора е. Я случає точку спостереження і наш об'єкт, відносно деякої усі відносно усі Апсис Х. От через, ну цей куди обчислюється через аптаць. Тепер.
00:06:18 Те. Отут у нас вектор стану описується в Х, через Х, і греки і відповідні похідні. Так, далі динаміка зміни цього вектора стану через З. Матриця переходу Ф, попередній стан, і деякі збурення добількати. Так, далі пригадаємо, що ми аналізували, як будувати це цю матрицю переходу а для У оцінки динаміки
00:07:03 е по По координаті й по швидкості. Значить, це для типу як оцінка шляху е. Чодиничка в нас йде через відповідну координату для відповідної координати, а дельта те. зміна цієї віддалі з допомогою за рахунок швидкості за один крок. Враховується, і по швидкості вважаємо приблизно постійною. маємо блочок, який відповідає координаті Х, аналогічний блочок відповідає координаті у, тому що в нас плоска модель. І також
00:08:02 пригадаємо, що використовується матриця коваріації, яка дозволяє нам оптимізувати наші оцінки траєкторій для мінімізації дисперсії. Значить, ця мати ця коваріація, як вона будується, ми ще розглядали через добутки відповідних компонент. І коли ми розв'язуємо задачу із коваційної матриці, то ми зразу і розв'язуємо задачу оптимізації. Тобто ми не тільки знаходимо деяку траєкторію, можливу траєкторію, а траєкторія, забезпечує мінімальну дисперсію. Це
00:09:00 по аналогії, чи по ідеології мету найменших квадратів. Так, тепер тут у нас ще є складність з тим, що у нас є Вимірювання координат в декартовій системі і спостереження з допомогою полярної системи. Координат. О, і тут показано ураз, як обчислити полярні координати, знаючи декарторі. Такий перехід, як здійснити, віддаль - це корінь квадратний, суми квадратів, коорди Координат - це звичайна відал клідова, а аркттангенс
00:09:50 через відношення, ну через рептанець термоперічну функцію, це через відношення протилежного катета до прилегло. І суттєво, що тут якраз використовується пайдонівська функція танк 2, яка ми розглядали, що вона дозволяє нам уникнути всяких колізій при різних значеннях таких різких змін кутів при переході через період, так, а пристосовано для того, щоб здійснювати переходи від декартових до полярних кордон. Тому в програмуванні використовують два. Так, тут воно вписано чому.
00:10:51 Далі. Так, це все арток 2. Ділення на нулі чому уникаємо. Так, так, матриця коворіації шуморадера. Коли ми знаємо середню середньоквадратичне відхилення по віддалі і по азимуту. Також використовується у численнях матриці якобі для переходу або для зв'язку між полярними та декартовими координатами, яка складається з похідних від
00:11:52 представлення полярних координат по подекартових. І результаті аналізу цих похідних, ми отримуємо формулу, матрицю матрицю, тобто проективне представлення, коли є дві стрічки, чотири стопчики. Тобто ми переходимо від полярних координат до наших параметрів моделі де є, не пам'ятаємо чотири чотири координати Х, і
00:12:47 координати Вх, Віг. Так, координати по точках і координати по швидкості. Так. Так, тут показано, як обчислюється. Матриці переходу. Так. І далі пішла вже реалізація. Особливості ми розглядали ці програмної реалізації розширеного фільтра. Так, все тут реалізовуємо. Уже ці сповідношення програмно, і конкретно видно, як їх здійснювати з допомогою функцій Питона.
00:13:46 І в результаті ми отримаємо ось таке графік, на якому наочно тут в числах немає, просто так наочно показано, як динаміку, як з допомогою фільтра Калмана можна покращити вимірювання координат окремого дрова так давайте ми на цьому з фільтром карма ми завершимо так і перейдемо перейдемо до практичних. А на практичних заняттях там уже у нас на першому практичном занятті там уже моделюється
00:14:43 рух колективу дронів або безпілотних систем. І тут ми бачимо тут на малюнку. Показано нас три для прикладу. Три безпілотних наших апарати, так які. Мають відповідні стартові позиції, показані крапочками, різні ці апарати, показані різним кольором їхньої траєкторії. і цільва точка показана таким хрестиком або
00:15:32 буквою Х, так. Крім того, в нас ще є перешкоди. Перешкоди тут, коли в нас є завдання переміщення, як скажімо, із початкової точки в цільову функцію, в цільову точку, то на заваді цьому переміщенні ще й вникають різні перешкоди. Так, названи показані тут. На графі і графічно показані з допомогою. кружечків от які розташованіше й посередині, щоб створити більше проблем для цих.
00:16:26 Для управління цими безпілотом. Тобто, тут ми бачимо, що вже від проблем вимірювань ми відходимо, вважаємо, що ми її вже знаємо, як розв'язувати, і для такого навчального ефекту ми цю проблему не піднімаємо, а піднімаємо проблему, як організувати рух колективу дроні? Тут які можуть бути проблеми? Що треба огинати перешкоди, не можна пролетіти через перешкоду, треба її обминути. Крім того, не можна стикатися із іншими,
00:17:17 скажімо, об'єктами цього колективу чи цієї зграї безпілотних систем, треба уникати цього зіткнення, і також можливі колізії. Тобто такі ситуації, коли важко буде уникнути зіткнення, і тоді можна передбачити, що деякі безпілотні ці об'єкти можуть зупиняти свій рух, зависати, для того, щоб пропустити інший апарат. І ми бачимо такі тимчасові зупинки показані
00:18:12 квадратиком коричним квадратом, і от результат такого планування бачив нас на малюнку. Давайте повернемося трошки до форму, до коду і плане. Так, дещо ми повторимо, тому що ми починали минуло заняття тут розглядати, а потім завершимо. Так, наш розгляд якраз на програмній реалізації. Значить, почнемо. Пригадаємо, що тут
00:19:05 є певна структура системи. Програмні системи, модель чи архітектура, модель оточення, узопланування. Е. І тут згадано, що планування здійснюється з допомогою. Аналізу штучних потенційних полів. Потенціл. У тому, що цей рух інакше достатньо складно планувати, тут ми повинні
00:19:55 зразу поєднувати врахування різних, різних цих. Сил або різних факторів, і це зручно робити з допомогою потенційних подій. Потім також є блок, який нам тут аналізуємо потенційні поля, і також ми інтегруємо. Ці поля для того, щоб виробити
00:20:40 команду на управління конкретним рухом конкретного безповідного об'єкту, і в результаті ми потім запам'ятовуємо відповідні траєкторії, і їх можемо візуалізувати, як ми бачили на малюнку. Так, значить ми те, що вже розглядали. Так. А саме, воно відбувається в динаміці взагалі, якщо запускати, то можливо, там є анімація і можна дивитися, як відбувається рух. А так, ми бачимо кінцеву картинку, і
00:21:41 тут важливо є таке, що коли безпілотний апарат він досягає цілі, то всякі обчислення по ньому вже припиняється, щоб економити обчислення і і показувати, що ціль досягнута, якщо цього не зробити, то можливо якісь всякі хаотичні, по-перше, витрачаються ресурси, зайві, а потім хаотичні рухи біля цільової точки, які, ну, скажемо, не є реалістичним, тобто, вони не є корисним, а просто, можна сказати, похибка цієї програмно системи. Тому, Тому
00:22:41 здійснюється у нас перевірка досяжності цієї кіцевої точки. Бачимо пегол. Це є. Ага, тут ще що в нас? Що в нас цілі у всіх різні, так? І та ціль, і коли і той, скажем, цей об'єкт наближається до своєї цілі, ближче, ніж, напевну, відстань деталі, де таджет, то всякі перерахунки або його рухнуть, зупиняється, відповідні швидкості обнуляються і він просто
00:23:32 не витрачається часу на обчислення всяких полів потенційних він просто заумирає біля своєї цілі так тепер також важливий такий момент, чи потрібно десь застосовувати тимчасову зупинку. Ну, в нашому випадку передбачено, що можна зсувати зупинку, і коли це робиться, коли ми бачимо, що пріоритети відповідних
00:24:22 те. Позиції відповідних цих наших об'єктів є достатньо близькі. Тут бачите різні є допуски по цілі, відповідний детаджет і допуск по, скажімо, по сусідніх об'єктах або по інших зпілотника де йод? Так, тобто, якщо вони достатньо зближаються, то. Того, що ми розглядаємо, аналізуємо і того безпілотника, його швидкість обновляється. Ну, це те саме, що зупинити його, щоб він завис. Так, причому
00:25:19 це відбувається, коли наш сусідній оцей інший безпілотник має вищий пріоритет, да й менший пей. Це такий пріоритет, так? Так. Тобто також тут, коли ціль досягнута, ми обнуляємо швидкості, і коли треба пропустити більш пріоритетний дрон. Також обновляємо швидкості. Тоді подальші кроки не виконуються, відбуваються економії обчислень. Так, далі йдуть у нас уже оці наступний крок: ці компоненти розраховуємо силових полів.
00:26:20 Значить, а які це компоненти? то вже мій комп'ютер починає та свою діяльність так зараз або Третій крок - це вже компонентів цих потенційних полів. Які тут є компоненти? Перша основна компонента, оскільки це цільовий рух, це притягання до цілі.
00:27:21 Ця компонента. Вго у нас складається з дробу так, і з множника. Ну, множник показує, наскільки сильно треба відносно там інших компонентів, наскільки сильно треба враховувати, скажем, потужність у цього притягання до цілі. Вже в програмі реалізації ми бачимо приблизні. Параметри цих коефіцієнтів. Так, і далі ми тут що беремо? Ми беремо положення позицію цільової точки і позицію
00:28:18 нашого цього об'єкта, безпілотника і того, і нормуємо. Тобто кожну координату, координату цієї різниці, ми ділимо на норм цієї різни Тобто, якщо у нас координати в чисельнику у нас стоїть векторна величина, яка має там відповідно до кількості корднаних у селі компоненти, а в знаменнику стоїть.
00:29:08 Відаль сама скалярна величина, так? І ясно, чим, чим менше ця скалярна вчина, тим зараз так Ну тут просто напрямок, тобто в результаті в нас, ми отримаємо цього ділення, ми отримаємо, якщо без епсунок, то ми отримаємо просто напрямок. Якщо подивитися, норму оцього
00:29:56 вектора результуючого цього дробу, то його довжина цього вектора буде дорінь до одиниці. Тобто ми тут суто напрямок розглядаємо, без величини, Але бачимо, що тут у нас ще присутній знаменку епсил. Значить, епсилон присутній для того, щоб робити плану зупинку при підході до цільової точки. Коли у нас ця віддаль стає між цільовою поточною точкою достатньо малою. То у знаменнику епсилон - це якась невелика величина. знаменнику ця різниця порівняно з епсилом стає малою.
00:31:00 І, відповідно, і чисельнику тут пекторні вуличини не також невеликі, і починає в цьому дробі домінувати величина Епсила. Якщо чисельник, тобто знаменник у нас домінує або достатньо великий, той сам дріб стає достатньо малий. Тобто наш цей напрямок, із одиничного, якщо в нормальних умовах цей вектор є одиничним, то за рахунок цього епсил при наближенні до цілі він
00:31:47 наближається до мильового веду. І таким чином забезпечується зупинка або плавна зупинка цього безпілотника при підльоті до цілі. Там зупинка чи пригальмування. Так, тепер. Інша сила тут абсолютно інше, ми бачимо по формулах, це є обчислення. Сигнала або числення управління, яке нам забезпечує
00:32:33 уникання перешкод, так, обстектус в англійській перешкода. Хочмове Опс. Так і тут отаке співношення, значить, для уникання інших перешкод ми бачимо, що тут йде різниця обернених дробів. Якщо віддаль між Так, М це в нас зараз зараз, це в нас індекс, індекс перешкоди, І, це в нас індекс нашого об'єкту. Тобто, якщо
00:33:36 так. Індекс. Так, якщо віддаль нашого об'єкту до перешкоди стає невеликий. Ну так, Допустика, можна сказати, недопустима, то тоді треба якось включати механізм оминання цієї перешкоди. Якщо ж відстань - В нашої перешкоди до нашого об'єкта достатньо велика, то ми навіть далі ніяких дій не робимо. Тобто не тратимо ресурси на врахування якихось далеких перешкод. Перешкоди, вплив перешкоди враховується тільки коли ми вже наблизились до цієї перешкоди. Близько, так?
00:34:38 І тому так, тут ще також є Р і РИРМ, Це радіус нашого об'єкта, радіус перешкоди, це та відео, ближче до якої ми не можемо наблизитися. Тобто, навіть якщо ми, скажемо, зупинились на перешкоді, то мінімальна відстань між безпілотником, між центром безпілотника і центром перешкоди буде РИ плюс РН. Так, радіус, сума радіус. І тому, коли ми розглядаємо віддаль, то вона не може бути менше цієї віддаль, тому вона повинна завжди зменшуватись на суму цих радіосів.
00:35:43 Так, і якщо ця віддаль достатньо велика, так, то в нас цей знаменник буде набагато більший, ніж детект, а дедетарце допуск на ті віддалі, які впливають на наших безпілотних, так. Тобто вважаємо, що наш, В принципі, наша перешкода мало впливає? І відповідно ця різниця. Так, у нас виходить від'ємне. Тобто від меншого числа ми віднімаємо більше. Хоча тут, навпаки,
00:36:43 де дедетект менше, а ця різниця більша, але ми перейшли до оберних величин і тому навпаки перший доданок буде. Невеликий, другий доданок буде великий. Бачимо перший доданок знаком плюс, другий знаком мінус. Тобто, результат оцих дій в душках буде від'ємний. Ну і можна поставити в перевірку, якщо відповідна компонента від'ємна, то ми далі ніяких обчислень не проводимо. Але коли ця величина вже є додатня, тобто
00:37:31 впливає наша. Перешкода, вона вже повинна бути врахована. Не можна її ігнорувати, щоб не зіткнутися. То тоді оця різниця вже відповідно стає додатньою. І ми будуємо напрямок на цю перешкоду, бачимо, що це є різниця векторних величин нашого безпілотника і векторні точки, що показують координати перешкоди. Ціниця є векторна величина, а ділиться на скаляр на віддаль також. Тобто ми рахуємо тут напрямок на перешкоду.
00:38:28 І також є компонента, яка показує, наскільки швидко ми повинні, який коефіцієнт, який показує, наскільки швидко ми повинні реагувати на ближення до перешкоди. Так, йдемо далі. Так, ну, це пояснення, що коли ми підлітаємо близько, роль е, вплив на алгоритму Зіткнень, а це уникнення. Зіткнь, так, так.
00:39:15 Так, пояснення, як оце, що тільки що говорили, як уникнути перешкод. Це вже в деталях. Так. Також одиничний вектор. Так. А тепер ще в нас є об'єм компонент цього поля, який треба враховувати, це є взаємодія між дронами. Тобто, також
00:40:02 навіть це складніше, ніж перешкоди, бо перешкоди, як правило, це статичні, а дрони рухаються, і треба нам уникати зі сторони. Тут уже не передбачається, по-моєму, а, зупинки є, зупинки вже враховують. Тут передбачається зупинки, але коли скажемо, треба враховувати вплив інших дронів. Тому що також з граї дронів може бути, чи в хмарі цих дронь, можуть бути і десятки, і сотні цих. Об'єктів і
00:40:53 не треба реагувати на якісь віддалені об'єкти. Треба реагувати тільки на найближче. Найближчі ці літаючі об'єкти, з якими можна зіткнутися. Тому тут бачимо такий же самий механізм, різниця двох дробів, коли будемо реагувати, коли не будемо, одиничний напрямок, на відносно вектора. Взаємодії цих цих дронів і того і йотого, так. Тут нормативний множник ділиться і також
00:41:45 множиться на коефіцієнт відносно впливу цих. Так, цих дронів. Так, цього відштовху. Штовхуні між дрони. Також ще є одна у нас. Це сюди, одна компонента. Коли ми наближаємося до дронів, то ми можемо робити. Особливо якийсь на зустрічному русі, робити переміщення між ними з допомогою правила правого гвинта або правих дверей. Коли вони будуть рухатися
00:42:44 відносно такої початкової траєкторії зміщатися вправо. Вправо і кожен по своєму руху буде зміщатися вправо. І таким чином, вони ніби будуть рухатися по колу в праву сторону, і якщо дивитися загальну картину, що один буде рухатися вправо, інші вліву, то, що назустріч, і вони таким чином розійдуться. Розійдуться, значить, тут відповідно, також виникає рекомендація на зміну руху. Півний корцієнт нормувальний. Так, також враховується
00:43:40 близькість цього, э, цього, дрона із яким ми зближаємося. І також є у нас тут такий матричний множник, який показує зміщення координат, що забезпечує розвернення, розворот в правий бік. Тому так, таким чином ми будемо забезпечувати зміщення цих об'єктів, коли вони рухаються по зустрічних курсах. Так, і в кінці ми говорили, що є інтегруючий такий компонент, а значить, ми всі рекомендації по швидкостях сумуємо, по цілі, по перешкодах, по дронах і по зміщеннях при
00:44:52 розминанні цих дронів, розминування, чи там, коли вони уникають один одного, так, обходять один одного, це В-РАЙТ, так, по правилу правила винта. І єдина ще буде корекція, що, якщо ми просумуємо ці швидкості, то сумарна швидкість рекомендована може перевищувати допустиму швидкість дрона. Дрон може трошки скинути швидкість, але вище, ніж його максимально, допустимо, він не зможе миттєво переміщатися там дуже швидко. І тому. Потрібно коригувати, значить, цю рекомендовану швидкість для того, щоб врахувати максимально можливу швидкість дрон.
00:45:57 Значить, якщо ця сумарна швидкість менша за максимальна, то ми нічого не робимо. А якщо вона більша максимальна, то відповідно ми тут бачимо векторний компонент, а ВТО, так, ділимо на її норму, тобто переходимо до одиничного вектора, а потім множимо на В максимальне. Тобто, якщо наша рекомендована швидкість більша за В максимальне, то ми рекомендуємо рухатися ці швидкістю В максимальне по амплітуді, але в тому напрямку, в якому було розраховано.
00:46:53 Відповідних форматах та правило правого винта бачимо, бачите? Дрон Б і дрон А. Так, вони рухаються на зустріч. Так, і. Дрон А рухається вправо, а дрон Б також відносно свого положення рухається вправо, але ми бачимо з точки зору строннього спостерігача, він рухається ніби нерухомо, рухається вліво. Таким чином, по колу вони розминаються. Це є дія правила правого.
00:47:51 Так, і от ми маємо ця матриця, яка забезпечує поворот, по головній діагоналі нулі і у вічних 1 мінус 1, вона забезпечує нам поворот вправо. Це связано літичний метри перший курс. Так, далі коррекції. Також тут знову ж таки оця різниця оберних дробів, тобто оберних величин, різниця дробів, для того, щоб коли вони
00:48:41 ці безпілотники на великій відстані, коли ця різниця стає від'ємна, то ми не враховуємо цю необхідності правого гвинта, а Вони просто собі летять без врахування в землі впливу. Так, далі. І ми вже переходимо до програмної реалізації, значить, ми її вже почали розглядати. Починається програмна реалізація із класів, які моделюють.
00:49:29 Рух окремого дрона. Так, бачимо, що є. Цей клас має. Метод ініціалізації, який там нам дозволяє створити екземпляри, потім створювати екземпляри, об'єктів по цьому класу. Бачимо, що деякі параметри фіксовані. А решта тут у нас. Ні, в принципі, так, деякі параметри фіксовані, а решта вільні, які ми можемо задавати відносно тієситуації, яка в нас є, а як в конструкторах з
00:50:27 параметри цього класу, скажімо, об'єкту, що буде відповідати цьому класу, беруться із вхідних параметрів. Значення звичайний присвоюються. Так,, Так, снова записывать так и тут у нас и тут у нас, селфкопі. О, є копі.
00:51:18 Крім того, що задаються в нас параметри по дронах, але також до кожного до кожного з цих дронів створюється пустий словник для траєкторії, який цей дрон буде будувати, цю траєкторію, яку буде реалізовувати. І він буде запам'ятовувати свою траєкторію, щоб потім ми могли при візуалізації показати, як він рухався. Відповідний метод. Копій використовується так? Описаний для чого він використовується?
00:52:20 Обчислені комп'ють велосипед і обчислення швидкості. Це ключовий також для руху нашого. Наших безпілотників ключовий метод. Так. Далі задаються у нас ці допуски, щоб реагувати чи не реагувати на близькість об'єктів. Перевірка з а, перевірка пріоритетів на тимчасово зупинка. Так, якщо в сусідньому. Зараз
00:53:18 вже він зупинений так. Ага, сел із вейтинг. Тобто, для початку ми стан вейтинг, відкидаємо, задам як хибний, для всіх сусідніх дронів. Зараз е сусідній дрон, відповідний сусідній дрон.
00:54:07 Це певно цикл по всіх сусідніх дронах йде. Не бачу, але конкретно по так. Або фоазер і дрони цикл по по всіх дронах, крім нашого, так, омерлізованого. Так, якщо.
00:54:54 Станом цього сусіднього дрона є такий, що він досяг мети, то далі обчислення ми не робимо для нього. Так, далі, якщо сусіднього дрона вищий пріоритет. Тобто, ну, менш вищий пріоритет, це означає, що менш, менший рівень, менший пріоритет. Якщо по ІФУ, цей інший має нижчий пріоритет, ніж наш селф, так базовий, то
00:55:39 обчислюється віддань між ними, так. І якщо віддаль вона вже така, що треба реагувати, то тоді. Якраз стан стан зупинки нашого дрону, селф із вейтінг, по будь-якому з тих, щоб близько підійшов дрон і він має вищий пріоритет, то наш має зупинитись, перейти в стан із вейтінг, і відповідно. Вектор швидкостей однули.
00:56:30 Демо далі. Вектор притягання до цілі реалізується згідно з формулою, як вже детально, взаємодія з іншими дронами також поформлені Тут є амплитуда магнитю так обчисли и
00:57:16 Так, дірекшн. Ага, дірекшн є у нас обчислений. До віддаль, віддаль до іншого. поділено на відповідно поділено на тут векторна величина в чисельнику в знаменнику, віддаль між ними, але скалярна. І плюс епсилон. Епсилон - тут взято 10 мінус пятый. Чина. Так, це є напрямок.
00:58:05 А, макс магнитю. Чатку. Счастливо обчислюємо амплітуду, а потім вже дійсно рекомендована швидкість. Це буде напрямок помножити на На максимально ага. Декомендовану амплітуду, якщо вона додає. Бачимо, бо максимум тут з двох виразів, з цієї амплітуди із нуля. Тут забезпечується додать. І далі ще йдеться відхилення по правилу правої руки. Так.
00:58:57 Далі. Також, ну, тут стріма, чи там не стріма, перешкодами. Взаємодія з перешкодами. Також будується таке саме оминання цих перешкод, на, скажемо, на оминання такий вектор на оминання перешкод, рекомендація по швидкості, так, подібне, як ми розглядали. І підсумковий вектор. Підсумковий вектор бачимо 4 компоненти.
00:59:50 Ну, по цілі, понеканню інших дронів, по правилу правої руки і по оминанню перешкод. Всі ці рекомендації сумуються і в кінці ми ще й перевіряємо, чи ця рекомендація не виходить за максимальну швидкість. Якщо виходить, то ми пропорційно всі координати зменшуємо так, щоб не вийти за межі максимальної швидкості, але зберегти напрямку.
01:00:47 І після того, як ми попорахували цю швидкість, тота, так би тота. Ми здійснюємо переміщення або міняємо положення нашого цього дрону, множичи швидкість на дельта Т, щоб через один крок перейти до наступної точки, і записати оця цю положення, записати в. В словник траєкторії. Так, а тепер. щоб перейти до того, що ми в принципі не розглядали.
01:01:37 Тепер, як це було моделювання руху окремого дрона, а тепер як ріть ріть? Рід будемо долюватися. Так, формується у нас клас для рою. Так, для відповідні пусті конфігурації, які потім будуть заповнені. Так, і отут вже додаємо дОбстакл, значить, додаємо метод для. для
01:02:28 включення перешкоди в нашу цю в наш цей характеристику рою Додаємо, також метод йде для додавання э цього. Безпілотника врій і також є метод для імітації розрахунку цих рухів, що відбуваються в рої. Так, зокрема, тут бачимо, що обмеженими ці імітаціями обмежуємося кількістю кроків триста так.
01:03:31 Так, общественкости І тут спеціальний спеціальне оновлення цих положень. Бачите, що ми тут
01:04:18 закоментовано. Ну, бо воно пояснюється, а далі можливо. П'ятому розкоментував. О тут. Отак. Це також пояснює. Це має бути. Ну, це вже пояснює, чому зіп. До коду модуля. От воно вже туди використовується, пішло вже в коді. Значить, у нас, оновлення. швидкостей відбувається чи вновне положення дроню,
01:05:04 при обчислених швидкостях відбувається допомога оператора ЗІП, коли одночасно по всіх дронах відбувається оновлення швидкостей, а тоді вони міняють своє положення. Щоб так не вийшло, що один дрон поміняв. Своє положення, а інші вже мають під нього підлаштовуватися. І якщо він перший в списку, то він все буде мати переваги, що він вже поміняв першим положенням, інші ще мають підлаштовуватись, а тут всі будуть при використанні цього оператора ЗІП, всі будуть в однаковому положенні. Спочатку для всіх перерахуються швидкості, а потім всі поміняють своє положення вже відповідно до перерахованих швидкостей. Далі йде метод візуалізації, зображень
01:06:10 і. Є формування. Кокретно у нас у конфігурації для імітації? Значить, у нас є. Зараз здесь мой бути як показано як три перешкоди
01:07:06 Але скільки би там не було перешкод, але показано, що всі параметри всіх цих перешкод однакові. Тобто однакові коло однакових радіусів, так. Далі ті траєкторії, які ми в ході імітації набудували, тут також візуалізується а точки, якщо були зупинки, то там
01:07:57 Є відповідно рейтинг івентінгс є відповідний параметр у нас. І по значенню по цьому параметру, і буде відмальована точка тимчасової зупинки. Ну і далі там для візуалізації ці наші пай плот так параметри задаються, Значить, здається, вже реалізація імітації з кроком по часу 0-1. А, отут уже в нас є три перешкоди, там було передчасно написано. От є три перешкоди. Використовується метод дОбстек, задаються
01:08:53 різні координати центрів, різні раді. Так, різні раді уси, в принципі, так. Також задаются Здаються так, пріоритети дронів. Так, пріоритети один, два, три так.
01:09:55 Для кожного дрона задається точка старту і точка його фінішу так. За відображення. Так, відповідно, всі дрони у нас різного кольору. Задаються так. Ага, бачимо, що тут буде задано цикл у
01:10:44 У Третрі проходження по циклах від нас одя цих ітерацій у нас буде реалізовано три дрони, от ад-дрони, так, будуть відповідні їхні ідентифікатори через І плюс один пріоритет Із списку кольорів, тобто всі будуть різного кольору. І на кінець запускається на виконання, і також запускається візуалізація. В результаті ми приходимо до того малюнку, який ми вже розглядали.
01:11:46 Так, отакі трикольорових цих наших траєкторії, значить, три наших дрони розглядаються, по один дрон буде мати тимчасову зупинку. Так, що тут ще можна сказати, вони всі оминаються, огинають перешкоди. Так, отут і тут огнаються перешкоди? всіх так якраз
01:12:31 так і крипто того, тут десь перетинають траєкторії руху дронів і один з дрон з меншим пріоритетом. З пріоритетом 2. Він зупиняється, щоб пропустити дрон. Синій дрон з пріоритетом один. Якраз так співпало, що ми ще могли перетнутися, тому дрон 2 зупинився. І тут ми бачимо, що тут не йшло розминання дронів один із тронів призупинився, пропустив більш пріоритет. А уже по погинанні тут
01:13:23 відносно перешкод відноси рух поколу, і таким чином ми огинали перешкоди. І бачимо, що кожен із цих безпілотників досягнув своєї мети, ніде не зіткнулися. Таким чином, здавалося би, не дуже очевидний цей алгоритм нам забезпечив, що реалізовано достатньо таку непросту ситуацію, коли кожен дрон досягнув своєї мети і обминув перешкоди між собою місце. Значить, на цьому ми нашу
01:14:19 першу частину заняття закінчуємо. Якщо немає питань, то ми йдемо на перерву. Так, на чути. Питань немає, так. І вже через 20 хвилин тоді зустрінемося. Наступне заняття у нас вже буде по моделюванню роєвої. Роєвого переміщення, воно, в принципі, простіше, бо тут ми бачимо, кожен дрон має свою мету. Оце вже кінцева ситуація, коли на одну ціль один дрон, так. А коли йде
01:15:07 йде вихід на ціль, то там вже зручніше керувати ними в комплексі, як рої. В цілому, то ми розглянемо це наступно. Тому зараз перерва на двадцять хвилин. Дякую.
01:48:00 Технічні проблеми в Романе Мирославовиче. Зараз ми його підключимо, я передаю права. Почекайте трошки. Дякую.
01:50:30 Так, я вижу, например, Але воно мене вибуває з нас. Давайте, може, через годину зробимо перерву. І через годину зайдемо. Або зробимо вихідний. Ще це я не вам, це я Роман Мирославичу. Це не з вам. Вони чекайте, зараз перше, давайте спробуємо з другого, Роман Мирославич. А може просто спорити? Створити зумпосилання в айбергрупі? Так, зараз почкайте. Я попробую зараз створити скептом. Постановки не було інтернет, я думаю, що в них. Так, тут вже можна спершу годі.
01:51:28 Так, история. Вже вона не підключає, бо не може час між. Ні, твого немає, там воно немає ліміту. Так. А ви не можете зайти. Я заходжу, я їх бачу, і в мене зразу. О, тепер ми вас бачимо і чуємо. Можливо, ви з одного аккаунта алогінатись. Та я баю також вас бачу, чую, але вони мене сказуть кидають. Ага, одиннадцять хвилин пройшло із.
01:52:19 Роман Мирославович, давайте ми зробимо, можливо, у вас з'явиться світло і на другу годину почнемо. Просто той садик, а я відкрию новий. Скинете на модіжку. Так, тобто я спори і смамина, так, так, ну, просто обмеження на час. Тут немає ліміту. Немає, але мені пише. Так, окоп, копчика.
01:53:31 А скажите ласка, чего я два поласен чешина? Сьогодні п'ятниця сьогодні, все можливе. Я думаю, що це кізглюк. Павло, ви нас чуєте? У вас два? Китайці шифрується. Це вы, все добре, я вас не