C#開發ROS的話題發布與訂閱


一、前言

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

image

里面有三個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.編寫測試代碼

image

image

image

 

4.運行測試

4.1 開啟roscore

image

4.2 發布話題

rostopic pub -r 1 /chatter std_msgs/String "data: 'AAABBBCCC'"

image

 

4.3 輸出消息

rostopic echo /chatter

image

 

5.運行程序(VS要用管理員方式打開,否則會SlaveServer監聽失敗)

image

成功顯示消息

 

 

6.再開一個VS    運行Publisher

  image

     成功發布話題

 

反過來再看看終端,也能顯示消息

image

 

7.打開rqt_graph,查看一下節點關系

rqt_graph

image

OK,成功

 

四、發布到Ubuntu中使用

  1.修改代碼中的HostName為localhost ,因為再ubuntu中,ROS節點管理器,跟我們寫的都在同一台主機,所以可以用localhost

image

 

image

image

 

2.發布完上傳到ubuntu中

image

在終端授權為可執行

chmod 777 RosPublisher
chmod 777 RosSubscriber

3.在ubuntu中運行

image

 

 

image

image

 

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM