Что такое ROS и зачем он нужен

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

ROS (Robot Operating System) — это не операционная система, а фреймворк и middleware: набор библиотек, инструментов и соглашений, которые помогают писать программы для роботов и заставлять их части общаться между собой.

Зачем вообще нужен отдельный фреймворк

Представьте мобильную платформу — простую тележку на четырёх колёсах с лидаром, камерой и компьютером Raspberry Pi. Чтобы она поехала к цели и не врезалась в стену, внутри одновременно работают десятки задач: опрос лидара, обработка изображения с камеры, построение карты, планирование маршрута, расчёт скоростей колёс, отправка команд на моторы. Если писать это одной гигантской программой, любая мелкая правка в коде камеры рискует сломать управление моторами, а переиспользовать наработки на другом роботе будет почти невозможно.

ROS решает именно эту проблему. Он предлагает разбить систему на маленькие независимые программы — узлы (nodes) — каждая со своей узкой задачей, и даёт стандартный способ обмениваться данными между ними. Узел лидара просто «публикует» измерения, а кто угодно может на них «подписаться»: и построитель карты, и модуль объезда препятствий. Никто не знает деталей реализации соседей — только формат сообщений.

ROS — это middleware, а не ОС

Слово «Operating System» в названии историческое и сбивает с толку. ROS работает поверх обычной операционной системы (чаще всего Linux, Ubuntu). Он не управляет процессором и памятью — этим занимается Linux. ROS управляет общением между программами: находит, кто кому должен передавать данные, сериализует сообщения, доставляет их по сети. Такую прослойку называют middleware — «промежуточное ПО».

Что даёт ОС (Linux)Что даёт ROS
Процессы, память, файлы, драйверы устройствУзлы, топики, сообщения, обнаружение и связь между ними
Запуск программЗапуск и оркестрация множества узлов (launch-файлы)
Сеть TCP/IPПрозрачный обмен сообщениями по сети между машинами

Переиспользование — главная суперсила

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

Именно поэтому ROS стал стандартом и в индустрии (склады, доставка, промышленные манипуляторы), и в науке (исследовательские лаборатории, университеты). Знание ROS — это общий язык робототехников по всему миру.

Как работает под капотом

В основе лежит модель «публикация/подписка» (publish/subscribe). Узлы не вызывают друг друга напрямую и даже не знают о существовании друг друга. Вместо этого они обмениваются данными через именованные каналы — топики. Один узел публикует сообщения в топик, другие подписываются и получают их. Это слабая связанность: можно заменить узел камеры на другой, и пока он публикует в тот же топик в том же формате, остальная система ничего не заметит.

  [узел лидара]  --/scan-->   [построитель карты]
                     \
                      `----->  [объезд препятствий]

  [планировщик]  --/cmd_vel-->  [драйвер моторов]

Здесь /scan и /cmd_vel — топики. Стрелка показывает направление потока данных. Такую картинку называют графом вычислений, и ROS умеет рисовать её автоматически.

Частые ошибки

  • Считать ROS операционной системой. Это middleware поверх Linux; он не заменяет Ubuntu, а работает на ней.
  • Писать робота как один большой скрипт. Смысл ROS — в разбиении на узлы. Монолит лишает вас переиспользования и отладки по частям.
  • Думать, что узлы знают друг о друге. Они общаются только через топики/сервисы по имени и формату сообщения, а не по прямым вызовам.

Итоги

  • ROS — фреймворк и middleware для роботов, а не операционная система.
  • Систему робота разбивают на маленькие узлы, которые общаются через топики по модели publish/subscribe.
  • Главная ценность — переиспользование готовых пакетов и слабая связанность компонентов.
  • ROS — стандарт и в индустрии, и в науке; это общий язык робототехников.
Проверьте себя
1. Чем на самом деле является ROS?
AОперационной системой для роботов, заменяющей Linux
BФреймворком и middleware поверх обычной ОС
CЯзыком программирования для роботов
DМаркой роботов-манипуляторов
2. Что даёт модель publish/subscribe?
AУзлы вызывают функции друг друга напрямую
BСлабую связанность: узлы общаются через топики, не зная друг о друге
CГарантию, что узлов будет ровно два
DЗапрет на обмен данными по сети
3. В чём главная практическая ценность ROS?
AОн ускоряет процессор робота
BОн переиспользует готовые пакеты сообщества и разбивает систему на части
CОн заменяет язык Python
DОн не требует операционной системы