- PVSM.RU - https://www.pvsm.ru -
В данной статье будут рассмотрены подходы и библиотеки, предоставляемые ROS для решения задач автономной и не очень навигации.
Также будут рассмотрены несколько специфичных для антропоморфных роботов пакетов. Любой робот (наверняка даже машинка со средне-мощным бортовым ПК под управлением Linux и парой веб камер) наверняка найдет здесь что — нибудь для себя.
Если же аппаратура слишком слаба для подобных вычислений, можно воспользоваться распределенностью ROS, которая позволяет нодам на разных машинах взаимодействовать между собой. Подобный вариант описан здесь [1].
Двухмерная дискретная карта, в которой каждая ячейка может быть в одном из трех состояний:
В ROS облака точек существуют в основном в виде sensor_msgs/PointCloud2 [2].
Аналог Occupancy Grid, но в 3D.
В данной статье по умолчанию будет подразумеваться реализация из библиотеки Octomap [3].
Хороший разбор данной библиотеки в этой презентации [4].
Если кратко, то вы можете запустить свою программу в контексте ROS, где она будет нодой (Node).
Также существуют топики (Topics). Это своего рода именованные ящики, в которые ноды могут складывать и из которых забирать сообщения различных типов (например объекты типов geometry_msgs::Pose, sensor_msgs::PointCloud2, nav_msgs::Path и многих других).
Любая из нод может публиковать в любые топики, а также считывать из любых топиков сообщения.
Ноды работают асинхронно друг от друга.
Если не совсем кратко, то
Robot operating system [7] — очень удобная платформа для реализации роботехнических проектов.
Подробности [7]
Для автономной навигации, да и вообще чего — либо, требующего полной информации об окружении нужна карта самого окружения.
Для этих задач хорошо подходит карта в виде облака точек, из которой в дальнейшем можно получить другие варианты карт (плотное облако точек, OccupancyGrid).
Vision-based SLAM алгоритмы позволяют строить карту окружения и приблизительно оценивать местоположение в ней.
Например:
Примечание: в ROS можно получать облака точек со стереокамер или RGB-D камер. В свою очередь облака точек можно преобразовывать в LaserScan, который является ходовым форматом ROS сообщений для лидаров и принимается некоторыми из описанных ниже пакетов.
Это значит, что имея на руках стереокамеру, вы скорее всего сможете использовать SLAM алгоритмы, принимающие данные от Лидаров или RGB-D камер. Аналогично для RGB-D камер, вы сможете использовать их в качестве Лидаров.
ROS пакет, предоставляющий обвертку над бибилотекой rtabmap [10]. Наверное, самый популярный, удобный в использовании и многосторонний пакет.
SLAM алгоритм, строящий 2D карту препятствий.
По умолчанию использует данные от лидара, но
с тем же успехом ему на вход можно подавать данные со стереокамеры, RGB-D камеры (см примечание вначале главы).
Близкий родственний: slam_gmapping [12].
Наверняка это самые легковесные реализации SLAM алгоритмов.
Эта библиотека хорошо рассмотрена в этой статье [14].
В этом разделе будут разобраны основные подходы для решения вышеупомянутой задачи, которые предоставляет ROS. В официальном туториале [15] представлена лишь малая часть из них. Для ряда роботов имеются готовые решения (разделы 6.2 — 6.6 по ссылке выше). Также советую посмотреть эту ссылку [16]. Возможно имеет смысл немного переписать их код, если ваш робот похож на одного из представленного там списка.
Также есть ряд пакетов, не упомянутых в источниках выше. Особенно решения для коптеров.
Этот подход позволяет решать задачу навигации на плоскости, что довольно просто в алгоритмическом смысле.
Карту препятствий (см в тезарусе статьи) можно получить из облака точек несколькими способами:
Хорошо пододит для колесных роботов. Это концепция ROS, которая состоит из 2 планеров.
Ищет по Карте Препятствий глобальный маршрут в виде линии.
На локальный планер ложится рассчет скоростей и углов, так чтобы избежать столкновений.
Далее скорость и углы подаются на ноду, управляющую роботом. Хорошо подойдет для колесных платформ.
Данный подход рассчитан в основном на антропоморфных роботов. Один из сценариев использования карты препятствий в контексте навигации и движения антропоморфного робота это построение безопасной траектории шагов для робота, по которой он впоследствии сможет пройти.
Затем траектория в виде набора ступней поступет на исполнение роботу.
Применение такого варианта возможно, если контроллер робота может "выполнять" задания вида "наступить в точку с заданными координатами".
На мой взгляд, при планировании должны быть учтены условия равновесия робота, хоть планирование и осуществляется из набора "безопасных шагов". Или при реализации шага контроллер робота должен оценивать возможность реализовать его, не упав при этом.
footstep_planner [20] & humanoid_navigation [21]
footstep_planner [20] — часть решения humanoid_navigation [22] по навигации антропоморфного робота в известном окружении.
footstep_planner предоставляет возможность планировать маршрут в виде набора положений ступней, ведущей из стартовой в конечную позицию.
Планирование осуществляется на 2D карте препятствий.
Следует заметить, что данный пакет предоставляет много нужных настроек, что позволяет применять его практически на любых антропоморфных роботах.
Начиная с физических параметров ступней и их положений друг относительно друга при шаге,
заканчивая выбором алгоритма поиска, используемого при планировании.
Это идейный продолжатель footstep_planner'a в 3D пространстве. При помощи него можно прокладывать маршрут прямо в плотных облаках точек. В комплекте — плагин к Rviz, позволяющий редактировать полученный маршрут.
Подробности в публикации [24]
Расширение move_base, описанного выше до 3D с проверкой коллизий. Используется моделька робота и плотная 3D карта окружения.
Интересная публикация по этому пакету [26]
Пакет планирования сложных движений для роботов любой конструкции. Робот представляется в виде модели с учетом всех подвижных частей и ограничений на их передвижения. Далее можно рассчитать траекторию всех конечностей робота при его переходе из одного состояния в другое. Возможен учет коллизий с окружением в виде плотных облаков точек (by Octomap).
В доументации к MoveIt можно найти ряд моделек, которые можно экспортировать и поиграться с ними. Среди туториалов [28] хорош этот [29], показывающий работу с библиотекой из C++ кода.
Автор: Алексей Титов
Источник [33]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/254347
Ссылки в тексте:
[1] здесь: http://wiki.ros.org/rtabmap_ros/Tutorials/SetupOnYourRobot#Remote_mapping
[2] sensor_msgs/PointCloud2: http://docs.ros.org/api/sensor_msgs/html/msg/PointCloud2.html
[3] Octomap: https://octomap.github.io/
[4] этой презентации: http://www2.informatik.uni-freiburg.de/~hornunga/pub/hornung13roscon.pdf
[5] tutorials: http://wiki.ros.org/ROS/Tutorials
[6] roscpp: http://wiki.ros.org/roscpp/Overview
[7] Robot operating system: http://www.ros.org/core-components/
[8] sensor_msgs/LaserScan: http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html
[9] rtabmap_ros: http://wiki.ros.org/rtabmap_ros
[10] rtabmap: https://introlab.github.io/rtabmap/
[11] hector_slam: http://wiki.ros.org/hector_slam
[12] slam_gmapping: http://wiki.ros.org/gmapping
[13] ElasticFusion: https://github.com/mp3guy/ElasticFusion
[14] этой статье: https://habrahabr.ru/company/singularis/blog/279035/
[15] официальном туториале: http://wiki.ros.org/navigation
[16] эту ссылку: http://robots.ros.org/all/
[17] move_base: http://wiki.ros.org/move_base
[18] Global Planner: http://wiki.ros.org/global_planner
[19] Local Planner: http://wiki.ros.org/base_local_planner
[20] footstep_planner: http://wiki.ros.org/footstep_planner
[21] humanoid_navigation: http://wiki.ros.org/humanoid_navigation
[22] humanoid_navigation: http://wiki.ros.org/humanoid_navigation?distro=indigo
[23] Vigir_footstep_planner: http://wiki.ros.org/vigir_footstep_planning
[24] публикации: https://www.sim.informatik.tu-darmstadt.de/publ/download/2016_stumpf_footstep_planning_frame_work_Humanoids.pdf
[25] 3D navigation: http://wiki.ros.org/3d_navigation
[26] Интересная публикация по этому пакету: http://hrl.informatik.uni-freiburg.de/papers/hornung12icra_3Dnav.pdf
[27] Move It: http://moveit.ros.org/
[28] туториалов: http://docs.ros.org/kinetic/api/moveit_tutorials/html/#
[29] этот: http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/pr2_tutorials/planning/src/doc/move_group_interface_tutorial.html
[30] Книга Probabilistic Robotics: http://www.probabilistic-robotics.org/
[31] Курс по SLAM алгоритмам и навигации: https://www.youtube.com/channel/UCQoNsqW4v8uvrpWxnIabStg
[32] MoveIt tutorials: http://docs.ros.org/indigo/api/moveit_tutorials/html/
[33] Источник: https://habrahabr.ru/post/327888/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.