一、前言
在寫這篇文章之前,我花費了將近一周時間研究,終於發現了一個ROS的庫,這是由小日子過得不錯的日本人開發的
Github地址如下:
https://github.com/zoetrope/rossharp
這是在.NET Framework 4.0開發的,其實這並不是我想要的,我想在Linux平台下開發,並且發布在Linux平台下。
正好這段時間.NET5出來了,我就想着把這個庫改成.NET Core或者.NET5
二、原理
花了兩天時間,研究了原理,簡單的說一下原理
下面這張圖描述了話題的通信機制

從上圖中可以看到,通信方式使用的是XmlRPC 以及 TCP
XmlRPC API參照下面網址
https://wiki.ros.org/ROS/Master_Slave_APIs
里面有三個API MasterAPI、ParameterServerAPI、以及SlaveAPI
MasterAPI是節點管理器的接口,主要用於向節點管理器注冊或者取消注冊各種通信(發布者、訂閱者、服務)
ParameterServerAPI是參數服務器,主要用於ROS中參數的存取
SlaveAPI是各個節點的回調服務,如果自己寫個節點的話,需要創建這個服務供其他節點訪問
1.話題訂閱
1.1 話題訂閱需要通過xmlRPC協議向ROS節點管理器注冊Subscriber,然后開啟回調服務
1.2 ROS Master會返回所有的發布該話題的 URL
1.3 根據URL,創建Slave客戶端,向那些節點請求話題
1.4 然后會返回TCP通信的主機與通信端口號
1.5 根據通信端口號與主機建立TCP連接,然后向TCP服務端發送請求頭
1.6 TCP服務端就會將發布的消息返回到客戶端
2.消息發布就反推,需要開啟TCP服務端,Slave服務端需要在RequestTopic中返回該端口號
3.TCP通信的消息頭參考http://wiki.ros.org/ROS/TCPROS
三、使用
RosSharp庫我已放到gitee上
https://gitee.com/zjwno1/ros-sharp-net5
1.使用VS2019 最新版,支持.NET5
2.Ubuntu上安裝.NET5環境,查看我上篇博客
3.編寫測試代碼
4.運行測試
4.1 開啟roscore
4.2 發布話題
rostopic pub -r 1 /chatter std_msgs/String "data: 'AAABBBCCC'"
4.3 輸出消息
rostopic echo /chatter
5.運行程序(VS要用管理員方式打開,否則會SlaveServer監聽失敗)
成功顯示消息
6.再開一個VS 運行Publisher
成功發布話題
反過來再看看終端,也能顯示消息
7.打開rqt_graph,查看一下節點關系
rqt_graph
OK,成功
四、發布到Ubuntu中使用
1.修改代碼中的HostName為localhost ,因為再ubuntu中,ROS節點管理器,跟我們寫的都在同一台主機,所以可以用localhost
2.發布完上傳到ubuntu中
在終端授權為可執行
chmod 777 RosPublisher chmod 777 RosSubscriber
3.在ubuntu中運行



















