Использование ROSBridge между двумя процессами на одном компьютере - PullRequest
0 голосов
/ 15 января 2019

У меня есть узел C ++ ROS, использующий ROSBridge для отправки тем ROS в виде строк JSON через TCP WebSocket через порт 9090. На том же компьютере у меня есть программа C # Unity, которая должна получить доступ к JSON и отправить некоторые свои собственные. Если я перенесу эту программу на другой компьютер, проблем не возникнет - я смогу получить доступ к порту 9090 и посмотреть JSON. Но если он находится на том же компьютере, что и хост ROSBridge, возникает конфликт с использованием того же порта. Таким образом, два приложения не могут взаимодействовать друг с другом на одном компьютере, но могут на разных компьютерах.

Так что я могу сделать? Должны ли порты совпадать и, следовательно, всегда конфликтовать, или, может быть, я могу каким-то образом заставить Процесс А отправлять на 9090, но получать на 9091, а Процесс Б - прямо противоположное или что-то в этом роде? Есть еще варианты? По сути, я пытаюсь заставить Unity участвовать в ROS-коммуникациях, но он не имеет встроенной поддержки для этого и, следовательно, обходного пути со строками JSON ROSBridge.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Похоже, моего понимания о портах не хватало. Хост для ROSBridge настроен на использование порта 9090, так что любой, кто желает подключиться к нему, запросит порт 9090 хоста для подключения, но все равно будет использовать любой порт, который он хочет на своей собственной стороне. В обоих приложениях я могу заявить, что порт «Host» - это 9090 без конфликтов, потому что клиентское приложение все равно будет открывать другой случайный порт для собственного использования для подключения к порту хоста. Поэтому проблема, с которой я сталкиваюсь, связана не с «совместным использованием портов», поскольку это не то, что происходит. Только один хостинг на 9090.

0 голосов
/ 15 января 2019

В соответствии с http://wiki.ros.org/rosbridge_suite/Tutorials/RunningRosbridge вы можете установить порт, с которым разговаривает Росбридж, в файле .launch.

Если вы используете файл примера rosbridge_websocket.launch, вторая строка файла содержит номер порта в виде <arg name="port" default="9090" />. Вы можете изменить 9090, чтобы изменить используемый по умолчанию порт.


В соответствии с документацией roslaunch на http://wiki.ros.org/roslaunch/Commandline%20Tools вы также можете передать аргументы roslaunch в командной строке:

Файл rosbridge_websocket.launch устанавливает порт из аргумента "порт", поэтому, если вы запустите roslaunch, как это, он будет использовать порт 8080:

roslaunch rosbridge_server rosbridge_websocket.launch port:=8080


Полный файл rosbridge_websocket.launch можно посмотреть по адресу https://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/launch/rosbridge_websocket.launch

Просматривая этот файл для строки <param name="port" value="$(arg port)"/>, я знаю, что для установки порта используется аргумент "port".


Если вы разместите свои .launch файлы, я могу дать вам больше советов о том, как их редактировать, если этот ответ не ясен.

...