Сторінка 1 / 42Перегляд дипломного проєкту
Інформація про дипломний проєкт та текст для пошуку
«Створення наземного дрона на базі платформи Arduino (Програмна частина)»
Автор: Артьоменко Д.А.. Спеціальність: 123 Комп'ютерна інженерія. Освітня програма: Комп’ютерні системи та мережі.
Міністерство освіти і науки України
ВІДОКРЕМЛЕНИЙ СТРУКТУРНИЙ ПІДРОЗДІЛ
«ПЕРВОМАЙСЬКИЙ ФАХОВИЙ КОЛЕДЖ»
Національного університету кораблебудування імені адмірала Макарова
Відділення «Інформаційних технологій»
Комп'ютерних технологій
(циклова комісія)
Пояснювальна записка
до дипломного проєкту
_______фаховий молодший бакалавр_______
(освітньо-кваліфікаційний рівень)
на тему: «Створення наземного дрона на базі платформи Arduino (Програмна
частина)»
Виконав: студент 4 курсу, групи 411-КІ-20
спеціальності
123 Комп’ютерна інженерія
(шифр і назва спеціальності)
Артьоменко Д.А.
(прізвище та ініціали)
Керівник Бойко Д.А.
(прізвище та ініціали)
Рецензент Бесараб І.С.
(прізвище та ініціали)
Первомайськ - 2024 року
ЗМІСТ
Вступ
3
1 Дослідження та аналіз вимог до створення програмної частини наземного
дрона на базі платформи Arduino
5
1.1 Формування вимог до програмного забезпечення
5
1.2 Огляд існуючих рішень
6
1.3 Дослідження середовища програмування
13
2 Створення програмної частини керування наземного дрона на базі
платформи Arduino
21
2.1 Архітектура програмного забезпечення
21
2.2 Алгоритми керування рухом та навігацією
22
2.3 Взаємодія з датчиками та обробка даних
29
2.4 Реалізація режимів роботи та керування
31
2.5 Тестування та налагодження програмного забезпечення
33
3 Охорона праці
35
3.1 Аналіз умов праці
35
3.2 Гігієна праці та виробнича санітарія
36
3.3 Пожежна безпека виробничого приміщення
37
3.4 Виконання розрахункової частини
38
Висновок
41
Література
42
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Розроб.
Артьоменко Д.А.
Перевір.
Бойко Д.А.
Рецензент Бесараб І.С.
Н. Контр.
Ткаченко Т.І.
Затверд.
Островська І.О.
Підпис
Дат
а
Літ.
Арк.
Аркушів
«Створення наземного
42
2
дрона на базі платформи
Arduino (Програмна
ВСП ПФК НУК 411-КІ
частина)»
ВСТУП
Наземні безпілотні транспортні засоби (Unmanned Ground Vehicles, UGV)
або наземні дрони знаходять все більше застосування в різноманітних галузях
людської діяльності. Їх використовують для виконання завдань у небезпечних,
важкодоступних або монотонних умовах, замінюючи людину та мінімізуючи
ризики.
Об'єктом дослідження є сукупність технологій, методів, інструментів та
підходів, що використовуються для програмування систем керування наземними
безпілотними транспортними засобами.
Предметом дослідження даного дипломного проєктування є процес
створення програмного забезпечення, призначеного для управління наземним
дроном.
Метою даного дипломного проєктування є дослідження підходів та
технологій програмування систем керування наземними дронами, аналіз існуючих
програмних рішень, інструментів розробки, формування вимог до програмного
забезпечення для конкретного дрона на базі платформи Arduino та реалізація такого
програмного забезпечення.
У першому розділі розглядаються існуючі програмні рішення для дронів, їх
переваги і недоліки, досліджується середовище розробки Arduino IDE та доступні
бібліотеки і фреймворки, формуються основні вимоги до функціоналу та
алгоритмів програмного забезпечення керування дроном.
Другий
розділ
присвячений
практичній
реалізації
програмного
забезпечення для керування наземним дроном на платформі Arduino відповідно до
сформованих вимог. Описуються використані підходи, алгоритми, бібліотеки та
архітектура розробленого програмного комплексу.
Третій розділ присвячений розгляду питань охорони праці при розробці
програмного забезпечення, аналізуються умови праці, вимоги з гігієни та санітарії,
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
3
пожежної безпеки, виконується розрахункова частина щодо відповідності робочого
місця нормативним показникам.
Результатом даного дипломного проєктування є детальний аналіз
технологій і особливостей програмування наземних дронів, формування технічних
вимог до їх програмного забезпечення, практична реалізація програмного
комплексу для керування дроном на платформі Arduino, а також висвітлення
питань організації безпечних умов праці при розробці такого роду програмних
систем.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
4
1 ДОСЛІДЖЕННЯ ТА АНАЛІЗ ВИМОГ ДО СТВОРЕННЯ ПРОГРАМНОЇ
ЧАСТИНИ НАЗЕМНОГО ДРОНА НА БАЗІ ПЛАТФОРМИ ARDUINO
1.1 Формування вимог до програмного забезпечення
Для створення ефективного програмного забезпечення керування дроном
необхідно детально визначити та описати необхідні функції та алгоритми. Одним з
ключових компонентів є алгоритми руху – рушійний код для керування швидкістю,
напрямком, прискоренням, гальмуванням та маневруванням дрона. Ці алгоритми
повинні забезпечувати точне та своєчасне виконання команд керування,
враховуючи обмеження апаратного забезпечення та динамічні характеристики
дрона.
Важливим аспектом є методи автоматизованої навігації, такі як алгоритми
об'їзду перешкод, слідування траєкторіям тощо. Ці алгоритми повинні дозволяти
дрону автономно пересуватися у складних середовищах, уникаючи зіткнень та
досягаючи цільових точок ефективним шляхом.
Програмне забезпечення також має передбачати підходи до керування
дроном з пульта або мобільного додатку, надійні способи приймання та обробки
команд користувача. Ця функціональність має бути добре інтегрована з іншими
компонентами системи керування.
Управління режимами роботи дрона є критично важливим аспектом.
Потрібно чітко розмежувати різні режими, такі як ручне керування та автопілот.
Перемикання між режимами має бути безпечним та зрозумілим для користувача.
Взаємодія з датчиками передбачає методи опитування, фільтрації та
інтерпретації даних з різноманітних сенсорів та модулів, таких як акселерометри,
гіроскопи, камери та інші. Ці дані є основою для прийняття рішень щодо керування
дроном, тому їх обробка має бути ефективною та надійною.
Важливо визначити стратегії збереження енергії та обробки аварійних
ситуацій. Це включає способи оптимізації енергоспоживання для максимізації
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
5
тривалості польоту, а також чіткі алгоритми дій у разі відмов компонентів, втрати
зв'язку, низького заряду батареї та інших критичних станів. Належне реагування на
такі ситуації є ключовим для безпеки.
Визначення всіх ключових алгоритмів на ранньому етапі дозволить
спроєктувати продуману, надійну та ефективну архітектуру програмного
забезпечення для керування наземним дроном. Детальний опис функцій та
взаємозв'язків між компонентами системи забезпечить міцну основу для подальшої
успішної реалізації.
1.2 Огляд існуючих рішень
Наземні дрони, також відомі як безпілотні наземні транспортні засоби
(UGV), мають широкий спектр застосувань у різних галузях. Їх використовують
для
виконання
різноманітних
завдань,
які
можуть
бути
небезпечними,
монотонними чи важкодоступними для людини.
У військовій сфері наземні дрони відіграють важливу роль у розвідувальних
операціях, патрулюванні та спостереженні за територією. Вони можуть проникати
у важкодоступні зони, виконувати завдання з розмінування та транспортування
вантажів, зменшуючи ризики для життя солдатів. Деякі дрони оснащені
озброєнням для ведення бойових дій.
В аварійно-рятувальних операціях дрони допомагають у пошуковорятувальних роботах після стихійних лих, таких як землетруси, повені чи зсуви.
Вони можуть доставляти припаси, медикаменти та обладнання у важкодоступні
райони, а також проводити моніторинг ситуації та оцінку збитків.
У
сільському
господарстві
наземні
дрони
використовуються
для
моніторингу стану посівів, картографування полів, розподілення добрив та засобів
захисту рослин, а також для автоматизованого збору врожаю. Вони можуть
виконувати ці завдання з високою точністю та ефективністю, зменшуючи потребу
у ручній праці.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
6
Сфера інспекції та моніторингу є ще одним важливим застосуванням дронів.
Вони можуть проводити інспекцію інфраструктури, таких як нафтогазові труби,
лінії електропередач, мости, будівлі та споруди. Дрони забезпечують безпечний та
детальний огляд, виявляючи потенційні проблеми чи пошкодження.
У логістиці та доставці автономні наземні дрони використовуються для
транспортування вантажів на складах, у логістичних центрах, а також для доставки
товарів на останній милі. Це дозволяє оптимізувати логістичні операції та
зменшити витрати.
Наукові дослідження також широко використовують наземні дрони для
картографування місцевості, геологічних досліджень, моніторингу навколишнього
середовища та вивчення важкодоступних регіонів.
Різноманітність застосувань наземних дронів зумовлює необхідність
розробки гнучкого, адаптивного та надійного програмного забезпечення, яке б
враховувало специфічні вимоги різних галузей та забезпечувало безпечну та
ефективну роботу цих пристроїв.
Для успішної розробки програмного забезпечення для керування наземним
дроном необхідно ретельно вивчити існуючі програмні платформи, фреймворки та
інструменти, які вже використовуються в цій сфері.
Одним з найпопулярніших рішень є Robot Operating System (ROS) – гнучка
система з відкритим кодом для створення програмного забезпечення для роботів.
ROS забезпечує набір інструментів та бібліотек для полегшення розробки,
включаючи засоби для абстрагування апаратного забезпечення, передачі
повідомлень, управління пакетами, запуску процесів тощо. Багато проєктів з
розробки дронів використовують ROS через його функціональність та активну
спільноту розробників. ROS підтримує різні мови програмування, такі як C++,
Python та Lisp, що дозволяє розробникам вибрати зручну для них мову. Крім того,
ROS пропонує гнучке середовище для інтеграції різних компонентів, таких як
алгоритми комп'ютерного зору, планувальники траєкторії, системи керування та
багато іншого.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
7
Також є низка рішень які є подібними до ROS.
MOOS-IvP (Mission Oriented Operating Suite - Interval Programming) є
автономною системою керування з відкритим кодом, призначеною для морських
роботів і суден. Вона забезпечує гнучкий і модульний підхід до розробки складних
автономних систем, дозволяючи легко інтегрувати різні алгоритми та сенсори.
MOOS-IvP широко використовується в наукових дослідженнях та промислових
застосуваннях, пов'язаних з автономними підводними транспортними засобами,
безпілотними надводними суднами та іншими морськими роботами.
MOOS-IvP була розроблена в Массачусетському технологічному інституті
та Оксфордському університеті. Вона пропонує потужний інструмент для
програмування поведінки під назвою IvP Helm, який дозволяє визначати та
об'єднувати різні цілі та обмеження в єдину стратегію керування. MOOS-IvP
широко використовується в наукових експедиціях, військово-морських операціях,
а також у комерційних додатках, таких як гідрографічні зйомки та нафтогазова
промисловість.
Orocos (Open Robot Control Software) є відкритою програмною платформою,
розробленою для полегшення створення робототехнічних та систем керування
реального часу. Вона пропонує модульний підхід з акцентом на повторне
використання коду, забезпечуючи гнучкість і масштабованість. Orocos широко
використовується в академічних і промислових проєктах, пов'язаних з різними
типами роботів, включаючи промислових, сервісних і мобільних.
Orocos має активну спільноту розробників та підтримується Європейською
комісією та різними дослідницькими інститутами. Платформа забезпечує жорсткі
вимоги реального часу, гнучку модульну архітектуру та підтримку різних
операційних систем, включаючи Linux та RTAI (Real-Time Application Interface).
Orocos широко використовується в таких галузях, як промислова автоматизація,
медичні роботи та польова робототехніка.
YARP (Yet Another Robot Platform) є програмною платформою з відкритим
кодом, розробленою для полегшення створення робототехнічних додатків,
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
8
особливо для гуманоїдних роботів. Вона забезпечує інтерфейси для спілкування
між різними модулями та компонентами робота, а також надає інструменти для
візуалізації, запису та відтворення даних. YARP широко використовується в різних
робототехнічних проєктах, особливо тих, що пов'язані з гуманоїдними роботами та
дослідженнями в галузі штучного інтелекту.
YARP була розроблена в Італійському інституті технологій (IIT) для
полегшення розробки додатків для гуманоїдних роботів та інших складних
робототехнічних систем. Вона забезпечує абстракцію апаратного забезпечення, що
дозволяє легко перенести код між різними роботизованими платформами. YARP
також включає інструменти для налагодження, візуалізації та запису даних, що
полегшує розробку та тестування робототехнічних додатків.
Arachna – це програмна платформа для розробки автономних роботизованих
систем, особливо для наземних транспортних засобів. Вона пропонує гнучку
архітектуру та набір інструментів для інтеграції різних алгоритмів, сенсорів та
актуаторів у єдину систему. Арахна використовується в проєктах, пов'язаних з
автономними наземними транспортними засобами, такими як безпілотні
автомобілі та робототехнічні транспортні засоби.
Арахна
була
розроблена
в
Технічному
університеті
Дармштадта
(Німеччина) для автоматизації наземних транспортних засобів. Вона пропонує
гнучку архітектуру з чіткою модульністю та ізоляцією помилок, що дозволяє легко
інтегрувати різні алгоритми та компоненти. Арахна також забезпечує підтримку
різних
апаратних
платформ,
включаючи
автомобілі,
квадрокоптери
та
робототехнічні рукавички.
Іншим поширеним рішенням є ArduPilot – відкрита програмна платформа
для автономних дронів та наземних транспортних засобів. ArduPilot базується на
Arduino і підтримує широкий спектр апаратного забезпечення. Ця платформа
пропонує потужні інструменти для програмування польотних контролерів, модулів
датчиків, навігації та інших компонентів дрона. ArduPilot є дуже гнучкою і може
бути налаштована для різних типів дронів та застосувань. Вона також має велику
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
9
спільноту розробників і користувачів, що забезпечує постійну підтримку та
вдосконалення.
Проте, ArduPilot була розроблена переважно для безпілотних літальних
апаратів, тому її використання для наземного дрона може вимагати суттєвих
модифікацій та адаптації.
Окрім цих фреймворків, існує безліч бібліотек та інструментів для
програмування дронів на різних мовах програмування, таких як Python, C++, Java
та інші. Наприклад, бібліотека DroneKit для Python дозволяє створювати програми
для керування дронами з підтримкою ArduPilot та PX4. А фреймворк MAVROS для
ROS забезпечує зв'язок між ROS та автопілотами MAVLink. Ці бібліотеки можуть
значно спростити розробку, надаючи готові рішення для спілкування з дроном,
обробки телеметричних даних, планування місій та багато іншого.
Крім того, багато ентузіастів та невеликих компаній публікують свої
проєкти присвячені розробці програмного забезпечення для дронів. Такі проєкти
можуть стати хорошим джерелом ідей, бібліотек та прикладів коду. Наприклад,
проєкт Dronecode об'єднує зусилля спільноти з розробки програмного забезпечення
для дронів і пропонує різні інструменти та бібліотеки, такі як PX4 (автопілот),
QGroundControl (наземна станція керування), MAVLink (протокол обміну даними)
та інші.
При виборі програмного рішення для розробки необхідно враховувати
вимоги та обмеження конкретного проєкту, такі як тип дрона, апаратне
забезпечення, функціональність, продуктивність та масштабованість. Іноді
доцільно використовувати комбінацію різних інструментів та бібліотек для
досягнення бажаного результату. Наприклад, можна поєднати ROS для загального
управління дроном та ArduPilot для низькорівневого керування польотом.
Крім вибору відповідних інструментів, важливо також ретельно вивчити
документацію, приклади коду та кращі практики для обраних рішень. Активна
участь у відповідних спільнотах та форумах може допомогти отримати цінні
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
10
поради та підтримку від досвідчених розробників. Слід також враховувати питання
ліцензування та сумісності з іншими компонентами системи.
Загалом, ретельний аналіз наявних програмних рішень є критично
важливим для ефективної та якісної розробки програмного забезпечення для
керування наземними дронами.
Різні системи керування дронами мають свої унікальні особливості та
підходи до програмування. Зокрема, потрібно вивчити алгоритми руху та навігації
– від простих алгоритмів керування швидкістю та поворотом до складних методів
автоматичної навігації та планування траєкторій руху. Наприклад, для реалізації
автоматичної навігації часто використовуються алгоритми глобального та
локального планування траєкторій, такі як RRT (Rapidly-exploring Random Tree),
A*, D* та їх модифікації. Для простого керування швидкістю та поворотом можна
застосовувати ПІД-регулятори або інші методи керування зворотним зв'язком.
Також важливо вивчити способи обробки даних з датчиків та камер, тобто
отримання, фільтрацію та інтерпретацію даних з різноманітних сенсорів, GPSмодулів, камер та систем технічного зору. Наприклад, для обробки зображень з
камер можна використовувати бібліотеки комп'ютерного зору, такі як OpenCV, для
виявлення об'єктів, відстеження руху, побудови карт оточення тощо. Для фільтрації
та злиття даних з інерціальних датчиків часто застосовуються фільтри Калмана або
інші методи оцінювання стану.
Необхідно також ознайомитися з методами передачі даних та зв'язку,
протоколами та бібліотеками для налагодження стабільного зв'язку між дроном,
пультом керування та іншими пристроями. Популярними рішеннями є протокол
MAVLink для передачі телеметричних даних та команд керування, бібліотеки
DroneKit або MAVROS для взаємодії з автопілотами через MAVLink.
Крім того, важливо вивчити структуру та архітектуру програмного
забезпечення, підходи до організації коду, розподілу задач, багатопоточності та
взаємодії компонентів системи. Часто використовуються архітектурні шаблони,
такі як модель "публікація-підписка" (наприклад, через ROS), мікросервісна
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
11
архітектура або монолітна архітектура залежно від вимог до масштабованості,
відмовостійкості та продуктивності системи.
Вивчення особливостей програмування систем керування дронами може
також включати методи забезпечення безпеки та надійності, підходи до
налагодження та тестування програмного забезпечення, вимоги до продуктивності
та оптимізації коду, а також методи забезпечення кібербезпеки та захисту від
несанкціонованого доступу до системи керування дроном.
Аналіз переваг та недоліків різних підходів до програмування є критично
важливим під час огляду наявних програмних рішень. Потрібно критично оцінити
кожне з рішень за низкою критеріїв.
Одним з ключових факторів є продуктивність та ефективність рішення – як
добре воно справляється з обробкою даних у реальному часі, використанням
обчислювальних ресурсів, пам'яті та енергії. У випадку наземних дронів, де часто
задіяні обмежені апаратні ресурси, оптимізація продуктивності є вкрай важливою
для забезпечення безперебійної роботи системи.
Надійність та безпека – ще один критичний аспект, який необхідно
враховувати. Рішення має бути стійким до збоїв, помилок, відмов та інших
аварійних ситуацій, а також забезпечувати належний рівень захисту від зовнішніх
кібер-загроз. У сфері дронів надійність та безпека мають першочергове значення,
оскільки пов'язані з безпекою людей та обладнання.
Масштабованість та гнучкість програмного рішення також є важливими
факторами. Необхідно оцінити, наскільки легко додавати нові функції,
розширювати можливості системи в майбутньому та адаптуватися до змін у
вимогах чи середовищі застосування. Гнучка архітектура та модульний дизайн
можуть значно полегшити подальший розвиток системи.
Складність впровадження та підтримки варто також враховувати. Деякі
рішення можуть бути складними у налаштуванні, розгорненні та підтримці, що
може вимагати значних зусиль та ресурсів. Простота використання та інтеграції з
іншими компонентами системи є перевагою.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
12
Сумісність з різним апаратним забезпеченням – наступний критерій оцінки.
Дрони можуть використовувати різні платформи, плати, датчики та приводи, тому
важливо,
щоб
програмне
забезпечення
могло
працювати
з
необхідним
устаткуванням та легко інтегруватися з ним.
Необхідно оцінити підтримку спільноти розробників та доступність якісної
документації. Наявність активної спільноти, ресурсів для навчання, прикладів коду
та технічної підтримки може значно полегшити процес розробки та вирішення
проблем.
Ретельний аналіз усіх цих факторів для кожного з доступних програмних
рішень допоможе обрати найбільш відповідний підхід, який забезпечить створення
надійного, ефективного та гнучкого програмного забезпечення для керування
наземними дронами.
1.3 Дослідження середовища програмування
Arduino IDE (Integrated Development Environment) є спеціалізованим
середовищем розробки для програмування мікроконтролерів Arduino та сумісних
плат. Вивчення його функціоналу та можливостей є критично важливим для
успішної розробки програмного забезпечення для дрона на базі Arduino.
Насамперед, необхідно ознайомитися з інтерфейсом та основними
інструментами Arduino IDE (рис. 1.2.1). Це включає редактор коду, де відбувається
написання та редагування програм (скетчів), монітор послідовного порту для
відстеження даних та діагностики, а також вікна налаштувань для вибору
використовуваної плати та порту зв'язку.
Вивчення процесу написання, компіляції та завантаження коду є наступним
важливим кроком. Потрібно зрозуміти, як створювати, редагувати та зберігати
скетчі, як компілювати їх у машинний код та як записувати скомпільований код на
Arduino плату для виконання.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
13
Рисунок 1.3.1 Інтерфейс Arduino IDE
Arduino IDE надає доступ до величезної кількості бібліотек та прикладів
коду, що значно спрощує розробку. Потрібно навчитися підключати та
використовувати додаткові бібліотеки для різноманітних функцій, таких як робота
з датчиками, зв'язком, відображенням даних тощо. Вивчення прикладів з офіційної
документації та їх модифікація є корисною практикою для розуміння роботи різних
компонентів та функцій.
Важливо також вивчити можливості підключення та програмування
зовнішніх плат і модулів, сумісних з Arduino. Це можуть бути модулі зв'язку,
різноманітні датчики, двигуни та інші периферійні пристрої, необхідні для
функціонування дрона.
Arduino IDE надає інструменти для відлагодження та моніторингу, такі як
монітор послідовного порту, які дозволяють відстежувати сигнали, виводити
діагностичну інформацію та виявляти проблеми в роботі програми.
Слід розглянути можливості інтеграції Arduino IDE з іншими інструментами
та середовищами розробки. Наприклад, Arduino може взаємодіяти з середовищем
Processing для створення візуалізацій та інтерфейсів, а також з бібліотеками та
фреймворками для роботи з дронами, такими як ArduPilot чи DroneKit.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
14
Ретельне вивчення всіх можливостей Arduino IDE, його інструментів та
інтеграційних можливостей допоможе розробникам ефективно використовувати це
середовище для створення, налагодження та тестування програмного забезпечення
для керування наземним дроном на основі Arduino.
Однією з головних переваг Arduino IDE є величезна кількість сторонніх
бібліотек та фреймворків, які розширюють його функціональність. Використання
відповідних бібліотек може значно спростити та пришвидшити розробку
програмного забезпечення для керування дроном.
Доступні бібліотеки для роботи з різноманітними датчиками та модулями,
такими як сенсори відстані, руху, GPS, камери тощо. Ці бібліотеки абстрагують
низькорівневу взаємодію з пристроями та надають зручний інтерфейс для
отримання даних, налаштування та керування. Існують також спеціалізовані
бібліотеки для керування приводами та двигунами, зокрема крокових та
безколекторних двигунів, моторних щитів, сервоприводів.
Для організації дротового (UART, I2C, SPI) та бездротового (Wi-Fi,
Bluetooth, RF) зв'язку доступні бібліотеки передачі даних, які спрощують
налаштування, встановлення зв'язку та передачу/отримання даних по різних
протоколах.
Однією з найпотужніших категорій бібліотек є фреймворки для керування
дронами, спеціально створені для розробки програмного забезпечення автопілотів
наземних та повітряних дронів. Прикладами є ArduPilot, PX4 та інші. Ці комплексні
рішення пропонують вбудовані алгоритми керування польотом, навігації, обробки
датчиків та багато іншого.
Крім того, багато розробників публікують свої проєкти в інтернеті з
відкритим вихідним кодом, які можна використовувати для навчання, запозичення
ідей та коду. Ці відкриті проєкти часто містять готові приклади коду для взаємодії
з різними компонентами дронів.
Вивчаючи
функціональність,
ці
бібліотеки
стабільність,
та
фреймворки,
продуктивність,
важливо
сумісність
оцінити
з
їх
апаратним
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
15
забезпеченням, якість документації та підтримку спільноти розробників. Ретельний
аналіз наявних рішень допоможе обрати найбільш відповідні та ефективні
інструменти для розробки програмного забезпечення керування дроном.
Ефективна робота з Arduino IDE вимагає вміння правильно налаштовувати
середовище та здійснювати програмування згідно з рекомендованими практиками.
Одним з ключових аспектів є налаштування плат та модулів, що включає
правильний вибір та налаштування типу плати, порту зв'язку, параметрів
завантаження коду.
Важливо також оволодіти навиками керування бібліотеками, зокрема, як
знаходити, встановлювати, оновлювати та видаляти необхідні бібліотеки через
вбудований менеджер бібліотек IDE. Слід розглянути опції компіляції та
завантаження, такі як налаштування компілятора, оптимізацій, параметрів пам'яті
та інших параметрів для створення ефективного та оптимізованого коду.
Arduino IDE пропонує інструменти відлагодження, як-от монітор
послідовного порту, виведення діагностичної інформації та відстеження значень
змінних і сигналів, що допомагає виявленню та усуненню помилок у програмному
забезпеченні.
Можливості інтеграції Arduino IDE з зовнішніми інструментами, такими як
середовища віддаленого доступу, системи збору даних тощо, також варті уваги. Це
може розширити функціональність та можливості програмного забезпечення для
керування дроном.
Важливо
дотримуватися
кращих
практик
та
рекомендацій
щодо
програмування в Arduino IDE. Це включає правила оформлення коду,
структурування програм, використання бібліотек та організацію файлів проєкту.
Дотримання
стандартів
і
рекомендацій
сприяє
створенню
зрозумілого,
підтримуваного та масштабованого коду.
Розуміння всіх цих аспектів дозволить ефективно працювати з Arduino IDE,
уникати типових помилок та створювати якісне програмне забезпечення для
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
16
керування наземним дроном, використовуючи весь потенціал цього потужного
інструменту розробки.
Хоча існує кілька альтернатив Arduino IDE.
PlatformIO (рис. 1.3.2) – це крос-платформене середовище розробки для
мікроконтролерів, яке інтегрується з популярними IDE, такими як Visual Studio
Code, Atom та CLion. Його основними перевагами є підтримка великої кількості
плат та фреймворків (Arduino, ESP-IDF, Mbed та багато інших), потужний
менеджер бібліотек і сумісність із різними операційними системами. Однак
PlatformIO може бути складним у налаштуванні та використанні для початківців, а
для простих проєктів його функціонал може виявитися надлишковим.
Рисунок 1.3.2 Інтерфейс PlatformIO
Eclipse IDE (рис. 1.3.3) – це потужне середовище розробки з багатьма
функціями, такими як рефакторинг, відладка, автозавершення коду тощо. Eclipse
підтримує численні плати мікроконтролерів через плагіни, що робить його гнучким
інструментом. Водночас, Eclipse має досить складне налаштування, круту криву
освоєння та високі системні вимоги, особливо для великих проєктів.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
17
Рисунок 1.3.3 Інтерфейс Eclipse IDE
Atmel Studio (рис. 1.3.4) – це середовище розробки, оптимізоване для
мікроконтролерів Atmel (AVR та ARM). Atmel Studio пропонує багатий набір
інструментів, включаючи відладчик, профайлер та інші спеціалізовані функції для
розробки вбудованих систем. Однак воно підтримує лише певні платформи Atmel,
має круту криву освоєння та високі системні вимоги.
Рисунок 1.3.4 Інтерфейс Atmel Studio
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
18
У порівнянні (табл. 1) з Arduino IDE ці середовища розробки можуть
пропонувати більше функцій та інструментів, але також є більш складними у
налаштуванні та використанні. Вибір середовища залежить від конкретних потреб
проєкту, рівня досвіду розробника та необхідності додаткових можливостей, таких
як підтримка різних плат, потужні інструменти відладки чи інтеграція з іншими
IDE.
Таблиця 1 Переваги та недоліки середовищ програмування
Середовище
Переваги
Недоліки
Arduino IDE
Проста у використанні та
інтуїтивно зрозуміла для
початківців; орієнтована на плати
Arduino та сумісні аналоги;
велика підтримка спільноти,
багато прикладів та бібліотек;
Обмежена підтримка
плат та фреймворків
сторонніх виробників;
менше налаштовуваності
та можливостей
порівняно з
альтернативами;
PlatformIO
Крос-платформеність; підтримка
численних плат і фреймворків
(Arduino, ESP-IDF, Mbed та інші);
потужний менеджер бібліотек;
інтеграція з популярними IDE
(VSCode, Atom, CLion тощо);
Більш складний у
налаштуванні та
використанні для
початківців; можливий
надлишок функціоналу
для простих проєктів;
Eclipse IDE
Потужне середовище з багатьма
Складне налаштування;
функціями та інструментами
великі системні вимоги
(рефакторинг, відладка,
для складних проєктів;
автозавершення коду); підтримка
численних плат завдяки плагінам;
гнучкість та масштабованість для
великих проєктів;
Atmel Studio
Оптимізований для плат Atmel
(AVR, ARM і т.д.); багатий набір
інструментів для професійної
розробки;
Обмежена підтримка
інших платформ; великі
системні вимоги;
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
19
Отже, вибір середовища розробки залежить від конкретних потреб проєкту
та рівня досвіду розробника. Якщо ви починаєте з мікроконтролерів або маєте
невеликі проєкти, Arduino IDE може бути кращим вибором завдяки своїй простоті.
Однак, для більш складних проєктів або у разі необхідності додаткових
можливостей та інструментів, альтернативи, такі як PlatformIO або спеціалізовані
IDE, можуть бути кращим вибором, незважаючи на більш складну інтеграцію та
налаштування.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
20
2 СТВОРЕННЯ ПРОГРАМНОЇ ЧАСТИНИ КЕРУВАННЯ НАЗЕМНОГО
ДРОНА НА БАЗІ ПЛАТФОРМИ ARDUINO
2.1 Архітектура програмного забезпечення
Одним
з
ключових
елементів
архітектури
є
чітке
розділення
відповідальності між різними модулями та компонентами системи. Кожен модуль
відповідає лише за певну функціональність, що дозволяє уникнути дублювання
коду та спрощує його підтримку. Наприклад, модуль car_control відповідає
виключно за керування рухом автомобіля, тоді як модуль ir_remote займається
обробкою команд з інфрачервоного пульта. Такий підхід забезпечує високу
модульність та інкапсуляцію, що є важливими принципами об'єктно-орієнтованого
програмування.
Крім того, в архітектурі присутні елементи шарованої структури, де кожен
шар взаємодіє з іншими шарами через чітко визначені інтерфейси. Наприклад, шар
взаємодії з апаратним забезпеченням (датчики, двигуни тощо) абстрагується за
допомогою відповідних модулів, таких як ultrasonic або car_control Вищі шари, такі
як алгоритми керування рухом або обробки вхідних даних, взаємодіють з нижчими
шарами через ці інтерфейси, не маючи прямого доступу до апаратного
забезпечення. Така шарована структура підвищує гнучкість та масштабованість
системи, оскільки дозволяє замінювати або оновлювати окремі компоненти без
необхідності змін в інших частинах коду.
В архітектурі також присутні елементи патерну "Фасад" (Facade), який
забезпечує простий та уніфікований інтерфейс для взаємодії з складними
підсистемами. Наприклад, клас AiCamera виступає в ролі фасаду для взаємодії з
додатком на смартфоні, абстрагуючи складні деталі передачі даних та обробки
команд. Це дозволяє іншим частинам програми взаємодіяти з додатком через
простий та зрозумілий інтерфейс, не занурюючись в деталі його реалізації.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
21
Важливим аспектом архітектури є використання конфігураційних констант
та макросів для налаштування поведінки системи. Наприклад, константи SSID,
PASSWORD, NAME, TYPE та PORT використовуються для налаштування
з'єднання з додатком на смартфоні, а константи SPEECH_REMOTE_POWER,
IR_REMOTE_POWER, LINE_TRACK_POWER та інші визначають потужність
руху автомобіля в різних режимах. Такий підхід дозволяє легко змінювати
налаштування системи без необхідності модифікації основного коду.
Архітектура передбачає також можливість розширення функціональності за
допомогою підключення додаткових модулів або бібліотек. Наприклад, директиви
препроцесора #if TEST, #if MEM та #if WATCH_DOG дозволяють включати або
виключати певні функції, такі як тестування двигунів, моніторинг пам'яті або
використання сторожового таймера (watchdog timer). Це забезпечує гнучкість та
масштабованість системи, дозволяючи легко додавати нові можливості без зміни
основного коду.
В
архітектурі
програмного
забезпечення
присутні
елементи
централізованого управління станом системи. Змінна currentMode відображає
поточний режим роботи автомобіля, а функція modeHandler() реалізує логіку
переходу між різними режимами та виконання відповідних дій. Такий підхід
забезпечує чітку організацію та контроль над станом системи, спрощуючи
розуміння та відстеження її поведінки.
2.2 Алгоритми керування рухом та навігацією
Розроблений
програмний
код
забезпечує
шість
різних
режимів
функціонування наземного дрона. Він здатний відстежувати лінію на поверхні та
рухатися вздовж неї. Крім того, дрон може слідувати за перешкодою, зберігаючи
певну відстань від неї. Ще один режим дозволяє безпечно оминати перешкоди на
шляху пересування. Керування дроном можливе за допомогою інфрачервоного
пульта дистанційного керування. Також реалізована можливість керування через
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
22
мобільний додаток на смартфоні. Також, код передбачає режим компаса, в якому
дрон орієнтується за показниками датчика напрямку.
Рисунок 2.2.1 Алгоритм відстеження лінії
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
23
Алгоритм
відстеження
лінії
(рис
2.2.1)
(MODE_LINE_TRACK_WITHOUT_MAG та MODE_LINE_TRACK_WITH_MAG)
є надзвичайно важливим для автоматизованих транспортних засобів. Він дозволяє
автомобілю самостійно рухатися по заздалегідь визначеній траєкторії, що
позначена на поверхні лінією.
У наведеному уривку коду описується функція line_track(bool useMag), яка
реалізує алгоритм відстеження лінії для автоматизованого транспортного засобу.
Ця функція викликається з головного циклу loop() через функцію modeHandler(),
коли значення currentMode дорівнює MODE_LINE_TRACK_WITHOUT_MAG або
MODE_LINE_TRACK_WITH_MAG. Функція line_track(bool useMag) працює
таким чином: спочатку вона отримує результат від функції gsGetAngleOffset(), яка
зчитує дані від датчика сірого кольору (grayscale sensor) та повертає кут та
зміщення від лінії у закодованому вигляді. Потім із закодованого результату
витягуються значення angleType (тип кута) та offsetType (тип зміщення) за
допомогою бітових операцій. Далі відбувається декодування отриманих значень
angleType та offsetType у змінні angle та offset відповідно, використовуючи
оператори switch. Після цього обчислюється різниця deltaAngle між поточним
кутом currentAngle та новим кутом angle, отриманим з датчика. Ця різниця
нормалізується до діапазону \[-180, 180\] градусів. Якщо різниця deltaAngle
перевищує 90 градусів, то значення angle та offset коригуються для того, щоб
транспортний засіб міг повертати на більші кути. Нове значення currentAngle
обчислюється
як
сума
angle
та
добутку
offset
на
константу
LINE_TRACK_OFFSET_ANGLE. Функція викликає carMoveFieldCentric або
carMove (в залежності від значення параметра useMag) для керування рухом
транспортного засобу відповідно до обчислених значень currentAngle та константи
LINE_TRACK_POWER, що задає потужність двигунів.
Таким чином, ця функція реалізує ключову частину алгоритму відстеження
лінії, оброблюючи дані від датчика та коригуючи напрямок руху транспортного
засобу для того, щоб він міг слідкувати за траєкторією, позначеною на поверхні
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
24
лінією.
Використання
магнітометра
(параметр
useMag)
дозволяє
також
враховувати абсолютний напрямок руху.
Для реалізації цього алгоритму використовуються датчики граyscale, які
можуть розрізняти відтінки сірого кольору і, таким чином, визначати положення
лінії на поверхні. Функція line_track() аналізує дані з цих датчиків, розраховує кут
відхилення автомобіля від лінії та необхідний кут повороту для коригування
траєкторії
руху.
В
режимі
MODE_LINE_TRACK_WITH_MAG
додатково
використовується інформація з компаса, щоб забезпечити рух автомобіля в
глобальній системі координат, а не лише відносно самої лінії.
Алгоритм
слідування
за
перешкодою
(рис.
2.2.2)
(MODE_OBSTACLE_FOLLOWING) є надзвичайно корисним у ситуаціях, коли
необхідно рухатися за рухомою ціллю на певній відстані.
Рисунок 2.2.2 Алгоритм слідування за перешкодою
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
25
Алгоритм слідування за перешкодою (MODE_OBSTACLE_FOLLOWING)
реалізований у функції obstacleFollowing(). Ця функція викликається з головного
циклу loop() через функцію modeHandler(), коли значення currentMode дорівнює
MODE_OBSTACLE_FOLLOWING. Функція obstacleFollowing() працює таким
чином: Спочатку вона отримує результат від функції irObstacleRead(), яка зчитує
дані
від
інфрачервоних
датчиків
перешкод,
та
результат
від
функції
ultrasonicRead(), яка зчитує дані від ультразвукового датчика відстані. За
допомогою цих даних визначається, чи є перешкоди зліва, справа та попереду
транспортного засобу, а також відстань до перешкоди попереду. Залежно від
відстані до перешкоди попереду, транспортний засіб виконує різні дії. Якщо
відстань менша за 4 сантиметри, транспортний засіб зупиняється, викликаючи
функцію carStop(). Якщо відстань більша за 10 сантиметрів, транспортний засіб
рухається вперед з низькою швидкістю 30 одиниць, викликаючи функцію
carForward(30).
Якщо
відстань
перебуває
в
діапазоні
від
10
до
FOLLOW_DISTANCE (константа, яка визначає бажану відстань для слідування),
транспортний
засіб
рухається
вперед
з
OBSTACLE_FOLLOW_POWER,
викликаючи
carForward(OBSTACLE_FOLLOW_POWER).
Якщо
потужністю
функцію
відстань
більша
за
FOLLOW_DISTANCE, алгоритм перевіряє наявність перешкод зліва та справа за
допомогою даних від інфрачервоних датчиків. Якщо перешкода виявлена зліва,
транспортний
засіб
повертає
OBSTACLE_FOLLOW_ROTATE_POWER,
вліво
з
потужністю
викликаючи
функцію
carTurnLeft(OBSTACLE_FOLLOW_ROTATE_POWER).
Якщо
перешкода
виявлена справа, транспортний засіб повертає вправо з тією ж потужністю,
викликаючи функцію carTurnRight(OBSTACLE_FOLLOW_ROTATE_POWER).
Якщо перешкод немає ні зліва, ні справа, транспортний засіб зупиняється,
викликаючи функцію carStop().
Таким чином, алгоритм забезпечує слідування транспортного засобу за
перешкодою на певній відстані, використовуючи дані від інфрачервоних та
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
26
ультразвукового датчиків. Транспортний засіб рухається вперед, доки відстань до
перешкоди знаходиться в заданому діапазоні, та обходить перешкоди, повертаючи
вліво
або
вправо
залежно
від
їх
розташування.
Цей
алгоритм
може
використовуватися, наприклад, для супроводу інших транспортних засобів або
людей. Функція obstacleFollowing() використовує дані з інфрачервоних датчиків та
ультразвукового датчика для визначення положення перешкоди відносно
автомобіля та відстані до неї. На основі цих даних автомобіль може рухатися
вперед, повертати ліворуч або праворуч, щоб зберігати необхідну відстань до
перешкоди, або зупинятися, якщо перешкода занадто близько.
Алгоритм
оминання
перешкод
(рис.
2.2.3)
(MODE_OBSTACLE_AVOIDANCE) є критично важливим для безпечного
пересування автомобіля в середовищі з перешкодами.
Рисунок 2.2.3 Алгоритм оминання перешкод
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
27
Ця функція використовує дані з інфрачервоних датчиків перешкод та
ультразвукового датчика відстані для визначення, чи є перешкоди попереду, зліва
та справа від транспортного засобу. Залежно від цих даних, транспортний засіб
виконує різні дії. Якщо немає жодних перешкод, він рухається вперед з потужністю
OBSTACLE_AVOID_POWER,
викликаючи
функцію
carForward(OBSTACLE_AVOID_POWER). Якщо виявлено перешкоду, алгоритм
визначає, з якого боку є вільний простір - зліва чи справа. Якщо є вільний простір
з обох боків або немає вільного простору взагалі, транспортний засіб обертається
на місці у напрямку, протилежному до останнього повороту, викликаючи функцію
carMove(0, 0, last_clear\*50), де last_clear - змінна, що зберігає напрямок останнього
повороту. Якщо вільний простір є лише з одного боку, транспортний засіб повертає
в цей бік з потужністю OBSTACLE_AVOID_POWER, викликаючи функцію
carTurnLeft
(OBSTACLE_AVOID_POWER)
або
carTurnRight
(OBSTACLE_AVOID_POWER) відповідно.
Таким чином, алгоритм дозволяє транспортному засобу безпечно рухатися,
оминаючи перешкоди на своєму шляху, використовуючи дані від різних
датчиків.Режими керування за допомогою пульта дистанційного керування
(MODE_REMOTE_CONTROL) та додатку на смартфоні (MODE_APP_CONTROL)
дозволяють оператору вручну керувати рухом автомобіля.
Ці режими є надзвичайно важливими для тестування та налаштування
системи, а також для ситуацій, коли необхідне безпосереднє втручання людини.
Функція carMoveFieldCentric() переводить команди керування, задані в глобальній
системі координат (кут повороту, потужність руху, напрямок руху), у систему
координат автомобіля та задає відповідні значення для руху коліс. Це дозволяє
оператору інтуїтивно керувати автомобілем, не замислюючись про його поточну
орієнтацію в просторі. Крім основних алгоритмів керування рухом та навігацією, в
коді присутні також допоміжні алгоритми та функції. Наприклад, функція
irRemoteHandler() відповідає за обробку команд, що надходять з інфрачервоного
пульта дистанційного керування, а функція onReceive() обробляє команди, що
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
28
надходять з додатку на смартфоні. Ці функції аналізують отримані дані,
визначають відповідні команди та змінюють режим роботи автомобіля відповідно
до цих команд. Функція MODE_COMPASS_CALIBRATION реалізує алгоритм
калібрування компаса, що є надзвичайно важливим для забезпечення точної
орієнтації автомобіля в глобальній системі координат. Під час калібрування компас
повертається на певний кут, і для кожного положення вимірюється значення
магнітного поля. На основі цих даних розраховуються коефіцієнти калібрування,
які потім використовуються для коригування показань компаса під час нормальної
роботи.
2.3 Взаємодія з датчиками та обробка даних
Інфрачервоні датчики перешкод використовуються для виявлення перепон
на шляху руху автомобіля та їх розташування відносно нього. Функція
irObstacleRead() зчитує дані з цих датчиків і повертає байт даних, де кожен біт
відповідає наявності чи відсутності перешкоди в певній зоні. Найменший значущий
біт відповідає наявності перешкоди зліва, наступний біт - наявності перешкоди
справа.
Ці
дані
використовуються
в
алгоритмах
obstacleAvoidance()
та
obstacleFollowing() для визначення, чи є перешкоди зліва, справа або попереду
автомобіля.
Ультразвуковий датчик дозволяє визначити відстань до перешкоди перед
автомобілем. Функція ultrasonicRead() виконує вимірювання цієї відстані, а
функція ultrasonicIsClear() аналізує виміряну відстань і повертає true, якщо простір
перед автомобілем є вільним від перешкод, і false, якщо перешкода знаходиться
занадто близько. Дані з ультразвукового датчика використовуються в алгоритмах
obstacleAvoidance() та obstacleFollowing() для визначення відстані до перешкоди
попереду та вибору відповідної поведінки (рух вперед, гальмування, обхід
перешкоди).
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
29
Датчики відтінків сірого кольору (grayscale) відіграють ключову роль в
алгоритмах відстеження лінії на поверхні line_track(). Функція gsGetAngleOffset()
аналізує дані з цих датчиків і визначає кут відхилення автомобіля від лінії, а також
напрямок відхилення (ліворуч чи праворуч). Повернене значення містить
закодовану інформацію про кут відхилення (5 можливих значень: -45, 0, 45, 90
градусів або помилка) та напрямок зміщення (3 можливі значення: зміщення
ліворуч, без зміщення, зміщення праворуч або помилка). Ці дані використовуються
функцією line_track() для коригування руху автомобіля вздовж лінії, змінюючи кут
повороту та потужність двигунів.
Компас дозволяє визначати поточну орієнтацію дрона в глобальній системі
координат.
Його
дані
MODE_LINE_TRACK_WITH_MAG
використовуються
для
відстеження
лінії
в
режимі
з
урахуванням
глобального напрямку руху, а не лише локального відхилення від лінії. Функція
compassCalibrateLoop() реалізує алгоритм калібрування компаса, повертаючи
автомобіль на певні кути та вимірюючи значення магнітного поля. Ці дані
використовуються для розрахунку коефіцієнтів калібрування. Калібрування
компаса є важливим для забезпечення точності його показань та коректної
орієнтації автомобіля в глобальній системі координат.
Інфрачервоний приймач використовується для отримання команд з пульта
дистанційного керування. Функція irRead() зчитує код натиснутої кнопки з
інфрачервоного приймача. Отриманий код кнопки обробляється функцією
irRemoteHandler(), яка визначає відповідну команду та змінює режим роботи
автомобіля або передає команди керування рухом. Наприклад, натискання певних
кнопок
може перевести
автомобіль у
режим дистанційного
керування,
калібрування компаса, відстеження лінії тощо.
Крім взаємодії з апаратними датчиками, код реалізує обробку даних, що
надходять від додатку на смартфоні через камеру. Функція onReceive()
викликається кожного разу, коли додаток надсилає нові дані про стан кнопок,
положення джойстика, команди голосового керування тощо. Ці дані аналізуються
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
30
та використовуються для зміни режиму роботи автомобіля, встановлення
параметрів керування рухом або виконання інших дій, таких як калібрування
компаса. Функція onReceive() забезпечує зручний інтерфейс для взаємодії
користувача з автомобілем через додаток на смартфоні.
Код демонструє ретельну інтеграцію різноманітних датчиків та ефективну
обробку отриманих від них даних. Використання модульної структури, чіткого
розділення відповідальності та добре продуманих алгоритмів забезпечує надійну
та гнучку взаємодію з датчиками, що є критично важливим для коректної роботи
системи керування дроном.
2.4 Реалізація режимів роботи та керування
У розробленому коді програми реалізовані різні режими роботи та
керування автомобілем. Центральною функцією є modeHandler(), яка виконується
циклічно в головному циклі програми loop(). Ця функція реагує на значення змінної
currentMode і виконує відповідну дію залежно від поточного режиму роботи.
Розглянемо детальніше, що відбувається в кожному з режимів. Режим
MODE_NONE є базовим, коли автомобіль зупиняється, а кути та напрямки руху
скидаються. У цьому режимі світлодіод RGB світиться кольором, заданим у
константі
MODE_NONE_COLOR.
Режим
MODE_LINE_TRACK_WITHOUT_MAG призначений для слідування за лінією без
використання
магнітометра.
Тут
автомобіль
рухається
з
потужністю
LINE_TRACK_POWER під кутом, визначеним за допомогою функції line_track(),
яка аналізує дані з граyscale-датчика і розраховує необхідний кут повороту. Режим
MODE_LINE_TRACK_WITH_MAG
схожий,
але
додатково
використовує
магнітометр для компенсації відхилення напрямку руху.
Режим MODE_OBSTACLE_FOLLOWING призначений для слідування за
перешкодою
на
заданій
відстані
FOLLOW_DISTANCE.
Функція
obstacleFollowing() аналізує дані з інфрачервоних і ультразвукових датчиків
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
31
перешкод та керує рухом автомобіля таким чином, щоб він слідував за
перешкодою,
обминаючи
її
при
необхідності.
Режим
MODE_OBSTACLE_AVOIDANCE, навпаки, дозволяє автомобілю рухатися
вперед, оминаючи перешкоди. Функція obstacleAvoidance() також використовує
інфрачервоні та ультразвукові датчики для виявлення перешкод і вибору
найкращої траєкторії руху.
Режим MODE_REMOTE_CONTROL дозволяє керувати автомобілем за
допомогою
інфрачервоного
пульта
дистанційного
керування.
Функція
irRemoteHandler() обробляє команди з пульта та встановлює відповідні значення
для кута повороту remoteAngle, потужності руху remotePower та напрямку руху
remoteHeading. Автомобіль рухається відповідно до цих значень у функції
carMoveFieldCentric().
Режим MODE_APP_CONTROL призначений для керування автомобілем
через додаток на смартфоні або веб-інтерфейс. Функція onReceive() обробляє
команди, що надходять через бездротовий зв'язок, і оновлює відповідні змінні
appRemoteAngle, appRemotePower, appRemoteHeading та appRemoteDriftEnable.
Автомобіль рухається відповідно до цих значень у функції carMoveFieldCentric().
Окрім цього, реалізовано режим MODE_COMPASS_CALIBRATION для
калібрування магнітометра, який використовується для визначення напрямку руху.
У цьому режимі автомобіль повільно обертається на місці за допомогою функції
carMove(0, 0, CAR_CALIBRATION_POWER), а функція compassCalibrateLoop()
відстежує дані
магнітометра та оновлює калібрувальні параметри. Після завершення
калібрування режим повертається до MODE_NONE.
Код також містить функції для обробки введення з інфрачервоного пульта
дистанційного
керування
та
розпізнавання
голосових
команд.
Функція
irRemoteHandler() обробляє команди з пульта, а функція onReceive() аналізує
голосові команди, що надходять через бездротовий зв'язок. Якщо розпізнана
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
32
команда відповідає певному режиму роботи, змінна currentMode встановлюється
відповідним чином.
Код забезпечує різноманітні способи керування автомобілем, включаючи
слідування за лінією або перешкодою, автоматичне оминання перешкод,
дистанційне керування через пульт або додаток, а також голосове керування. Вибір
режиму роботи та налаштування параметрів руху здійснюються за допомогою
відповідних функцій та змінних, що дозволяє гнучко керувати поведінкою
автомобіля в різних ситуаціях.
2.5 Тестування та налагодження програмного забезпечення
У коді присутні спеціальні директиви препроцесора, які дозволяють
включати або виключати певні функції для тестування та налагодження
програмного забезпечення. Ключовою директивою є #define TEST, яка, якщо
визначена (наприклад, #define TEST 1), активує режим тестування.
Якщо режим тестування активований (#if TEST), то в циклі loop() буде
викликатися функція motors_test(). Ця функція, реалізація якої не показана в
наданому коді, ймовірно, виконує тестування двигунів автомобіля, задаючи різні
комбінації швидкостей та напрямків руху для перевірки їх функціонування.
Крім тестування двигунів, код також містить директиву #define MEM, яка,
якщо визначена, дозволяє включити моніторинг використання пам'яті Arduino під
час роботи програми. У циклі loop() викликається функція freeMemory(), яка
виводить інформацію про доступний обсяг вільної пам'яті RAM на серійний порт.
Це може бути корисним для виявлення потенційних витоків пам'яті або оптимізації
використання ресурсів.
Також у коді присутня директива #define WATCH_DOG, яка, якщо
визначена, активує сторожовий таймер (watchdog timer). Ця функція забезпечує
перезавантаження системи у випадку, якщо програма зависає або стикається з
критичними помилками, підвищуючи стабільність роботи всієї системи.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
33
В режимі калібрування компаса (MODE_COMPASS_CALIBRATION),
сторожовий таймер тимчасово вимикається за допомогою виклику wdt_disable(),
оскільки процес калібрування може зайняти деякий час. Після закінчення
калібрування
сторожовий
таймер
знову
активується
викликом
wdt_enable(WDTO_2S).
Загалом, наявність цих директив препроцесора та відповідних функцій у
коді дозволяє легко включати або виключати режими тестування двигунів,
моніторингу пам'яті та використання сторожового таймера. Це значно спрощує
процес налагодження, виявлення помилок та забезпечення стабільної роботи
програмного забезпечення керування наземним дроном під час розробки та
тестування.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
34
3 ОХОРОНА ПРАЦІ
3.1 Аналіз умов праці
При розробці програмного забезпечення для керування наземним дроном
основна діяльність відбувається в приватному будинку з використанням
комп'ютерної техніки. Тому необхідно приділити увагу аналізу факторів
виробничого середовища, які можуть негативно впливати на здоров'я та
працездатність персоналу.
Мікроклімат – один з ключових факторів, який потребує контролю. Робота
з комп'ютерами супроводжується виділенням тепла, що може призвести до
підвищення температури та зниження відносної вологості повітря в приміщенні.
Оптимальними параметрами мікроклімату для приміщень з ПЕОМ вважаються:
температура 22-24°С, відносна вологість 40-60%, швидкість руху повітря 0,1 м/с.
Відхилення від норм може призводити до зниження працездатності, головних
болів, роздратованості.
Освітлення робочих місць має відповідати нормам для зорових робіт
високої точності. Рекомендоване штучне освітлення – не менше 300-500 лк,
коефіцієнти природного освітлення мають бути не нижче 1,5% для збереження
здоров'я зору працівників.
Шумове навантаження в приватному будинку зазвичай не є критичним,
проте тривалий вплив шуму понад 50 дБА може спричинити роздратованість,
головний біль, порушення концентрації уваги.
Електромагнітні випромінювання моніторів комп'ютерів також можуть
несприятливо впливати на працівників при тривалій дії. Норма напруженості
електромагнітного поля на відстані 50 см від екрану – не більше 25 В/м.
Тривала робота з комп'ютером пов'язана з статичними навантаженнями на
опорно-руховий апарат людини – хребет, руки, кисті, що може призводити до
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
35
розвитку професійних захворювань. Необхідно дотримуватись режимів праці та
відпочинку, робити перерви для розминки.
Таким чином, для створення безпечних та сприятливих умов праці при
розробці програмного забезпечення потрібно забезпечити належний мікроклімат,
освітлення, низькі рівні шуму та електромагнітного випромінювання, ергономічні
робочі місця з урахуванням статичних навантажень.
3.2 Гігієна праці та виробнича санітарія
Під час роботи вдома, у приватному будинку, важливо дотримуватись
правил гігієни праці та санітарії для підтримання належних умов та збереження
здоров'я.
Потрібно забезпечити якісну вентиляцію кімнати, де виконується робота.
Це можна зробити шляхом регулярного провітрювання приміщення або
використання вентиляційної системи для оновлення повітря та видалення
забруднень.
Опалення приміщення у холодну пору року має підтримувати комфортну
температуру у межах 20-24°С відповідно до рекомендацій для робочих місць.
Освітлення в кімнаті має бути достатнім і відповідати вимогам для
високоточних зорових робіт. Рекомендується комбінувати природне освітлення з
раціональним розміщенням штучних джерел світла.
Прибирання кімнати необхідно проводити регулярно з використанням
безпечних миючих засобів для підтримання чистоти та санітарних умов.
Важливо дотримуватись правил особистої гігієни під час роботи:
підтримувати чистоту тіла, робочого одягу, робочого місця. Рекомендується
робити перерви для виконання гігієнічних процедур.
Окремі побутові приміщення, такі як ванна кімната, туалет, кухня, мають
утримуватись у належному санітарно-гігієнічному стані.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
36
Дотримання вимог гігієни праці та створення належних санітарних умов
дозволить забезпечити комфортні та сприятливі умови для виконання роботи з
розробки програмного забезпечення без шкоди для здоров'я.
3.3 Пожежна безпека виробничого приміщення
Забезпечення пожежної безпеки у приміщенні, де виконується розробка
програмного забезпечення, є надзвичайно важливим завданням для запобігання
виникненню пожеж та мінімізації ризиків для життя та майна.
Необхідно визначити категорію приміщення за пожежонебезпекою згідно з
нормативними документами. Зазвичай такі приміщення належать до категорії В –
пожежонебезпечні.
Важливо дотримуватись правил пожежної безпеки під час експлуатації
електричного
та
електронного
обладнання,
обережного
поводження
з
потенційними джерелами запалювання, зокрема відкритим вогнем, гарячими
поверхнями тощо.
Необхідно ознайомитись з планом евакуації з будинку на випадок пожежі
та визначити найбезпечніші шляхи евакуації з урахуванням розташування
приміщень та можливих джерел загоряння.
У разі виникнення пожежі в будинку потрібно негайно залишити
приміщення, викликати пожежну охорону та вжити можливих заходів з гасіння
пожежі на початковій стадії наявними засобами пожежогасіння до прибуття
професійної допомоги.
Регулярно слід проводити інструктажі для членів родини щодо правил
пожежної безпеки та дій на випадок виникнення пожежі.
Дотримання всіх вимог пожежної безпеки, наявність систем раннього
виявлення та оповіщення про пожежу, засобів пожежогасіння та чітких планів
евакуації дозволить мінімізувати ризики виникнення пожеж та забезпечити
належний рівень пожежної безпеки при роботі з дому.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
37
3.4 Виконання розрахункової частини
Для аналізу відповідності параметрів робочого місця (рис. 2.4.1) санітарногігієнічним нормам було проведено ряд вимірювань та порівнянь.
Рисунок 2.4.1 Робоче місце
Розглянемо фактор виробничого середовища та відповідність санітарногігієнічним нормам на прикладі робочого місця.
Температура повітря є одним з ключових факторів комфортних умов праці.
Норма температури для робочих приміщень встановлена в межах 19-25°С. У
даному випадку показник температури становить 22°С, що цілком відповідає
нормативним вимогам і забезпечує сприятливі умови для виконання роботи.
Важливим параметром також є відносна вологість повітря. Норма для
відносної вологості знаходиться в діапазоні 40-60%. Показник відносної вологості
на робочому місці становить 55%, що повністю відповідає встановленим нормам і
створює комфортне середовище для працівників.
Освітленість робочої поверхні є критично важливим фактором для
забезпечення належних умов праці та запобігання перевтомі очей. Норма
освітленості для робочих місць встановлена на рівні не менше 300 Лк. У даному
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
38
випадку показник освітленості робочої поверхні становить 310 Лк, що відповідає
нормативним вимогам і забезпечує достатнє освітлення для ефективної роботи.
Відстань від очей до монітора також має значення для зменшення
навантаження на зір та запобігання перевтомі. Норма відстані встановлена в
діапазоні 600-700 мм. На робочому місці відстань від очей до монітора становить
680 мм, що повністю відповідає нормативним вимогам і забезпечує комфортні
умови для роботи з комп'ютером.
Розглянемо параметри робочого столу та стільця. Висота столу за нормою
має бути в межах 680-720 мм. Однак, у даному випадку висота столу становить 750
мм, що трохи перевищує норму. Це може призвести до незручної робочої пози та
напруги в руках і плечах працівника.
Ширина робочого столу, як правило, повинна дорівнювати 900 мм. Проте,
на даному робочому місці ширина столу становить лише 600 мм, що не відповідає
нормі. Така ширина може обмежувати простір для розташування необхідних
матеріалів та створювати незручності під час роботи.
Довжина робочого столу за нормою має бути 1600 мм. У даному випадку
довжина столу становить лише 1230 мм, що не відповідає нормативним вимогам.
Недостатня довжина столу може обмежувати простір для розташування робочих
матеріалів та створювати незручності під час виконання завдань.
Висота стільця за нормою має бути в межах 400-500 мм. Однак, на робочому
місці висота стільця становить 520 мм, що трохи перевищує норму. Це може
призводити до незручної пози під час сидіння та напруги в ногах працівника.
Розміри сидіння стільця повинні бути в діапазоні 380-400 мм. У даному
випадку розміри сидіння стільця становлять 400 мм, що повністю відповідає
нормативним вимогам і забезпечує комфортне положення під час сидіння.
Що стосується площі на одного працівника, то норма встановлює
мінімальну площу 4,5 м², а оптимальна площа становить 6 м². На даному робочому
місці площа на одного працівника становить 5 м², що відповідає нормативним
вимогам і забезпечує достатній простір для комфортної роботи.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
39
Підсумовуючи, можна зазначити, що більшість показників виробничого
середовища на даному робочому місці відповідають санітарно-гігієнічним нормам
або знаходяться близько до них. Однак, існують деякі відхилення, такі як висота
столу, ширина та довжина столу, а також висота стільця. Ці відхилення можуть
негативно впливати на комфорт та ергономіку робочого місця, створювати напругу
та незручності під час роботи. Рекомендується провести коригування цих
параметрів відповідно до встановлених норм для забезпечення належних умов
праці та запобігання негативному впливу на здоров'я працівників.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
40
ВИСНОВОК
У ході дипломного проєктування було проведено ґрунтовне дослідження та
аналіз підходів до розробки програмного забезпечення для керування наземними
безпілотними транспортними засобами (дронами).
Ретельно вивчено існуючі програмні рішення, визначено їх переваги,
недоліки, сфери застосування та особливості використання. Проаналізовано
сучасні інструменти та середовища розробки, зокрема середовище Arduino IDE та
його можливості.
На основі всебічного аналізу сформовано основні функціональні вимоги до
програмного забезпечення керування наземним дроном на платформі Arduino.
Визначено необхідні алгоритми руху, навігації, взаємодії з датчиками, керування
режимами роботи, енергозбереження та аварійного реагування.
У рамках проєкту приділено належну увагу питанням охорони праці при
розробці програмного забезпечення. Проаналізовано фактори виробничого
середовища, вимоги до мікроклімату, освітлення, санітарії та пожежної безпеки.
Виконано розрахункову частину щодо відповідності параметрів робочого місця
нормативним показникам.
Здобуті під час виконання дипломного проєкту знання та практичні навички
забезпечили ґрунтовну базу для успішної реалізації програмного забезпечення,
спроможного ефективно керувати наземним дроном з використанням платформи
Arduino та її можливостей.
Дипломний проєкт дозволив зібрати, опрацювати та системно викласти
матеріал, необхідний для
створення
повноцінного програмного рішення
управління безпілотним наземним транспортним засобом на базі Arduino.
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
41
ЛІТЕРАТУРА
1.
Переддипломна практика. Методичні вказівки для студентів освітньої
професійної програми «Комп’ютерні системи та мережі» спеціальності 123
Комп’ютерна інженерія /Укл. О.В. Калашніков, І.О.Островська. –
Первомайськ, 2024.- 32 с.
2.
Денисюк
В.О.,
Цирульник
С.М.
М59
Мікропроцесорні
системи
управління: навч. посіб./ В.О.Денисюк, С.М.Цирульник; Вінн. нац. аграр.
ун-т. Вінниця: ТВОРИ, 2021. 204 с.
3.
Лагутін В.С. Робототехніка: навч. посібник / В.С. Лагутін. - Київ:
Видавництво Ліра-К, 2020. - 268 с.
4.
Програмування Arduino –
https://informatik.pp.ua/pidruchniki/programuvannya/arduino-prohramuvannia/
5.
Arduino Documentation – https://www.arduino.cc/reference/
6.
ArduPilot Documentation – https://ardupilot.org/
7.
Dronecode Project – https://www.dronecode.org/
8.
DroneKit Python API Reference – https://dronekit-python.readthedocs.io/
9.
MAVLink Protocol Documentation – https://mavlink.io/en/
10. OpenCV Documentation – https://docs.opencv.org/
11. PX4 Autopilot User Guide – https://docs.px4.io/master/en/
12. Robot Operating System (ROS) – https://www.ros.org/
Арк.
ВСП ПФК НУК 123.411.24.01 ПЗ
Змн.
Арк.
№ докум.
Підпис
Дат
а
42