Ros2 component msg
Jufeng Wu, 04 November 2019
Ros2 在他的說明文件裡面,有提到component是Ros2改善的一個東西,所以就來玩玩看吧
Ros2的component跟Ros1的notelet概念很像,讓之間的message或是service用更快速的方式進行交換
不一樣的地方在於Ros2的component的api跟一般的node的api是相同的,Ros1則是不同
再來,Ros1的notelet在跑得時候,要決定mapping到那一個node,Ros2則是不用
當然上述兩點是Ros2的文件寫的,小的只有玩過Ros2的component,在玩Ros1的時候沒有實際寫過notelet,所以只能在這裡嘴炮XD
然而,在很多Ros2的範例code會看到他用component的形式寫,而且有一些還有一些syntax error(?!),所以最好還是要看得懂或是要會改成正確的語法
當然最好還是要會寫!
じゃ、始めましょう!
撰寫方法
首先,當然拿msg最簡單的自定義talker和listener來試試,我寫的package範例在此
1.關於CmakeList:
一般的node是加上add_executable
、ament_target_dependencies
以及install
在component是要加上add_library
、target_compile_definitions
、ament_target_dependencies
、set
以及install
這五個東西
詳細就看code吧
2.package.xml則是一樣,要加上package name以及使用的library
3.再來就是.h的部份,基本上就是繼承public rclcpp::Node
要注意的是
a.在function之前要加上,pulic要加上XXX_PUBLIC
,private要加上XXX_LOCAL
,XXX是你設定的名字
b.在include資料夾內加上 visibility_control.h
這一個檔案,內容如附件,記得要把COMPOSITION改成XXX
c. 建議在建構子上加入explicit
的關鍵字
4.最後是C++的部份,基本上就是完成這一個.h檔案,唯一要注意的是在最後一行要加上RCLCPP_COMPONENTS_REGISTER_NODE(namespace::XXX)
至於c++的寫法就一般的ros幾乎一樣,就是message怎樣寫就怎樣寫
只是因為不是node,所以不用寫node的部份
以及這算是外掛程式,所以不用寫main
使用方法(最簡單的)
使用方法比較麻煩一點,首先因為這一些東西可以幫他當作ros2的外掛程式,所以原則是你啟動一個node,其他人可以動態的去設定要不要執行這一個外掛
1.開啟第一個terminal,先source 自己的專案之後,下ros2 run rclcpp_components component_container
,這樣主要的node被啟動了
這一個node基本上你可以想說就是之前我們寫的main的部份,然後等待外掛進入去執行外掛
唯一不一樣的是,這一個node是ros2 default的node,專門讓你安裝其他的component外掛用的
2.開啟第二的terminal,當然也要先source 自己的專案之後,下ros2 component load /ComponentManager component_test composition::Talker
在這裡/ComponentManager
是剛剛的component_container
算是別名的東西,代表說我的外掛要掛到這裡來
component_test
是我的package的名稱
composition::Talker
是在rclcpp_components_register_nodes(talker_component "composition::Talker")
裡面的註冊名字,代表talker_component我用註冊的時候要用composition::Talke的名稱
這降就可以開心的把東西註冊上去了!
最近除了英文之外技術文章,也看了很多對岸和日文的技術文,發現寫的時候偶爾會熊熊忘記某一些用詞要怎麼寫
英文還好,反正在科技業基本上就是用克里奧語,所以中文加上英文
日文也不會有啥問題,畢竟日文的專有名詞都是從英文來的,也還好
但是對岸用語就比較麻煩,有得時候會熊熊給他忘記某一些詞台式中文應該的用法
例如外掛寫成差件,軟體寫成軟件
畢竟看一篇文章一下台式中文一下中式中文總覺得很不舒服
就像說話一下使用英式英文一下使用美式英文; 或是一下使用德式德文一下使用瑞士德文,感覺就是不舒服
中式中文就是要搭配簡體字來看才會覺得正確
台式中文就是要用繁體字看才對味
最痛恨就是明明寫繁體字,結果裡面用語全部都是中式中文,看到崩潰(很多農場文和繁中翻譯文都是這樣)
所以小弟會努力讓文章用台式中文個風格,畢竟中式中文的文章應該已經很多了
如果那一天想要來寫中式中文,應該會用簡字體來寫,這樣比較對味