一、前言
在寫這篇文章之前,我花費了將近一周時間研究,終于發現了一個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中運行




轉載請註明出處,本文鏈接:https://www.uj5u.com/net/230102.html
標籤:.NET Core
上一篇:在小公司的優勢?
下一篇:ASP.NET Core 3.X后出現 [The JSON value could not be converted to System.Nullable] 錯誤
