zoukankan      html  css  js  c++  java
  • 机器人操作系统入门(二)ROS文件系统

    参考资料:

    https://www.icourse163.org/course/ISCAS-1002580008?tid=1003713012  //中国大学MOOC

    https://www.bilibili.com/video/av23401751  //B站

    《ROS操作系统入门讲义》PDF下载

    链接:https://pan.baidu.com/s/1OCja2WLDRnjYXMrpnZ3-sQ 
    提取码:mziy

    第二章 ROS文件系统

    1. Catkin编译系统(Groovy版本后投入使用)  //早期的ROS编译系统是rosbuild

    (1)特点

    Catkin沿用了包管理的传统像 find_package() 基础结构, pkg-config;扩展了CMake,例如

    • 软件包编译后无需安装就可使用
    • 自动生成 find_package() 代码, pkg-config 文件
    • 解决了多个软件包构建顺序问题

    一个Catkin的软件包(package)必须要包括两个文件:

    • package.xml:包括了package的描述信息
    1. name, description, version, maintainer(s), license
    2. opt. authors, url's, dependencies, plugins, etc...
    • CMakeLists.txt:构建package所需的CMake文件
    1. 调用Catkin的函数/宏
    2. 解析 package.xml
    3. 找到其他依赖的catkin软件包
    4. 将本软件包添加到环境变量

    (2)工作原理

    catkin编译的工作流程如下:  //相当于封装了cmake和make

    • 首先在工作空间 catkin_ws/src/ 下递归的查找其中每一个ROS的package
    • package中会有 package.xml 和 CMakeLists.txt 文件,Catkin(CMake)编译系统依据 CMakeLists.txt 文件,从而生成 makefiles (放在 catkin_ws/build/ )
    • 然后 make 刚刚生成的 makefiles 等文件,编译链接生成可执行文件(放在 catkin_ws/devel )

    注:要用catkin编译一个工程或软件包,只需要用 catkin_make 指令  //catkin编译之前需要回到工作空间目录, catkin_make 在其他路径下编译不会成功,如果有新的目标文件产生需要紧接着“source刷新环境

    2. Catkin工作空间

    (1)初始化

    1 $ mkdir -p ~/catkin_ws/src  
    2 $ cd ~/catkin_ws/
    3 $ catkin_make #初始化工作空间
    • catkin_make命令必须位于工作空间目录catkin_ws下运行
    • 原先的初始化命令catkin_init_workspace在src目录下运行

    (2)结构介绍  //用 tree 命令查看

    1 $ cd ~/catkin_ws
    2 $ sudo apt install tree
    3 $ tree

    默认包含三个文件夹:

    • src/: ROS的catkin软件包(源代码包)
    • build/: catkin(CMake)的缓存信息和中间文件
    • devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量

    编译流程如下:

    注:yaml文件一般存储了ROS需要加载的参数信息,一些属性的配置。通常在launch文件或程序中读取.yaml文件,把参数加载到参数服务器上。

    3. package软件包  //catkin编译的基本单元

    (1)结构

    一个package下常见的文件、路径有

    其中CMakeLists.txt和package.xml定义了整个package(必不可少

    • CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则
    • package.xml: 描述package的包名、版本号、作者、依赖等信息
    • src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)
    • include/: 存放C++源码对应的头文件
    • scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)
    • msg/: 存放自定义格式的消息(.msg)
    • srv/: 存放自定义格式的服务(.srv)
    • models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)
    • urdf/: 存放机器人的模型描述(.urdf或.xacro)
    • launch/: 存放launch文件(.launch或.xml)

    (2)package的创建:catkin_create_pkg 命令

    用法:catkin_create_pkg 包名 依赖项  // 如catkin_create_pkg test_pkg roscpp rospy std_msgs

    (3)相关命令


    常用命令:rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y  //用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)

    4. CMakeLists.txt:规定了package要依赖哪些package,要编译生成哪些目标,如何编译等等流程

     非常重要,它指定了由源码到目标文件的规则,catkin编译系统在工作时首先会找到每个package下的CMakeLists.txt,然后按照规则来编译构建。

    (1)写法  //进一步的CMake语法可参考《CMake实践》:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf

    总体的宏结构如下:

    (2)示例(turtlesim包下的turtlesim/CMakeLists.txt)

    5. package.xml:软件包的描述文件,描述包的基本信息

    (1)作用

    • pacakge.xml 包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。
    • 实际上 rospack find 、 rosdep 等命令之所以能快速定位和分析出package的依赖项信息,就是直接读取了每一个package中的 package.xml 文件为用户提供了快速了解一个package的渠道

    (2)写法:遵循xml标签的写法

    格式1(old):

    其中,1-6为必备标签

    格式2(new):

    (3)示例(turtlesim/package)

    老版本

    新版本

    6. Metapackage  //老版本里的概念为“功能包集”stack

    作用:将一些相近的功能模块、软件包放到一起

    (1)常见metapackage

    其中,navigation metapackage包含以下软件包:

    navigation就是一个简单的package,里面只有几个文件,但它依赖了其他所有的软件包

    (2)写法  //metapackage为虚包,无具体的包文件

    一般有且仅有两个文件:CMakeLists.txt 和 pacakge.xml

    CMakeLists.txt 写法如下:

    1 cmake_minimum_required(VERSION 2.8.3)
    2 project(ros_academy_for_beginners)
    3 find_package(catkin REQUIRED)
    4 catkin_metapackage() #声明本软件包是一个metapacakge

    package.xml 写法如下:

    与普通package的不同之处

    • CMakeLists.txt :加入了catkin_metapackage()宏,指定本软件包为一个metapacakge
    • package.xml :标签将所有软件包列为依赖项,标签中添加标签声明。
  • 相关阅读:
    STM32F746G-DISCO官方例程烧写
    zedboard学习第一篇
    itop4412开发板添加开机启动程序
    dsp6657的串口学习
    开源SLAM
    非线性滤波(信号处理)
    图形学领域的关键算法及源码链接
    基于倾斜影像的城市三维场景重建
    基于RFID恢复信号场
    对“自然语言处理”的理解
  • 原文地址:https://www.cnblogs.com/hg-love-dfc/p/10333545.html
Copyright © 2011-2022 走看看