дома нескучно
Как весело и с пользой пережить самоизоляцию

Geoscan & Airalab. Участие в первом взрослом хакатоне Robofinist “Умный автомобиль”

19 October 2018

Всем привет!

Я Вадим Манаенко, DevOps в Airalab.

С 5 по 7 октября 2018 сборная команда Geoscan & Airalab приняла участие в первом взрослом хакатоне Robofinist “Умный автомобиль”. Состав команды: Вадим Манаенко, Иван Бирюк и Алексей Овчаров.

Цель хакатона: безопасность, экономия и комфорт в рамках использования беспилотного транспорта.

Задача: определиться с идеей и реализовать рабочий прототип в течение чуть более суток.

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

TutrleBot представляет собой  серьезную платформу с Intel NUC. Также на него были установлены лидар и RGBD-сенсор. Жестких ограничений по дополнительному оборудованию не было - можно было установить собственные модули.
TutrleBot представляет собой серьезную платформу с Intel NUC. Также на него были установлены лидар и RGBD-сенсор. Жестких ограничений по дополнительному оборудованию не было - можно было установить собственные модули.

Intel NUC уже был оснвщен Ubuntu 16.04 + ROS Kinetic и необходими пакетами для работы с роботом.

Для тестов предлагалось использовать полигоны, имитирующие дорогу и здания.

Наш сценарий: так как одной из основных целей команды Airalab является демонстрация взаимодействий между автономными экономическими агентами, мы выбрали сценарий - заказ движения робота из одной точки в другую через сеть Робономика.

Основные вехи и решения в реализации:

  • Построение карты местности;
  • Позиционирование робота в пространстве с учетом построенной карты;
  • Движение робота;
  • Объезд препятствий как статических, так и динамических;
  • Подключение робота к сети Робономика.

Первый шаг - запуск мобильной платформы командной

$ roslaunch turtlebot_bringup minimal.launch. Затем лидар

$ roslaunch rplidar_ros rplidar.launch.

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

$ roslaunch turtlebot_navigation gmapping_demo.launch.

Построение карты осуществлялось через пакет gmapping, все конфигурационные файлы для него агрегированны в пакете turtlebot_navigation. На выходе мы получили растровую картинку с картой и yaml-файл с назначением начала координат и масштабными коэффициентами.

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

$ roslaunch turtlebot_navigation amcl_demo.launch map_file:=/tmp/my_map.yaml, который требовал в процессе работы полученную карту. По ней и по данным лидара робот локализует себя на карте и может строить глобальные пути от точки к точке, избегая не указанных на карте препятствий.

Осталось подключить робота к сети Робономика и научить правильно отвечать на спрос и выполнять обязательство. Сценарий следующий:

  • Пользователь выбирает на карте точку и направление;
  • Скрипт записывает задачу в rosbag файл и генерирует сообщение Demand;
  • Робот видит это сообщение и отвечает на него предложением Offer;
  • Провайдер сети Робономика находит эти сообщения и создает контракт обязательства;
  • Робот получает обязательство, читает задачу из rosbag файла и начинает движение.

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

Обратите внимание, что в конце второго видео робот поворачивается согласно заданию.

Ссылка на транзакцию, которая создает обязательство tx.

Хочется поблагодарить организаторов хакатона за прекрасное мероприятия. Для них это был первый взрослый хакатон. Они учились на нас, а мы учились работать с платформой! Это был прекрасный опыт.