6.6 KiB
Навигация с использованием ArUco-маркеров
ArUco-маркеры — это популярная технология для позиционирования роботехнических систем с использованием компьютерного зрения.
Пример ArUco-маркеров:
aruco_pose
Модуль aruco_pose позволяет восстанавливать позицию коптера относительно карты ArUco-маркеров и сообщать ее полетному контролеру, используя механизм Vision Position Estimation.
При наличия источника положения коптера по маркерам, появляется возможность производить точную автономную indoor-навигацию по позициям при помощи модуля simple_offboard.
Включение
Необходимо убедиться, что в launch-файле Клевера (~/catkin_ws/src/clever/clever/clever.launch) включен запуск aruco_pose и нижней камеры для компьютерного зрения:
<arg name="bottom_camera" default="true"/>
<arg name="aruco" default="true"/>
При изменении launch-файла необходимо перезапустить пакет clever:
sudo systemctl restart clever
Настройка карты ArUco-меток
В качестве карты меток можно использовать автоматически сгенерированный ArUco-board.
Настройка карты меток производится с помощью файла ~/catkin_ws/src/clever/clever/aruco.launch. Для использования AruCo-board введите его параметры:
<node pkg="nodelet" type="nodelet" name="aruco_pose" args="load aruco_pose/aruco_pose nodelet_manager">
<param name="frame_id" value="aruco_map_raw"/>
<param name="type" value="gridboard"/> <!-- тип маркерного поля -->
<param name="markers_x" value="1"/> <!-- количество маркеров по x -->
<param name="markers_y" value="6"/> <!-- количество маркеров по y -->
<param name="first_marker" value="240"/> <!-- ID маркера первого маркера (левого верхнего) -->
<param name="markers_side" value="0.3362"/> <!-- длина стороны маркера в метрах -->
<param name="markers_sep" value="0.46"/> <!-- растояние между маркерами -->
</node>
Для контроля карты, по которой в данный момент коптер осуществляет навигацию, можно просмотре содержимое топика aruco_pose/map_image. Через браузер его можно просмотреть при помощи web_video_server по ссылке http://192.168.11.1:8080/snapshot?topic=/aruco_pose/map_image:

При полетах необходимо убедиться, что наклеенные на пол метки соответствуют карте по ссылке.
В топике aruco_pose/debug (http://192.168.11.1:8080/snapshot?topic=/aruco_pose/debug) доступен текущий результат распознования меток:
TODO
Система координат
По соглашению, в маркерном поле используется стандартная система координат ENU:
- x — вправо (условный "восток");
- y — вверх (условный "север");
- z — вверх.
Таким образом, нулевой является левая нижня точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо (по оси x).
Настройка полетного контролера
Для правильной работы Vision Position Estimation необходимо (через QGroundControl) убедиться, что:
- Для PixHawk: Установлена прошивка с LPE (local position estimator). Для PixRacer: параметр
SYS_MC_EST_GROUPустановлен вlocal_position_estimator, attitude_estimator_q. - В параметре
LPE_FUSIONвключены только флажкиvision position,vision yaw,land detector. Опционально можно включить барометр (baro). - Выключен компас:
ATT_W_MAG= 0 - Включена ориентация по Yaw по зрению:
ATT_EXT_HDG_M=Vision. - Настройки VPE:
LPE_VIS_DELAY= 0.03 sec,LPE_VIS_XY= 0.1 m,LPE_VIS_Z= 0.15 m. - Рекомендуемые настройки контроллера:
-
- Максимальная скорость по позиции:
MPC_XY_VEL_MAX= 1 m/s
- Максимальная скорость по позиции:
-
- Настройки PID-регуляторов:
MPC_XY_P= 0.12,MPC_XY_VEL_P= 0.12.
- Настройки PID-регуляторов:
Полет
При правильной настройке коптер начнет удерживать позицию по VPE (в режимах POSCTL или OFFBOARD) автоматически.
Для автономных полетов можно будет использовать функции set_position, set_velocity. Для полета в определенные координаты маркерного поля необхоимо использовать фрейм aruco_map:
# Вначале необходимо взлететь, чтобы коптер увидел карту меток
# и появился фрейм aruco_map:
set_position(x=0, y=0, z=3, frame_id='fcu_horiz') # взлет на 3 метра
time.sleep(5)
# Полет в координату 2:2 маркерного поля, высота 3 метра
set_position(x=2, y=2, z=3, frame_id='aruco_map', update_frame=True) # полет в координату 2:2, высота 3 метра

