iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
自我挑戰組

ROS自學筆記系列 第 7

Day 07 - 使用C++撰寫ROS Node

  • 分享至 

  • xImage
  •  

上一篇我們學會了如何使用Python寫Node,今天來改用C++囉!
基本上跟Python是做一樣的事情,不過C++會比較麻煩一點,就讓我們繼續看下去吧!

關於ROS的roscpp模組,官網一樣有教學常用API文件可以參考,那我們一樣使用C++來寫一個Hello World出來吧!

首先在~/catkin_ws/src/beginner_tutorials/src中新增一個.cpp檔,就可以開始寫程式囉!

$ cd ~/catkin_ws/src/beginner_tutorials/src
$ vim hello.cpp

hello.cpp中新增以下內容:

#include <ros/ros.h>                             // 引用 ros.h 檔

int main(int argc, char** argv){
    ros::init(argc, argv, "hello_cpp_node");     // 初始化 hello_cpp_node
    ros::NodeHandle handler;                     // node 的 handler
    ROS_INFO("Hello World!");                    // 印出 Hello World
}

可以看出這個cpp檔跟python檔最大的不同就是多了一個handler,是個用來當作跟node相關的溝通功能如topics, services, parameters 等的介面,其他部分都大同小異,因此就不贅述啦!

cpp檔不像python檔一樣可以直接被執行,需要經過編譯以後才能轉成執行檔,因此我們需要修改beginner_tutorial內的CMakeLists.txt,為其設定好連結的函式庫。
由於他的CMakeLists.txt太長了,在此擷取片段做為參考:

//...上略
## Declare a C++ executable
## ...
## ...
## ...

add_executable(hello.exe src/hello.cpp)
target_link_libraries(hello.exe ${catkin_LIBRARIES})

## Rename C++ executable without prefix
//...下略

修改完CMakeLists.txt後,接著須回到工作區的根目錄,也就是/catkin_ws中再執行一次catkin_make,他就會自己幫我們編譯好hello.cpp的執行檔(hello.exe)囉!

hello.exe 編譯成功畫面

編好的執行檔會放在/catkin_ws/devel/lib/beginner_tutorials裡面,執行後的畫面如下:
hello.exe 執行成功畫面
記得一樣要有另外一個視窗執行roscore,才有master可以驅動node喔!

接下來修改hello.cpp,一樣新增一個迴圈,讓他在程式執行期間每秒印出一個hello world出來,程式碼如下:

#include <ros/ros.h>                             // 引用 ros.h 檔

int main(int argc, char** argv){
    ros::init(argc, argv, "hello_cpp_node");     // 初始化hello_cpp_node
    ros::NodeHandle handler;                     // node 的 handler
    while (ros::ok()){                           // 在 ros 順利執行時
        ROS_INFO("Hello World!");                // 印出 Hello World
        ros::Duration(1).sleep();                // 間隔 1 秒
    }
}

修改完hello.cpp後,因為CMakeLists.txt已經改好了,只要再回去執行一次catkin_make,就可以重新編譯出一個新的hello.exe檔囉!

接下來再重新執行一次hello.exe,由於他會一直被執行,因此使用rosnode list這個指令一樣可以看到這個hello_cpp_node正在運行中囉!
hello.exe 執行畫面

小結

到此,我們已經會使用python和c++建立不同的node啦! 小妹在此為大家整理一下撰寫node應該要注意的事項:

  1. cpp檔需要經過編譯後才能執行,因此還需修改CMakeLists.txt才能編譯
  2. 執行node時需先執行master,也就是roscore進行管理的動作
  3. 使用rosnode list可以查看有哪些node正在運行中
  4. catkin_make只能在該工作區的根目錄才能執行

最後,希望大家都可以順利寫出自己的node出來玩一玩囉! 我們明天見~


上一篇
Day 06 - 使用Python撰寫ROS Node
下一篇
Day 08 - ROS Node 常用指令
系列文
ROS自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言