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

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

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


凤凰求蛊
浏览 257回答 2
2回答

森栏

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

慕沐林林

根据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)"/>是我如何知道它使用“端口”参数来设置端口。如果您发布.launch文件,如果此答案不清楚,我可以就如何编辑它们提供更多建议。
打开App,查看更多内容
随时随地看视频慕课网APP