技術分享 | 初學ROS這個重要概念,你必須要瞭解

前言

相信很多初學ROS的小夥伴,對於ROS消息這個概念,理解不是很透徹,它是怎麼定義的,然後又是怎麼使用的。本文將會深度講解ROS消息這個概念,並且告訴大家如何使用ROS自定義消息 file

一、 ROS消息概念 1.ROS消息概念 ROS消息,作爲ROS通信的基礎之一。其本質就是數據類型,就和C++中的int,double是一樣的。只不過,在ROS中,把ROS消息用面向對象編程的思想來表現,在使用的過程中,被當作對象,定義爲一個類。(或者說結構體)。同時其文件後綴爲xxx.msg

2.ROS消息例子 如果我們使用 rosmsg show std_msgs/String 這個命令去查看ROS消息,它會返回string data 。由此我們知道了ROS消息的格式爲:數據類型 變量名稱 這個和 int x沒有什麼區別。這是一個很簡單的消息。如果我們輸入這個命令 rosmsg show nav_msgs/Odometry 它的返回如下: file 這個消息,看起來很複雜,其實它是嵌套了多個消息。如果我們去看它的源文件,只有

短短的四行,這裏只是把它全部展開了。源文件內容如下。

std_msgs/Header header string child_frame_id geometry_msgs/PoseWithCovariance pose geometry_msgs/TwistWithCovariance twist

從源文件中,我們可以知道 pose的類型爲geometry_msgs/PoseWithCovariance ,那麼這個 geometry_msgs/PoseWithCovariance 是什麼類型呢?我們可以通過 rosmsg show xxx這個命令去抽絲剝繭,這裏由於篇幅原因,就不演示了。當我們看到最後的時候,就會發現這個pose,就是三個 float64 類型的數據。這也就是爲什麼在編寫代碼或者在讀源碼的時候,會有下面類似的語句。

nav_msgs::Odometry car_odom; car_odom.pose.pose.position.x = 1.0; //只是舉例說明

二、 ROS自定義消息使用

前面說了,消息(無論是系統自帶還是自定義),其本質是數據類型,格式爲 數據類型 變量名稱。這裏,新建一個文件 Person.msg,其內容爲

string name #姓名 uint16 age #年齡 float64 height #身高 uint16 tall=188 #身高的另一種表示

有了這樣一個自定義消息文件,我們應該如何去使用呢?在ROS編程中,對於消息,一般有兩種用法。

第一種的格式爲 功能包名稱::消息文件名稱::變量名稱,

第二種的格式爲 功能包名稱::消息文件名稱 對象(常用)

對於第一種用法,可以直接使用消息文件中的變量。由於在文件中給tall賦予了默認值188,可以直接使用my_tall = ros_beginner::Person::tall。這個語句表示把自定義消息中的tall的默認值賦值給變量my_tall。

同時,第一種用法還可以用於判斷和初始化(這裏不貼具體代碼)。可以這樣定義MODE.msg文件

uint8 Mode uint8 Stop=0 uint8 Start=1 uint8 Turn_left=2 uint8 Turn_right=3 uint8 Back=4

在代碼中就可以這樣去使用

ros_beginner::MODE Current_Cmd; //創建消息對象 /你的代碼/ //初始化爲stop,stop=0 Current_Cmd.Mode = ros_beginner::MODE::Stop /你的代碼/ switch (Current_Cmd.Mode) { case ros_beginner::MODE::Start //case 1 /.../ case ros_beginner::MODE::Back //case 4 /.../

對於第二種用法,是ROS開發中比較常用的用法。通過創建自定義消息對象,就可以使用msg文件中的所有變量,使用方法同類。例如

ros_beginner::Person person; //創建對象 person.height = 150; person.name = Tom; person.age = 15;

三、 具體使用的例子

https://gitee.com/loren98/ros_ws.git 將代碼從碼雲上下載到你的工作空間,或者home目錄。然後編譯運行即可。代碼中均有非常詳細的代碼註解

**總結 ** ROS消息本質就是數據類型,在使用的時候被當作對象。最後附上ROS消息數據類型和C++以及python數據類型的對比(圖片來自:《ROS機器人編程--從基本概念到機器人應用程序編程實戰(表允哲)》) file

  • End - 技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公衆號,我們將持續發佈機器人行業最有價值的信息和技術。 阿木實驗室致力於前沿IT科技的教育和智能裝備,讓機器人研發更高效!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章