УДК 004.021
Шишкин Г.Г. студент магистратуры кафедра «Приборостроение» Кобелев М.С. студент магистратуры кафедра «Приборостроение» Донской Государственный Технический Университет
Россия, г. Ростов-на-Дону ПРОГРАММНАЯ ЧАСТЬ СИСТЕМЫ УКЛОНЕНИЯ ОТ
ПРЕПЯТСТВИЙ ДЛЯ БЕСПИЛОТНОГО ЛЕТАТЕЛЬНОГО
АППАРАТА
Аннотация: беспилотные летательные аппараты (БПЛА) с каждым годом занимают все большее место, как в военной, так и гражданской сфере. По мнению многих экспертов, беспилотная авиация в ближайшее время начнет доминировать над пилотируемой, особенно в военной сфере. В данной статье разрабатывается система уклонения от препятствий для беспилотного летательного аппарата. В работе приводятся требования к создаваемой системе определения препятствий, описание её структуры с точки зрения программной части, с обоснованием выбора необходимых измерительных устройств. Также представлен общий алгоритм работы системы.
Ключевые слова: система уклонения, беспилотный летательный аппарат, программные средства, Arduino.
Shishkin G.G., student of the Master's Degree of Instrument engineering
Don State Technical University Russia, Rostov-on-Don
Kobelev M.S., student of the Master's Degree of Instrument engineering
Don State Technical University Russia, Rostov-on-Don THE SOFTWARE PART OF THE SYSTEM TO AVOID OBSTACLES FOR AN UNMANNED AERIAL VEHICLE
Abstract: Unmanned aerial vehicles (UAV) each year occupy an increasing place, both in the military and civilian sphere. According to many experts, unmanned aircraft will soon begin to dominate the manned, especially in the military sphere. This article develops a system for avoiding obstacles for an unmanned aerial vehicle. The work presents the requirements for the created system for determining obstacles, a description of its structure from the point of view of the program part, with the rationale for selecting the necessary measuring devices. Also presented is a general system operation algorithm.
Keywords: evasion system, unmanned aerial vehicle, software, Arduino.
В настоящее время проблема по распознаванию и преодолению препятствий является актуальной для множества мобильных платформ. Решение этой проблемы является ключом к созданию алгоритм навигации робота в пространстве, то есть анализ текущей ситуации и маршрутизации роботом без участия человека.
Среда разработки программы Arduino IDE
Важной задачей программная части системы уклонения от препятствий для беспилотного летательного аппарата, является написание самой программы для использующих устройств. Так как был выбран микроконтроллер Arduino, то и программа должна соответствовать данному устройству. Соответственно программа писалась в специализированной программной среде Arduino IDE.
Arduino IDE— это система программных средств, используемая программистами для разработки программного обеспечения на все платформы Arduino. Имеет встроенные стандартные библиотеки, а также может работать с библиотеками, созданные зарубежными программистами, как легкость написания программ. Данное программное обеспечение на языке программирования C++ с некоторыми особенностями, которые позволяют новичкам без труда освоить продукт. Потому что в процессе обучения уже приобрела опыт работы с языком C++, трудности с языком программирования с Arduino IDE не возникает. Программа, написанная в среде разработки, среде разработки Arduino называются наброски и расширением ino. Эти файлы во время компиляции обрабатываются процессором с Arduino. Его также можно подключить и создать стандартные файлы C++. Функция main в С++, в среде разработки Arduino создает автоматически вставляются жесткие действия.
При написании программы Arduino IDE, необходимо написать две обязательных функций для настройки Ардуино и Loop (рис.1). Настройка функции setup (в переводе с англ. - установить, настроить) вызывается в программе один раз в начале программы, которая изначально настраивает все необходимые провода (контакты). Функция Loop в теле программы, в котором программист описывает действия или ссылки на другие раздельном написании функции. Кроме того, функция Loop будучи телом программы является бесконечным циклом.
Рисунок 1 - Начало работы среды программирования Arduino IDE В листинг программы, программист не обязан добавить различия в файлы стандартных библиотек. Эти стандартные библиотеки будут автоматически добавляться в процессор Arduino в соответствии с конфигурацией проекта, но пользовательские библиотеки, кроме того, что они должны быть в корневой папке библиотеки, должны быть объявлены в тексте программы. Затем название библиотека добавляется в список библиотек в IDE.
Для того, чтобы прошить программу в микроконтроллер один или другой Arduino, вы должны выбрать тип оплаты микроконтроллера и последовательный порт может быть подключен к отладочной плате. Все это можно настроить в меню Инструменты. Последовательный порт подключен к программируемое устройство видно в диспетчере устройств. Загрузка программы в микроконтроллер программируется с помощью специального загрузчика (все из микроконтроллера Arduino 38 продается с этого загрузчик). Погрузчик создан на основе микроконтроллеров компании Atmel микроконтроллеры AVR Примечание Приложение AN109. Загрузчик может работать через RS232, USB или Ethernet в зависимости от конкретного состава периферии процессоров. В некоторых вариантах, таких как Arduino mini или неофициальной Boarduino, для программирования необходим отдельный адаптер.
Arduino IDE состоит из:
-операторов;
-данных;
-функций;
-библиотек.
В свою очередь операторы Arduino IDE состоят из: -управляющих операторов; -синтаксических операторов; -арифметических операторов; -операторов сравнения; -логических операторов;
-унарных операторов. Данные состоят из:
-констант;
-типов данных;
-преобразования типов данных; -области видимости переменных; -квалификаторов. Функции состоят из: -цифрового ввод/вывод; -аналогового ввод/вывод; -дополнительных функций ввода/вывода; -работы со временем; -математических функций; -тригонометрических функций; -генераторов случайных чисел; -внешнего прерывания;
-функции передачи данных. Основные библиотеки бывают:
-Servo;
-EEPROM;
-SPI;
-Stepper.
Функции Arduino.
Int - тип данных «целое число» занимает 2 байта данных и может принимать значения от -32768 до 32767.
Float - тип данных служит для хранения чисел с плавающей запятой и может принимать значения от -3.4028235E+38 до 3.4028235E+38. Переменная занимает 4 байта памяти.
If else - условный оператор в котором действие выполняется после выполнения определенного условия.
Return - функция которая возвращает значение.
Void setup - функция которая запускается только один микроконтроллером после подключения питания или сброса контроллера в ней инициализируются переменные, определяются режимы работы выводов и запуска используемых библиотек.
Serial - функциянеобходима для того, чтобы связать Arduino с компьютером через USB порт и другими устройствами.
Serial.begin - эта функция необходима для того, чтобы настроить последовательное соединение и задать скорость передачи данных между Arduino и компьютером.
Servo.attach - функция подключает сервопривод к указанному пину. Serial.println - функция предназначена для передачи данных как ASCII текст.
Void loop - это циклическая функция, в которой строки программного кода буду зацикливаться, то есть выполняться бесконечное количество раз до тех пор, пока соблюдается определенное условие.
Analogread - функция считывает значение с аналогового входа.
Servo.Write - функция предназначена для назначения угла поворота сервопривода.
Uint_16 - тип данных беззнаковое целое число.
Serial.Print - функция предназначена для передачи данных как ASCII
текст.
Delay - останавливает программы на заданное количество секунд.
Алгоритм и блок-схема программы
Алгоритм - это последовательное описание действий или инструкций, приводящих к определенному результату. Блок-схема программы - это алгоритм программы, описанный в виде блоков различной формы, соединенных между собой линиями. Для начала необходимо задать и продекларировать несколько переменных, необходимых для дальнейших преобразований. Далее нужно настроить используемые выводы как на выход, так и на вход. После осуществляется настройка самого датчика расстояния - дальномера, и анализ его соответствующих значений. На рисунке 2 показана блок схема.
Вывод данных: Serial.println(distance sm);
Рисунок 2- Блок схема При показании датчиком расстояния меньше 25 сантиметров, загорается светодиод, что означает остановку квадрокоптера, в противном случае светодиод не горит и соответственно летательный аппарат продолжит
свой путь.
Листинг программы
Листинг программы - это исходный код программы какого-либо языка программирования написанного в виде текста. Листинг программы был написан в среде Arduino 1.6.5 IDE.
Среда разработки Arduino состоит из встроенного текстового редактора программного кода, области сообщений, окна вывода текста(консоли), панели инструментов с кнопками часто используемых команд и нескольких меню. Для загрузки программ и связи среда разработки подключается к аппаратной части Arduino.
Программа написана в среде Arduino-это называется скетч. Скетч пишется в текстовом редакторе, с инструментами для резки/вставки, поиска/замены текста. Во время сохранения и экспорта проекта в области сообщений появляются пояснения, также может появиться ошибка. Окно вывода текста(консоль) показывает сообщение Arduino, в том числе полные отчеты об ошибках и другая информация. Кнопки панели инструментов позволяют проверять и записывать программа для создания, открытия и сохранения эскиза, откройте последовательный монитор:
- проверка программного кода на ошибки, компиляция;
- остановка мониторинга последовательной шины (Serial monitor) или затемнение других кнопок;
- создание нового скетча;
- открытие меню доступа ко всем скетчам в блокноте. Открывается нажатием в текущем окне;
- сохранение скетча;
- компилирует программный код и загружает его в устройство Arduino;
- открытие мониторинга последовательной шины (Serial monitor). Фрагмент листинга в среде Arduiono IDE показан на рисунке 3.
© ikech jipato. I Aíduino l.&J — □ X
C*«Ln Hpjecj LfcftM Ииструмсип» Помои»
, с i." ling, ' :П)! r.i"-'i-ltcta, r-prt»
pniKnde lledFln. "ГГГГ)г з»пл1.ьвгш<9«о.1:
I
ttnel^n^l inc tl«e_tte*0j
Md ISC А1аг»лся ажг-j: тою IcopO
€ HHHI
Рисунок 3 - Фрагмент листинга в среде Arduiono IDE
Средой Arduino используется принцип блокнота: стандартное место для хранения программ (скетчей). Скетчи из блокнота открываются через меню File > Sketchbook или кнопкой Open на панели инструментов. При первом запуске программы Arduino автоматически создается директория для блокнота. Расположение блокнота меняется через диалоговое окно Preferences. Перед загрузкой скетча требуется задать необходимые параметры в меню Tools > Board и Tools > Serial Port. Платформы описываются далее по тексту. В ОС Mac последовательный порт может обозначаться как dev/tty.usbserial-1B1 (для платы USB) или /dev/tty. USA19QW1b1P1.1 (для платы последовательной шины, подключенной через адаптер Keyspan USB-to- Serial). В ОС Windows порты могут обозначаться как COM1 или COM2 (для платы последовательной шины) или COM4, COM5, COM7 и выше (для платы USB). Определение порта USB производится в поле Последовательной шины USB Диспетчера устройств Windows. В ОС Linux порты могут обозначаться как /dev/ttyUSB0, /dev/ttyUSB1.
В нижеприведенном листинге программы будет показана работа ультразвукового дальномера. Принцип действия ультразвукового дальномера H^SR04 заключается в генерировании сигнала одним из двух пьезоэлементов. Этот сигнал, отразившись от препятствия, попадает на второй пьезоэлемент, который является приемником. Измерив время, за которое сигнал проходит до объекта и обратно, датчик определяет расстояние. Также в листинге сказано, что при приближении или нахождении какого-либо объекта ближе 25 см к аппарату, то светодиод загорается, тем самым оповещаю систему о угрозе. Листинг программы:
Для начала определяем необходимые переменные. const int Trig = 8; const int Echo = 9;
const int ledPin = 11; // 13 - если будете использовать встроенный в Arduino светодиод
Далее следует настройка выводов на вход и выход. void setup() {
pinMode(Trig, OUTPUT); // настройка выводов как вход и выход pinMode(Echo, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); //задаем скорость для последовательного монитора }
unsigned int time_us=0; // присвоение переменным начальное значение 0 unsigned int distance_sm=0;
void loop() {
digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(10); // Удерживаем 10 микросекунд digitalWrite(Trig, LOW); // Затем убираем
time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=time_us/58; // Пересчитываем в сантиметры SeriaLprintin(distance_sm); // Выводим на порт
if (distance_sm<25) // Если расстояние менее 25 сантиметром {
digitalWrite(ledPin, 1); // Зажигаем светодиод }
else {
digitalWrite(ledPin, 0); // иначе тушим }
delay(100);
Результаты измерений расстояния до объектов окружения сохраняются в специальном буфере и могут быть отправлены оператору по радиоканалу. Заключение
Стоит сказать, что эта система уклонения от препятствий может расширить свои возможности, включив в себя камеру. У камеры есть свои минусы и плюсы. Минусы заключаются в том, что она слишком зависит от вычислительных технологий, очень затруднительна именно в реализации программной части и выдает задержку в процессе обнаружения препятствия. Плюсы в том, что камера дает преимущества в случае взлета и посадки, так как можно непосредственно наблюдать за движениями и местностью и также в познавательных целях в виде фотосъемки.
В заключение можно сказать, что рынок беспилотных летательных аппаратов, куда входят и квадрокоптеры, неизменно растёт с каждым годом. Такие системы уклонения от препятствий будут в тренде, так как система, обеспечивающая безопасность летательных аппаратов будет иметь большой спрос. Соответственно разработки в данной сфере являются весьма перспективными.
Использованные источники:
1. Что такое Arduino IDE // Сообщество Zelectro URL:http://zelectro.cc/what is arduino ide
2. Программируем квадрокоптер на Arduino // Н URL: http s: //habrahabr.ru/po st/227425/
3. Серединский М. В. Система технического зрения робота для движения на ориентиры // Труды международной научно-технической конференции «Экстремальная робототехника». 2013 г.