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

Using ROSBridge Between Two Processes on the Same Computer

我有一个 C++ ROS 节点使用 ROSBridge 通过端口 9090 通过 TCP WebSocket 将 ROS 主题作为 JSON 字符串发送。在同一台计算机上,我有一个 C# Unity 程序需要访问 JSON 并发送一些它自己的。如果我将此程序放在另一台计算机上,则没有问题——我可以访问端口 9090 并看到 JSON。但是如果和ROSBridge Host在同一台电脑上,那么使用同一个端口就会有冲突。因此,这两个应用程序无法在同一台 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%20Toolsroslaunch 文档,您还可以在命令行上将参数传递给 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" 参数来设置端口。


如果你 post 你的 .launch 文件,如果这个答案不清楚,我可以给你更多关于如何编辑它们的建议。

看来我对端口的理解还不够。 ROSBridge 的主机被设置为使用端口 9090,这样任何希望连接到它的人都会请求主机的端口 9090 进行连接,但仍然会使用它自己想要的任何端口。在这两个应用程序中,我可以声明 "Host" 端口是 9090 而不会发生冲突,因为客户端应用程序仍会打开一个随机的其他端口供自己使用以连接到主机端口。因此,我遇到的麻烦不是 "port sharing",因为那不是正在发生的事情。只有一个在 9090 上托管。