Merge 512b4c2e09 into master

This commit is contained in:
Arthur Golubtsov
2018-02-27 22:25:52 +03:00
committed by GitHub
2 changed files with 28 additions and 22 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -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
<arg name="main_camera" default="true"/>
@@ -46,25 +44,26 @@ sudo systemctl restart clever
<param name="frame_id" value="aruco_map_raw"/>
<!-- тип маркерного поля -->
<param name="type" value="gridboard"/>
<!-- количество маркеров по x -->
<param name="markers_x" value="1"/>
<!-- количество маркеров по y -->
<param name="markers_y" value="6"/>
<!-- ID маркера первого маркера (левого верхнего) -->
<param name="first_marker" value="240"/>
<!-- длина стороны маркера в метрах -->
<param name="markers_side" value="0.3362"/>
<!-- растояние между маркерами -->
<param name="markers_sep" value="0.46"/>
</node>
```
Можно задать отдельно расстояние между маркерами по горизонтали и вертикали:
```xml
<!-- расстояние между маркерами по горизонтали -->
<param name="markers_sep_x" value="0.97"/>
@@ -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** Образ версии &gt;0.2.
![](/assets/IMG_4175.JPG)
@@ -154,8 +157,11 @@ navigate(2, 2, 2, speed=1, frame_id='aruco_map', update_frame=True) # поле
<param name="aruco_orientation" value="local_origin_upside_down"/>
```
При задании вышеуказанного параметра фрейм 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')
```