十堰網(wǎng)站seo方法百度seo關(guān)鍵詞優(yōu)化公司
自定義消息類型的定義
Person.msg文件的定義(數(shù)據(jù)接口文件的定義)
創(chuàng)建msg文件
首先在功能包下新建msg文件夾,接著在該文件夾下創(chuàng)建文件。
定義msg文件內(nèi)容
一個(gè)消息最重要的就是數(shù)據(jù)結(jié)構(gòu)類型。這就需要引入一個(gè)msg文件,用于定義一些宏,換句話說,就是定義字符串和數(shù)據(jù)類型。
一個(gè)人有名字,年齡和性別,名字是以字符串的方式輸入的,性別的話男女是可以用1和2或者不知道的0來表示,同樣年紀(jì)也是數(shù)字,所以年紀(jì)和性別都用unit8來定義。
package.xml文件的編譯
還需要在文件中增加依賴的功能包,這就跟python庫的引用一樣。這一部分分兩步,一個(gè)是build_depend一個(gè)是exec_depent。
這是我們通過終端建立功能包的時(shí)候輸入的一些依賴,所以如果需要補(bǔ)充依賴的話,除了文件CMakeList.txt文件需要補(bǔ)充package.xml中也需要補(bǔ)齊。
我們自己做的功能包需要的依賴就安排這上面這部分代碼的后面即可。
build_depend
build_depend是編譯依賴,message_generation是一個(gè)消息的編譯依賴。
exec_depent?
exec_depent是執(zhí)行依賴,message_runtime是一個(gè)消息的動(dòng)態(tài)執(zhí)行依賴。
CMakeList.txt文件的修改
添加依賴包
看來我猜的不錯(cuò),都是在這里添加文件的依賴的。
?鏈接Person.msg文件
添加這一字段,具體在哪里添加的話,可以通過搜索add_message找到該文檔中注釋的位置,然后輸入就可以了。
鏈接ROS中已有的依賴
注意,這里是ros中的依賴,開頭那里的依賴是ros外的依賴。
鏈接執(zhí)行依賴
這一步對應(yīng)的是exec_depent中添加的依賴,也就是message_runtime。
消息的調(diào)用
消息發(fā)布
這一部分可以參照(二)的內(nèi)容,其實(shí)是一樣的。區(qū)別在于主循環(huán)段不一樣,特別的是name字段因?yàn)槭莝tring字符串所以需要.c_str()一下。
c++??????????????????????????????????????????????????????????????????????????????? python??
消息訂閱
跟之前的一模一樣。
頭文件調(diào)用
訂閱與發(fā)布的主要調(diào)用方式,就在代碼開始的地方輸入頭文件,這個(gè)Person.h頭文件是catkin_make編譯功能包后存放在工作空間devel/include下對應(yīng)的功能包名文件夾下的。
?c++??????????????????????????????????????????????????????????????????????????????? python??
CMakeList.txt文件
該文件的修改和已有的消息類型的區(qū)別在于最后一行代碼,最后一行代碼是將這個(gè)可執(zhí)行文件與msg文件產(chǎn)生一個(gè)依賴的關(guān)系,而原有的消息類型則不需要加入這一行代碼也是可以運(yùn)作的。
題外話
roscore打開的窗口叫rosmaster,它是一個(gè)婚介所,幫助發(fā)布節(jié)點(diǎn)與訂閱節(jié)點(diǎn)產(chǎn)生聯(lián)系,一旦二者產(chǎn)生聯(lián)系,那么該窗口進(jìn)程就可以被殺死,并不影響節(jié)點(diǎn)間的通訊。