baidu进阶训练笔记十四20200801

文章目录

  • 百度Apollo ROS介绍(三)
    • ROS深入介绍
      • ROS工程文件组织方式:
      • 在Eclipse中如何编译ROS基本工程
        • Hello World
      • Subscriber的一个例子
      • Publisher的一个例子
      • ROS除了message的另外两种节点通信方式
        • ROS Parameter Server
        • parameter
      • ROS的可视化工具RViz

百度Apollo ROS介绍(三)

ROS深入介绍

  • ROS工程文件组织方式:

    • src文件夹:一些源文件
    • msg文件夹:放节点之间进行通信的消息定义
    • srv文件夹:存放节点之间进行服务通信的时候,此服务的一些定义
    • config文件夹:放一些配置文件相关的信息
    • include文件夹:放头文件相关的一些信息
    • lauch文件夹:放节点之间的启动文件
      • 节点间启动文件放到一个统一的LAUNCH文件夹
      • 通过lanch文件的方式进行组织的好处是:Rosrun、Roslaunch在启动的时候Pack name可以自动补全,可以自动寻找下一步的节点或者LAUNCH文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njIbiiG9-1596284646919)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801170000113.png)]

  • DEVEL和BUILD是在Build的时候自动产生的两个临时产出目录

  • 描述了ROS Package相关的工作区:

    • Package.xml
      • 定义了所需要的可执行文件依赖的一些库和编译、运行的时候依赖的一些库,同时定义了软件版本开发的信息等一些常见的描述文件
    • CmakeLists
      • 是整个基于ROS写工程的时候所需要使用的一个关键信息——定义了我们怎样去编译一个ROS Package的工程
      • 指定了一些Cmake的版本
      • 定义了工程Package的名字
      • 定义了工程所需要的一些头文件信息
      • 把一些所依赖的一些库在文件里面也需要指定
      • install命令:将编译的临时产出放到指定的产出目录中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFiWJn6d-1596284646928)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801171010101.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Eo32QH3-1596284646938)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801171429796.png)]

在Eclipse中如何编译ROS基本工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSyWRhV1-1596284646946)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801172151926.png)]

  • 通过import引入ROS相关的一个工作区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9l9QBzAW-1596284646954)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801172207977.png)]

  • Run或者Build调试工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x39cxamA-1596284646963)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801172304910.png)]

Hello World

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KwKqPksN-1596284646971)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801172413068.png)]

  • Init就是引入ROS的基本环境,指定节点使用的Node Name和其他参数信息

  • NodeHandler:获取到Node的句柄之后,与ROS框架通信时使用到.(句柄指针)

  • 定义频率

  • Spin once

  • ROS info是ROS提供的一个日志系统

    • 对打印信息进行分级:debug、error、warning,进行不同格式与颜色展示
  • ROS INFO 默认将信息打印到Screen中

  • ROS INFO STRAM 流式信息,默认打印到后台的日志文件中去

Subscriber的一个例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M3WsCp0V-1596284646975)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801173301833.png)]

  • 通过回调函数回应信息

  • Subscriber的三个参数:

    • 订阅的Channel信息(topic)
    • queue_size
      • 发送与接收消息的缓存,发送与产生消息进行隔离,最大程度减小延迟
      • 不推荐队列长度特别大
    • 回调函数(callback_function)
  • ROS SPIN

    • 阻塞性,不断监听,对回调函数处理

Publisher的一个例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3GjfdiqT-1596284646977)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801174306414.png)]

  • 二者之间的明显区别点:

    • CallBack回调
    • 声明的时候,把callback传入到对应的Node初始化程序里
    • Rosspin
  • 每个节点都不是简单的发送或接收,它可能既是消息的订阅者也是消息的发送者,是一个复杂交互的功能,甚至是用到很多数据融合或者是消息对齐。

ROS除了message的另外两种节点通信方式

ROS Parameter Server

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oz3WCWGw-1596284646980)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801174947393.png)]

  • 节点可以启动service去注册一项服务,另外一个节点在使用这项服务的时候可以直接call service完成一些实时的数据通讯交互。
  • Message是一个被动的消息行为,发送者发送消息的时候并不知道消息会被谁去消费,接收者在接收消息的时候也不知道目前有几个发送节点在发送,发送和接收之间是一个什么状态也是不知道的,他们是一个松耦合和透明的关系。
  • Service弥补了这种通信方式的不足,它需要及时回应。Client向server去发送service请求的时候,需要实时等待一个response,根据响应做出下一步的行为指示。

parameter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kyjyLhJv-1596284646985)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801175213657.png)]

  • Parameter通信方式借鉴了service的原理
  • 它启动了Parameter service,Parameter service是一个全局的服务器,各个节点在进行参数设置和获取的时候可以通过Parameter service的方式轻易完成。
  • Parameter不像基于message消息通讯方式那么频繁,一个参数在设置完成之后,在整个网络拓扑运行期间所有的节点只需要在一个地方取此参数就行或者某个节点根据自己的运行状态去改变这个参数。
  • Parameter对应有一套ROS所使用的基本命令行工具—rosparam。
  • rosparam其它工具相比,有两个不同的地方:get和set。
    • get是get某一个全局参数的值
    • set是设置某一个全局参数的值。

ROS的可视化工具RViz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qvk2wzKf-1596284646988)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801175545828.png)]

  • 自动驾驶节点比较多,网络拓扑也比较复杂,每个节点在进行消息通讯的时候有很多channel同时运行,如果只是通过命令行工具去查看节点的状态和节点之间的拓扑,会很麻烦。ROS提供了一些比较好用的可视化工具立体化展示某一个拓扑结构里面的拓扑网络,RViz就是其中之一。
  • RViz在整个ROS生态里可以看成是一个节点,它定义了整个拓扑结构里面所有的消息,然后按照固定的格式进行图形化展示,同时提供很多debug相关的功能。因为RViz也是一个普通的节点,所以在启动的时候可以通过rosrun命令的方式去启动RViz相关的功能。
  • RViz也提供了很多插件可以放到诸如eclipse这样的功能插件里面,在进行eclipse开发时可以通过eclipse的plugin去调取RViz的相关功能,进行可视化调试。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLpgto4i-1596284646990)(C:\Users\xiaomeiyan\AppData\Roaming\Typora\typora-user-images\image-20200801175519654.png)]

你可能感兴趣的:(智能驾驶技术)