4.14 что такое приложение ROS?

Если вы еще не знакомы с архитектурой публикации/подписки, такой как ROS, Программирование вашего робота для выполнения чего-то полезного может показаться немного загадочным на первый взгляд. Например, при программировании робота на базе Arduino с использованием языка Си обычно создается одна большая программа, которая управляет поведением робота. Кроме того, программа обычно обращается непосредственно к аппаратному обеспечению или, по крайней мере, к библиотеке, специально разработанной для используемого вами оборудования.

При использовании ROS первым шагом является разделение желаемого поведения на независимые функции, которые могут быть обработаны отдельными узлами. Например, если ваш робот использует веб-камеру или камеру глубины, например Kinect или Xtion Pro, один узел подключится к камере и просто опубликует изображение и/или данные глубины, чтобы другие узлы могли его использовать. Если ваш робот использует мобильную базу, узел базового контроллера будет прослушивать команды движения по какой-то теме и управлять двигателями робота, чтобы соответственно перемещать робота. Эти узлы могут использоваться без изменений во многих различных приложениях, когда желаемое поведение требует контроля зрения и / или движения.

Примером полного приложения является приложение" follower", которое мы разработаем позже в этой книге. (Оригинальную версию C++ от Tony Pratkanis можно найти в пакете turtlebot_follower.) Цель приложения follower - запрограммировать оснащенного Kinect робота, такого как TurtleBot, чтобы он следовал за ближайшим человеком. В дополнение к узлам камеры и базового контроллера нам нужен третий узел, который подписывается на тему камеры и публикует информацию по теме управления движением. Этот узел "последователь" должен обработать данные изображения (например, используя OpenCV или PCL), чтобы найти ближайший человекоподобный объект, а затем командовать базой, чтобы направить ее в соответствующем направлении. Можно было бы сказать, что узел follower - это наше приложение ROS; однако, если быть более точным, приложение действительно состоит из всех трех узлов, работающих вместе. Чтобы запустить приложение, мы используем файл запуска ROS для запуска всей коллекции узлов в виде группы. Помните, что файлы запуска могут также включать в себя другие файлы запуска, что позволяет еще проще повторно использовать существующий код в новых приложениях.

Как только вы привыкнете к этому стилю программирования, у вас появятся некоторые существенные преимущества. Как мы уже упоминали, многие узлы могут быть повторно использованы без изменений в других приложениях. Действительно, некоторые приложения ROS - это не более, чем файлы запуска, объединяющие существующие узлы новыми способами или использующие различные значения для параметров. Кроме того, многие узлы в приложении ROS могут работать на разных роботах без изменений. Например, приложение-последователь TurtleBot может работать на любом роботе, который использует камеру глубины и мобильную базу. Это потому, что ROS позволяет нам абстрагироваться от базового оборудования и вместо этого работать с более общими сообщениями.

Наконец, ROS - это сетевая структура. Это означает, что вы можете распределить узлы вашего приложения на нескольких машинах, если они все видят друг друга в сети. Например, в то время как узлы управления камерой и двигателем должны работать на компьютере робота, ведомый узел и RViz могут работать на любом компьютере в Интернете. Это позволяет при необходимости распределять вычислительную нагрузку между несколькими компьютерами.

Last updated