Система засечки (хронометража) для дронов
CopterHack-2021, команда Atomic Ferrets.
Наша команда состоит из двух человек - Стецкий Сергей и Давлетшин Денис.
По всем вопросам обращаться на почту (bashirianboy@gmail.com) или Телеграм.
Идея
На сегодняшний день существует множество засечек для дронов, но тех, которые производят в России, мало, а таких, которые бы имели приемлемую цену, еще меньше. Поэтому было решено сделать собственную систему засечки, которая давала бы весь нужный функционал, и производство которого было бы не столь затратным.
Ознакомиться с кодом проекта вы можно через репозиторий: https://github.com/stinger000/CopterHack2020_IR_LED.
Принцип работы
Прелесть нашей системы в том, что ее концепция проста - использование чувствительного фотодатчика - фотодиода, и светодиода. Фотодатчик и ИК светодиод крепятся на ворота друг напротив друга, и светодиод все время направлен на датчик. Когда дрон пролетает через ворота, он на какое-то время перекрывает собой светодиод, и показания на датчике тут же меняются. На этом и основан принцип работы. Остается только подключить датчик к схеме, способной считывать световой поток, падающий на него, и затем отправлять сигнал о детектировании пролета на компьютер. Для наших целей мы использовали Arduino.
Для Arduino написан код, который обрабатывает постоянно поступающие на него сигналы с фотодиода. Затем используется имитация фильтра низких частот, сглаживающий шумы, которые по сравнению с реальным сигналами более низкочастотные. Фильтрация шумов помогает в том случае, когда датчик и светодиод разнесены далеко друг от друга, и световой поток в этом случае может смешаться с шумом.
На рисунке ниже изображена типичная временная диаграмма сигнала. "Ямы" образуются во время пролета через засечку. Синим цветом показан "сырой" сигнал, а красным - обработанный с помощью low-pass фильтра. Подбором параметров фильтра можно добиться того, чтобы принципиальный вид сигнала не менялся, а шумы сглаживались.
Алгоритм работает так, что пролет засчитывается поле того, как будет обнаружен спад и последующий подъем сигнала, а также амплитуда сигнала должна больше некоторого выставленного вручную минимума (зависит от шумов собранной системы).
Затем по Serial-порту Arduino отправляет специальный символ, который обозначает обнаружение пролета.
Компьютер, к которому подключена засечка, может считывать этот сигнал, и затем выводить на любой интерфейс.
Результат работы
Вы можете посмотреть короткую видеопрезентацию:
Использование
Данный проект можно использовать для любых квадрокоптеров достаточно больших размеров. Условие, которое необходимо выполнить, это то, чтобы дрон при пролете перекрывал собой светодиод. То есть дрон должен попадать в довольно узкий диапазон. Это наглядно проиллюстрировано на рисунке ниже:
Для начала работы скачайте репозиторий с кодом обработки пролетов и репозиторий с пользовательским интерфейсом:
git clone https://github.com/stinger000/CopterHack2020_IR_LED
git clone https://github.com/stinger000/CopterHack2020_IR_LED_Desktop_GUI
Зайдите в папку Signal_handler репозитория CopterHack2020_IR_LED
и откройте в Arduino IDE файл AnalogReadSerial_filtered_v2.ino
.
Надо раскомментировать строки:
//debug in plotter
//Serial.print(sensorValue); // uncomment this 4 rows
//Serial.print(" ");
//Serial.println(value);
//...
и закомментировать строку вывода символа в Serial-порт:
// ...
if ( rising_edge & falling_edge )
{
// ...
// Send time by serial port to GUI
Serial.println(millis()); //comment this line
//...
}
Перепрошейте ваше Arduino этим файлом. Затем проверьте сигнал в плоттере.
По нему задать величину шума, получившуюся для вашей системы: за это отвечает переменная noise
.
Например на рисунке ниже величина шумов (для отфильтрованного красного сигнала) достигает 10 единиц.
Затем закомментируйте и раскомментируйте обратно строки кода и перепрошейте Arduino.
В терминале запустите файл с графическим интерфейсом (# такой то файл):
cd CopterHack2020_IR_LED_Desktop_GUI
python main.py
Затем подключите Arduino через USB-кабель в ваш компьютер и нажмите "Connect".
Начало и конец отсчета замеров производится кнопками "start" и "stop".