# Распознавание ArUco-маркеров > **Info** Для распознавания маркеров модуль камеры должен быть корректно подключен и [сконфигурирован](camera.md). Модуль `aruco_detect` распознает ArUco-маркеры и публикует их позиции в ROS-топики и в [TF](frames.md). Эта функция полезна для применения совместно с какой-либо системой позиционирования для дрона, такой как [GPS](gps.md), [Optical Flow](optical_flow.md), PX4Flow, визуальная одометрия, ультразвуковое ([Marvelmind](https://marvelmind.com)) или UWB-позиционирование ([Pozyx](https://www.pozyx.io)). Также возможно применение совместно с [навигацией по карте маркеров](aruco_map.md). ## Настройка Для включения модуля аргумент `aruco_detect` в файле `~/catkin_ws/src/clever/clever/launch/aruco.launch` должен быть в значении `true`: ```xml ``` Для правильной работы в этом же файле в секции `aruco_detect` должны быть выставлены параметры: ```xml ``` Значение параметра `known_tilt` следует выставлять следующим образом: * если *все* маркеры наклеены на полу (земле), выставить значение `map`; * если *все* маркеры наклеены на потолке, выставить значение `map_flipped`; * противном случае удалить строку с параметром. Если некоторые маркеры имеют размер, отличный значения `length`, их размер может быть переопределен с помощью параметра `length_override`: ```xml ``` ## Система координат С маркером связана следующая система координат: * ось **x** указывает кверху маркера; * ось **y** указывает на правую сторону маркера; * ось **z** указывает от плоскости маркера. ## Работа с распознанными маркерами Наглядно распознанные маркеры можно видеть в топике `aruco_detect/debug`. Просмотреть его можно с помощью [`rqt_image_view`](rviz.md) или через [web_video_server](web_video_server.md) по ссылке http://192.168.11.1:8080/snapshot?topic=/aruco_pose/debug: Распознанные маркеры и их позиции публикуются в топик `aruco_detect/markers`. Чтение топика из Bash: ```bash rostopic echo /aruco_detect/markers ``` ## Навигация по маркерам С использованием модуля [`simple_offboard`](simple_offboard.md) можно осуществлять навигацию по маркерам используя соответствующие TF-фреймы. Полет в точку над маркером 5 на высоту 1 метр: ```python navigate(frame_id='aruco_5', x=0, y=0, z=1) ``` Полет в точку на метр левее маркера 7 на высоте 2 метра: ```python navigate(frame_id='aruco_7', x=-1, y=0, z=2) ``` Вращаться против часовой стрелки на высоте 1.5 метра над маркером 10: ```python navigate(frame_id='aruco_10', x=0, y=0, z=1.5, yaw_rate=0.5) ``` Если необходимый маркер не появится в поле зрения в течение полусекунды, дрон продолжит выполнять предыдущую команду. Подобные значения `frame_id` можно использовать и в других сервисах, например `get_telemetry`. Получение расположения дрона относительно маркера 3: ```python telem = get_telemetry(frame_id='aruco_3') ``` Если необходимый маркер не появится в поле зрения в течение полусекунды, в полях `telem.x`, `telem.y`, `telem.z`, `telem.yaw` будет значение `NaN`. ## Работа с результатом распознавания из Python Чтение топика `aruco_detect/markers` из Python: ```python import rospy from aruco_pose.msg import MarkerArray rospy.init_node('my_node') # ... def markers_callback(msg): print 'Detected markers:': for marker in msg.markers: print 'Marker: %s' % marker # Подписываемся. При получении сообщения в топик /foo будет вызвана функция foo_callback. rospy.Subscriber('aruco_detect/markers', MarkerArray, markers_callback) # ... rospy.spin() ``` Сообщения будут содержать ID маркера, его угловые точки на изображении и его позицию (относительно камеры). --- См. далее: [навигация по картам маркеров](aruco_map.md).