diff --git a/assets/Screenshot from 2018-02-27 22-30-50.png b/assets/Screenshot from 2018-02-27 22-30-50.png new file mode 100644 index 00000000..29c465eb Binary files /dev/null and b/assets/Screenshot from 2018-02-27 22-30-50.png differ diff --git a/docs/aruco.md b/docs/aruco.md index 7b4bb324..73cd363b 100644 --- a/docs/aruco.md +++ b/docs/aruco.md @@ -1,7 +1,6 @@ -Навигация с использованием ArUco-маркеров -=== +# Навигация с использованием ArUco-маркеров -[ArUco-маркеры](https://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html) — это популярная технология для позиционирования +[ArUco-маркеры](https://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html) — это популярная технология для позиционирования роботехнических систем с использованием компьютерного зрения. Пример ArUco-маркеров: @@ -10,16 +9,15 @@ > **Hint** При печати визуальных маркеров необходимо использовать максимально матовую бумагу. Глянцевая бумага будет бликовать на свету, сильно ухудшая качество распознавания. -aruco_pose ---- +## aruco\_pose Модуль `aruco_pose` позволяет восстанавливать позицию коптера относительно карты ArUco-маркеров и сообщать ее полетному контролеру, используя механизм [Vision Position Estimation](https://dev.px4.io/en/ros/external_position_estimation.html). -При наличии источника положения коптера по маркерам появляется возможность производить точную автономную indoor-навигацию по позициям при помощи модуля [simple_offboard](/docs/simple_offboard.md). +При наличии источника положения коптера по маркерам появляется возможность производить точную автономную indoor-навигацию по позициям при помощи модуля [simple\_offboard](/docs/simple_offboard.md). ### Включение -Необходимо убедиться, что в launch-файле Клевера (`~/catkin_ws/src/clever/clever/launch/clever.launch`) включен запуск aruco_pose и [камеры для компьютерного зрения](/docs/camera.md): +Необходимо убедиться, что в launch-файле Клевера \(`~/catkin_ws/src/clever/clever/launch/clever.launch`\) включен запуск aruco\_pose и [камеры для компьютерного зрения](/docs/camera.md): ```xml @@ -46,25 +44,26 @@ sudo systemctl restart clever - + - + - + - + ``` Можно задать отдельно расстояние между маркерами по горизонтали и вертикали: + ```xml @@ -81,13 +80,13 @@ sudo systemctl restart clever Нумерация маркеров ведется с левого верхнего угла поля. -Для контроля карты, по которой в данный момент коптер осуществляет навигацию, можно просмотреть содержимое топика `aruco_pose/map_image`. Через браузер его можно просмотреть при помощи [web_video_server](/docs/web_video_server.md) по ссылке http://192.168.11.1:8080/snapshot?topic=/aruco_pose/map_image: +Для контроля карты, по которой в данный момент коптер осуществляет навигацию, можно просмотреть содержимое топика `aruco_pose/map_image`. Через браузер его можно просмотреть при помощи [web\_video\_server](/docs/web_video_server.md) по ссылке [http://192.168.11.1:8080/snapshot?topic=/aruco\_pose/map\_image](http://192.168.11.1:8080/snapshot?topic=/aruco_pose/map_image): ![](/assets/Снимок экрана 2017-11-27 в 23.20.49.png) При полетах необходимо убедиться, что наклеенные на пол метки соответствуют карте. -В топике `aruco_pose/debug` (http://192.168.11.1:8080/snapshot?topic=/aruco_pose/debug) доступен текущий результат распознования меток: +В топике `aruco_pose/debug` \([http://192.168.11.1:8080/snapshot?topic=/aruco\_pose/debug](http://192.168.11.1:8080/snapshot?topic=/aruco_pose/debug)\) доступен текущий результат распознования меток: TODO @@ -95,21 +94,21 @@ TODO По [соглашению](http://www.ros.org/reps/rep-0103.html), в маркерном поле используется стандартная система координат ENU: -* x — вправо (условный "восток"); -* y — вперед (условный "север"); +* x — вправо \(условный "восток"\); +* y — вперед \(условный "север"\); * z — вверх. _Примечание_: указанное выше определение приведено для ситуации, когда поле маркеров лежит на полу. -Таким образом, нулевой является левая нижня точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо (по оси x). +Таким образом, нулевой является левая нижня точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо \(по оси x\). ![](/assets/aruco-frame.png) ### Настройка полетного контролера -Для правильной работы Vision Position Estimation необходимо (через [QGroundControl](/docs/gcs_bridge.md)) убедиться, что: +Для правильной работы Vision Position Estimation необходимо \(через [QGroundControl](/docs/gcs_bridge.md)\) убедиться, что: -* Для PixHawk: Установлена прошивка с LPE (local position estimator). Для PixRacer: параметр `SYS_MC_EST_GROUP` установлен в `local_position_estimator, attitude_estimator_q`. +* Для PixHawk: Установлена прошивка с LPE \(local position estimator\). Для PixRacer: параметр `SYS_MC_EST_GROUP` установлен в `local_position_estimator, attitude_estimator_q`. * В параметре `LPE_FUSION` включены **только** флажки `vision position`, `vision yaw`, `land detector`. Итоговое значение _28_. * Выключен компас: `ATT_W_MAG` = 0 * Вес угла по рысканью по зрению: `ATT_W_EXT_HDG` = 0.5 @@ -120,11 +119,14 @@ _Примечание_: указанное выше определение пр * `LNDMC_ROT_MAX` = 45 deg * `LNDMC_THR_RANGE` = 0.5 * `LNDMC_Z_VEL_MAX` = 1 m/s - + +Для простоты настройки можно воспользоваться готовым файлом настроек для [Clever 2](https://github.com/CopterExpress/clever/blob/master/assets/Clever2LPE_160118.params) или для [Clever 3](https://github.com/CopterExpress/clever/blob/master/assets/Clever3_LPE_020218.params) и вгрузить его в контроллер с помощью меню Tools - Load from file из раздела Parameters в QGroundControl. + +![](/assets/Screenshot from 2018-02-27 22-30-50.png) ### Полет -При правильной настройке коптер начнет удерживать позицию по VPE (в [режимах](/docs/modes.md) `POSCTL` или `OFFBOARD`) автоматически. +При правильной настройке коптер начнет удерживать позицию по VPE \(в [режимах](/docs/modes.md) `POSCTL` или `OFFBOARD`\) автоматически. Для [автономных полетов](/docs/simple_offboard.md) можно будет использовать функции `navigate`, `set_position`, `set_velocity`. Для полета в определенные координаты маркерного поля необходимо использовать фрейм `aruco_map`: @@ -138,11 +140,12 @@ time.sleep(5) # Полет в координату 2:2 маркерного поля, высота 2 метра navigate(2, 2, 2, speed=1, frame_id='aruco_map', update_frame=True) # полет в координату 2:2, высота 3 метра ``` + См. [другие функции](/docs/simple_offboard.md) simple offboard. ### Расположение маркеров на потолке -> **Info** Образ версии >0.2. +> **Info** Образ версии >0.2. ![](/assets/IMG_4175.JPG) @@ -154,8 +157,11 @@ navigate(2, 2, 2, speed=1, frame_id='aruco_map', update_frame=True) # поле ``` -При задании вышеуказанного параметра фрейм aruco_map также окажется "перевернутым". Таким образом, для полета на высоту 2 метра ниже потолка, аргумент `z` нужно устанавливать в 2: +При задании вышеуказанного параметра фрейм aruco\_map также окажется "перевернутым". Таким образом, для полета на высоту 2 метра ниже потолка, аргумент `z` нужно устанавливать в 2: ```python navigate(x=1, y=2, z=1.1, speed=0.5, frame_id='aruco_map') ``` + + +