天天看點

ros入門之用catkin和rosmake建立和編譯功能包

初學ros機器人程式設計,從建立工作空間到編譯運作節點,由于linux也是初學,各種焦頭爛額,把這些最基礎的東西先總結下來,以備日後檢視。這是第一次寫部落格,倘若有諸多錯誤的地方,希望大家諒解并指出。寫這邊文章時,大部分是參考了下面幾篇博文:

http://blog.csdn.net/baidu_18189515/article/details/52401329

http://blog.csdn.net/baidu_18189515/article/details/52332754#comments

http://blog.csdn.net/robogreen/article/details/50488215

1、在ros下建立工作空間:

mkdir -p catkin_ws/src  

cd src  

catkin_init_workspace  

cd ..  

catkin_make  
           

2、建立功能包

方法一:利用catkin建立package

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
           

建立程式包的一般格式是catkin_create_pkg ,此指令的格式包括功能包名稱和依賴項,在上面示例中,依賴項包括std_msg、rospy和roscpp。

運作上面指令之後,在src檔案夾下會生成一個與功能包名同名的檔案夾,在該檔案夾下有如下檔案(夾)

workspace_folder/
                 src/
                      package_name/   
                                include                   --檔案夾
                                src                       --檔案夾       
                                CMakeLists.txt
                                package.xml 
           

方法二:利用roscreate建立package

cd ~/catkin_ws/src
roscreate-pkg beginner_tutorials std_msgs rospy roscpp
           

同樣的,利用rosmake建立程式包的格式是roscreate-pkg ,此指令的格式也包括功能包名稱和依賴項。

運作上面指令之後,在src檔案夾下會生成一個與功能包名同名的檔案夾,在該檔案夾下有如下檔案(夾)

workspace_folder/
                 src/
                      package_name/   
                                include                   --檔案夾
                                src                       --檔案夾       
                                CMakeLists.txt
                                manifest.xml 
                                mainpage.dox
                                Makefile
           

3、編譯功能包

方法一:利用catkin編譯

用catkin編譯的是上述第一種利用catkin建立的package,首先修改建立功能包時生成的CMakeLists.test檔案,用gedit打開該檔案,

⑴添加以下語句來查找添加的依賴包

find_package(catkin REQUIRED COMPONENTS
    sensor_msgs
    cv_bridge
    image_transport)
find_package(OpenCV  REQUIRED)
find_package(PLC REQUIRED)
           

⑵添加以下語句來添加參與編譯的節點程式

add_executable(node name src/node program)#添加可執行節點
target_link_libraries(node name ${catkin_LIBRARIES})#連結庫
add_dependencies(node name package name_generator_messages_cpp)#為可執行檔案添加對生成的消息檔案的依賴,因為catkin把所有的package并行的編譯,是以如果你要使用其他catkin工作空間中其他package的消息,你同樣也需要添加對他們各自生成的消息檔案的依賴,感覺就是一個先導入頭檔案的過程。
           

除了可以在建立功能包時添加系統提供的依賴(catkin_create_pkg beginner_tutorials std_msgs rospy roscpp),也可以修改建立功能包時生成的package.xml檔案,以圖像進行中所需用到的包為例,加入了以下指令來說明後面增加的依賴包

<run_depend>sensor_msgs</run_depend> 
<run_depend>image_transport</run_depend> 
<run_depend>cv_bridge</run_depend> 
           

利用catkin編譯的方法是:

#under workspace
catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
           

方法二:利用rosmake編譯

用rosmake編譯的是上述第二種利用roscreate建立的package,同樣的,在編譯之前,需要修改CMakeLists.txt檔案和manifest.xml檔案,不同的地方是在修改CMakeLists.txt檔案時需要加上如下語句來添加參與編譯的節點程式:

注意:

ROS從indigo開始就不再把opencv作為系統依賴包而是作為一個第三方包引入,如果直接使用會在rosmake編譯階段報錯,no exist package “opencv2”,此時隻需要在CMakeLists.txt中添加find_package(OpenCV 2 REQUIRED),然後在manifest.xml中不能添加依賴包,此處添加的為系統依賴包。

利用rosmkae編譯的方法是:

#under workspace
rosmake package_name
           

運作以上指令之後,如果編譯沒有出錯,在bin檔案夾下可以看到生成的可執行檔案,可以直接運作./node_name來運作節點。

3、運作編譯完成之後的節點(不用launch,還不懂)

rosrun package_name node_name
           

注意:

1)建立功能包是在src目錄下,而編譯功能包是在workspace目錄下。

2)編譯之前要先確定添加了目前工作空間的path,檢視方法是:

添加方法是source setup.bash檔案

#under the path: workspace
source ./devel/setup.bash
           

3)運作節點之前要下roscore

繼續閱讀