Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Подготовка

Перед построением карты нужно убедиться в том, что:

 Подробнее...

1. В конфигурационные файлы картографера:
/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 = рабочее расстояние лидара в м.

 Пример конфигурационного файла...

Ниже приложен скриншот конфигурационного файла для лидара с рабочим расстоянием 5 м. На скриншоте видно, что для max_range установлено значение 6, а для missing_data_ray_length - значение 5.

Таким образом, для лидара с рабочим расстоянием 20 м:

  • max_range = 21
  • missing_data_ray_length = 20

Пожалуйста, ставьте точку после целого числа, как на скриншоте!

2. Установить этот параметр в true, если лидар подключен по ethernet:

robot_settings/driving/useIpLidar

3. Прописать в home/promobot/.bashrc тип лидара в соответствии с установленным на роботе:

export LIDAR_TYPE=

Варианты: 

  • FS_IP_250
  • SICK_IP_250
  • URG_IP_250
  • URG_IP
  • FS_IP
  • URG_USB

4. Перезагрузить робота.


Перед построением карты нужно задать корректные значения радиуса колес в https://pb2.icmm.ru/robotsettings/index в соответствии с таблицей:

Параметр

Значение

robot_settings/driving/wheelRadius0.084
robot_settings/driving/wheelRadiusLeft0.084
robot_settings/driving/wheelRadiusRight0.084


Для построения карты Вам обязательно понадобится usb-клавиатура.


Для удобства рекомендуется использовать во время построения карты следующие инструменты:

  • Беспроводная клавиатура (для ввода команд).
  • Мышь (для перемещения вида обзора в RVIZ).
  • USB-флеш накопитель (чтобы скачать с робота карту map.pgm для чистки в графическом редакторе).
  • Ноутбук с рекомендуемым графическим редактором (Gimp). Можно обойтись без него и почистить карту на самом роботе, но экран робота небольшой, поэтому может быть неудобно.

Построение карты

Для построения карты следует выполнить следующие шаги:

  1. Открыть терминал.

     Как открыть терминал...

    Способ 1. Комбинацией клавиш ctrl+alt+T

    Способ 2. Через меню.

     Нажмите здесь для раскрытия...

    Если GUI открыт, то его нужно свернуть (комбинацией клавиш ctrl+alt+d).

    В меню Activities (в левом верхнем углу) выбрать Terminal.


  2. Проверить получение данных с IMU:

    rostopic echo /imu
    rostopic echo /imu/data

    В терминале должны отображаться данные, получаемые с IMU в режиме реального времени.
    Если данные не отображаются, необходимо проверить подключение и настройку IMU.

     Данные идут, как остановить?

    Остановить поток данных можно с помощью комбинации клавиш ctrl+c.

  3. Проверить получение данных с LIDARа:

    rostopic echo /scan

    В терминале должны отображаться данные, получаемые с LIDARа в режиме реального времени.
    Если данные не отображаются, необходимо проверить подключение и настройку LIDARа.


  4. Завершить процессы робота.

    killall promobot_gui_op
    killall core.sh
    killall roscore

    После выполнения этих команд GUI робота закроется.

  5. Выбрать у себя в помещении место, где вы установите зарядную станцию. Это место очень важно, поэтому выбирайте его внимательно. Убедитесь, что в это место удобно подъезжать роботу, что место не находится в узком коридоре. Также убедитесь, что это место не будет создавать неудобств для посетителей. Рекомендуется выбрать место для зарядной станции один раз и больше её не переставлять, потому что для перестановки понадобится менять её координаты в базе. Здесь и далее место зарядной станции называется нулевой точкой или начальной позицией, потому что именно отсюда нужно начинать строить карту.

  6. Поставить робота в нулевую точку (в место, где будет стоять зарядная станция).

    Начинать построение карты нужно обязательно из места, где будет установлена зарядная станция!

    Если этого не сделать, то навигация по точкам не будет работать.

    Поставьте робота под нужным углом поворота! То есть если вы планируете поставить маркер зарядной станции задней частью к определенной стене, то и робота вы должны поставить спиной к этой стене.

  7. Запустить процесс построения карты.

    rosrun promobot_bringup map_create.sh

    Запуск построения карты через ssh не поддерживается!


    После этого появится окно Rviz:

    Нормальный вид окна Rviz (в левой части экрана нет ошибок, текст синим цветом, а не красным).

    Убедитесь, что на экране Rviz красным цветом отображаются препятствия, модель робота отображается полностью, а также отсутствуют сообщения об ошибках.

     Ошибки выглядят так:

    В Rviz сохранена конфигурация, которая более удобна для построения карты. Для того, чтобы использовать эту конфигурацию нажмите ctrl + o или выберите File → Open, после чего перейдите по пути /opt/promobot/share/promobot_cartographer/configuration_files и выберите файл demo_promobot.rviz.

    Если модель робота не отображается в интерфейсе Rviz, проверьте наличие папки cartographer_ros в /opt/promobot/share.

  8. Открыть два дополнительных терминала. В один ввести команду для просмотра данных с левого колеса:

    rostopic echo /lwheel

    Во второй ввести команду для просмотра данных с правого колеса:

    rostopic echo /rwheel

    Все время в процессе построения карты держать эти терминалы открытыми и следить, что во время езды показатели увеличиваются.

     Зачем это нужно?

    Был случай, когда после трех часов езды карта не сохранилась (map.pgm выглядел как белый лист). Во время езды случился сбой vesc (плата колес), в таком случае карта не сохраняется, т.е. карта строится до первого сбоя vesc колес. Поэтому имеет смысл наблюдать, приходят ли данные с колес, чтобы в случае сбоя не продолжать ездить по помещению впустую.

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

     Инструкция по управлению джойстиком...

    Удаленное управление роботом возможно посредством контроллера, входящего в комплект поставки робота. Номер на контроллере соответствует номеру сопряженного робота. В качестве элементов питания выступают батарейки типа АА. Чтобы включить или выключить контроллер, зажмите кнопку запуска на 8-10 секунд.

    Фото джойстика с подписанными кнопкамиКомбинации для управления роботом:

    КомбинацияОписание

    Back + Start

    Переключение режима автоматического передвижения

    Back + Y

    Режим фраз с джойстика

    A + B + Левый стик

    Перемещение робота с очень быстрой скоростью

    A + Левый стик

    Перемещение робота с быстрой скоростью

    B + Левый стик

    Перемещение робота с обычной скоростью

    A/B + Крестовина

    Управление головой (при движении вверх и вниз дополнительно работает актуатор)

    X + Левый бампер

    Повысить громкость динамиков на 5%

    X + Левый триггер

    Понизить громкость динамиков на 5%

    X + Правый бампер

    Повысить чувствительность микрофона на 2%

    X + Правый триггер

    Понизить чувствительность микрофона на 2%
    Только в режиме фраз с джойстика:

    Y + Правый триггер

    Следующая фраза

    Y + Правый бампер

    Предыдущая фраза
     Алгоритм построения карты...

    Термины:

    Коридор - это любое пространство, где расстояние от стены до стены меньше рабочего расстояния лидара (лидар видит обе стены одновременно).

    Комната - это любое пространство, соединенное коридорами.

    Телепортация - это ситуация, когда на карте есть одинаковые участки, и, находясь в одном из них, робот считает, что находится в другом.


    1) Если робот стоит вплотную к стене, то немного отодвиньте его от стены, чтобы ему ничего не мешало сделать оборот на 360 градусов вокруг своей оси. Сделайте роботом оборот на 360 градусов вокруг своей оси.

     Зачем нужно делать оборот?

    В конце построения карты для комнаты мы возвращаемся в ту точку, с которой начинали построение. Чтобы в следующем шаге линии стен корректно соединились, нужно, чтобы точка старта была заранее максимально просвечена лидаром (что мы и делаем этим оборотом).


    2) Выберите ближайшую к роботу стену и начните ехать вдоль нее игнорируя все остальные объекты. Сделайте полный круг вокруг комнаты.

    3) Если на карте есть место, где соединение линий не произошло (цикл не закрылся), то нужно кружиться роботом вокруг своей оси (1-2 круга), пока комната не соединится.

     Что значит цикл не закрылся?

    Обычная комната:

    Две комнаты, соединенные коридором:
    Две комнаты, соединенные коридором


    4) Просканировать внутренность комнаты держа стену (или уже просканированную область) в зоне видимости лидара.

     Подробнее...

    Если комната небольшая (например 10 x 10 м при рабочем расстоянии лидара 5 м), то внутренность может просканироваться после первого проезда вдоль стен. В этом случае не требуется дополнительное сканирование.

    Если комната больше чем рабочее расстояние лидара, то требуется просканировать внутренность комнаты держа стену или уже просканированную область в зоне видимости лидара.


    Внимание!

    Лучше держать в зоне видимости НЕ любую просканированную область, а какую-то ОТЛИЧИТЕЛЬНУЮ. Если нет такой возможности, то рекомендуется время от времени приезжать роботом в угол и убеждаться, что робот отображается на правильном месте карты.

    Это поможет избежать случаев "телепортации".

    5) Если есть предыдущая комната, где уже построили карту (комната, соединенная коридором с текущей комнатой), то вернитесь в нее и исправьте сдвиги стен и коридора (с помощью указаний из шага 3).

    6) Если есть еще комнаты с непостроенной картой, то выбрать одну из них и повторить шаги 1-5, иначе перейти к шагу 7.

    7) Проехать по всей карте и проверить локализацию (убедиться, что реальное положение робота соответствует положению робота на карте). Если локализация некорректна, то ездить по карте в поисках расхождений в стенах, пока локализация не начнет работать.

    Ездить рекомендуется медленно. Конечное положение робота (включая угол поворота) должно совпадать с начальным. Для отмены построения карты нажмите ctrl + c в терминале.


  10. Сохранить карту.
    Откройте дополнительный терминал и выполните сохранение:

    rosrun promobot_bringup map_save.sh

    Закройте дополнительный терминал. Для завершения построения карты нажмите ctrl + c в терминале, из которого был запущен Rviz.

    ВАЖНО Если не сохранить карту после запуска процесса создания карты, то робот не будет перемещаться в авто режиме.


  11. В веб-интерфейсе базы данных робота выставить значения параметров:

     Подробная инструкция...

    Нужно зайти в базу данных по этой ссылке, авторизоваться по логину и паролю.

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

    Выпадающий список названия робота
    Далее нужно полностью скопировать название параметра из таблицы, приведенной ниже, и вставить в поле для поиска по параметру в базе (потом нажать Enter или щелкнуть мышью в любом свободном месте формы, чтобы параметр нашелся) (1 на скриншоте).

    Нажать на изображение карандаша, чтобы открылось окно для редактирования значения параметра (2 на скриншоте).

    Фильтрация по названию параметра и кнопка редактирования

    В открывшемся окне введите значение из таблицы в соответствующее поле и нажмите Обновить.

    Повторите эти шаги для всех параметров таблицы.

    Убедитесь, что обновление параметров на роботе прошло успешно (статус репликации - Success).

     Скриншот...

    ПараметрЗначение
    robot_settings/driving/useMaptrue
    robot_settings/driving/usePeopleSearchfalse
    robot_settings/driving/useRadiusfalse
    robot_settings/driving/skipStationScanning

    true
    false (для релиза 1.9.3 и выше)

    ^-----

Виртуальные стены, расстановка точек и рекомендации

Виртуальные стены

Сохраненная карта расположена в директории: /home/promobot/.promobot/resources/maps/map.pgm

Открыть файл карты можно в графическом редакторе (GIMP, Inkscape). На изображении тёмным цветом выделены стены и иные препятствия, а белым – область, в пределах которой возможно передвижение.

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

Оригинал

После очистки



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

Расставлены виртуальные стены

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

Карта со сглаженными углами

 Не вижу, что изменилось на картах?


Важно

При добавлении виртуальных стен следует убедиться, что тёмная линия, обозначающая контур стены, не имеет прорех (например в местах соединения с другой стеной). Такие места могут быть восприняты системой навигации, как свободное для проезда пространство, из-за чего робот будет ездить не так, как задумано. Можно проверить область навигации на наличие нежелательных препятствий или прорех в стенах с помощью инструмента цветной заливки графического редактора.

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


Расстановка точек

Выполняется при запущенной GUI. Запустите GUI.

 Как открыть GUI?

1. Откройте меню Activities.

2. Нажмите на иконку меню Show Applications.

3. Откройте Promobot GUI.


Есть 2 способа расстановки точек:

  1. Полуавтоматический
  2. Ручной

Рекомендуется использовать 1-ый способ как основной, а второй – только в случае, если нужно сместить какую-то конкретную точку.

1. Полуавтоматический способ

Перед началом расстановки точек, находясь в GUI, переключите робота в ручной режим комбинацией джойстика: back + start.

Важно!

При завершении расстановки точек робот обязательно должен находится в начальной точке в том положении, в котором был при начале расстановки (допустимое отклонение от стартового угла поворота +/- 5о).

При расстановке точек полуавтоматическим способом следуйте следующим шагам:

  1. Сверните GUI.

  2. Поставьте робота в нулевую точку (в место, где будет стоять зарядная станция). Обязательно именно в это место!
  3. Откройте новый терминал и запустите в нём команду:

    tail -f ~/.promobot/log/latest/movement.txt

    Выводимая в терминале информация будет отображать процесс расстановки точек.

     Вывод в терминале...

    После выполнения этой команды вывод в терминале будет выглядеть примерно так:

  4. Теперь нужно отправить роботу команду сохранить точку:

    1. Нажмите back + a, если вы пользуетесь джойстиком,
    2. или откройте новое окно терминала и введите следующую команду (НЕ пишите команду в то же самое окно терминала, в котором запускали команду tail):

      rostopic pub /drive/points/save std_msgs/Bool "data: true"

      В терминале начнут быстро отображаться строки add point N.

       Скриншот...

  5. Подождите 5 секунд, затем либо:

    1. снова нажмите back + a, если вы пользуетесь джойстиком,
    2. или введите следующую команду в терминале (это должно быть НЕ то же самое окно терминала, в котором запускали команду tail):

      rostopic pub /drive/points/save std_msgs/Bool "data: false"

      В терминале должна отобразиться строка stop save points.

       Скриншот...

  6. С помощью джойстика переместите робота на следующую точку, затем повторите шаги 3-5.
  7. Расставив все точки, как указано в шаге 5, завершите расстановку вернув робота в стартовую точку.
  8. Проверьте наличие файла points.json в директории .promobot/resources.
  9. Для работы автономного передвижения по точкам, создайте копию points.json и переименуйте в map.json.

    Первая точка должна быть расположена не ближе чем в 2 метрах от нулевой точки (зарядной станции), а все последующие не ближе чем 1 метр от нулевой точки (зарядной станции).

Автономное передвижение по точкам

Порядок перемещения по точкам закладывается в файле map.json

Требования к файлу map.json:

Файл представляет собой массив команд. Состоит из параметров каждой точки:

  • angle - координаты w и z, означают угол поворота робота вдоль вертикальной оси на точке
  • id - номер точки
  • pos - координаты x и y, означают место точки на карте в двухмерном пространстве
  • text_start - массив действий, которые робот производит перед тем как отправиться на данную точку (фактически, робот производит эти действия на предыдущей точке после получения команды отправляться на данную точку). Состоит из нескольких обязательных параметров:
    • action - действие (см описание action), которое робот выполняет по приезду к точке. Можно указать только одно действие каждого типа. Например, действие Navigation + Script , но не Script + Script. Все указанные типы действий выполняются параллельно
    • anchor - активация якоря лингвистической базы (см описание якорей)
    • animation - эмоция на лицевой панели робота (см описание эмоций)
    • text - реплика, которую робот произнесет голосом
    • url - ссылка на интернет страницу, которую робот откроет во встроенном браузере на дисплее
      Если какой-либо параметр не используется, необходимо указать 0 для численных значений или null для строк
  • text_finish - массив действий, которые робот производит по приезду на данную точку. параметры аналогичны text_start

Файл должен быть валидным. Проверка валидности производится с помощью внешних сервисов, например https://jsonlint.com/

Внимание! Файл может быть валидным, но не соответствовать структуре, которая необходима для корректного чтения ПО робота.

Файл map.json должен соответствовать следующей структуре:

 Структура файла map.json....
 \\начало файла, открываем фигурную скобку, в рамках которой один массив 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
Робот приезжает на точку, но не выполняет скрипт
  • проверьте соответствие структуры map.json
  • если в поле action указано несколько действий, попробуйте поменять порядок действий

2. Ручной способ

  • Открываем Rviz.

    roslaunch promobot_bringup rviz.launch
     Ожидаемый результат...

    Откроется окно rviz.

  • Открываем в терминале топик /drive/destination, введя следующую команду:

    rostopic echo /drive/destination

    После выполнения этой команды терминал НЕ начнет выводить никакие строки. НЕ закрывайте это окно терминала!

  • В Rviz'е нажимаем кнопку 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, пролистайте в самый конец, поставьте курсор перед закрывающейся квадратной скобкой.

    Вставьте следующий блок, вписав вместо %1, %2, %3, %4, %5 нужные значения:

    Внимание! Копируйте этот блок целиком. Запятая в начале строки не является ошибкой, она нужна.
    ,{
      "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.json....
{
    "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

Чтобы узнать координаты точки, можно воспользоваться первыми 5-ю пунктами в подразделе ручной способ раздела Расстановка точек.

Зарядная станция должна стоять на начальной позиции, для того чтобы робот подъехал к зарядной станции, параметр /driving/skipStationScanning должен быть выставлен в значение true. Для роботов с версией софта 1.9.3 и выше требуется выставить значение параметра false.


Заключение

После построения карты и установки точек нужно проверить, что робот корректно ездит по этим точкам. Для этого нужно послать роботу команду проехать по точкам (инструкция). После проверки точек нужно отправить робота на зарядную станцию (из сервисного меню), чтобы убедиться, что робот корректно встает на зарядку.

 Отправить на зарядную станцию...


Рекомендации

  • При построении карты лучше ездить медленно по периметру всего помещения, cartographer склеит все подкарты в одну.

  • Лучше начинать строить карту с нулевой точки (то есть с места зарядки) и закончить построение на этой же точке в том же положении (с тем же углом, с каким начал).


Типичные проблемы картографии


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

Проверка расставленных точек

cartographer

cartographer_ros


2 Комментариев

  1. Анонимный

    В инструкции не верно указано расположение файла .bashrc.
    Фактическое расположение файла в /home/promobot/ 

  2. В пункте не актульный адрес. Актуальный: https://lingvo.promo-bot.ai/robotsettings/index
    Перед построением карты нужно задать 
    корректные значения радиуса колес в https://pb2.icmm.ru/robotsettings/index в соответствии с таблицей:

Написать комментарий...