ROS и работа по сети
Одна из основных возможностей ROS, это прозрачная работа по сети. Говоря простым языком, это означает, что с точки зрения программы абсолютно не важно, работает ли издатель на одном компьютере или на разных (в рамках одной сети).
Для того чтобы система с несколькими устройствами заработала, важно чтобы выполнялось несколько условий.
1. Необходимо указать где запущен главный процесс roscore
В рамках одной системы, должна существовать только одна нода roscore. Любые устройства должны знать адрес этой ноды. По умолчанию это значение localhost, поэтому при запуске процессов на одном компьютере, конфигурировать ничего не надо.
Но для компьютера, на котором не запущен roscore, мы должны установить значение переменной окружения ROS_MASTER_URI сделать это можно используя команду export
export ROS_MASTER_URI=http://192.168.0.145:11311
Где 192.168.0.145 - это IP-адрес вашего робота.
Еще один экспорт необходимо сделать для того, чтобы робот мог отсылать данные на ваш ПК.
export ROS_HOSTNAME=192.168.0.111
Где 192.168.0.111 - это IP-адрес вашего ПК.
Обе команды export необходимо выполнить в терминале на вашем ПК, указав "ваши" IP-адреса.
Если все правильно, то при выполнении любой команды ROS на вашем локальном компьютере вы будете обращаться к RaspberryPI робота. Например, команда rostopic list выведет список топиков робота.
Команды export необходимо выполнять при запуске каждого нового терминала. Удобно прописать ROS_MASTER_URI и ROS_HOSTNAMEв файле .bashrc, для того чтобы каждый раз не делать export. Для этого необходимо открыть, с помощью текстового редактора, файл ~/.bashrc и в самый конец добавить строчки:
export ROS_MASTER_URI=http://192.168.0.145:11311
export ROS_HOSTNAME=192.168.0.111
2. Настроить файлы /etc/hosts
Согласно рекомендации ROS по настройке сети необходимо настроить "resolve" имен вашего робота и компьютера. Для этого необходимо в файлах /etc/hosts как на роботе, так и на компьютере указать имена робота/компьютера и его IP-адрес. Без этой настройки могут не работать или некорректно работать различные пакеты, например камеры или лидара и т.д.
Ваш файл /etc/hosts на PC должен содержать имя и IP-адрес вашего робота, например:
127.0.1.1 roslaptop1
192.168.0.250 turtlebro1
Файл /etc/hosts для RaspberryPi должен содержать имя и IP-адрес вашего компьютера:
127.0.1.1 turtlebro1
192.168.0.100 roslaptop