Создание карты маркеров¶
Формат YAML¶
Карту можно описать в формате YAML. Этот формат позволяет хранить параметры карты в удобном для чтения виде и добавлять новые параметры без изменения структуры файла.
Не знакомы с форматом YAML? См. краткую памятку по YAML.
name: simulation # Имя карты (по умолчанию — имя файла)
default_size: 0.36 # Размер маркера по умолчанию в метрах
markers:
- id: 0 # Уникальный ID маркера из словаря ArUco (обязательно)
# size: 0.15 # Размер конкретного маркера. Если параметр не указан, применяется default_size)
pose:
x: 0.0 # Позиция по оси X (м)
y: 0.0 # Позиция по оси Y (м)
# z: 0.0 # Позиция по оси Z (м), по умолчанию 0
rot:
yaw: -1.57079632 # Рыскание (рад), опционально
# roll: 0.0 # Крен (рад), опционально
# pitch: 0.0 # Тангаж (рад), опционально
Поля в markers¶
Поле |
Обязательно |
По умолчанию |
Описание |
|---|---|---|---|
|
да |
- |
ID маркера из словаря ArUco |
|
нет |
|
Длина стороны маркера в метрах. Если параметр не указан, используется значение |
|
нет |
|
Позиция по X в метрах |
|
нет |
|
Позиция по Y в метрах |
|
нет |
|
Позиция по Z в метрах |
|
нет |
|
Крен (рад) |
|
нет |
|
Тангаж (рад) |
|
нет |
|
Рыскание (рад) |
|
нет |
|
Альтернативный способ задания ориентации с помощью кватерниона |
|
нет |
|
Пользовательское имя TF-фрейма конкретного маркера, если программа поддерживает его задание на уровне маркера |
Поворот маркера задается одним из двух способов: через rot (RPY) или через quat (кватернион). Одновременно использовать оба способа нельзя.
Пример: базовая карта с default_size¶
name: my_room
frame_id: map
version: 0
default_size: 0.30
markers:
- id: 12
pose:
x: 1.0
y: 0.5
- id: 13
pose:
x: 1.0
y: 1.5
В этом примере для обоих маркеров используется size=0.30 из default_size.
Пример: индивидуальный размер и поворот¶
markers:
- id: 0
size: 0.25
pose:
x: 0.0
y: 0.0
z: 0.5
rot:
yaw: 1.57
pitch: 0.1
В этом примере для маркера с ID=0 задан собственный размер size=0.25. Поворот задан через параметры yaw и pitch.
Пример: кватернион вместо RPY¶
markers:
- id: 42
pose:
x: 2.0
y: 3.0
quat:
x: 0.0
y: 0.0
z: 0.707
w: 0.707
В этом примере ориентация маркера задана с помощью кватерниона quat.
Формат TXT (альтернативный)¶
Осторожно
Рекомендуем использовать YAML. Он позволяет задавать больше параметров карты и расширять ее структуру.
Карту также можно сохранить в текстовом формате с расширением .txt:
id size x y [z yaw pitch roll]
Каждая строка содержит данные одного маркера. Используйте пробел в качестве разделителя. Строки, начинающиеся с #, программа игнорирует.
# id size x y z yaw pitch roll
0 0.36 0.0 0.0 0.0 -1.57 0.0 0.0
1 0.36 0.0 -1.0 0.0 -1.57 0.0 0.0
2 0.36 0.0 -2.0 0.0 -1.57 0.0 0.0
Поля z, yaw, pitch, roll опциональны. Если поле не указано, используется значение 0.0.
Как загружается карта¶
clover2_mapищет файл по пути, указанному в параметреmap_path.Программа определяет формат карты по расширению файла:
.yaml/.ymlили.txt.Для каждого маркера программа создает
Geometry_msgs/PoseWithCovarianceи статический TF-фрейм.По умолчанию программа формирует имя TF-фрейма по шаблону
{frame_id}_aruco_{id}(например,map_aruco_0).Если для маркера задан собственный
frame_id, программа использует его вместо имени, сформированного автоматически.Программа публикует карту через сервис
~/get_mapи в топик~/map_updateпри обновлении карты.
Создание карты для помещения¶
Распечатайте ArUco-маркеры из словаря 4X4_1000. Убедитесь, что размер стороны распечатанного маркера соответствует размеру, указанному в карте.
Разместите маркеры на потолке или стенах вдоль предполагаемой траектории полета.
Измерьте позицию каждого маркера рулеткой относительно выбранной точки отсчета.
Запишите в YAML-файл параметры
id,pose.x/y/z,rot.yaw.Укажите в
default_sizeфактическую длину стороны маркера в метрах. Размер маркера — это длина стороны черного квадрата с изображением ArUco.
Проверка карты и камеры¶
Проверка топиков¶
Сначала проверьте, что камера публикует отладочное изображение и правильно распознает маркеры.
Откройте в браузере топик /main_camera/feat_detector/output/debug и наведите камеру на маркеры. На изображении должны появиться обнаруженные метки.
Также распознавание можно проверить в терминале квадрокоптера по топику /main_camera/feat_detector/output/markers. При наведении камеры на маркеры в этом топике должны появляться сообщения с данными обнаруженных маркеров.
ros2 topic echo /main_camera/feat_detector/output/markers
Проверка удержания позиции над полем маркеров¶
После проверки топиков убедитесь, что квадрокоптер распознает маркеры и может удерживать позицию над ними.
Разместите квадрокоптер на поле, состоящем из ArUco-маркеров.
Переключите полетный контроллер в режим
Stabilized.Выполните ручной взлет.
После взлета удерживайте стик газа в положении примерно 50%.
Переключите полетный режим в
Position.Убедитесь, что квадрокоптер самостоятельно завис и удерживает позицию над полем маркеров.