zoukankan      html  css  js  c++  java
  • 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中不能添加依赖包,此处添加的为系统依赖包。

  • 相关阅读:
    (Java实现) 删数问题
    (Java实现) 车站
    (Java实现) 活动选择
    (Java实现) 过河卒
    (Java实现) 美元汇率
    (Java实现) 零件分组
    (Java实现) 图的m着色问题
    (Java实现) 数塔问题
    Java实现 蓝桥杯VIP 算法训练 数的划分
    DirectUI的消息流转
  • 原文地址:https://www.cnblogs.com/flyinggod/p/12452142.html
Copyright © 2011-2022 走看看