美文网首页
ROS文件系统(工程结构)

ROS文件系统(工程结构)

作者: 徐凯_xp | 来源:发表于2019-04-29 13:21 被阅读0次
    ROS文件系统

    介绍catkin的编译系统,catkin工作空间的创建和结构,package软件包的创建和结构,介绍CMakeLists.txt文件,package.xml以及其他常见文件。

    catkin工作空间

    Catkin是ROS定制的编译构建系统,对Cmake的扩展
    而Catkin工作空间是组织和管理功能包的文件夹,以Catkin工具编译

    1. 建立工作空间
    mkdir -p ~/catkin_ws/src
    
    1. 编译
    cd ~/catkin_ws/ #回到工作空间
    catkin_make
    source ~/catkin_ws/devel/setup.bash  #编译完后要source刷新环境
    
    catkin workspace

    catkin编译的工作流程如下:
    1 首先在工作空间catkin_ws/src/下递归的查找其中每一个ROS的package。
    2 package中会有package.xml和CMakeLists.txt文件,Catkin(CMake)编译系统依据CMakeLists.txt文件,从而生成makefiles(放在catkin_ws/build/)。
    3 然后make刚刚生成的makefiles等文件,编译链接生成可执行文件(放在catkin_ws/devel)。
    也就是说,Catkin就是将cmake与make指令做了一个封装从而完成整个编译过程的工具。catkin有比较突出的优点,主要是:

    • 操作更加简单
    • 一次配置,多次使用
    • 跨依赖项目编译
    Package组成
    • ROS软件的基本组成形式
    • catkin编译的基本单元
    • 一个Package可以包含多个可执行文件(节点)


      Package最精简结构

      其中:

    • CMakelists.txt规定catkin编译的规则
      例如:源文件、依赖项、目标文件
    cmake_minimum_required() #指定Catkin最低版本
    project() #指定软件包的名称
    find_package() #指定编译时需要的依赖项
    catkin_python_setup() #catkin新加宏,打开catkin的Python Module的支持
    add_message_files() #catkin新加宏,添加自定义Message/Service/Action文件
    add_service_files()
    add_action_files()
    generate_message() #catkin新加宏,生成不同语言版本的msg/srv/action接口
    catkin_package() #catkin新加宏,生成当前package的cmake配置,供依赖本包的其他软件包调用
    add_library() #生成库
    add_executable() #生成可执行二进制文件
    add_dependencies() #定义目标文件依赖于其他目标文件,确保其他目标已被构建
    target_link_libraries() #链接
    catkin_add_gtest() #catkin新加宏,生成测试
    install() #生成可安装目标
    
    • Package.xml
      定义package的属性
      例如:包名、版本号、作者、依赖等
    <pacakge> 根标记文件
        <name> 包名
        <version> 版本号
        <description> 内容描述
        <maintainer> 维护者
        <license> 软件许可证
        <buildtool_depend> 编译构建工具,通常为catkin
        <build_depend> 编译依赖项,与Catkin中的
        <run_depend> 运行依赖项
    </pacakge> 
    

    一般只需要修改<build_depend> 编译依赖项, <run_depend>运行依赖项



    还可以在Package下放自定义的通信格式:
    消息(msg)
    服务(srv)
    动作(action)
    以及launch、配置文件
    launch文件(launch)、配置文件(yaml)



    Package基本组成结构
    常用包管理指令

    1.rospack
    查找某个pkg的地址

    rospack find package_name
    

    2.roscd
    跳转到某个pkg下

    roscd package_name
    

    3.rosls
    列举某个pkg下的文件信息

    rosls package_name
    

    4.rosed
    编辑pkg的文件

    rosed package_name file_name
    

    5.catkin_create_pkg
    创建一个pkg

    catkin_creat_pkg<pkg_name>[deps]
    

    6.rosdep
    安装某个pkg所需的依赖

    rosdep install [pkg_name]
    
    实操步骤

    1.创建工作空间

    mkdir -p catkin_practice/src
    
    1. 初始化工作空间
    cd catkin_practice
    catkin_make
    
    1. 创建功能包
    cd src
    catkin_create_pkg test1 //不带依赖项
    catkin_create_pkg test2 roscpp rospy std_msgs nav_msgs //带依赖项
    
    
    1. 设置环境变量
    source devel/setup.bash`
    

    通过设置环境变量,系统将知道功能包放在catkin_practice/devel下 该命令有一个弊端就是,设置的环境变量只会在当前终端下生效,重新打开一个终端将失效
    解决方案是:
    解决方法是将上述命令放在终端配置文件中。

    vi ~/.bashrc
    //将环境变量添加只终端设置最后一行
    source ~/catkin_practice/devel/setup.bash
    

    在新的终端中输入以下命令,让终端命令在当前终端生效

    source ~/.bashrc
    

    检查环境变量

    echo $ROS_PACKAGE_PATH
    

    Metapackage

    在一些ROS的教学资料和博客里,你可能还会看到一个Stack(功能包集)的概念,它指的是将多个功能接近、甚至相互依赖的软件包的放到一个集合中去。但Stack这个概念在Hydro之后就取消了,取而代之的就是Metapackage。



    以上列举了一些常见的功能包集,例如navigation、turtlebot,他们都是用于某一方面的功能,以navigation metapackage(官方介绍里仍然沿用stack的叫法)为例。

    相关文章

      网友评论

          本文标题:ROS文件系统(工程结构)

          本文链接:https://www.haomeiwen.com/subject/bnwxnqtx.html