- Создатель a.antonenko, отредактировано окт 11, 2022
Оглавление
Перед построением карты нужно убедиться в том, что: На роботе установлен лидар 1. В конфигурационные файлы картографера: Прописать следующие строки: Ниже приложен скриншот конфигурационного файла для лидара с рабочим расстоянием 5 м. На скриншоте видно, что для Таким образом, для лидара с рабочим расстоянием 20 м: Пожалуйста, ставьте точку после целого числа, как на скриншоте! 2. Установить этот параметр в 3. Прописать в Варианты: 4. Перезагрузить робота. Параметр Значение Для построения карты Вам обязательно понадобится usb-клавиатура. Для удобства рекомендуется использовать во время построения карты следующие инструменты: Для построения карты следует выполнить следующие шаги: Открыть терминал. Если GUI открыт, то его нужно свернуть (комбинацией клавиш В меню Проверить получение данных с IMU: В терминале должны отображаться данные, получаемые с IMU в режиме реального времени. Остановить поток данных можно с помощью комбинации клавиш Проверить получение данных с LIDARа: В терминале должны отображаться данные, получаемые с LIDARа в режиме реального времени. Завершить процессы робота. После выполнения этих команд GUI робота закроется. Выбрать у себя в помещении место, где вы установите зарядную станцию. Это место очень важно, поэтому выбирайте его внимательно. Убедитесь, что в это место удобно подъезжать роботу, что место не находится в узком коридоре. Также убедитесь, что это место не будет создавать неудобств для посетителей. Рекомендуется выбрать место для зарядной станции один раз и больше её не переставлять, потому что для перестановки понадобится менять её координаты в базе. Здесь и далее место зарядной станции называется нулевой точкой или начальной позицией, потому что именно отсюда нужно начинать строить карту. Поставить робота в нулевую точку (в место, где будет стоять зарядная станция). Начинать построение карты нужно обязательно из места, где будет установлена зарядная станция! Если этого не сделать, то навигация по точкам не будет работать. Поставьте робота под нужным углом поворота! То есть если вы планируете поставить маркер зарядной станции задней частью к определенной стене, то и робота вы должны поставить спиной к этой стене. Запустить процесс построения карты. Запуск построения карты через ssh не поддерживается! Убедитесь, что на экране Rviz красным цветом отображаются препятствия, модель робота отображается полностью, а также отсутствуют сообщения об ошибках. В Rviz сохранена конфигурация, которая более удобна для построения карты. Для того, чтобы использовать эту конфигурацию нажмите ctrl + o или выберите Если модель робота не отображается в интерфейсе Rviz, проверьте наличие папки cartographer_ros в Открыть два дополнительных терминала. В один ввести команду для просмотра данных с левого колеса: Во второй ввести команду для просмотра данных с правого колеса: Все время в процессе построения карты держать эти терминалы открытыми и следить, что во время езды показатели увеличиваются. Был случай, когда после трех часов езды карта не сохранилась ( Для построения карты нужно проехать роботом по помещению, управляя с помощью джойстика. Удаленное управление роботом возможно посредством контроллера, входящего в комплект поставки робота. Номер на контроллере соответствует номеру сопряженного робота. В качестве элементов питания выступают батарейки типа АА. Чтобы включить или выключить контроллер, зажмите кнопку запуска на 8-10 секунд. Комбинации для управления роботом: Back + Start Back + Y A + B + Левый стик A + Левый стик B + Левый стик A/B + Крестовина X + Левый бампер X + Левый триггер X + Правый бампер X + Правый триггер Y + Правый триггер Y + Правый бампер Термины: Коридор - это любое пространство, где расстояние от стены до стены меньше рабочего расстояния лидара (лидар видит обе стены одновременно). Комната - это любое пространство, соединенное коридорами. Телепортация - это ситуация, когда на карте есть одинаковые участки, и, находясь в одном из них, робот считает, что находится в другом. 1) Если робот стоит вплотную к стене, то немного отодвиньте его от стены, чтобы ему ничего не мешало сделать оборот на 360 градусов вокруг своей оси. Сделайте роботом оборот на 360 градусов вокруг своей оси. В конце построения карты для комнаты мы возвращаемся в ту точку, с которой начинали построение. Чтобы в следующем шаге линии стен корректно соединились, нужно, чтобы точка старта была заранее максимально просвечена лидаром (что мы и делаем этим оборотом). 3) Если на карте есть место, где соединение линий не произошло (цикл не закрылся), то нужно кружиться роботом вокруг своей оси (1-2 круга), пока комната не соединится. Обычная комната: Две комнаты, соединенные коридором: 4) Просканировать внутренность комнаты держа стену (или уже просканированную область) в зоне видимости лидара. Если комната небольшая (например 10 x 10 м при рабочем расстоянии лидара 5 м), то внутренность может просканироваться после первого проезда вдоль стен. В этом случае не требуется дополнительное сканирование. Если комната больше чем рабочее расстояние лидара, то требуется просканировать внутренность комнаты держа стену или уже просканированную область в зоне видимости лидара. Внимание! Лучше держать в зоне видимости НЕ любую просканированную область, а какую-то ОТЛИЧИТЕЛЬНУЮ. Если нет такой возможности, то рекомендуется время от времени приезжать роботом в угол и убеждаться, что робот отображается на правильном месте карты. Это поможет избежать случаев "телепортации". 5) Если есть предыдущая комната, где уже построили карту (комната, соединенная коридором с текущей комнатой), то вернитесь в нее и исправьте сдвиги стен и коридора (с помощью указаний из шага 3). 6) Если есть еще комнаты с непостроенной картой, то выбрать одну из них и повторить шаги 1-5, иначе перейти к шагу 7. 7) Проехать по всей карте и проверить локализацию (убедиться, что реальное положение робота соответствует положению робота на карте). Если локализация некорректна, то ездить по карте в поисках расхождений в стенах, пока локализация не начнет работать. Ездить рекомендуется медленно. Конечное положение робота (включая угол поворота) должно совпадать с начальным. Для отмены построения карты нажмите ctrl + c в терминале. Сохранить карту. Закройте дополнительный терминал. Для завершения построения карты нажмите ctrl + c в терминале, из которого был запущен Rviz. В веб-интерфейсе базы данных робота выставить значения параметров: Нужно зайти в базу данных по этой ссылке, авторизоваться по логину и паролю. Далее перейти в Нажать на изображение карандаша, чтобы открылось окно для редактирования значения параметра (2 на скриншоте). В открывшемся окне введите значение из таблицы в соответствующее поле и нажмите Повторите эти шаги для всех параметров таблицы. Убедитесь, что обновление параметров на роботе прошло успешно (статус репликации - Success). true Сохраненная карта расположена в директории: Открыть файл карты можно в графическом редакторе (GIMP, Inkscape). На изображении тёмным цветом выделены стены и иные препятствия, а белым – область, в пределах которой возможно передвижение. Автоматически сгенерированный файл карты, скорее всего, будет заполнен "фантомными" препятствиями, в тех местах, где робот будет ездить. Эти области необходимо почистить, ниже представлен пример, того как может выглядеть начальная карта, и очищенная. Оригинал После очистки Для добавления виртуальных стен достаточно в графическом редакторе нарисовать стены там, где это необходимо. Ниже представлен пример того, как может выглядеть карта с расставленными виртуальными стенами. Расставлены виртуальные стены Во время добавления виртуальных стен рекомендуется по возможности сгладить острые углы, в особенности, выпирающие в предполагаемую зону навигации. Карта со сглаженными углами Важно При добавлении виртуальных стен следует убедиться, что тёмная линия, обозначающая контур стены, не имеет прорех (например в местах соединения с другой стеной). Такие места могут быть восприняты системой навигации, как свободное для проезда пространство, из-за чего робот будет ездить не так, как задумано. Можно проверить область навигации на наличие нежелательных препятствий или прорех в стенах с помощью инструмента цветной заливки графического редактора. Хочется отметить, что после первого редактирования в GIMP карта не обязательно будет финальной, может быть несколько итераций, когда дорисовываются стены при застревание робота или иных обстоятельствах. Выполняется при запущенной GUI. Запустите GUI. 1. Откройте меню 2. Нажмите на иконку меню 3. Откройте Перед началом расстановки точек, находясь в GUI, переключите робота в ручной режим комбинацией джойстика: Важно! При завершении расстановки точек робот обязательно должен находится в начальной точке в том положении, в котором был при начале расстановки (допустимое отклонение от стартового угла поворота +/- 5о). При расстановке точек полуавтоматическим способом следуйте следующим шагам: Сверните GUI. Откройте новый терминал и запустите в нём команду: Выводимая в терминале информация будет отображать процесс расстановки точек. После выполнения этой команды вывод в терминале будет выглядеть примерно так: Теперь нужно отправить роботу команду сохранить точку: или откройте новое окно терминала и введите следующую команду (НЕ пишите команду в то же самое окно терминала, в котором запускали команду tail): В терминале начнут быстро отображаться строки add point N. Подождите 5 секунд, затем либо: или введите следующую команду в терминале (это должно быть НЕ то же самое окно терминала, в котором запускали команду tail): В терминале должна отобразиться строка stop save points. Для работы автономного передвижения по точкам, создайте копию points.json и переименуйте в map.json. Порядок перемещения по точкам закладывается в файле map.json Требования к файлу map.json: Файл представляет собой массив команд. Состоит из параметров каждой точки: Файл должен быть валидным. Проверка валидности производится с помощью внешних сервисов, например https://jsonlint.com/ Файл map.json должен соответствовать следующей структуре: Возможные проблемы и их решение при настройке автоматического перемещения: Открываем Rviz. Откроется окно rviz. Открываем в терминале топик После выполнения этой команды терминал НЕ начнет выводить никакие строки. НЕ закрывайте это окно терминала! Пример данных из топика Совпадать будет только структура, значения у вас будут другие. Записываем данные из топика в файл: Откройте файл Вставьте следующий блок, вписав вместо %1, %2, %3, %4, %5 нужные значения: Значения " Значения " Чтобы узнать Начальная позиция задается параметрами в базе. Это нужно, если после построения карты изменили положение зарядной станции. Чтобы узнать координаты точки, можно воспользоваться первыми 5-ю пунктами в подразделе ручной способ раздела Расстановка точек. Зарядная станция должна стоять на начальной позиции, для того чтобы робот подъехал к зарядной станции, параметр /driving/skipStationScanning должен быть выставлен в значение true. Для роботов с версией софта 1.9.3 и выше требуется выставить значение параметра false. После построения карты и установки точек нужно проверить, что робот корректно ездит по этим точкам. Для этого нужно послать роботу команду проехать по точкам (инструкция). После проверки точек нужно отправить робота на зарядную станцию (из сервисного меню), чтобы убедиться, что робот корректно встает на зарядку. При построении карты лучше ездить медленно по периметру всего помещения, cartographer склеит все подкарты в одну. Лучше начинать строить карту с нулевой точки (то есть с места зарядки) и закончить построение на этой же точке в том же положении (с тем же углом, с каким начал).Подготовка
points.json
и map.json
/opt/promobot/share/promobot_cartographer/configuration_files/promobot_urg_lidar_2d_localization.lua
/opt/promobot/share/promobot_cartographer/configuration_files/promobot_urg_lidar_2d_map_create.lua
TRAJECTORY_BUILDER_2D.max_range
= рабочее расстояние лидара в м. +1.TRAJECTORY_BUILDER_2D.missing_data_ray_length
= рабочее расстояние лидара в м.max_range
установлено значение 6, а для missing_data_ray_length
- значение 5.max_range
= 21missing_data_ray_length
= 20true,
если лидар подключен по ethernet:robot_settings/driving/useIpLidar
home/promobot/.bashrc
тип лидара в соответствии с установленным на роботе:export LIDAR_TYPE=
FS_IP_250
SICK_IP_250
URG_IP_250
URG_IP
FS_IP
URG_USB
Перед построением карты нужно задать корректные значения радиуса колес в https://pb2.icmm.ru/robotsettings/index в соответствии с таблицей:robot_settings/driving/wheelRadius
0.084 robot_settings/driving/wheelRadiusLeft
0.084 robot_settings/driving/wheelRadiusRight
0.084 map.pgm
для чистки в графическом редакторе).Построение карты
Способ 1. Комбинацией клавиш ctrl+alt+T
Способ 2. Через меню.
ctrl+alt+d
).Activities
(в левом верхнем углу) выбрать Terminal
.rostopic echo /imu
rostopic echo /imu/data
Если данные не отображаются, необходимо проверить подключение и настройку IMU.ctrl+c
.rostopic echo /scan
Если данные не отображаются, необходимо проверить подключение и настройку LIDARа.killall promobot_gui_op
killall core.sh
killall roscore
rosrun promobot_bringup map_create.sh
После этого появится окно Rviz:File → Open
, после чего перейдите по пути /opt/promobot/share/promobot_cartographer/configuration_files
и выберите файл demo_promobot.rviz.
/opt/promobot/share.
rostopic echo /lwheel
rostopic echo /rwheel
map.pgm
выглядел как белый лист). Во время езды случился сбой vesc
(плата колес), в таком случае карта не сохраняется, т.е. карта строится до первого сбоя vesc
колес. Поэтому имеет смысл наблюдать, приходят ли данные с колес, чтобы в случае сбоя не продолжать ездить по помещению впустую.Комбинация Описание Переключение режима автоматического передвижения Режим фраз с джойстика Перемещение робота с очень быстрой скоростью Перемещение робота с быстрой скоростью Перемещение робота с обычной скоростью Управление головой (при движении вверх и вниз дополнительно работает актуатор) Повысить громкость динамиков на 5% Понизить громкость динамиков на 5% Повысить чувствительность микрофона на 2% Понизить чувствительность микрофона на 2% Только в режиме фраз с джойстика: Следующая фраза Предыдущая фраза
2) Выберите ближайшую к роботу стену и начните ехать вдоль нее игнорируя все остальные объекты. Сделайте полный круг вокруг комнаты.
Откройте дополнительный терминал и выполните сохранение:rosrun promobot_bringup map_save.sh
Конфигурация
→ Настройки робота
, выбрать нужного робота из выпадающего списка.
Далее нужно полностью скопировать название параметра из таблицы, приведенной ниже, и вставить в поле для поиска по параметру в базе (потом нажать Enter или щелкнуть мышью в любом свободном месте формы, чтобы параметр нашелся) (1 на скриншоте).Обновить
.Параметр Значение robot_settings/driving/useMap true robot_settings/driving/usePeopleSearch false robot_settings/driving/useRadius false robot_settings/driving/skipStationScanning
false (для релиза 1.9.3 и выше)Виртуальные стены, расстановка точек и рекомендации
Виртуальные стены
/home/promobot/.promobot/resources/maps/map.pgm
Расстановка точек
Activities
.Show Applications
.Promobot GUI
.
Есть 2 способа расстановки точек:1. Полуавтоматический способ
back + start
.tail -f ~/.promobot/log/latest/movement.txt
back + a
, если вы пользуетесь джойстиком,rostopic pub /drive/points/save std_msgs/Bool "data: true"
back + a
, если вы пользуетесь джойстиком,rostopic pub /drive/points/save std_msgs/Bool "data: false"
.
Автономное передвижение по точкам
Если какой-либо параметр не используется, необходимо указать 0 для численных значений или null для строк \\начало файла, открываем фигурную скобку, в рамках которой один массив points
{
"points":
\\ открываем массив точек с помощью квадратной скобки
[
\\ первый элемент в массиве точек, открываем описание элемента фигурной скобкой
{
"angle":
\\ первый параметр, который состоит из нескольких значений, открываем фигурную скобку
{
"w": 0.376174405040294,
"z": 0.92654887458384
\\ закончились значения первого параметра, закрываем фигурную скобку
},
"id": 0,
"pos":
\\ следующий параметр, который состоит из нескольких значений, открываем фигурную скобку
{
"x": -0.906758110520606,
"y": -5.17015431614186
\\ закончились значения параметра, закрываем фигурную скобку
},
"text_start": null,
"text_finish":
\\ данный параметр является массивом, так что открываем квадратную скобку. внутри данного массива только один список значений, так что внутри квадратных скобок вписываем этот список значений в фигурных скобках
[{
"action": null,
"anchor": 0,
"animation": 0,
"text": null,
"url": null
}]
\\ заканчиваем описание первой точки. закрываем фигурную скобку
},
\\ аналогично описываем следующую точку
{
"angle":
{
"w": 0.429732129790555,
"z": 0.902956420114323
},
"id": 1,
"pos": {
"x": -2.12233353289366,
"y": -3.59353399042218
},
"text_start": null,
"text_finish":
\\ в данном случае в массиве есть несколько списков, каждый из которых заключен в фигурные скобки и разделен запятыми
[
{
"action": "navigation:2",
"anchor": 0,
"animation": 0,
"text": null,
"url": null
},
{
\\ Еще один массив, теперь это несколько действий
"action": "[lingvoCase:default],[script:get_hand_boy]",
"anchor": 0,
"animation": 0,
"text": null,
"url": null
},
{
"action": "navigation:6",
"anchor": 0,
"animation": 0,
"text": null,
"url": null
}
\\ заканчиваем описание данного массива, состоящего из нескольких списков, закрываем квадратную скобку
]
\\ заканчиваем описание данной точки
}
\\ заканчиваем массив точек
]
\\ заканчиваем файл
}
Симптом Решение Робот не едет ни на одну точку проверьте валидность файла map.json Робот едет в другое место при отправке на определенную точку проверьте соответствие структуры map.json Робот приезжает на точку, но не выполняет скрипт 2. Ручной способ
roslaunch promobot_bringup rviz.launch
/drive/destination
, введя следующую команду:rostopic echo /drive/destination
2D Nav Goal
./drive/destination
header:
seq: 0
stamp:
secs: 1523636206
nsecs: 69873363
frame_id: "map"
pose:
position:
x: -1.20477819443
y: 0.55451887846
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.998724793097
w: 0.0504855192539
---
~/.promobot/resources/points.json
~/.promobot/resources/points.json
, пролистайте в самый конец, поставьте курсор перед закрывающейся квадратной скобкой.,{
"angle": {
"w": %1,
"z": %2
},
"id": %3,
"pos": {
"x": %4,
"y": %5
}
}
angle
" (%1 и %2) файла points.json
соответствуют значениям "orientation
" из топика.pos
" (%4 и %5) файла points.json
соответствуют значениям "position
" из топика.id
вашей новой точки, посмотрите id
последней точки в файле, и используйте для своей новой точки номер последней+1. Т.е. если у вас в файле до ручного добавления было 15 точек (id
последней = 15), то для добавляемой впишите id
16.{
"points": [{
"angle": {
"w": 0.998923881113163,
"z": 0.0463797341714684
},
"id": 0,
"pos": {
"x": -0.0031530077629684,
"y": 0.0249646781247797
}
}, {
"angle": {
"w": 0.995720365277429,
"z": -0.0924172828630208
},
"id": 1,
"pos": {
"x": -11.9111618540054,
"y": -2.47472925560041
}
},
{
"angle": {
"w": 0.995720365277429,
"z": -0.0924172828630208
},
"id": 2,
"pos": {
"x": -11.9111618540054,
"y": -2.47472925560041
}
},
{
"angle": {
"w": -0.412846618222484,
"z": 0.910800565339229
},
"id": 3,
"pos": {
"x": -3.92475407887507,
"y": -3.54831148959944
}
}, {
"angle": {
"w": 0.105501183751213,
"z": 0.994419177322668
},
"id": 4,
"pos": {
"x": 4.23771759291041,
"y": -1.27347722361125
}
}, {
"angle": {
"w": 0.3274055621304,
"z": 0.944883907094452
},
"id": 5,
"pos": {
"x": 9.61587872167513,
"y": -3.06686012161428
}
}, {
"angle": {
"w": 0.468120240741371,
"z": 0.883664778186978
},
"id": 6,
"pos": {
"x": 8.88445106194085,
"y": -9.08872129180928
}
}, {
"angle": {
"w": 0.566186994872896,
"z": 0.824276826580003
},
"id": 7,
"pos": {
"x": 10.0251608731707,
"y": -8.4145321788985
}
}, {
"angle": {
"w": 0.792600260640494,
"z": 0.609741606611048
},
"id": 8,
"pos": {
"x": 11.3085748730512,
"y": -13.4515874544963
}
}, {
"angle": {
"w": 0.891975396340006,
"z": 0.452083943891054
},
"id": 9,
"pos": {
"x": 9.37746717975674,
"y": -16.6945559421126
}
}, {
"angle": {
"w": 0.872674403743441,
"z": 0.488302554827466
},
"id": 10,
"pos": {
"x": 5.9842699767641,
"y": -21.3195678819722
}
}, {
"angle": {
"w": 0.965546256506352,
"z": 0.260231486462669
},
"id": 11,
"pos": {
"x": 2.7900275872338,
"y": -22.447542377038
}
}, {
"angle": {
"w": 0.99364052244197,
"z": 0.112598899467309
},
"id": 12,
"pos": {
"x": -3.40365830335644,
"y": -25.2423115222093
}
}, {
"angle": {
"w": 0.925848332497999,
"z": -0.377895309855354
},
"id": 13,
"pos": {
"x": -8.97703753802622,
"y": -17.7053637622499
}
}, {
"angle": {
"w": 0.6720507695428,
"z": -0.740505073012285
},
"id": 14,
"pos": {
"x": -10.2697658555054,
"y": -14.1395930708606
}
}, {
"angle": {
"w": 0.6720507695428,
"z": -0.740505073012285
},
"id": 15,
"pos": {
"x": -10.2697658555054,
"y": -14.1395930708606
}
}
]
}
Начальная позиция/navigation/initial_pose/position/x
/navigation/initial_pose/position/y
/navigation/initial_pose/orientation/w
/navigation/initial_pose/orientation/z
Заключение
Рекомендации
Типичные проблемы картографии
Дополнительные ссылки
MS Word: Поcтроение_карты_с_помощью_cartographer_РУС_АВТОГЕНЕРАЦИЯ_16.03.2021.doc PDF: Поcтроение_карты_с_помощью_cartographer_РУС_АВТОГЕНЕРАЦИЯ_16.03.2021.pdf MS Word: Building_a_map_using_cartographer_ENG_AUTOGENERATED_16.03.2021.doc PDF: Building_a_map_using_cartographer_ENG_AUTOGENERATED_16.03.2021.pdfСсылки для скачивания
Устаревшее
Manual for cartographer [14.11.2019]
Checking the arranged Points [19.09.2018]
Поcтроение карты с помощью cartographer [27.08.2020]
2 Комментариев
Анонимный
В инструкции не верно указано расположение файла .bashrc.
Фактическое расположение файла в /home/promobot/
support
В пункте не актульный адрес. Актуальный: https://lingvo.promo-bot.ai/robotsettings/index
Перед построением карты нужно задать корректные значения радиуса колес в https://pb2.icmm.ru/robotsettings/index в соответствии с таблицей:
Добавить комментарий