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软件包
    将本软件包添加到环境变量
    在这里插入图片描述
    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编译工作流程。
    在这里插入图片描述
    build和devel文件夹是Catkin自动编译生成的。而src文件夹则是主要用到的,我们写的ROS程序和源代码包都放在这个文件夹。如下图所示:
    在这里插入图片描述
    下载tree工具包可以看到以下结构图:
    在这里插入图片描述

  3. Package软件包
    应该说Package包是ROS的基本单元,任何语言程序都需要放到包中,因为包是编译的基本单元。一个package的常见文件如下:
    在这里插入图片描述
    其中定义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相关命令
    在这里插入图片描述
  1. CMakeLists
    在这里插入图片描述
  2. Package.xml
    在这里插入图片描述

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。
在这里插入图片描述

  • rosnode
    在这里插入图片描述

  • launch
    在这里插入图片描述

    在这里插入图片描述

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

在这里插入图片描述

  • 通信实例
    在这里插入图片描述
                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
                                            <div class="more-toolbox">
            <div class="left-toolbox">
                <ul class="toolbox-list">
                    
                    <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">点赞</span>
                    <span class="count">1</span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打赏开始-->
                                            <!--打赏结束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章举报</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/weixin_42376458">
                <img src="https://profile.csdnimg.cn/D/5/9/3_weixin_42376458" class="avatar_pic" username="weixin_42376458">
                                        <img src="https://g.csdnimg.cn/static/user-reg-year/1x/2.png" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="https://blog.csdn.net/weixin_42376458" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">安东time</a></span>
                                        </div>
                <div class="text"><span>发布了101 篇原创文章</span> · <span>获赞 2</span> · <span>访问量 4890</span></div>
            </div>
                            <div class="right-message">
                                        <a href="https://im.csdn.net/im/main.html?userName=weixin_42376458" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                    </a>
                                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                </div>
                        </div>
                </div>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值