繁体   English   中英

在同一台计算机上的两个进程之间使用ROSBridge

[英]Using ROSBridge Between Two Processes on the Same Computer

我有一个C ++ ROS节点,使用ROSBridge通过9090端口通过TCP WebSocket将ROS Topics作为JSON字符串发送。在同一台计算机上,我有一个C#Unity程序,需要访问JSON并发送它自己的一些程序。 如果我将此程序放在另一台计算机上没有问题,那么我可以访问端口9090并查看JSON。 但是,如果它与ROSBridge主机位于同一台计算机上,则使用同一端口会有冲突。 因此,这两个应用程序不能在同一台PC上相互通信,但是可以在不同的PC上进行通信。

那我该怎么办? 端口必须匹配并且总是冲突吗,或者我可以以某种方式使进程A在9090上发送但在9091与进程B上相反? 还有其他选择吗? 本质上,我正在尝试让Unity参与ROS通信,但它对此没有本地支持,因此没有使用ROSBridge JSON字符串的解决方法。

根据http://wiki.ros.org/rosbridge_suite/Tutorials/RunningRosbridge,您可以在.launch文件中设置Rosbridge所使用的端口。

如果您使用的是示例rosbridge_websocket.launch文件,则文件的第二行包含<arg name="port" default="9090" />形式的端口号。 您可以更改9090来更改其使用的默认端口。


根据http://wiki.ros.org/roslaunch/Commandline%20Tools上的roslaunch文档,您还可以在命令行roslaunch参数传递给roslaunch

rosbridge_websocket.launch文件通过参数“ port”设置端口,因此,如果您这样运行roslaunch,它将使用端口8080:

roslaunch rosbridge_server rosbridge_websocket.launch port:=8080


您可以在https://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/launch/rosbridge_websocket.launch上看到完整的rosbridge_websocket.launch文件。

在该文件中查找行<param name="port" value="$(arg port)"/>就是我知道它使用“ port”参数设置端口的方式。


如果您发布.launch文件,如果此答案不清楚,我可以为您提供有关如何编辑它们的更多建议。

听起来我缺乏对端口的了解。 ROSBridge的主机已设置为使用端口9090,因此,希望连接到该主机的任何人都将请求主机的端口9090进行连接,但仍将使用其自己需要的任何端口。 在这两个应用程序中,我都可以声明“主机”端口为9090,而不会发生冲突,因为客户端应用程序仍会打开一个随机的其他端口供自己连接到主机端口。 因此,我遇到的麻烦不是“端口共享”,而是因为这不是正在发生的事情。 9090上只有一台主机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM