Files
clover/docs/ru/aruco_map.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

11 KiB
Raw Blame History

Навигация по картам ArUco-маркеров

Note

Документация для версий образа, начиная с версии 0.22. Для более ранних версий см. документацию для версии 0.20.

Info Для распознавания маркеров модуль камеры должен быть корректно подключен и сконфигурирован.

Hint Рекомендуется использование специальной сборки PX4 для Клевера.

Модуль aruco_map распознает карты ArUco-маркеров, как единое целое. Также возможна навигация по картам ArUco-маркеров с использованием механизма Vision Position Estimate (VPE).

Конфигурирование

Аргумент aruco в файле ~/catkin_ws/src/clover/clover/launch/clover.launch должен быть в значении true:

<arg name="aruco" default="true"/>

Для включения распознавания карт маркеров аргументы aruco_map и aruco_detect в файле ~/catkin_ws/src/clover/clover/launch/aruco.launch должны быть в значении true:

<arg name="aruco_detect" default="true"/>
<arg name="aruco_map" default="true"/>

Для включения передачи координат в полетный контроллер по механизму VPE, аргумента aruco_vpe должен быть в значении true:

<arg name="aruco_vpe" default="true"/>

Настройка карты маркеров

Карта загружается из текстового файла, каждая строка которого имеет следующий формат:

id_маркера размераркера x y z угол_z угол_y угол_x

Где угол_N – это угол поворота маркера вокруг оси N в радианах.

Файлы карт располагаются в каталоге ~/catkin_ws/src/clover/aruco_pose/map. Название файла с картой задается в аргументе map:

<arg name="map" default="map.txt"/>

Смотрите примеры карт маркеров в вышеуказанном каталоге.

Файл карты может быть сгенерирован с помощью инструмента genmap.py:

rosrun aruco_pose genmap.py length x y dist_x dist_y first -o test_map.txt

Где length размер маркера, x количество маркеров по оси x, y - количество маркеров по оси y, dist_x расстояние между центрами маркеров по оси x, y расстояние между центрами маркеров по оси y, first ID первого (левого нижнего) маркера, test_map.txt название файла с картой. Дополнительный ключ --bottom-left позволяет нумеровать маркеры с левого нижнего угла.

Пример:

rosrun aruco_pose genmap.py 0.33 2 4 1 1 0 -o test_map.txt

Дополнительную информацию по утилите можно получить по ключу -h: rosrun aruco_pose genmap.py -h.

Также можно создать карту в специальном конструкторе.

Проверка

Для контроля карты, по которой в данный момент коптер осуществляет навигацию, можно просмотреть содержимое топика /aruco_map/image. Через браузер его можно просмотреть при помощи web_video_server по ссылке http://192.168.11.1:8080/snapshot?topic=/aruco_map/image:

Клевер публикует текущую позицию распознанной карты в топик aruco_map/pose. Также публикуется TF-фрейм aruco_map (VPE выключен) или aruco_map_detected (VPE включен). Используя топик aruco_map/visualization можно визуализировать текущую карту маркеров в rviz.

Наглядно позиция распознанной карты отображается в топике aruco_map/debug (просмотр доступен по ссылке http://192.168.11.1:8080/stream_viewer?topic=/aruco_map/debug):

Система координат

По соглашению в маркерном поле используется стандартная система координат ENU:

  • ось x указывает на правую сторону карты маркеров;
  • ось y указывает кверху карты маркеров;
  • ось z указывает от плоскости карты маркеров.

Настройка VPE

Для работы механизма Vision Position Estimation необходимы следующие настройки PX4.

При использовании LPE (параметр SYS_MC_EST_GROUP = local_position_estimator, attitude_estimator_q):

  • В параметре LPE_FUSION включены флажки vision position, land detector. Флажок baro рекомендуется отключить.
  • Вес угла по рысканью по зрению: ATT_W_EXT_HDG = 0.5
  • Включена ориентация по Yaw по зрению: ATT_EXT_HDG_M = 1 Vision.
  • Шумы позиции по зрению: LPE_VIS_XY = 0.1 m, LPE_VIS_Z = 0.1 m.
  • LPE_VIS_DELAY = 0 sec.

При использовании EKF2 (параметр SYS_MC_EST_GROUP = ekf2):

  • В параметре EKF2_AID_MASK включены флажки vision position fusion, vision yaw fusion.
  • Шум угла по зрению: EKF2_EVA_NOISE = 0.1 rad.
  • Шум позиции по зрению: EKF2_EVP_NOISE = 0.1 m.
  • EKF2_EV_DELAY = 0.

Hint На данный момент для полета по маркерам рекомендуется использование LPE.

Для проверки правильности всех настроек можно воспользоваться утилитой selfcheck.py.

Info Для использования LPE в Pixhawk необходимо скачать прошивку с названием px4fmu-v2_lpe.px4.

Полет

При правильной настройке коптер начнет удерживать позицию в режимах POSCTL и OFFBOARD автоматически.

Для автономных полетов можно будет использовать функции navigate, set_position, set_velocity. Для полета в определенные координаты маркерного поля необходимо использовать фрейм aruco_map:

# Вначале необходимо взлететь, чтобы коптер увидел карту меток и появился фрейм aruco_map:
navigate(x=0, y=0, z=2, frame_id='body', speed=0.5, auto_arm=True)  # взлет на 2 метра

time.sleep(5)

# Полет в координату 2:2 маркерного поля, высота 2 метра
navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map')  # полет в координату 2:2, высота 3 метра

Полет в координаты по ID маркера

Начиная с версии образа 0.18, доступны также полёты относительно отдельного маркера в карте, даже если дрон его не видит. По аналогии с навигацией по отдельным маркерам при настройке карты маркеров дрон сможет лететь в координаты относительно отдельного маркера, используя фрейм aruco_ID с соответствующим ID маркера.

Полет в точку над маркером 5 на высоту 1 метр:

navigate(frame_id='aruco_5', x=0, y=0, z=1)

Дополнительные настройки

Если коптер нестабильно удерживает позицию по VPE, попробуйте увеличить коэффициенты P PID-регулятора по скорости параметры MPC_XY_VEL_P и MPC_Z_VEL_P.

Если коптер нестабильно удерживает высоту, попробуйте увеличить коэффициент MPC_Z_VEL_P или лучше подобрать газ висения – MPC_THR_HOVER.

Расположение маркеров на потолке

Маркеры на потолке

Для навигации по маркерам, расположенным на потолке, необходимо поставить основную камеру так, чтобы она смотрела вверх и установить соответствующий фрейм камеры.

Также в файле ~/catkin_ws/src/clover/clover/launch/aruco.launch необходимо выставить аргумент placement в значение ceiling:

<arg name="placement" default="ceiling"/>

При такой конфигурации фрейм aruco_map также окажется перевернутым. Таким образом, для полета на высоту 2 метра ниже потолка, аргумент z нужно устанавливать в 2:

navigate(x=1, y=2, z=1.1, speed=0.5, frame_id='aruco_map')