четверг, 20 октября 2022 г.

ROS2. Что нового?

На момент написания данной статьи версия ROS2 уже успела добраться до литеры H и двинуться дальше, поэтому данную систему труно назвать "новой". Тем не менее, подобный вопрос возникает у каждого, кто привык к ROS1, но со второй версией ещё не знаком. Беглое знакомство с документацией показывает, что основные концепци не изменились, есть издатели и подписчики, обмен сообщениями происходит через топики, сервисы по-прежнему работают. Разве что вместо команд типа rosrun теперь нужно писать ros2 run, а сам ROS2 теперь работает в Windows и MacOS. Но давайте посмотрим на детали. 

Разработчики пишут, что при создании ROS2 они пытались учесть ряд проблем, проигнорированных в ROS1, а именно:

  • групповая робототехника;
  • встраиваемые системы;
  • системы реального времени;
  • работа в условиях низкого качества связи;
  • применение в промышленности;
  • структуры и паттерны для создания надежных систем. 

Одним из основных изменений стал переход на DDS в качестве системы обмена сообщениями. Это позволило повысить качество связи, сделать коммуникацию более гибкой за счёт настройки QoS, а также отказаться от центрального узла (rosmaster), т.е. получить распределённую систему. Другим структурным изменением стало выделение ядра системы в виде библиотеки rcl на языке C. Теоретически, это позволяет написать клиентскую часть системы на любом языке программирования путём создания обёрток над базовыми функциями. 

Официально поддерживаемыми языками являются C++14 и Python3. В целом, стиль написания кода стал больше поощрять использование ООП, хотя создание програм в структурном слите по-прежнему возможно. Основным видом launch-файлов теперь являются Python скрипты, хотя также можно использовать XML и YAML формы представления. 

Сообщения для сервисов и топиков теперь собираются в разных пространствах имён. Для примитивов в сообщениях можно добавлять значения по умолчанию, а для массивов и строк - определять максимальную длину. 

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

Более подробно об этих и других изменениях можно прочитать в обзорах:


Комментариев нет:

Отправить комментарий