Files
clover/docs/ru/auto_setup.md
Oleg Kalachev f77843f4a5 Move ROS Noetic (#327)
* builder: Use 64-bit Raspberry Pi OS

* travis: Use 64-bit builder

* builder: Don't try to install Melodic packages on Noetic

* clover: Use package version 3, update dependencies

* travis: Enable Noetic build

* standalone_install: Auto-select Python, ROS distro

* builder: Use variable substitution for ROS_DISTRO

* builder: Add Noetic package definitions

* builder: Use variable substitution for validation

* aruco_pose, clover: Allow compiling against OpenCV 3 and 4

* builder: Add proper Noetic repository

* builder: Don't force Tornado version

Assume rosbridge_suite depends on the right one.

* builder: Install packages for Python 3

* builder/test: Use Python3 interpreter for ROS tests

TODO (?): add tests for Python2?

* builder: Use Python 3 syntax for Python 3 tests

* builder: Install rpi_ws281x for Python3

* standalone_install: Use proper Python for pytest

* builder: Install espeak for python3

* builder: Use proper path for roscore

* builder: Install rosdep, etc. for python3

* builder: Run Clever/Clover test with Python3

* builder: Use Python3 for Clever compat layer

* builder: Enable OpenCV 4.2 repository

* builder: Force versions for ROS packages that use OpenCV

Also, hold their versions so that they don't get updated for no reason.

* aruco_pose/draw: Replace OpenCV projection code with a rewrite

* builder: Don't try to install compressed_transport twice

* clover: Fix importing urllib for Python3

* aruco_pose, clover: Expose Python scripts through CMake

* clover/selfcheck: Be more python3-compatible

This is basically commit a01d199890 from buster-python3, not sure if it aged well.

* roswww_static: Add python script installation

* clover_blocks: Use Python3 syntax for exec

* aruco_pose: Remove unused code

* Melodic => Noetic in some docs

* docs: add 0.22 migration article

* docs: remove unneeded comment

* docs: python 3 updates

* docs: python 3 update in auto_setup article

* docs: add ROS Noetic transition note

* aruco.launch: add placement, length and map arguments

* genmap.py: add -o argument for output file name

* docs: use -o argument of genmap.py

* simple_offboard: correctly check manual control timeout, separate it from kill switch check

* blocks: force led_leds index to int

* docs: update and fix 0.22 migration articles

* blocks: fix set_leds with color-typed argument

* aruco_gen: Open file in binary mode for Python3 compatibility

* clover: Use proper variable in aruco.launch

* led: change default number of leds to 72

* aruco_pose: Make sure there are no undefined symbols

Also, compile in apriltag_quad_thresh.cpp - it contains some of the functions referenced
in aruco.cpp, which would otherwise be undefined.

* aruco_pose: Make vendored library compatible with older OpenCVs

* aruco_pose, clover: Reduce the amount of OpenCV libs requested

* aruco_pose, clover: Move subscriptions to the end of init

* aruco_pose: Don't expose vendored library symbols

* aruco_pose: Simplify dynamic parameter callback setting

* builder: Build with debug symbols

* clover: Attempt to respawn dying nodelets

* Change Raspberry Pi OS to latest armhf, use packages.coex.tech as a source

* Add CRYPTOGRAPHY_DONT_BUILD_RUST=1

* Fix Node.js installation

* image: use older CMake (3.13.4-1)
Fixing https://travis-ci.org/github/CopterExpress/clover/jobs/764367665#L6984

* image: update Raspberry Pi OS to 2021-03-04

* image: bring back moving ld.so.preload out of the way while building

* Fix pthreads ld error

* Try to fix pthreads ld error

* Another attempt to fix pthreads ld error

* Yet another attempt to fix pthreads ld error

* Try to fix

* Be verbose

* Temporarily disable rc and camera_markers building

* Fix standalone-install

* Revert "Temporarily disable rc and camera_markers building"

This reverts commit e119220e91.

* Try to fix

* Try to fix

* Revert "image: use older CMake (3.13.4-1)"

This reverts commit df28da0060.

* Revert "Revert "image: use older CMake (3.13.4-1)""

This reverts commit a28c774e8f.

* Verbosity

* Debugging

* More debugging

* Display all CMake variables

* Try to fix

* Another try to fix

* Revert "Another try to fix"

This reverts commit 5a4c3a0da7.

* Another try to fix

* And another

* And yet another

* Continue...

* Cleanup

* Sources lists cleanup

* More cleanup

* Restore .git directory in clover repo

* Fix building documentation

* Fix documentation building in image

* Trigger build to update ws281x package

* Test

* Disable unneeded hack

* Disable hack

* image: add cmake-modules package

* www: add viewing clover.err file from web interface

* Remove hacks

* Show nodelet version

* docs: add packages article

* image: add image-view package for recording video from topics

* Minor fix

* CI: add Docker authentication on image build

* CI: fix Bash syntax

* CI: fix authentication in Docker

* CI: move Melodic build and editorconfig-lint to GitHub Actions (#331)

* Create main.yml

* Update main.yml

* Disable native Melodic build in Travis

* Run editorconfig-lint in Actions

* Let wget be less verbose

* Test

* Test ok

* Disable editorconfig-lint in Travis

* docs: add links to hardware sources

* CI: move image building to GitHub actions (#335)

* Start working on building image in GitHub actions

* Trigger GitHub on push to any branch

* Fix TRAVIS_TAG

* Add compress image step

* Disable image build in Travis

* Add upload image step

* Fix compress image

* Fix

* Fix

* Minor fix

* Trigger build on tag

* Show images sizes not in human format

* Upload only built image

* Make prerelease

* Upload assets on release not on tags

* readme: change build badge to GitHub Actions

* readme: add support chat badge

* CI: move documentation building to GitHub Actions (#337)

* CI: change docs target branch to actions

* CI: change docs target branch to master

* CI: use gh-pages target branch for docs

* CI: split up to several workflows

* CI: remove .travis.yml

* CI: change apt to apt-get

* CI: push documentation site to the main repo

* builder: less verbosity

* CI: add new key for apt
Fixing https://github.com/CopterExpress/clover/runs/2700356960#step:3:74

* Add Noetic building to CI

* Add test for QR recognition

* Fix

* Move QR recognition test to a separate file

* Fix QR recognition code for Python 3

* Import SetLEDs, LEDStateArray, LEDState in tests

* Add more imports to tests
(from documentation)

* Fix permissions

* Fix standalone-install for Python 2

* Fix QR recognition test

* Don’t use ROS for QR recognition test

* docs: remove non-working example

* Make v4l2 device file an argument in main_camera.launch

* Wait for v4l2 device before launching the camera driver

* Use exec in waitfile

* Transfer main camera nodelet manager to main_camera.launch

* Update cv_camera version to 0.5.1

* docs: minor fix

* Revert cv_camera to 0.5.0

* Update Raspberry Pi OS to 2021-05-07

* docs: add link to the last ROS Melodic version.

Co-authored-by: Alexey Rogachevskiy <sfalexrog@gmail.com>
2021-06-08 20:13:46 +03:00

413 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Пошаговая инструкция по настройке автономного полета Клевера 4
> **Note** Документация для версий [образа](image.md), начиная с **0.20**. Для более ранних версий см. [документацию для версии **0.19**](https://github.com/CopterExpress/clover/blob/v0.19/docs/ru/auto_setup.md).
Данная инструкция содержит ссылки на другие статьи, в которых каждая из затронутых тем разобрана более подробно. Если вы столкнулись с трудностями во время прочтения одной из таких статей, рекомендуется вернуться к данной инструкции, так как здесь многие операции описаны пошагово, а также отсутствуют ненужные шаги.
## Первоначальная настройка Raspberry Pi
- Установите Raspberry Pi и камеру на квадрокоптер по [инструкции](assemble_4_2.md#установка-raspberry-pi).
- Скачайте образ системы по [ссылке](image.md).
- Запишите образ на MicroSD карту.
- Вставьте карту в Raspberry Pi.
- Подключите питание к Raspberry Pi и ожидайте появления Wi-Fi-сети. Для этого подключите Raspberry Pi к компьютеру через MicroUSB-кабель.
На Raspberry Pi должен периодически мигать зеленый светодиод. Он сигнализирует о нормальной работе операционной системы.
> **Warning** Перед подключением Raspberry Pi к компьютеру по USB необходимо вытащить из Raspberry Pi провод питания (который идет от BEC). Иначе могут быть проблемы с питанием.
- Подключитесь к Wi-Fi и зайдите в веб-интерфейс ([статья](wifi.md)).
Во время первого включения сеть появляется не сразу. Нужно дождаться полной загрузки системы. Если в списке сетей долго не появляется сети Клевера, закройте окно с выбором сети и откройте снова. Тогда список сетей обновится.
> **Hint** Если на этом шаге вы подключились к Wi-Fi-сети коптера, рекомендуется открыть [локальную версию этой статьи](http://192.168.11.1/docs/ru/auto_setup.html), иначе ссылки не будут работать.
- Подключитесь к Raspberry Pi по SSH.
Самый быстрый способ веб-доступ. Следуйте инструкциям в статье "[Доступ по SSH](ssh.md#веб-доступ)".
- Если необходимо, можно поменять название и пароль сети. См. статью "[Настройка сети](network.md#изменение-пароля-или-ssid-имени-сети)". Остальные операции с сетью производить не нужно.
- Для редактирования файлов пользуйтесь редактором nano. [Инструкция по работе с редактором](cli.md#editing).
> **Hint** В редакторе перемещать курсор можно только стрелками на клавиатуре.
- Перезагрузите Raspberry Pi:
```bash
sudo reboot
```
Соединение временно закроется, создастся новая сеть. К ней надо подключиться заново.
- Убедитесь в корректной работе камеры. В браузере зайдите на адрес http://192.168.11.1:8080 и выберите `image_raw`.
Более подробно можно прочитать в статье "[Просмотр изображений с камер](web_video_server.md#просмотр)".
Если изображение размыто, необходимо сфокусировать линзу. Для этого покрутите объектив в одну или в другую сторону. Продолжайте крутить, пока изображение не станет четким.
> **Hint** На камере должен гореть красный светодиод: он означает, что камера в данный момент производит съемку. Если светодиод не горит: либо камера подключена неправильно, либо операционная система не загрузилась, либо в настройках допущена ошибка.
## Базовые команды
Вам пригодятся основные команды Linux, а также специальные команды Clover, чтобы уверенно работать в системе.
Показать список файлов:
```bash
ls
```
Перейти в папку с прописыванием пути к ней:
```bash
cd catkin_ws/src/clover/clover/launch/
```
Перейти в домашнюю директорию:
```bash
cd
```
Открыть файл file.py:
```bash
nano file.py
```
Открыть файл clover.launch с прописыванием полного пути к нему (сработает, если вы находитесь в другой папке):
```bash
nano ~/catkin_ws/src/clover/clover/launch/clover.launch
```
Сохранить файл (нажимать последовательно):
```bash
Ctrl+X; Y; Enter
```
Удалить файл или папку с названием name (ВНИМАНИЕ: операция выполнится без подтверждения. Будьте осторожны!):
```bash
rm -rf name
```
Создать папку с названием myfolder:
```bash
mkdir myfolder
```
Полная перезагрузка Raspberry Pi:
```bash
sudo reboot
```
Перезапуск только систем Клевера:
```bash
sudo systemctl restart clover
```
Выполнить самопроверку Клевера:
```bash
rosrun clover selfcheck.py
```
Остановить программу
```bash
Ctrl+C
```
Запустить программу myprogram.py на Питоне:
```bash
python3 myprogram.py
```
Журнал событий процессов Клевера. Пролистывать список можно нажатием Enter или сочетанием клавиш Ctrl+V (пролистывает быстрее):
```bash
journalctl -u clover
```
Открыть файл sudoers от имени администратора (он не откроется без прописывания sudo. Через sudo можно запускать другие команды, если они не открываются без прав администратора):
```bash
sudo nano /etc/sudoers
```
## Настройка параметров Raspberry Pi для автономного полета
Большинство параметров, необходимых для полета, хранится в папке `~/catkin_ws/src/clover/clover/launch/`.
- Зайти в папку:
```bash
cd ~/catkin_ws/src/clover/clover/launch/
```
Символ `~` обозначает домашнюю директорию вашего пользователя. Если вы уже находитесь в ней, можно обойтись командой:
`cd catkin_ws/src/clover/clover/launch/`
> **Hint** Клавишей Tab можно автоматически дополнить названия файлов, папок или команд. Нужно начать вводить желаемое название и нажать Tab. Если не будет конфликтов, название напишется полностью. Например, чтобы быстро ввести путь к папке с настройками, после ввода `cd` можно начать вводить следующую комбинацию клавиш: `c-Tab-s-Tab-c-Tab-c-Tab-l-Tab`. Таким образом можно сэкономить много времени при написании длинной команды, а также избежать возможных ошибок в написании пути.
- В этой папке необходимо сконфигурировать несколько файлов:
- `clover.launch`
- `aruco.launch`
- `main_camera.launch`
- Открыть файл `clover.launch`:
```bash
nano clover.launch
```
Вы должны находиться в папке, в которой располагается файл. Если вы находитесь в другой папке, файл можно открыть, прописав полный путь к нему:
```bash
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`.
- В нем нужно активировать несколько параметров. Подробнее в [статье](aruco_map.md).
Должно получиться:
```
<arg name="aruco_detect" default="true"/>
<arg name="aruco_map" default="true"/>
<arg name="aruco_vpe" default="true"/>`
```
- Сгенерируйте поле с метками. Смотрите подробности в статье [Навигация по картам ArUco-маркеров](aruco_map.md#настройка-карты-маркеров). Для генерации меток нужно ввести команду с определенными значениями.
Пример команды для генерации поля, где:
- длина маркера = 0.335 м (`length`)
- 10 столбцов (x)
- 10 строк (y)
- расстояние между центрами меток по оси x = 1 м (`dist_x`)
- расстояние между центрами меток по оси y = 1 м (`dist_y`)
- номер первого маркера = 0 (`first`)
- название карты остается стандартным: map.txt
- нумерация идет с верхнего левого угла (ключ `--top-left`)
```bash
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`.
> **Hint** Если вы зададите другое имя для файла с картой, его нужно прописать в файле `aruco.launch`. Найдите строку
`<param name="map" value="$(find aruco_pose)/map/map.txt"/>`
и замените название map.txt на название вашего файла.
- Отредактируйте файл `main_camera.launch` для настройки камеры:
Подробнее в статье "[Настройка расположения основной камеры](camera_setup.md#frame)".
В этом файле необходимо отредактировать строку с параметрами расположения камеры. Строка выглядит так:
```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"/>
```
В файле вы найдете много строк, похожих на эту, но большинство из них закомментированы (то есть не читаются) и только одна раскомментирована. Это заранее заготовленные настройки, из которых можно выбрать нужную вам.
Комментарий в языке XML — это символы `<!--` в начале строки и `-->` в конце строки. Пример закомментированной строки:
```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"/>-->
```
Пример незакомментированной строки (строка будет учитываться программой):
```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"/>
```
Над этими строками написано, какому расположению камеры соответствует настройка. Если шлейф от камеры выходит вперед относительно коптера, а камера направлена вниз, нужно выбрать настройку:
```xml
<!-- camera is oriented downward, camera cable goes forward [option 2] -->
```
Чтобы выбрать нужную настройку, необходимо раскомментировать соответствующую строку, и закомментировать другую аналогичную строку, чтобы не возникло конфликтов.
- Сохранить изменения. Последовательно нажмите:
```
Ctrl+x; y; Enter
```
- Перезагрузите модуль Клевер:
```bash
sudo systemctl restart clover
```
## Настройка полетного контроллера для автономного полета
- Перепрошить полетный контроллер модифицированной прошивкой. Скачать её можно [здесь](setup.md) в разделе "Загрузка прошивки в полетный контроллер".
- Инструкция по прошивке и настройке полетного контроллера — в той же статье.
> **Warning** Обязательно выберете файл скачанной прошивки после нажатия Firmware.
## Соединение полетного контроллера и Raspberry Pi
- Соедините Raspberry Pi и Pixracer через MicroUSB-кабель. Кабель должен быть аккуратно плотно закручен и пропущен снизу коптера, чтобы не попасть в пропеллеры.
- Удаленно подключитесь к полётному контроллеру через QGroundControl.
В системе Clover уже выставлены нужные настройки, остается лишь создать новое подключение в QGroundControl, выбрать его и подключиться. Настраивается оно, как на картинке в статье "[Подключение QGroundControl по Wi-Fi](gcs_bridge.md)".
## Настройка пульта
- Настройка полетных режимов описана в статье "[Полетные режимы](modes.md)".
Канал 5 должен располагаться на переключателе SwC; Канал 6 - на SwA. Однако вы можете настроить эти каналы любым удобным для вас образом.
## Выполнение автоматической проверки
Проверку следует выполнить, когда вы полностью настроили дрон, а также при возникновении неполадок. Подробно процедура описана в статье "[Автоматическая проверка](selfcheck.md)".
- Выполнить команду:
```bash
rosrun clover selfcheck.py
```
## Написание программы
В статье "[Автономный полет](simple_offboard.md)" описана работа с модулем `simple_offboard`, который создан для простого программирования дрона. В ней даны описания основных функций, а также примеры кода.
- Скопируйте из раздела "Использование из языка Python" пример кода и вставьте в редактор (например, в Visual Studio Code, PyCharm, Sublime Text, Notepad++).
- Сохраните документ с расширением .py для включения подсветки текста.
- Далее необходимо добавить полётные команды в программу. Примеры таких команд представлены в статье. Нужно написать функции для взлета и полета в точку, а также для посадки.
- Взлет.
Для взлета можно использовать функцию `navigate`:
```python
navigate(x=0, y=0, z=1.5, speed=0.5, frame_id='body', auto_arm=True)
```
Добавьте эту строку внизу программы.
Также добавьте команду ожидания:
```python
rospy.sleep(3)
```
> **Hint** Важно выделить время на выполнение команды `navigate`, иначе коптер, не дожидаясь выполнения предыдущей команды, сразу перейдет к выполнению следующей. Для этого используется команда `rospy.sleep()`. В скобках указывается время в секундах. Функция `rospy.sleep()` относится к предыдущей команде `navigate`, а не к последующей, то есть это время, которое мы даем на то, чтобы долететь до точки, обозначенной в предыдущем `navigate`.
- Зафиксировать положение дрона в системе координат маркерного поля.
Для этого нужно выполнить `navigate` и указать в нем необходимые координаты (например, x=1, y=1, z=1.5) и выбрать систему координат (`frame_id`):
```python
navigate(x=1, y=1, z=1.5, speed=1, frame_id='aruco_map')
```
- В итоге должно получиться:
```python
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')
```
> **Warning** Обратите внимание, что параметр `auto_arm=True` ставится только при первом взлете. В остальных случаях его выставлять нельзя, иначе возникнут проблемы с перехватом управления.
- Если вы хотите добавить другие точки для пролета, нужно дописать еще один `navigate` и `rospy.sleep()`. Время нужно вычислить отдельно для каждой точки в зависимости от скорости полета и расстояния между точками.
Например, если мы хотим полететь в точку (3, 3, 1.5):
```python
navigate(x=3, y=3, z=1.5, speed=1, frame_id=aruco_map)
rospy.sleep(3)
```
> **Warning** Координаты не должны выходить за пределы вашего поля. Если поле имеет размер 4х4 метра, максимальное значение координат, которое стоит указывать, — 4.
- После пролета по точкам нужно приземлиться. Следующая строка ставится в конце программы:
```
land()
```
## Запись программы на дрон
Самый простой способ это скопировать текст программы, создать новый файл в командной строке Клевера и вставить текст программы в файл.
- Для создания файла `myprogram.py` введите команду:
```bash
nano myprogram.py
```
Название можно выбрать любое, однако не рекомендуется использовать пробелы и специальные символы. Также расширение у программы всегда должно быть `.py`.
- Вставить текст в поле ввода. Если вы пользуетесь веб-доступом Butterfly на Windows или Linux:
```
Ctrl+Shift+V
```
На Mac нажмите `cmd+v`.
- Сохранить файл:
```
Ctrl+x; Y; Enter
```
## Запуск программы
- Необходимо тщательно подготовить дрон, пульт и программу. Запустите `selfcheck.py`. Убедитесь, что дрон летает в ручном режиме.
- Включите дрон и дождитесь, пока загрузится система. Красный огонек на камере означает, что систем загрузилась.
- Проверьте полет в режиме POSCTL.
Для этого взлетите над метками в режиме STABILIZED и переведите переключатель SwC в нижнее положение - режим POSCTL.
> **Warning** Будьте готовы сразу же переключиться обратно в режим STABILIZED в случае выхода дрона из-под контроля!
Установите левый стик (газ) в центральное положение. Дрон должен зависнуть на месте. В таком случае можно сажать дрон и переходить к следующему шагу. Если нет, нужно разобраться в проблеме.
- Установите переключатель SwC в центральное положение. С помощью него вы будете перехватывать дрон: стоит лишь переключить его в верхнее положение.
- Установите левый стик (газ) в центральное положение, чтобы в случае перехвата дрон не упал на пол.
- Запустите программу. Для этого выполните команду:
```bash
python3 my_program.py
```
> **Warning** После выполнения программы дрон может некорректно приземлиться и продолжать лететь над полом. В таком случае нужно перехватить управление.