Первые шаги имитации робота

  • Home
  • blog
  • Первые шаги имитации робота
blog image

Со времени последнего поста мы сделали первые шаги в самостоятельном вождении. Мы хотим, чтобы наш робот использовал свои датчики для наблюдения за миром и принимал решения на основании данных, но также использовал заранее построенные карты здания для помощи в автономной навигации. Например, на строительной площадке обычно имеются трёхмерные BIM-модели здания, которые можно загрузить нашему роботу в качестве карты. В этом посте мы дамим краткий обзор того, как мы сделали первые шаги в направлении навигации, локализации и самостоятельного вождения с помощью ROS.

Подготовка робота и имитации

В первую очередь мы должны были подготовить нашего робота и территорию для этих задач. Модель нашего робота подключалась к камере Kinect и лазерному датчику Hokuyo на основе этой инструкции. Мы взяли пример обычной Revit модели (rac_basic_sample_project.rvt) конвертировали сначала с использованием Revit для её экспорта в формате .ifc, а затем используя Blender для конвертации в формат .dae с расширением IfcBlender.

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

Наш робот с установленными датчиками и территорией

Создание карты интерьера

Один из открытых вопросов для нас – как создать двухмерную карту из BIM-модели в формате, который можно сравнивать напрямую с данными датчика для локализации робота? Одним простым решением может быть просто провезти робота вокруг и построить карту на основе собранных данных от лазерного датчика и одометрии. Это именно то, что пакет SLAM (Simultaneous Localization and Mapping) ROS gmapping может для нас сделать. Используя gmapping, мы провёли робота по всей кухне и получили карту в формате .yaml. 

Двухмерная карта кухни

Поскольку теперь у нас есть двухмерная карта окружения, наш робот может использовать её напрямую без необходимости исследовать здание самому. Прежде, чем продолжать навигационные задачи, нам ещё нужно сделать одну вещь: локализацию. Снова ROS предлагает нам готовый пакет для этого, называемый amcl.

Он использует алгоритм Адаптивной Локализации Monte Carlo для локализации робота на основе данной карты и данных сенсора. При случайной инициализации он располагает все возможные места нахождения робота (красные стрелки на изображении) на всей известной карте. Сбор дополнительной информации от окружения при помощи датчиков позволяет алгоритму удалить некоторые места, что ведёт к всё более точной локализации робота.

Предсказания местонахождения Amcl (красные стрелки) в начальном состоянии и после проезда на короткое расстояние.

YouTube

By loading the video, you agree to YouTube's privacy policy.
Learn more

Load video

Видео 1. Локализация

Первые шаги в самостоятельном вождении

При правильной локализации мы смогли продвинуться к задачам навигации. Пакет  Move_base ROS

является библиотекой для планирования пути и навигации, свободной от столкновений. В сущности, он создаёт две карты окружения: местную costmap и глобальную costmap. Глобальная costmap строится на оригинальной карте и показывает все места, которые могут безопасно оцениваться роботом. Местная costmap затем использует показания датчика для проверки реального статуса окружения так, что, если имеется, например, новый незнакомый объект, блокирующий путь робота, он будет показан на местной costmap.

В реальной жизни карта, взятая из модели здания BIM, будет отличаться от реального окружения. В реальности там может не быть стены или кучи кирпичей, и наш робот должен подстроиться под реальность, но всё же сохранить способность ориентироваться. Совокупно эти две карты используются для планирования безопасного пути для робота к заданной цели. Когда путь готов, пакет контролирует, как робот остаётся на запланированном пути и направляется к целевым координатам. 

Глобальная и местная costmaps

Вы видите простой пример использования пакета навигации на видео 2. Роботу дана цель, и он осторожно направляется к ней без столкновения со стенами или предметами. Все ранее упомянутые пакеты содержат параметры, которые необходимо настраивать для получения лучшего результата локализации и навигации. Некоторые проблемы остаются из-за режима “strafing”, поскольку локализация сходит с ума (видео 3), а физика не определена чётко, что позволяет роботу выходить за пределы гравитации (видео 4). Основной причиной этого, скорее всего, является определение движения Mecanum-колёс при помощи Planar Move Plugin. 

Далее, мы продолжим работать над избеганием столкновений с движущимися предметами, возможно, при помощи каких-то усиленных подходов к обучению. Оставайтесь с нами!

YouTube

By loading the video, you agree to YouTube's privacy policy.
Learn more

Load video

Видео 2. Планирование пути

YouTube

By loading the video, you agree to YouTube's privacy policy.
Learn more

Load video

Видео 3. Локализация стрейфинга

YouTube

By loading the video, you agree to YouTube's privacy policy.
Learn more

Load video

Видео 4. Проблема гравитации