ROS: catkin和rosmake創建和編譯功能包


1. 創建ROS工作空間

mkdir -p catkin_ws/src  
cd src  
catkin_init_workspace  
cd ..  
catkin_make  

2. 創建package

  • 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編譯
#under workspace path
catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

catkin編譯的是上述第一種利用catkin創建的package,首先修改創建功能包時生成的CMakeLists.txt文件,用gedit打開該文件

  1. 添加以下語句來查找添加的依賴包
find_package(catkin REQUIRED COMPONENTS
    sensor_msgs
    cv_bridge
    image_transport)
find_package(OpenCV 2 REQUIRED)
find_package(PLC REQUIRED)

  2.添加以下語句來添加參與編譯的節點程序

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> 
  • 利用rosmake編譯
#under workspace path
rosmake package_name

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

rosbuild_add_executable(node_name src/node_name.cpp)

注意

  • 創建功能包是在src目錄下,而編譯功能包是在workspace目錄下。
  • 編譯之前要先確保添加了當前工作空間的path,查看方法是:
echo $ROS_PACKAGE_PATH

添加方法是source setup.bash文件

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

OpenCV

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM