Что такое 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 — стандарт и в индустрии, и в науке; это общий язык робототехников.