ROS 2 создана для распределенных систем, но ее модель сетевого взаимодействия по умолчанию лучше всего работает в локальной сети. Подключение робота к удаленному оператору, облачному сервису или другому роботу в другой сети часто вынуждает команды создавать и поддерживать собственный транспортный слой вокруг графа ROS.
Сегодня мы выпускаем LiveKit Portal for ROS 2. Это автономный узел ROS 2, который связывает граф ROS с комнатой LiveKit. Он предоставляет участникам (как использующим ROS, так и без нее) общий способ обмена топиками, вызовами сервисов и видео по протоколу WebRTC с использованием реалтайм-сети LiveKit.
LiveKit Portal для ROS 2 позволяет создавать удаленные робототехнические системы без трансляции DDS через сети, изменения уже запущенных на вашем роботе узлов, а также без создания и поддержки собственного транспортного слоя.
Подключайте свои графы ROS к любому участнику LiveKitLink to this section
Узел ROS Portal обнаруживает настроенные топики в локальном графе ROS и публикует их в виде треков LiveKit. После публикации другой узел ROS Portal может подписаться на эти треки и ретранслировать их в собственный граф. А в тех случаях, когда робототехнические системы взаимодействуют с клиентами без ROS, веб-приложения, облачные сервисы и другие клиенты LiveKit могут использовать те же данные без запуска ROS.
ROS Portal поддерживает четыре основных пути передачи данных:
- Топики ROS. Пересылка топиков в любом направлении через LiveKit DataTracks. ROS Portal определяет типы сообщений во время выполнения и анонсирует схему с каждым треком.
- Сервисы ROS. Маршрутизация настроенных вызовов сервисов конкретному участнику LiveKit через LiveKit RPC.
- Изображения ROS. Публикация топиков sensor_msgs/msg/Image или sensor_msgs/msg/CompressedImage в качестве LiveKit VideoTracks с настраиваемыми опциями кодека и битрейта.
- Видеоисточники. Обход ROS и прямая публикация видео в виде LiveKit VideoTracks.
ROS Portal сохраняет схему сообщений каждого топика вместе с его собственным DataTrack, поэтому каждый подписчик знает, как читать данные:
- Для соединений между ROS и ROS сообщения остаются в родном формате CDR от ROS, без конвертации для каждого сообщения. Перед пересылкой топика ROS Portal проверяет, что оба графа используют одинаковое определение сообщения.
- Для соединений между ROS и системами без ROS, ROS Portal может кодировать топик в формат JSON и публиковать JSON Schema, сгенерированную на основе типа сообщения ROS, чтобы браузерное приложение или облачный сервис могли прочитать его без инструментов ROS.
Что можно создать с помощью ROS PortalLink to this section
С помощью Portal DDS остается внутри локальной сети ROS каждого робота. LiveKit обрабатывает широкомасштабное соединение между участниками, включая шифрование, контроль перегрузки и выборочные подписки. Каждый удаленный участник
Эта модель поддерживает несколько распространенных вариантов использования:
- Телеоперация. Потоковая передача видео и данных датчиков в интерфейс оператора, а затем отправка топиков управления обратно роботу.
- Удаленный инференс. Запуск ресурсоемких компонентов ROS или нативных клиентов LiveKit на удаленных машинах.
- Координация парка. Обмен выбранными топиками и вызовами сервисов между роботами без объединения их сетей DDS.
- Мониторинг. Отправка диагностики и состояния на дашборды в браузере или в облачные сервисы в виде JSON с описанной схемой.
Управляйте тем, что пересекает сетьLink to this section
ROS Portal использует файл конфигурации YAML для определения того, какие топики и сервисы могут пересекать соединение LiveKit. Правила топиков поддерживают регулярные выражения, элементы управления направлением, ограничения скорости, кодирование схем, доставку с фиксацией (latched) и параметры видео.
Следующая конфигурация публикует тестовые топики в обоих направлениях, ограничивает поток IMU, принимает команды удаленной скорости и публикует стереокамеру непосредственно на LiveKit VideoTrack:
Пересылайте только те топики и направления, которые необходимы вашему приложению. Это позволяет избежать лишнего трафика на ограниченных каналах связи робота и ограничить удаленную поверхность атаки графа ROS.
Демонстрация: перенос SLAM на удаленный GPULink to this section
Эта демонстрация объединяет три варианта использования: телеоперацию, удаленный инференс и мониторинг. Ровер транслирует свою стереокамеру через LiveKit, а оператор, не использующий ROS, управляет им в сцене. Участник ROS с десктопным графическим процессором выполняет SLAM и плотную реконструкцию сцены. Наконец, поза робота и растущая 3D-карта отправляются в комнату LiveKit и визуализируются другим участником ROS.
Ровер представляет собой Waveshare Cobra Flex с Jetson Orin Nano и относительно дешевой USB-стереокамерой. Jetson запускает стек управления, но у него недостаточно ресурсов GPU для оценки глубины с помощью методов обучения. Вместо этого эту работу выполняет настольный ПК с NVIDIA RTX 5090. Устройство на базе граничных вычислений также не обеспечивает встроенную возможность удаленного просмотра или управления. Машины не разделяют локальную сеть или домен DDS.
Демонстрация включает четырех участников LiveKit:
- Робот. Стек cobra_flex_ros Docker Compose запущен для драйверов ровера и ROS Portal. ROS Portal публикует стереокамеру как LiveKit VideoTrack и ретранслирует входящие команды скорости в топики ROS cmd_vel.
- Оператор. Браузерное приложение, созданное с использованием LiveKit JS SDK, teleop, отображает видеопоток и отправляет команды джойстика и клавиатуры. Оно не запускает ROS.
- Хост SLAM. Стек remote_ros_slam Docker Compose на настольном компьютере запускает ROS Portal, RTAB-Map стерео SLAM и ScaRF-SLAM реконструкцию сцены.
- Визуализатор. На Mac запущены ROS Portal и Foxglove Bridge. ROS Portal ретранслирует топики позы и карты в локальный граф ROS на Mac, а Foxglove отображает их.
Как хост SLAM строит 3D-картуLink to this section
Каждый кадр камеры содержит левое и правое изображения бок о бок, поэтому оба глаза разделяют одну временную метку. ROS Portal на хосте SLAM получает VideoTrack и ретранслирует его как топик изображения ROS. Узлы SLAM читают этот топик как любую локальную камеру.
У ровера нет IMU, поэтому RTAB-Map вычисляет позы на основе стереоодометрии и замыкания петли. ScaRF-SLAM берет ключевые кадры RTAB-Map, оценивает плотную глубину на GPU и дополняет карту пакетами по мере движения ровера. Карта отстает от ровера на несколько секунд.
Конфигурация ROS Portal на хосте SLAM принимает камеру на вход и отправляет наружу только результаты:
Хост SLAM не публикует видео. Участники, которым нужен вид с камеры, подписываются на трек stereo_camera робота напрямую через LiveKit, что освобождает исходящий канал хоста SLAM для данных карты.
Полная карта ScaRF-SLAM вырастает до нескольких мегабайт на сообщение, поэтому она остается в локальном графе хоста SLAM. Вместо этого хост отправляет вокселизированные, сжатые фрагменты размером не более 32 КБ, каждый в своем собственном топике. Правило /scarf_slam/submaps/.* пересылает новые топики фрагментов по мере их появления. Foxglove сохраняет последнее сообщение в каждом топике, поэтому фрагменты в совокупности визуализируют всю карту.
Демонстрация в трех ракурсах. Вверху слева: вид телеоператора в браузере от участника, не использующего ROS. Внизу слева: вид реалтайм-видео в Foxglove у участника ROS. Справа: вид реконструкции сцены в Foxglove.
Ни один из узлов SLAM ничего не знает о LiveKit. Они читают и пишут обычные топики ROS, а конфигурация ROS Portal решает, что именно пересекает сеть. Вы можете использовать тот же паттерн для других тяжелых компонентов, таких как модели восприятия, планировщики или инференс политик.
Попробуйте ROS Portal локально с помощью DockerLink to this section
ROS Portal доступен в виде образов Docker и пакетов Debian для поддерживаемых дистрибутивов и архитектур ROS 2. Вы можете подключить его к LiveKit Cloud или к самостоятельно развернутому серверу LiveKit.
Для локальной настройки запустите сервер LiveKit с включенными большими объектами данных участников (participant data blobs):
Затем создайте токен для участника ROS Portal:
Создайте файл /tmp/all_topics.yaml для быстрой локальной проверки:
Запустите контейнер для вашего дистрибутива ROS:
Текущий релиз поддерживает ROS 2 Humble, Jazzy, Kilted и Lyrical.
Дальнейшие шаги Ссылка на этот раздел
Репозиторий содержит руководства по установке, полное справочное руководство по конфигурации, инструкции по Docker и учебное пособие по Turtlesim для соединения двух графов ROS.












