Повышение автономности роботов с помощью ROS 2 и Unity

Компания Unity рада объявить о своей официальной поддержке ROS 2, чей надежный фреймворк в сочетании с моделированием позволит реализовать огромное количество новых сценариев использования.
Robot Operating System (ROS) - это популярный фреймворк для разработки приложений для роботов, созданный в 2007 году. Изначально разработанный для ускорения исследований в области робототехники, он вскоре нашел широкое применение в промышленной и коммерческой робототехнике. ROS 2 опирается на надежную основу ROS, улучшая поддержку современных приложений, таких как мультироботы, системы реального времени и производственные среды. Unity расширяет свою официальную поддержку экосистемы ROS до ROS 2.
Современная робототехника смещает акцент в сторону "автономности", изучения и разработки алгоритмов, способных принимать решения в отсутствие строгих правил, заданных человеком-разработчиком, и моделирование поддерживает этот переход, обеспечивая большую гибкость и скорость экспериментов по сравнению с испытаниями в реальном мире. Мы разработали пример Robotics-Nav2-SLAM, чтобы продемонстрировать, как начать моделировать одновременную локализацию и картографирование (SLAM) и навигацию для автономного мобильного робота (AMR) с помощью Unity и ROS 2.
Хотя ROS остается отличной основой для создания прототипов робототехники, ее срок службы подходит к концу, и в ней отсутствуют некоторые функции, необходимые для того, чтобы выйти за рамки прототипирования и перейти к полномасштабному производству и развертыванию роботизированной системы. Техническая дорожная карта ROS 2 была разработана и поддерживается комитетом ветеранов отрасли, в котором четко определены принципы обеспечения того, чтобы ROS 2 была подходящей основой для конечных пользователей робототехники. ROS 2 поддерживает больше операционных систем и протоколов связи, а также рассчитана на более широкое распространение, чем ROS.
Многие из новых вариантов использования ROS 2 ориентированы на автономность. Внедрение автономности означает, что решения, которые принимает робот, и результаты этих решений не являются четко предсказуемыми с помощью только машины состояний и набора математических формул, как это может быть во многих случаях использования промышленной робототехники. По сравнению с промышленными роботами, рабочая среда автономного робота экспоненциально больше. Перестановки входных сигналов, с которыми он сталкивается, намного превосходят те, которые можно воспроизвести в контролируемой лабораторной среде. Чтобы полностью убедиться в том, что автономный робот ведет себя так, как вы от него ожидаете, вы можете сделать это либо на нем самом, в вашем личном карманном измерении, где время не имеет значения, а реальность - это все и ничто одновременно, либо вам понадобится следующее лучшее: достаточно надежная симуляция.
Если предполагается, что робот будет ощущать окружающую среду, симуляция должна быть способна точно смоделировать эти датчики, не идя на компромиссы в отношении точности моделируемой топологии и физики среды. Если в этой среде есть другие агенты, то есть люди или другие роботы, то симуляция должна быть способна моделировать поведение агентов, сохраняя при этом точность моделирования датчиков, представления топологии и моделирования физики. Чтобы полностью проверить робота во всех возможных сценариях, такое моделирование нужно проводить много, много, много раз. Все это говорит о том, что моделирование в поддержку автономной робототехники требует четырех вещей, которые не так часто требуются в промышленной робототехнике: гибкости, расширяемости, масштабируемости и достоверности - и все это без ущерба для производительности. Unity находится на пересечении всех этих требований, поэтому мы добавляем в нашу платформу все больше функций для поддержки разработки автономных роботов.
С помощью пакетов Unity Robotics вы получите доступ к уже созданным нами интерфейсам, упрощающим взаимодействие с ROS или ROS 2. Вы сможете импортировать существующие конфигурации роботов прямо из файлов URDF с помощью нашего URDF Importer, и вы сможете начать тренировать своего робота с помощью высококачественного, высокоэффективного конвейера рендеринга Unity и производительного и точного физического моделирования. Через магазин активов Unity вы можете получить доступ к большому количеству дополнительных, готовых окружений и реквизита, которые помогут вам смоделировать конкретную среду и задачу вашего робота. Всего несколько кликов - и собранная вами симуляция может быть создана и развернута на любой основной ОС, будь то Windows 10, Mac OS или Linux. Используя сценарии на C#, визуальные сценарии Bolt или любой из многочисленных наборов сценариев и утилит, доступных в Asset Store, вы можете продолжать настраивать функциональность конкретной симуляции в соответствии с вашими конкретными задачами.
Перенести проект Unity на ROS 2 очень просто. В пакет ROS-TCP-Connector мы добавили выпадающее меню, которое позволяет переключать пакет между интеграцией с ROS и ROS 2. При изменении протокола Unity автоматически перекомпилирует пакет в соответствии с выбранными вами определениями сообщений и протоколом сериализации. Чтобы проверить это, просто внесите эти изменения в свой собственный проект или воспользуйтесь нашим репозиторием примеров Robotics-Nav2-SLAM, который содержит необходимые компоненты для использования Unity в качестве симулированного источника информации о датчиках и одометрии в учебном пособии Nav2 Navigating while Mapping.

Этот пример проекта демонстрирует, как использовать Unity для моделирования навигационной системы, работающей в ROS 2. Концепция навигации проста и не сильно меняется в контексте автономной робототехники. Алгоритмы навигации нацелены на поиск пути от места, где человек находится, к месту, где он хочет оказаться. Однако, чтобы попасть с места на место, необходимо сначала выполнить SLAM - одновременную локализацию и картирование. SLAM описывает набор алгоритмов, созданных для ответа на вопрос: "Где я нахожусь сейчас и где я был?". Люди постоянно выполняют SLAM как неотъемлемую часть конвейера обработки данных между нашими органами чувств и мозгом. Для автономных роботов выполнение точного SLAM по-прежнему остается сложной задачей в большинстве реальных условий. Что именно нужно автономному мобильному роботу, чтобы он всегда знал, где находится, относительно всех мест, где он когда-либо был, - это все еще область активных исследований. Единственный способ ответить на этот вопрос для конкретного случая использования - попробовать множество различных вещей (датчики, алгоритмы и т. д.) и посмотреть, что из этого получится.
В нашем примере вы найдете простую среду склада, полностью шарнирную модель мобильного робота Turtlebot 3 с имитацией LIDAR и контроллеров двигателей, а также Dockerfile, используемый для создания образа, содержащего все зависимости ROS 2, необходимые для работы стеков Nav2 и slam_toolbox с нашей симуляцией. Если вы никогда раньше не использовали ROS 2 или не работали с алгоритмами SLAM, то шаги, описанные в учебниках Nav2, будут полезны для вас. Чтобы увидеть, как этот пример работает в Unity, все инструкции для начала работы и запуска проекта находятся в нашем репозитории.

Робототехникам, только начинающим работать с Unity, и разработчикам Unity, только начинающим заниматься робототехникой, предлагается попробовать нашу интеграцию с ROS 2 и выполнить автономную навигацию с помощью Robotics-Nav2-SLAM. Это лишь небольшой пример того, что можно создать, интегрировав наши инструменты для робототехники и многие другие мощные пакеты, доступные в Unity. В то же время команда Unity Robotics продолжает создавать и выпускать функции для поддержки распространенных случаев использования робототехники с акцентом на масштабируемость и расширяемость.
В этом году на ROSCon компания Unity проведет семинар, который расширит пример Nav2-SLAM-Example для поддержки нескольких роботов со специализированными ролями, работающих вместе для выполнения конкретной задачи.
