67 подписчиков

Программирование роботов в среде ROS

Согласно информации DHL, порядка 80% складских комплексов до сих пор обслуживаются вручную,несмотря на очевидные выгоды от автоматизации и растущий спрос на быстроту и точность обслуживания. Директор Locus Robotics Рик Фолк называет еще менее оптимистичную цифру.По его данным, 95% мировых складов, или свыше 100 тысяч, объектов до сих пор полагаются на ручной труд.

Interact Analysis прогнозируют рост рынка роботизированной сборки заказов с $236 млн в 2022 году до $6,8 млрд к 2030 году. К концу 2022 года в мире насчитывалось порядка 33 поставщиков соответствующих систем, причем 18 из них базировались в США. Согласно оценке Statista, глобальный рынок складской автоматизации вырастет с $9,95 млрд в 2016 году до $30,15 млрд к 2026 году. Глобальный рынок складских роботов представляет собой перспективную и быстрорастущую нишу.

Команда ИнКата не только наблюдает за прогрессом, но и активно работает над робототехническими проектами (примеры здесь, здесь и здесь). В этой статье поговорим про популярное ПО для программирования роботов на примере разработки складского робота LeanKey.

Преимущества и особенности программирования в среде ROS

Robot operation system (ROS) – это метаоперационная система с открытым исходным кодом для программирования роботов. С 2017 года разработчики ROS проделали путь от идеи в стенах Стэнфордского университета до инструмента, который использует NASA для разработки робототехники.

В основе философии Robot operation system лежит open source. Разработчики могут выбирать конфигурации инструментов и библиотек и максимальная кастомизировать прошивку под потребности конкретного робота. Такая открытость привела к формированию большого и активного сообщества разработчиков и исследователей, которые постоянно вносят свой вклад в развитие платформы – улучшают ее функциональность и расширяют возможности.

Преимущества работы с ROS:

  • Возможность взаимодействовать со средой ROS на большом количестве языков программирования, в том числе настраивать взаимодействие между узлами на разных языках, например, узел написанный на Python без проблем взаимодействует с узлом написанном на C++;
  • ROS имеет модульную архитектуру, функциональные возможности робота организованы в небольшие многократно используемые компоненты, которые называют "узлами". Эти узлы могут взаимодействовать друг с другом с помощью четко определенных механизмов передачи сообщений. Такая модульность облегчает разработку сложных робототехнических систем за счет интеграции и повторного использования существующих компонентов;
  • ROS поставляется с широким набором библиотек и инструментов. Они охватывают различные аспекты робототехники, такие как восприятие, планирование движения, управление и моделирование. Эти готовые библиотеки экономят время и усилия разработчиков и предоставляют готовую к использованию функциональность;
  • ROS хорошо интегрируется со средами моделирования, такими как Gazebo и RViz. Эта возможность позволяет разработчикам тестировать алгоритмы и приложения для роботов в симуляционной среде перед их развертыванием на реальном оборудовании, что экономит время и ресурсы;
  • ROS подходит для поддержки как небольших роботов, так и крупных робототехнических систем. Ее архитектура позволяет легко масштабировать систему, что делает ее пригодной для широкого спектра приложений – от исследовательских прототипов до промышленной автоматизации.

Применения ROS в разработке складских роботов

Среду ROS мы используем на текущем проекте LeanKey (складской робот). Среди десятков вариантов промежуточных ПО наши специалисты выбрали ROS как базу для программирования складского робота. Выбор операционной системы для роботов зависит от конкретных потребностей и целей робототехнического проекта. Хотя ROS является одной из наиболее популярных и универсальных, другие системы, такие как Autoware, YARP, MOOS, OROCOS и Player Project, ориентированы на специализированные области и случаи использования и не являются такими же универсальными, как ROS.

Почему мы остановились на ROS?

Нам нужно было сделать монолитную программу из алгоритмов. Мы обнаружили, что большинство из них поддерживалось ROS (алгоритмы навигации, картографирования, локализации). Эти алгоритмы ключевые и самые сложные в роботе. ROS предоставляет мощные библиотеки навигации и картографии, такие как SLAM (Simultaneous Localization and Mapping). Эти инструменты позволяют складским роботам автономно перемещаться в динамических средах, создавать карты окружения и планировать оптимальные маршруты доставки грузов.

Складские роботы взаимодействуют с различными объектами, такими как упаковки, паллеты и полки. ROS поддерживает интеграцию с такими датчиками, как камеры, LiDAR, датчики глубины, что облегчает разработку алгоритмов обнаружения и восприятия объектов. Они помогают роботу идентифицировать и обрабатывать предметы.

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

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

Многие складские операции требуют совместной работы целого парка роботов. ROS обеспечивает бесперебойную связь и координацию между несколькими роботами, позволяет им совместно справляться с сортировкой, упаковкой, управлением запасами и доставкой товаров. Это происходит за счет распределенной архитектуры, системы обмена сообщениями и инструментами, разработанными специально для многороботных систем.

ROS можно интегрировать с системами управления складом для обеспечения бесперебойной связи между роботами и центральной системой управления. Такая интеграция обеспечивает эффективную координацию между роботами и складскими операциями. Внедрение ROS в систему управления складом требует совместной работы инженеров-роботехников и специалистов по складским операциям. При правильной интеграции роботы на базе ROS могут повысить уровень автоматизации склада, оптимизировать управление запасами, сократить операционные расходы и повысить общую эффективность.

Какие возможности ROS мы используем в Leankey

Аппаратная абстракция

Основной наш инструмент в ROS при работе с роботом Leankey – это аппаратная абстракция. Под аппаратной абстракцией ROS понимается способность операционной системы робота разграничить высокоуровневые программные компоненты, такие как алгоритмы восприятия, планирования, управления, от низкоуровневых деталей базового оборудования.

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

В разных роботах используются различные аппаратные конфигурации и коммуникационные протоколы, что затрудняет разработку “универсальных” приложений для роботов, которые можно было бы легко переносить на разные платформы.

ROS решает эти проблемы, предоставляя единый интерфейс для взаимодействия с аппаратным обеспечением роботов. Вот как это работает:

  • В ROS аппаратная функциональность размещается в модульных компонентах, называемых “драйверами”. Драйверы отвечают за непосредственное взаимодействие с физическим оборудованием и преобразованием низкоуровневых команд и данных в стандартизованные сообщения для сервисов ROS;
  • В ROS определены стандартные типы сообщений и сигналов, которые отправляют данные и команды от различных аппаратных компонентов. Все сообщения и сигналы стандартизированы и одинаковы у разных моделей одного вида компонентов. Например, существуют предопределенные типы сообщений для показаний датчиков. Данные двух разных LiDAR'ов будут выглядеть одинаково перед отправкой. Сервисы для отправки команд исполнительным устройствам, например, управление двигателем, также будут преобразовываться в один формат. Зачастую производители двигателей, камер, датчиков и т.д., поставляют свои устройства сразу вместе с библиотеками для использования в ROS, что в разы ускоряет разработку ПО для роботов. Узлы ROS более высокого уровня, содержащие специфическую для приложения логику, такую как алгоритмы навигации, восприятия или планирования, могут взаимодействовать с аппаратным обеспечением робота через стандартизованные сообщения и сервисы ROS. Эти узлы не знают об особенностях аппаратного обеспечения и взаимодействуют с ним только путем стандартных сигналов.

Таким образом, аппаратная абстракция дает нам следующие преимущества:

  1. Используя аппаратную абстракцию ROS, мы можем писать приложения для роботов, которые не зависят от базового оборудования. Такая переносимость позволяет запускать одно и то же приложение на разных роботах с минимальными изменениями, что экономит время наших разработчиков и деньги наших заказчиков;
  2. Разработчики могут сосредоточиться на логике и алгоритмах высокого уровня, не заботясь о тонкостях аппаратного взаимодействия. Согласованный API ROS упрощает процесс разработки и делает код более удобным для сопровождения;
  3. Различные роботы с разным аппаратным обеспечением могут легко взаимодействовать друг с другом и обмениваться информацией через ROS, что способствует созданию системы роботов и их совместной работе;
  4. Аппаратная абстракция способствует модульной разработке, облегчает замену или модернизацию отдельных аппаратных компонентов без ущерба для других функций робота.

Фреймворк ros2_control

Ros2_control – один из полезнейших фреймворков в ROS 2. Он обеспечивает стандартизированный и модульный подход к управлению робота. Объясним на примере. Представьте, что вы создаете робота. Этот робот состоит из различных частей: рук, колес, датчиков и т.д. Обеспечить слаженную работу всех этих частей может быть непросто. Вот тут-то и приходит на помощь ros2_control.

Ros2_control — это помощник для вашего робота. Он помогает управлять каждой частью робота, например, указывать манипуляторам, как двигаться, или датчикам, как воспринимать информацию. Вместо того чтобы работать с каждой частью отдельно, ros2_control предоставляет вам общий способ общения со всеми частями.

Ros2_control можно сравнить с дорожными знаками. Знаки помогают автомобилям, автобусам и велосипедам двигаться по дороге без аварий. Точно так же ros2_control помогает различным частям вашего робота "разговаривать" друг с другом, не вызывая путаницы.

Это упрощает создание роботов, поскольку не нужно знать все подробности о каждой детали. Вы можете просто сказать ros2_control, что вам нужно, и он позаботится обо всем остальном.

MicroRos

MicroROS – еще одно расширение, которое мы используем при разработке роботов. MicroROS – разработано специально для микроконтроллеров.

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

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

MicroROS поддерживает коммуникационную инфраструктуру ROS 2, позволяя устройствам на базе микроконтроллеров взаимодействовать с другими узлами ROS, как на микроконтроллерах, так и на более мощных компьютерах. Это обеспечивает беспрепятственный обмен информацией в робототехнических системах со смешанным аппаратным обеспечением.

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

Проще говоря, MicroROS – это мини-версия ROS, которая может работать на небольших и слабых компьютерах внутри роботов. Она позволяет этим маленьким компьютерам общаться друг с другом и работать вместе, даже при их ограниченных ресурсах. Это особенно полезно при создании роботов и устройств, которые должны выполнять "умные" действия, потребляя при этом мало энергии и занимая мало места.

Пакет Navigation2

Navigation2 – это набор пакетов для навигации робота в пространстве. Ориентирован на мобильных роботов, движущихся на двухмерной (пол помещения) или трехмерной (холмы) поверхности.

Navigation2 призван помочь роботам перемещаться из одного места в другое, избегать препятствий, планировать безопасный путь и принимать разумные решения для достижения цели. Это критически важный компонент для различных робототехнических решений – от сервисных роботов и автономных транспортных средств до промышленных мобильных роботов. Navigation2 у робота можно рассматривать как приложение с картами у вас на телефоне. Подобно тому, как вы смотрите на карту, чтобы знать, куда повернуть, как объехать пробки, Navigation2 помогает роботу решить, куда двигаться и как оставаться в безопасности.

Основные функции Navigation2:

  1. Действия с картами -- составление, обновление, использование;
  2. Построение маршрута вокруг препятствий;
  3. Определение динамических препятствий, избегание или следование за ними;
  4. Сценарии для избегания препятствий, например сдать назад, покружиться, чтобы обновить карту;
  5. Дерево решений – можно запрограммировать робота выполнять сложную последовательность действий и реагировать на изменения в системе или вокруг него, например, ехать на базу для подзарядки, патрулировать по маршруту;
  6. Визуализация – выдавать готовую информацию о составленном маршруте, внутренней карте мира, препятствиях.

Проще говоря, Navigation2 – это GPS и картографическая система для роботов. Она помогает роботам понять, где они находятся, куда им нужно попасть и как добраться туда, не врезаясь в предметы вокруг. Это своего рода интеллектуальный гид, который помогает роботам безопасно передвигаться и самостоятельно принимать правильные решения.

Результаты проектирования в ROS

После завершения разработки ПО для робота LeanKey он сможет выполнять следующие функции:

  1. Работать в 2 режимах. Первый режим — составление карты помещения. Второй режим – ориентация по построенной ранее карте или загруженной карте.
  2. Принимать сообщения с координатами точки назначения, строить маршрут к точке по карте или искать путь до нее самостоятельно, объезжая препятствия.
  3. Реагировать на внезапно возникшие препятствия, например человек, объект не отраженный на карте. Сможет объезжать или тормозить при опасном сближении с объектом.
  4. Принимать команды ручного управления от беспроводного пульта или ПК.

Важное преимущество ROS состоит в том, что работу ПО можно просмотреть в симуляторе. Мы используем симуляторы Gazebo и RViz.

Gazebo и RViz – это инструменты, используемые в экосистеме ROS, но они служат разным целям и предоставляют разные функциональные возможности:

Gazebo:

Gazebo – это полноценная среда моделирования. Она создает виртуальные миры, в которых роботы могут моделироваться и тестироваться так, будто бы они находятся в реальном мире.

Gazebo моделирует физическое поведение объектов, включая гравитацию, трение и столкновения. Это позволяет роботам реалистично взаимодействовать с окружающей средой.

Gazebo поддерживает создание и манипулирование подробными 3D-моделями роботов, датчиков и окружающей среды.

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

Gazebo работает в реальном времени, обеспечивает немедленную обратную связь о поведении роботов и их компонентов в моделируемой среде.

Интерфейс Gazebo
Интерфейс Gazebo

RViz:

RViz – инструмент визуализации, предназначенный в первую очередь для отображения и “понимания” данных, генерируемых роботами, например датчиками и другими программными компонентами.

RViz создает среду 3D-визуализации, в которой можно просматривать модели роботов, данные датчиков и окружающую обстановку.

RViz отображает в реальном времени данные датчиков, такие как изображения с камер, сканирование LiDAR'ом и облака точек, в графическом виде.

RViz может отображать 3D-модели роботов, помогая пользователям визуализировать внешний вид и движения робота.

RViz может отображать запланированные пути и траектории, помогает понять, как робот планирует свои движения.

Интерфейс RViz
Интерфейс RViz

Таким образом, Gazebo – это симулятор, который создает виртуальные миры для тестирования и моделирования физического взаимодействия роботов, а RViz – инструмент визуализации, который помогает пользователям понять и представить данные, полученные от роботов и их окружения. Gazebo моделирует поведение робота в целом, а RViz фокусируется на визуализации сенсорных данных робота и информации о планировании. Оба инструмента являются ценными компонентами при разработке и тестировании роботов.

Вывод

ROS существенно ускоряет процесс разработки ПО для складских роботов. Открытый исходный код ROS привел к формированию активного сообщества разработчиков, исследователей и энтузиастов, которые вносят свой вклад и вместе создают богатые библиотеки. Зачастую такие компоненты, как датчики, LiDAR’ы и т.д., сразу при покупке имеют при себе библиотеку для ROS.

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

ROS обеспечивает высокоуровневую абстракцию аппаратного и программного обеспечения роботов, позволяет разработчикам сосредоточиться на конкретных задачах, не заботясь о низкоуровневых деталях аппаратного обеспечения.

ROS легко интегрируется с такими средами моделирования, как Gazebo и RViz, что позволяет тестировать и проверять поведение и алгоритмы роботов перед их внедрением на реальном оборудовании.

В целом ROS предлагает мощные инструменты для разработки робототехники, способствует сотрудничеству и инновациям в робототехническом сообществе. Тем не менее, она требует определенного уровня знаний и учета требований к производительности в реальном времени. В ROS будет сложно разобраться новичку. Для понимания ее архитектуры и инструментов может потребоваться долгое обучение.