Сообщения, не полученные на главном компьютере, когда говорящий запускается из автозагрузки - PullRequest
0 голосов
/ 03 июля 2018

Я работаю с ROS. У меня есть узел обнаружения, выступающий в качестве говорящего (det_talker.py) на одном компьютере с Ubuntu 16.04, а другой узел действует в качестве слушателя (det_listener.py). Я намерен запустить прослушиватель на главном компьютере (машине с Ubuntu 14.04), чтобы получать сообщения, отправляемые говорящим. Когда я запускаю говорящее устройство из терминала, за которым следует слушатель на ведущем устройстве, я вижу сообщения, принимаемые на ведущем устройстве.

Однако, когда я запускаю тот же узел говорящего, помещая необходимые команды для получения файла setup.bash, а также настраивая IP-адрес мастера в сценарии bash, и запускаю этот сценарий из запуска (добавив сценарий в Автозагрузка приложений ), я не вижу никаких сообщений на мастере.

Конфигурация на машине с узлом говорящего:

Конфигурация на машине, которая действует как мастер:

Я попытался изменить ROS_IP на master на ubuntu16_ip, но результат остался прежним. Сценарий, который я использую для запуска узла обнаружения при запуске системы, выглядит следующим образом:

#!/bin/bash
cd /home/rahul
export ROS_MASTER_URI = http://ubuntu14_ip:11311
source ./catkin_ws/devel/setup.bash
cd catkin_ws
rosrun detection_node det_talker.py

Я попытался запустить этот bash-скрипт из терминала; он работает успешно, и я вижу сообщения на master, когда запускаю узел det_listener.py. Только когда я запускаю его из автозагрузки, нет никаких сообщений (однако узел работает).

Более того, я могу видеть на мастере, что узел работает, потому что он показывает узел, когда я запускаю команды rosnode list и rostopic list. Я должен также упомянуть, что Ubuntu 16 имеет Kinetic, а Ubuntu 14 работает под управлением версии ROS для Indigo. Причина, по которой я думаю, что разные версии не должны создавать проблемы, потому что я действительно могу получать сообщения при выполнении узла из терминала.

Мой вопрос заключается в том, как получить сообщения, которые будут получены на главном компьютере, при запуске говорящего из автозагрузки. Спасибо.

Примечание. Это перекрестный пост того же вопроса, который я задавал в ответах ROS, здесь . Я размещаю его на SO, так как я еще не получил никакого ответа.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

С помощью комментария Беньямина Джафари на мой вопрос мне удалось найти решение:

Я добавил IP и имя мастера (ubuntu14) в файл / etc / hosts на узле (ubuntu16) и наоборот. Когда я перезапустил обе машины и снова запустил узел из автозагрузки, я могу получать сообщения на главном компьютере.

Примечание: если кто-то (например, я) пытается выполнить аналогичную задачу с запуском нескольких узлов и получением всех сообщений узлов на главном компьютере, обязательно добавьте IP-адреса и имена всех узлов в / etc / hosts мастера И что все узлы имеют разные имена, поскольку мастер не может разрешить между узлами с одинаковыми именами.

0 голосов
/ 03 июля 2018

Проблема в том, что ваш терминал не находится в той же оболочке (сеансе), что используется для запуска, и поэтому переменные не установлены для вас. Вы должны записать эти значения в ~ / .bashrc пользователя, которого вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...