Пошаговая инструкция по настройке автономного полета Клевера 4
Документация для версий образа, начиная с 0.20. Для более ранних версий см. документацию для версии 0.19.
Данная инструкция содержит ссылки на другие статьи, в которых каждая из затронутых тем разобрана более подробно. Если вы столкнулись с трудностями во время прочтения одной из таких статей, рекомендуется вернуться к данной инструкции, так как здесь многие операции описаны пошагово, а также отсутствуют ненужные шаги.
Первоначальная настройка Raspberry Pi
- Установите Raspberry Pi и камеру на квадрокоптер по инструкции.
- Скачайте образ системы по ссылке.
- Запишите образ на MicroSD карту.
- Вставьте карту в Raspberry Pi.
Подключите питание к Raspberry Pi и ожидайте появления Wi-Fi-сети. Для этого подключите Raspberry Pi к компьютеру через MicroUSB-кабель. На Raspberry Pi должен периодически мигать зеленый светодиод. Он сигнализирует о нормальной работе операционной системы.
Перед подключением Raspberry Pi к компьютеру по USB необходимо вытащить из Raspberry Pi провод питания (который идет от BEC). Иначе могут быть проблемы с питанием.
Подключитесь к Wi-Fi и зайдите в веб-интерфейс (статья).
Во время первого включения сеть появляется не сразу. Нужно дождаться полной загрузки системы. Если в списке сетей долго не появляется сети Клевера, закройте окно с выбором сети и откройте снова. Тогда список сетей обновится.
Если на этом шаге вы подключились к Wi-Fi-сети коптера, рекомендуется открыть локальную версию этой статьи, иначе ссылки не будут работать.
Подключитесь к Raspberry Pi по SSH.
Самый быстрый способ – веб-доступ. Следуйте инструкциям в статье "Доступ по SSH".
Если необходимо, можно поменять название и пароль сети. См. статью "Настройка сети". Остальные операции с сетью производить не нужно.
Для редактирования файлов пользуйтесь редактором nano. Инструкция по работе с редактором.
В редакторе перемещать курсор можно только стрелками на клавиатуре.
Перезагрузите Raspberry Pi:
sudo reboot
Соединение временно закроется, создастся новая сеть. К ней надо подключиться заново.
Убедитесь в корректной работе камеры. В браузере зайдите на адрес http://192.168.11.1:8080 и выберите
image_raw
.Более подробно можно прочитать в статье "Просмотр изображений с камер".
Если изображение размыто, необходимо сфокусировать линзу. Для этого покрутите объектив в одну или в другую сторону. Продолжайте крутить, пока изображение не станет четким.
На камере должен гореть красный светодиод: он означает, что камера в данный момент производит съемку. Если светодиод не горит: либо камера подключена неправильно, либо операционная система не загрузилась, либо в настройках допущена ошибка.
Базовые команды
Вам пригодятся основные команды Linux, а также специальные команды Clover, чтобы уверенно работать в системе.
Показать список файлов:
ls
Перейти в папку с прописыванием пути к ней:
cd catkin_ws/src/clover/clover/launch/
Перейти в домашнюю директорию:
cd
Открыть файл file.py:
nano file.py
Открыть файл clover.launch с прописыванием полного пути к нему (сработает, если вы находитесь в другой папке):
nano ~/catkin_ws/src/clover/clover/launch/clover.launch
Сохранить файл (нажимать последовательно):
Ctrl+X; Y; Enter
Удалить файл или папку с названием name (ВНИМАНИЕ: операция выполнится без подтверждения. Будьте осторожны!):
rm -rf name
Создать папку с названием myfolder:
mkdir myfolder
Полная перезагрузка Raspberry Pi:
sudo reboot
Перезапуск только систем Клевера:
sudo systemctl restart clover
Выполнить самопроверку Клевера:
rosrun clover selfcheck.py
Остановить программу
Ctrl+C
Запустить программу myprogram.py на Питоне:
python3 myprogram.py
Журнал событий процессов Клевера. Пролистывать список можно нажатием Enter или сочетанием клавиш Ctrl+V (пролистывает быстрее):
journalctl -u clover
Открыть файл sudoers от имени администратора (он не откроется без прописывания sudo. Через sudo можно запускать другие команды, если они не открываются без прав администратора):
sudo nano /etc/sudoers
Настройка параметров Raspberry Pi для автономного полета
Большинство параметров, необходимых для полета, хранится в папке ~/catkin_ws/src/clover/clover/launch/
.
Зайти в папку:
cd ~/catkin_ws/src/clover/clover/launch/
Символ
~
обозначает домашнюю директорию вашего пользователя. Если вы уже находитесь в ней, можно обойтись командой:cd catkin_ws/src/clover/clover/launch/
Клавишей Tab можно автоматически дополнить названия файлов, папок или команд. Нужно начать вводить желаемое название и нажать Tab. Если не будет конфликтов, название напишется полностью. Например, чтобы быстро ввести путь к папке с настройками, после ввода
cd
можно начать вводить следующую комбинацию клавиш:c-Tab-s-Tab-c-Tab-c-Tab-l-Tab
. Таким образом можно сэкономить много времени при написании длинной команды, а также избежать возможных ошибок в написании пути.В этой папке необходимо сконфигурировать несколько файлов:
clover.launch
aruco.launch
main_camera.launch
Открыть файл
clover.launch
:nano clover.launch
Вы должны находиться в папке, в которой располагается файл. Если вы находитесь в другой папке, файл можно открыть, прописав полный путь к нему:
nano ~/catkin_ws/src/clover/clover/launch/clover.launch
Если файл одновременно редактируют два пользователя, а также если в прошлый раз закрытие файла произошло некорректно, программа nano не отобразит файл сразу, а попросит дополнительное разрешение. Для этого нужно нажать клавишу Y.
Если содержимое файла все равно пусто, возможно, вы неверно ввели имя файла. Нужно обращать внимание на расширение и вписывать его полностью. Если вы вписали неверное имя или расширение, программа nano создаст пустой файл с этим названием, что нежелательно. Такой файл следует удалить.
В файле clover.launch найти строчку:
<arg name="aruco" default="false"/>
и заменить
false
наtrue
:<arg name="aruco" default="true"/>.
Это активирует модуль распознавания ArUco-маркеров.
- Откройте файл
aruco.launch
. В нем нужно активировать несколько параметров. Подробнее в статье.
Должно получиться:
<arg name="aruco_detect" default="true"/> <arg name="aruco_map" default="true"/> <arg name="aruco_vpe" default="true"/>`
Сгенерируйте поле с метками. Смотрите подробности в статье Навигация по картам ArUco-маркеров. Для генерации меток нужно ввести команду с определенными значениями.
Пример команды для генерации поля, где:
- длина маркера = 0.335 м (
length
) - 10 столбцов (x)
- 10 строк (y)
- расстояние между центрами меток по оси x = 1 м (
dist_x
) - расстояние между центрами меток по оси y = 1 м (
dist_y
) - номер первого маркера = 0 (
first
) - название карты остается стандартным: map.txt
- нумерация идет с верхнего левого угла (ключ
--top-left
)
rosrun aruco_pose genmap.py 0.335 10 10 1 1 0 > ~/catkin_ws/src/clover/aruco_pose/map/map.txt --top-left
В большинстве полей нумерация начинается с нулевой метки. Также в большинстве случаев нумерация начинается с верхнего левого угла, поэтому при генерации очень важно указывать ключ
--top-left
.Если вы зададите другое имя для файла с картой, его нужно прописать в файле
aruco.launch
. Найдите строку<param name="map" value="$(find aruco_pose)/map/map.txt"/>
и замените название map.txt на название вашего файла.- длина маркера = 0.335 м (
Отредактируйте файл
main_camera.launch
для настройки камеры:Подробнее в статье "Настройка расположения основной камеры".
В этом файле необходимо отредактировать строку с параметрами расположения камеры. Строка выглядит так:
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>
В файле вы найдете много строк, похожих на эту, но большинство из них закомментированы (то есть не читаются) и только одна раскомментирована. Это заранее заготовленные настройки, из которых можно выбрать нужную вам.
Комментарий в языке XML — это символы
<!--
в начале строки и-->
в конце строки. Пример закомментированной строки:<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>-->
Пример незакомментированной строки (строка будет учитываться программой):
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>
Над этими строками написано, какому расположению камеры соответствует настройка. Если шлейф от камеры выходит вперед относительно коптера, а камера направлена вниз, нужно выбрать настройку:
<!-- camera is oriented downward, camera cable goes forward [option 2] -->
Чтобы выбрать нужную настройку, необходимо раскомментировать соответствующую строку, и закомментировать другую аналогичную строку, чтобы не возникло конфликтов.
Сохранить изменения. Последовательно нажмите:
Ctrl+x; y; Enter
Перезагрузите модуль Клевер:
sudo systemctl restart clover
Настройка полетного контроллера для автономного полета
Перепрошить полетный контроллер модифицированной прошивкой. Скачать её можно здесь в разделе "Загрузка прошивки в полетный контроллер".
Инструкция по прошивке и настройке полетного контроллера — в той же статье.
Обязательно выберете файл скачанной прошивки после нажатия Firmware.
Соединение полетного контроллера и Raspberry Pi
Соедините Raspberry Pi и Pixracer через MicroUSB-кабель. Кабель должен быть аккуратно плотно закручен и пропущен снизу коптера, чтобы не попасть в пропеллеры.
Удаленно подключитесь к полётному контроллеру через QGroundControl. В системе Clover уже выставлены нужные настройки, остается лишь создать новое подключение в QGroundControl, выбрать его и подключиться. Настраивается оно, как на картинке в статье "Подключение QGroundControl по Wi-Fi".
Настройка пульта
Настройка полетных режимов описана в статье "Полетные режимы".
Канал 5 должен располагаться на переключателе SwC; Канал 6 - на SwA. Однако вы можете настроить эти каналы любым удобным для вас образом.
Выполнение автоматической проверки
Проверку следует выполнить, когда вы полностью настроили дрон, а также при возникновении неполадок. Подробно процедура описана в статье "Автоматическая проверка".
Выполнить команду:
rosrun clover selfcheck.py
Написание программы
В статье "Автономный полет" описана работа с модулем simple_offboard
, который создан для простого программирования дрона. В ней даны описания основных функций, а также примеры кода.
Скопируйте из раздела "Использование из языка Python" пример кода и вставьте в редактор (например, в Visual Studio Code, PyCharm, Sublime Text, Notepad++).
Сохраните документ с расширением .py для включения подсветки текста.
Далее необходимо добавить полётные команды в программу. Примеры таких команд представлены в статье. Нужно написать функции для взлета и полета в точку, а также для посадки.
Взлет.
Для взлета можно использовать функцию
navigate
:navigate(x=0, y=0, z=1.5, speed=0.5, frame_id='body', auto_arm=True)
Добавьте эту строку внизу программы.
Также добавьте команду ожидания:
rospy.sleep(3)
Важно выделить время на выполнение команды
navigate
, иначе коптер, не дожидаясь выполнения предыдущей команды, сразу перейдет к выполнению следующей. Для этого используется командаrospy.sleep()
. В скобках указывается время в секундах. Функцияrospy.sleep()
относится к предыдущей командеnavigate
, а не к последующей, то есть это время, которое мы даем на то, чтобы долететь до точки, обозначенной в предыдущемnavigate
.
Зафиксировать положение дрона в системе координат маркерного поля.
Для этого нужно выполнить
navigate
и указать в нем необходимые координаты (например, x=1, y=1, z=1.5) и выбрать систему координат (frame_id
):navigate(x=1, y=1, z=1.5, speed=1, frame_id='aruco_map')
В итоге должно получиться:
navigate(x=0, y=0, z=1.5, speed=0.5, frame_id='body', auto_arm=True) rospy.sleep(3) navigate(x=1, y=1, z=1.5, speed=1, frame_id='aruco_map')
Обратите внимание, что параметр
auto_arm=True
ставится только при первом взлете. В остальных случаях его выставлять нельзя, иначе возникнут проблемы с перехватом управления.Если вы хотите добавить другие точки для пролета, нужно дописать еще один
navigate
иrospy.sleep()
. Время нужно вычислить отдельно для каждой точки в зависимости от скорости полета и расстояния между точками.Например, если мы хотим полететь в точку (3, 3, 1.5):
navigate(x=3, y=3, z=1.5, speed=1, frame_id=‘aruco_map’) rospy.sleep(3)
Координаты не должны выходить за пределы вашего поля. Если поле имеет размер 4х4 метра, максимальное значение координат, которое стоит указывать, — 4.
После пролета по точкам нужно приземлиться. Следующая строка ставится в конце программы:
land()
Запись программы на дрон
Самый простой способ – это скопировать текст программы, создать новый файл в командной строке Клевера и вставить текст программы в файл.
Для создания файла
myprogram.py
введите команду:nano myprogram.py
Название можно выбрать любое, однако не рекомендуется использовать пробелы и специальные символы. Также расширение у программы всегда должно быть
.py
.Вставить текст в поле ввода. Если вы пользуетесь веб-доступом Butterfly на Windows или Linux:
Ctrl+Shift+V
На Mac нажмите
cmd+v
.Сохранить файл:
Ctrl+x; Y; Enter
Запуск программы
- Необходимо тщательно подготовить дрон, пульт и программу. Запустите
selfcheck.py
. Убедитесь, что дрон летает в ручном режиме. - Включите дрон и дождитесь, пока загрузится система. Красный огонек на камере означает, что систем загрузилась.
Проверьте полет в режиме POSCTL.
Для этого взлетите над метками в режиме STABILIZED и переведите переключатель SwC в нижнее положение - режим POSCTL.
Будьте готовы сразу же переключиться обратно в режим STABILIZED в случае выхода дрона из-под контроля!
Установите левый стик (газ) в центральное положение. Дрон должен зависнуть на месте. В таком случае можно сажать дрон и переходить к следующему шагу. Если нет, нужно разобраться в проблеме.
Установите переключатель SwC в центральное положение. С помощью него вы будете перехватывать дрон: стоит лишь переключить его в верхнее положение.
- Установите левый стик (газ) в центральное положение, чтобы в случае перехвата дрон не упал на пол.
Запустите программу. Для этого выполните команду:
python3 my_program.py
После выполнения программы дрон может некорректно приземлиться и продолжать лететь над полом. В таком случае нужно перехватить управление.