引用自定義消息
開發(fā)過程中梨与,有的時候會碰到傳遞的數(shù)據(jù)結(jié)構(gòu)復(fù)雜鸣驱,會有嵌套消息的存在吏口,例如現(xiàn)在需要創(chuàng)建一個Team.msg
,基本結(jié)構(gòu)如下:
名稱 | 類型 | 描述 |
---|---|---|
name | string |
團(tuán)隊名稱 |
leader | <badge type="error" text="TODO"/> | 團(tuán)隊領(lǐng)導(dǎo) |
在這個設(shè)計過程中雕擂,我們希望leader
這個屬性是一個復(fù)雜類型啡邑,對應(yīng)著我們之前自定義的Student.msg
。那么當(dāng)前的Team.msg
該如何編寫井赌。
首先谤逼,我們在??msg
目錄下新建Team.msg
,Team.msg
的內(nèi)容如下:
string name
Student leader
:::tip
Team.msg
要去引用Student.msg
仇穗,Student
就是具體類型流部,通過Student leader
來去聲明。
:::
接著纹坐,我們要到CMakeLists.txt
文件中枝冀,修改add_message_files
,修改如下:
add_message_files(
FILES
Student.msg
Team.msg
)
:::tip
其實我們就是添加了Team.msg
。
值得注意的是宾茂,Team.msg
不能放到Student.msg
前面瓷马,原因是拴还,Team.msg
引用了Student.msg
跨晴,如果調(diào)換位置,編譯器會先去編譯Team.msg
片林,這個時候編譯器是找不到Student.msg
端盆,因此會出現(xiàn)錯誤。
被引用對象要放到引用者的前面费封。
:::
引用標(biāo)準(zhǔn)消息庫
rosmsg
是ros的標(biāo)準(zhǔn)消息庫焕妙,開發(fā)中,有的時候我們需要將標(biāo)準(zhǔn)消息封裝到自己的消息中去的弓摘。例如Team.msg
中需要加入一個數(shù)據(jù)進(jìn)行描述Team情況:
名稱 | 類型 | 描述 |
---|---|---|
name | string |
團(tuán)隊名稱 |
leader | Student |
團(tuán)隊領(lǐng)導(dǎo) |
intro | <badge type="error" text="TODO"/> | 團(tuán)隊介紹 |
在此處焚鹊,我們希望intro
的類型是std_msgs/String
,我們對Team.msg
實際編碼為:
string name
Student leader
std_msgs/String intro
:::tip
Team.msg
要去使用std_msgs/String
韧献,std_msgs/String
就是具體類型末患,通過std_msgs/String intro
來去聲明。
:::
引用其他三方消息
作為自定義的消息锤窑,有可能還需要使用三方的消息庫璧针,我們在此以geometry_msgs
這個三方庫作為案例進(jìn)行說明。
名稱 | 類型 | 描述 |
---|---|---|
name | string |
團(tuán)隊名稱 |
leader | Student |
團(tuán)隊領(lǐng)導(dǎo) |
intro | std_msgs/String |
團(tuán)隊介紹 |
location | <badge type="error" text="TODO"/> | 位置 |
在此處渊啰,我們希望location
的類型是geometry_msgs/Twist
探橱,我們對Team.msg
實際編碼為:
string name
Student leader
std_msgs/String intro
geometry_msgs/Twist location
引入三方庫過程中,我們需要對package.xml
文件進(jìn)行配置添加:
<build_depend>geometry_msgs</build_depend>
<build_export_depend>geometry_msgs</build_export_depend>
<exec_depend>geometry_msgs</exec_depend>
我們還需要對CMakeLists.txt
進(jìn)行修改绘证,在find_package
中添加如下:
find_package(catkin REQUIRED COMPONENTS
roscpp
rosmsg
rospy
message_generation
geometry_msgs
)
:::tip
添加geometry_msgs
是方便編譯器在查找包時隧膏,能找到這個庫。
:::
在generate_messages
中添加geometry_msgs
如下:
generate_messages(
DEPENDENCIES
std_msgs
geometry_msgs
)
:::tip
此處是為了生成定義好的頭文件而去做配置
:::
消息類型為數(shù)組
作為自定義的消息嚷那,有的時候我們需要去定義數(shù)組集合來去幫我們存儲數(shù)據(jù)胞枕,例如我們要加入members
來描述成員:
名稱 | 類型 | 描述 |
---|---|---|
name | string |
團(tuán)隊名稱 |
leader | Student |
團(tuán)隊領(lǐng)導(dǎo) |
intro | std_msgs/String |
團(tuán)隊介紹 |
location | geometry_msgs/Twist |
位置 |
members | <badge type="error" text="TODO"/> | 團(tuán)隊成員 |
在此處,我們希望members
的類型是Student
的數(shù)組集合類型车酣,我們對Team.msg
實際編碼為:
string name
Student leader
std_msgs/String intro
geometry_msgs/Twist location
Student[] members
我們采用[]
表示數(shù)組曲稼,對應(yīng)中C++中的Vector
類型,對應(yīng)Python
中的列表list