Coder Social home page Coder Social logo

urpylka / starline-hackathon Goto Github PK

View Code? Open in Web Editor NEW
5.0 3.0 5.0 51.45 MB

Code base for Starline competition

Home Page: https://urpylka.com/posts/post-64/

Python 14.39% Shell 0.86% Makefile 0.11% CMake 4.28% C++ 71.37% PHP 0.21% C 8.14% Objective-C 0.31% Dockerfile 0.31%
autonomous-driving robots rgbd 2d-slam turtlebot2 ros hackathon

starline-hackathon's Introduction

Stimulator G

Видео работы решения

Видео работы решения

Кликабельно ↑↑↑ Youtube

Коротко о процессе разработки

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

Первый этап

Запустить симуляцию удалось сразу, проблем с этим не возникло. Далее необходимо было построить карту для ориентации робота в прострастве. Для экономного по ресурсам решения был выбран 2D SLAM. Для построения карты мы решили попробовать gmapping. Почитав документацию gmapping, был составлен простой launch-файл. А также установлен и настроен виртуальный лазер hokuyo_laser. После построения карты выяснилось, что есть такая штука как бордюры, уровень которых не детектится лазером, а робот при ориентации по такой карте норовит врезаться в бордюр и застрять. Для решения этой проблемы мы решили дополнить датчики робота fake-laser'ом, работающим на облаке точек виртуальной RGBD-камеры. Данные из PointCloud камеры в формат LaserScan мы сконвертировали с помощью пакета pointcloud_to_laserscan таким образом, чтобы данные выбирались на высоте бордюров. Для лучшего обзора пришлось переместить RGBD-сенсор в переднюю часть (так в кадр перестал попадать робот).

Получив данные с RGBD-камеры, мы предприняли попытку построить карту с учётом бордюров. Для построения карты топик kinect_scan (виртуального лазера) и топик hokuyo_laser были объединены в один топик scan с помощью ira_laser_tools.

Однако карта все равно строилась преймущественно с учётом данных лазерного дальномера, тк данные о бордюрах не фиксировались из-за:

  1. Ограниченного угла обзора лазера. Он смотрел только в одну сторону, перед роботом и слишком близко. В то время когда со спины и со сторон робота hokuyo_laser брал далеко и опять же не учитывал бордюров;
  2. Частота fake-laser была мала.

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

Второй этап

Для управления роботом нужны:

  • map_server
  • amcl
  • move_base
  • local/global planner

Данная связка вместе с launch-файлами была представлена в пакете turtlebot_navigation. При установке из исходников возникли проблемы с компилятором, при установке из deb-репозитория проблема с зависимостью ros-kinetic-realsense (нашли заметку, сделали patch, установили).

Затем был переписан дефолтный launch-файл для запуска amcl + move_base + planner. Выпилив оттуда запуск аппаратного лазера, и сделав remap /cmd_vel на /mobile_base/commands/velocity, мы смогли заставить робота ориентироваться в построенной карте.

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

Третий этап

Т.к. топик /scan при столкновении с препядствием всё же говорил корректную информацию о нахождении бордюра, было принято решение повлиять на алгоритм построения маршрута робота.

Было решено с нуля настроить необходимые ноды из пакета navigation для корректного перемещения робота в пространстве с учётом динамических препятствий (в том числе в виде бордюров).

Поиграв с настройками дефолтных плагинов для пакета navigation global_planner и local_planner и позапускав робота из разных точек карты, мы решили попробовать альтернативные варианты. Для global_planner был выбран более гибкий global_planner/GlobalPlanner, а для local_planner - teb_local_planner/TebLocalPlannerROS, который на ходу перестраивает локальное изменение маршрута. С помощью настройки данных плагинов удалось получить устойчивое решение для ориентации и навигации робота по виртуальному городу.

Запуск решения

Склонируйте данный репозиторий. Выполните инструкции по настройке докера из исходного репозитория. Соберите и запустите докер контейнер для дальнейшего запуска симулятора и решения. Для этого из корневой директории этого репозитория выполните команды

./docker/simulator/build_docker.sh
./docker/simulator/run_docker.sh

В случае, если на вашем ПК используется видеокарта от nvidia, то обозначенные выше скрипты следует исполнить с параметром -n или --nvidia

Запустите симулятор в открывшейся консоли контейнера:

roslaunch tb_gazebo turtltown.launch

В отдельной командной строке выполните:

./docker/simulator/into_docker.sh
roslaunch solution_1 move_base.launch

Для навигации робота по карте (в том числе из точки старта в области S в точку финиша в области F), а также визуализации данных с робота, используйте программу rviz. Для этого в отдельной командной строке выполните

./docker/simulator/into_docker.sh
rviz

Для быстрой настройки окружения загрузите настройки из файла /catkin_ws/src/solution_1/rviz/tb_config.rviz

starline-hackathon's People

Contributors

goldarte avatar nickodema avatar urpylka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.