簡體   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