Команды ROS 2¶
Пример команд Linux в терминале¶
Введение¶
При работе с ROS 2 все начинается с терминала. Через него запускают ноды, смотрят список топиков, проверяют сообщения от датчиков, настраивают параметры, запускают программы и анализируют ошибки.
Терминал не заменяет редактор кода, но помогает быстро понять, что происходит внутри системы. Если квадрокоптер не получает данные с датчика, не запускается нода или не появляется нужный топик, первые проверки можно выполнить с помощью команд.
В этой статье собраны базовые команды Linux и ROS 2, которые часто нужны при разработке и отладке.
Базовые команды Linux¶
Linux-команды нужны для навигации по папкам, работы с файлами, запуска программ и управления процессами.
Навигация по папкам¶
Команда |
Что делает |
|---|---|
|
Показывает путь к текущей директории |
|
Выводит список файлов и папок |
|
Показывает скрытые файлы, права доступа и размер |
|
Переходит в папку |
|
Переходит на один уровень выше |
Работа с файлами и папками¶
Команда |
Что делает |
|---|---|
|
Создает папку |
|
Создает пустой файл |
|
Копирует файл |
|
Перемещает или переименовывает файл |
|
Удаляет файл |
Предупреждение
Команда rm удаляет файлы без перемещения в корзину. Перед удалением проверьте путь и имя файла. Особенно осторожно используйте rm -r, потому что эта команда удаляет папку вместе со всем ее содержимым.
Просмотр и поиск¶
Команда |
Что делает |
|---|---|
|
Выводит содержимое файла |
|
Открывает файл |
|
Ищет текст |
|
Ищет Python-файлы в текущей папке и ее вложенных папках |
В команде find . -name "*.py" точка . означает, что поиск начинается из текущей папки. Параметр -name задает поиск по имени файла, а шаблон "*.py" означает любое имя, которое заканчивается на .py.
Для выхода из less нажмите q.
Установка пакетов¶
Команда |
Что делает |
|---|---|
|
Обновляет список доступных пакетов |
|
Обновляет уже установленные пакеты |
|
Устанавливает пакет |
Предупреждение
sudo запускает команду с правами администратора. Перед выполнением команды с sudo убедитесь, что понимаете, какие изменения она внесет в систему.
Процессы¶
Команда |
Что делает |
|---|---|
|
Показывает запущенные процессы и оставляет строки, содержащие |
|
Показывает запущенные процессы и текущую нагрузку на систему |
|
Показывает процессы и нагрузку на систему в интерактивном виде |
|
Отправляет процессу с номером |
Основные команды ROS2¶
Команда ros2 состоит из подкоманд. Например, ros2 topic list работает с топиками, а ros2 node list — с нодами.
Пример команд ros2 node и ros2 topic¶
Справка¶
Команда |
Что делает |
|---|---|
|
Показывает общую справку по |
|
Показывает справку по работе с топиками |
|
Показывает справку по выводу сообщений из топика |
Справка полезна, когда вы забыли точный синтаксис команды или хотите посмотреть доступные параметры. Аналогично можно проверять и другие команды ROS 2, добавляя к ним --help.
Ноды¶
Команда |
Что делает |
|---|---|
|
Показывает запущенные ноды |
|
Показывает, какие топики, сервисы и параметры связаны с нодой |
Если нужной ноды нет в списке, она не обнаружена в текущей системе ROS 2. Обычно это означает, что нода не запущена или не подключена к тому же ROS 2-домену.
Топики¶
Команда |
Что делает |
|---|---|
|
Показывает доступные топики |
|
Показывает тип сообщения, количество издателей и подписчиков топика |
|
Выводит одно сообщение из топика |
|
Показывает фактическую частоту поступления сообщений из топика |
Чтобы вывести только одно поле сообщения:
Команда |
Что делает |
|---|---|
|
Выводит только поле |
Сервисы¶
Команда |
Что делает |
|---|---|
|
Показывает доступные сервисы |
|
Показывает тип сервиса |
|
Отправляет запрос сервису |
Сервисы используют для выполнения действий по запросу: клиент отправляет запрос, а сервис возвращает ответ. Например, в ROS 2 сервис можно использовать для команды сброса состояния устройства. Конкретный способ управления квадрокоптером, включая команды arm и disarm, зависит от используемого пакета и интерфейса.
Параметры¶
Команда |
Что делает |
|---|---|
|
Показывает параметры нод |
|
Читает значение параметра |
|
Устанавливает значение |
Например, с их помощью можно изменить частоту публикации, режим работы устройства или другие настройки, предусмотренные разработчиком ноды.
Список параметров нужно запрашивать у конкретной ноды. Поэтому команда ros2 param list без имени ноды в этой статье не используется.
Запуск программ¶
Команда |
Что делает |
|---|---|
|
Показывает зарегистрированные исполняемые файлы пакета |
|
Запускает один исполняемый файл |
|
Запускает launch-файл |
Файлы *.launch.py запускаются командой ros2 launch, а не ros2 run. Если пакет или исполняемый файл не найден, сначала проверьте, что окружение подключено через source, а затем посмотрите доступные пакеты и исполняемые файлы:
Команда |
Что делает |
|---|---|
|
Ищет пакеты, в названии которых есть |
|
Показывает исполняемые файлы пакета |
Для запуска одной ноды удобно использовать ros2 run. Для реального проекта чаcсто используют ros2 launch, потому что система обычно состоит из нескольких нод, которые нужно запускать и настраивать одновременно.
Запись данных¶
Команда |
Что делает |
|---|---|
|
Записывает сообщения из топика |
|
Записывает сообщения из всех доступных топиков |
|
Воспроизводит записанные данные из указанного bag-файла |
Запись bag-файлов полезна, когда нужно сохранить данные с датчиков и потом воспроизвести их без подключенного датчика или настоящего робота.
Практический сценарий отладки¶
Ниже приведен пример проверки, когда вы ожидаете данные в топике /scan.
Проверьте, что нужная нода запущена:
Команда
Что делает
ros2 node listПоказывает запущенные ноды
Найдите нужный топик:
Команда
Что делает
ros2 topic list | grep scanИщет топики, в названии которых есть
scanПосмотрите информацию о топике:
Команда
Что делает
ros2 topic info /scanПоказывает тип сообщения и количество издателей и подписчиков топика
/scanВыведите одно сообщение:
Команда
Что делает
ros2 topic echo --once /scanВыводит одно сообщение из топика
/scanи завершает командуПроверьте частоту сообщений:
Команда
Что делает
ros2 topic hz /scanПоказывает фактическую частоту поступления сообщений из
/scan
Если топика нет в списке, сначала проверьте, запущена ли нужная нода. Если топик есть, но сообщений нет, проверьте подключение устройства, параметры драйвера и сообщения об ошибках в терминале, где запускалась нода.