9 отличных инструментов с открытым исходным кодом для управления вашими розбагами
Выбор, сделанный инженерами Evocargo

Если вы только начинаете работать с ROS или уже являетесь опытным разработчиком, вы можете почувствовать, что определенные вещи и операции можно выполнять проще, быстрее или удобнее. Вы можете даже подумать о создании какого-нибудь инструмента для ROS прямо сейчас, например, такого, который бы отображал метаданные ваших сумок в хорошем виде. Прежде чем сделать это, ознакомьтесь с нашей подборкой пакетов ROS с открытым исходным кодом — возможно, вы найдете готовые решения, которые сэкономят вам массу времени и усилий.
В этом посте мы сосредоточимся на пакетах для сумок ROS, которые помогут вам визуализировать и редактировать данные сумок. С некоторыми пакетами мы пойдем дальше и покажем, как вы можете обновить их для ваших конкретных потребностей продукта.
Автономные транспортные средства генерируют огромные объемы данных, необходимых для восприятия, локализации, предотвращения столкновений, самодиагностики и других важных задач в автономном автомобиле. Такие данные являются очень ценным активом, поскольку они используются для обучения нейронных сетей и расследования инцидентов. Например, Национальная администрация безопасности дорожного движения США обязала некоторых производителей и операторов сообщать об определенных авариях с участием транспортных средств, оснащенных усовершенствованными системами помощи водителю (ADAS) уровня 2–5 SAE , чтобы исследовать безопасность автономных систем и обобщать результаты в отчете. отчет о сбое . Это может стать обычной практикой и в других странах.
Оценки получаемых данных могут различаться для разных транспортных средств в зависимости от бортового оборудования и сценариев применения. С несколькими камерами высокого разрешения, лидарами, радарами и другими датчиками на борту один автономный автомобиль может генерировать до 15 ТБ данных за несколько часов в пути. Это означает, что роботакси, совершающие пассажирские перевозки без остановок, якобы могли делать 450 ТБ в день (подробнее см. здесь и здесь ).
Если вы используете ROS, все данные записываются в файлы пакетов, которые записываются и сохраняются, чтобы впоследствии вы могли их индексировать, аннотировать и воспроизводить.

Таким образом, вы получаете внушительный список файлов, по которым вам нужно перемещаться и анализировать. Чтобы справиться с этим, вы можете использовать бесплатные пакеты ROS, которые мы выбрали для описания в этой статье. Некоторые из них входят в индекс ROS , некоторые нет. А некоторые из них предназначены только для ROS 1 — об этом мы сделаем пометки.
Просмотр сумок в приятном интерфейсе
Как вы можете видеть на рис. 1 , пакеты в основном представляют собой файлы в каталоге. Для работы с ними необходимо использовать интерфейс командной строки, и вы мало что можете сделать — по умолчанию ROS позволяет воспроизводить файл сумки, просматривать информацию о сумке, ее размере и продолжительности, просматривать темы, типы сообщений и их количество. Чем больше данных вы накапливаете, тем сложнее найти то, что вам нужно.
Инструмент Bag Database от Юго-западного научно-исследовательского института предлагает удобный веб-интерфейс для мониторинга вашего каталога на наличие файлов пакетов ROS. Он позволяет просматривать множество полезных метаданных, таких как дата записи, маршрут, соответствующее изображение и многое другое.
Ваше взаимодействие с сумками становится намного проще и эффективнее!

Кроме того, Bag Database позволяет добавлять различные сценарии постобработки, которые затем можно запускать в изолированных контейнерах Docker. Например, в Evocargo мы написали bag_indexer
скрипт, который отображает сводную информацию о содержимом сумки в одном изображении PNG.

Бросив взгляд, можно понять следующее:
- Качество дорожек, освещение и погодные условия в миниатюрах
- Эталонный маршрут и отклонения от него на основе одометрии, GNSS и локализации
- Скорость в любое время и в любом месте
- Режим управления транспортным средством, или сколько времени транспортное средство должно было управляться вручную
- Расстояние и продолжительность поездки
- Название сумки и другое
Параметры снимков, такие как положение и цвета информационных блоков, а также количество миниатюр изображений с камер, задаются в конфигурационном файле.
В Bag Database скрипт bag_indexer
выглядит следующим образом:

Подробнее и примеры скриптов смотрите в документации Bag Database .
Добавление метаданных
Метаданные сумки содержат сведения об условиях записи сумки, такие как место записи, версия ОС и программного обеспечения, подключенные устройства, погодные условия, задача. Обычно вы храните такие данные в отдельном файле. Однако некоторые визуализаторы мешков, например база данных мешков , требуют интеграции метаданных в файлы мешков.
Чтобы записать метаданные прямо в пакетные файлы ROS1, вы можете использовать пакет rosbag_metadata . По умолчанию он сохраняет ваши комментарии вместе с системными данными, такими как версия пакета ROS, информация о репозиториях git и хэшах git-commit, переменные среды, конфигурация сети. Все эти данные добавляются в виде текста в файле YAML в тему /metadata.
Вы можете использовать rosbag_metadata как есть или использовать его для удовлетворения особых потребностей вашего продукта. Например, для службы логистики Evocargo нам нужна была более конкретная информация, такая как модель и номер автомобиля, необработанная информация о калибровке и карты. Поэтому мы создали собственный пакет на основе rosbag_metadata , более адаптированный для управления автономными транспортными средствами. И мы можем легко добавить больше полей, когда это необходимо.

Воспроизведение и визуализация
Одним из вариантов ROS 1 будет Webviz , веб-инструмент для воспроизведения и визуализации сумок, разработанный инженерами Cruise с открытым исходным кодом. Это позволяет вам перетаскивать файлы пакетов ROS, чтобы сразу получить визуальное представление о данных. Так просто, как, что! Кроме того, это веб-приложение, поэтому вам не нужно развертывать какую-либо специальную среду.

Его интерфейс настраивается, что позволяет добавлять панели и просматривать более релевантные данные в одном месте. Более того, вы можете интегрировать его с другими инструментами — например, вы можете открыть Webviz прямо из окна Bag Database . (Эта установка описана здесь ).

Еще один инструмент, который я хотел бы здесь упомянуть, это Foxglove Studio . Он имеет ту же цель визуализации и анализа в робототехнике, но идет дальше, поддерживая как ROS 1, так и ROS 2 и предлагая коммерческую поддержку. Он начинался как форк проекта Cruise's Webviz и в настоящее время активно развивается и расширяет свой набор функций. Он доступен как в виде кроссплатформенного веб-приложения, так и в виде настольного приложения, которое открывает доступ к дополнительным функциям и расширениям настраиваемых панелей на устройствах Linux, macOS и Windows.

Вы можете прочитать больше о разработке и обновлениях Foxglove Studio в их блоге на Medium или посетить их веб-сайт .
Редактирование сумок
Если вы хотите редактировать файлы сумок в ROS 1, воспользуйтесь rosbag_editor от Davide Faconti . Этот инструмент не позволяет применять пакетные изменения к файлам сумок, но может быть полезен для редактирования определенных сумок, например, для демонстрации. Его простой пользовательский интерфейс позволяет вручную переименовывать и удалять темы, изменять продолжительность пакета, обрезая начало или конец файла, изменять тип сжатия, чтобы уменьшить размер файла, и удалять преобразования.
В Evocargo нам понадобился инструмент, который позволял бы пакетно редактировать зарегистрированные сумки в ROS1, поэтому наш инженер Владимир Бурмистров создал пакет ros_bag_migration . Он позволяет изменять формат сообщений в записанных пакетах — не только переименовывать и удалять сообщения, но и разделять сообщение на две части и применять определенные правила к определенным версиям сообщений. Этот пакет отлично подходит для ситуаций, когда вы решили записывать новые пакеты с обновленным набором определений сообщений и хотите соответствующим образом изменить старые пакеты для совместимости.
Построение графиков
Далее мы поговорим о PlotJuggler , невероятном конструкторе графиков (еще один пакет от Davide Faconti ). PlotJuggler позволяет анализировать любые данные, поступающие внутри вашей системы или робота. Отладка становится намного проще благодаря его функциям:
- Строить графики для данных в топиках ROS можно либо в реальном времени, либо загрузив один или несколько .bag-файлов в PlotJuggler .
- Добавление нескольких графиков данных и управление ими очень удобно. Например, вы можете создать вкладку XY, взяв некоторые 2D-данные и начертив их для визуализации 2D-позиций для каждой метки времени.
- Существует множество встроенных возможностей преобразования данных для графиков, например, вы можете удалить смещение для данных, масштабировать их, интегрировать, удалить выбросы и т. д. Вы даже можете создавать комбинации преобразований, что очень удобно для сравнения данных из разных источников.
- Если вы не нашли подходящей функции преобразования, вы можете создать свою собственную. Например, вы можете написать функцию для извлечения и визуализации угла рыскания из кватернионов.
- Последний, но тем не менее важный! Убойная функция: когда вы имеете дело с сумками, вы можете включить «ROS Topic Re-Publisher». Это означает, что вы можете перетащить ползунок времени на любой момент, который вы хотите, и PlotJuggler будет публиковать данные из всех тем, соответствующих выбранной метке времени. Это очень полезно, когда вы хотите просмотреть изображения с камер в определенный момент, проверить диагностические сообщения или даже визуализировать каждую часть данных в каком-либо другом инструменте визуализации, таком как RVIZ.

Доставка сообщений
В целях тестирования и отладки важно, чтобы результаты ваших экспериментов воспроизводились стабильно. Например, когда вы тестируете алгоритм локализации на сумке, содержащей определенные сенсорные данные, вы наверняка ожидаете один и тот же результат каждый раз, когда запускаете этот алгоритм. Однако логика публикации-подписки в ROS не может гарантировать 100% доставку сообщений, и вполне вероятно, что ваши узлы не будут обрабатывать все сообщения в пакете в одном и том же порядке.
Пакет batch_ros для ROS 1 позволяет указать темы в пакетном файле, которые имеют решающее значение для вашей задачи. batch_ros будет ждать вызова службы синхронизации после публикации каждого сообщения из этих тем. Это гарантирует, что сообщения из файла пакета будут опубликованы после того, как ваш узел обработает их одно за другим в определенном порядке.

Таким образом , batch_ros обеспечивает детерминированную и воспроизводимую обработку мешков.
Статус записи
Во время записи сумки в конфигурации ROS 1 по умолчанию отображается только сообщение «Запись…». Если что-то пойдет не так, вы узнаете об этом только тогда, когда задание выполнено и провалено. Чтобы сделать процесс записи более информативным, попробуйте интерфейс терминала rosbag_fancy для ROS 1. Он отображает полезные данные в режиме реального времени, такие как записываемые темы, использование памяти, размер файла пакета и многое другое — все в очень простой таблице.

Вы также можете увидеть количество пропущенных сообщений ( Drops ), что приводит нас к следующей проблеме и возможному решению.
Спасибо, что дочитали до этого места — вам должно нравиться улучшать работу с ROS так же сильно, как и нам! Подведем итоги. В этом посте мы рассмотрели следующие пакеты ROS: Bag Database , rosbag_metadata , Webviz , Foxglove Studio , rosbag_editor , ros_bag_migration , PlotJuggler , rosbag_fancy и batch_ros .
Если вы найдете этот выбор пакетов полезным, дайте нам знать, аплодируя и комментируя. Мы с радостью поделимся такими обзорами в нашем блоге, например, есть заслуживающие внимания пакеты ROS для тестирования, моделирования, документирования и других целей.