ROS总结一,catkin,package,CMakeList,Topic,node

ROS系统学习已经有几周了,但是感觉学的效率有点低。不过还是要把总结先写了,以尽快进入下一阶段学习。

PS:这篇总结主要是根据MOOC网中科院老师的讲义来的。
推荐学习,网址:https://www.icourse163.org/learn/ISCAS-1002580008?tid=1002759011#/learn/content?type=detail&id=1003899799&cid=1004769692

  1. catkin编译系统
    catkin的诞生是为了替代rosbuild

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

    package.xml: 包括了package的描述信息
    name, description, version, maintainer(s), license
    opt. authors, url’s, dependencies, plugins, etc…

    CMakeLists.txt: 构建package所需的CMake文件
    调用Catkin的函数/宏
    解析 package.xml
    找到其他依赖的catkin软件包
    将本软件包添加到环境变量
    ROS总结一,catkin,package,CMakeList,Topic,node_第1张图片
    catkin的编译指令为catkin_make。catkin_make一般在创建包之后使用,它可以帮你写好部分CMakeLists和package.xml的内容,所以每一次包的内容修改之后就catkin_make一下。就像编完代码要运行之前必须先编译。catkin_make也可以有一些参数如下:

    catkin_make [args]
    -h, --help 帮助信息
    -C DIRECTORY, --directory DIRECTORY 工作空间的路径 (默认为 ‘.’)
    –source SOURCE src的路径 (默认为’workspace_base/src’)
    –build BUILD build的路径 (默认为’workspace_base/build’)
    –use-ninja 用ninja取代make
    –use-nmake 用nmake取’make
    –force-cmake 强制cmake, 即使已经cmake过
    –no-color 禁止彩色输出(只对catkin_make和CMake生效)
    –pkg PKG [PKG …] 只对某个PKG进行make
    –only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS …]
    将指定的package列入白名单CATKIN_WHITELIST_PACKAGES,
    之编译白名单里的package。 该环境变量存在于CMakeCache.txt。
    –cmake-args [CMAKE_ARGS [CMAKE_ARGS …]]
    传给CMake的参数
    –make-args [MAKE_ARGS [MAKE_ARGS …]]
    传给Make的参数
    –override-build-tool-check
    用来覆盖由于不同编译工具产生的错误

  2. catkin工作空间结构介绍

    catkin工作空间的结构,它包括了 src 、 build 、 devel 三个路径, 在
    有些编译选项下也可能包括其他。 但这三个文件夹是catkin编译系统默认的。 它们的具体作用
    如下:
    src/: ROS的catkin软件包( 源代码包)
    build/: catkin( CMake) 的缓存信息和中间文件
    devel/: 生成的目标文件( 包括头文件, 动态链接库, 静态链接库, 可执行文件等) 、 环境变量。
    下图是catkin编译工作流程。
    ROS总结一,catkin,package,CMakeList,Topic,node_第2张图片
    build和devel文件夹是Catkin自动编译生成的。而src文件夹则是主要用到的,我们写的ROS程序和源代码包都放在这个文件夹。如下图所示:
    ROS总结一,catkin,package,CMakeList,Topic,node_第3张图片
    下载tree工具包可以看到以下结构图:
    ROS总结一,catkin,package,CMakeList,Topic,node_第4张图片

  3. Package软件包
    应该说Package包是ROS的基本单元,任何语言程序都需要放到包中,因为包是编译的基本单元。一个package的常见文件如下:
    ROS总结一,catkin,package,CMakeList,Topic,node_第5张图片
    其中定义package的是 CMakeLists.txt 和 package.xml , 这两个文件是package中必不可少的。 catkin编译系统在编译前, 首先就要解析这两个文件。 这两个文件就定义了一个package。
    CMakeLists.txt: 定义package的包名、 依赖、 源文件、 目标文件等编译规则, 是package
    不可少的成分
    package.xml: 描述package的包名、 版本号、 作者、 依赖等信息, 是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)

  • 创建Package
    Package需要在catkin/src的文件夹下创建,可以用catkin_creat_pkg命令。指令如下:
    catkin_create_pkg package depends(依赖的包名)
  • package相关命令
    ROS总结一,catkin,package,CMakeList,Topic,node_第6张图片
  1. CMakeLists
    ROS总结一,catkin,package,CMakeList,Topic,node_第7张图片
  2. Package.xml
    ROS总结一,catkin,package,CMakeList,Topic,node_第8张图片

6.Node & Master
node 是ROS的最小进程单元,一个软件包里可以有多个可执行文件, 可执行文件在运行之后就成了一个进程(process), 这个进程在ROS中就叫做节点。
master在整个网络通信架构里相当于管理中心, 管理着各个node。 node首先在master处进行注册, 之后master会将该node纳入整个ROS程序中。node之间的通信也是先由master进行“牵线”, 才能两两的进行点对点通信。 当ROS程序启动时, 第一步首先启动master, 由节点管理器处理依次启动node。
$roscore指令可以启动ROS master ,rosout ,parameter serve。
ROS总结一,catkin,package,CMakeList,Topic,node_第9张图片

  • rosnode
    ROS总结一,catkin,package,CMakeList,Topic,node_第10张图片

  • launch
    ROS总结一,catkin,package,CMakeList,Topic,node_第11张图片

    ROS总结一,catkin,package,CMakeList,Topic,node_第12张图片

  1. Topic
    ROS中的通信方式中, topic是常用的一种。 对于实时性、 周期性的消息, 使用topic来传输是
    最佳的选择。 topic是一种点对点的单向通信方式, 这里的“点”指的是node, 也就是说node之
    间可以通过topic方式来传递信息。 topic要经历下面几步的初始化过程: 首先, publisher节点
    和subscriber节点都要到节点管理器进行注册, 然后publisher会发布topic, subscriber在
    master的指挥下会订阅该topic, 从而建立起sub-pub之间的通信。 注意整个过程是单向的。 其
    结构示意图如下:

ROS总结一,catkin,package,CMakeList,Topic,node_第13张图片

  • 通信实例
    ROS总结一,catkin,package,CMakeList,Topic,node_第14张图片

你可能感兴趣的:(经验分享)