原文链接:进阶课程㉞丨Apollo ROS原理—3

机器人操作系统(ROS)是一个成熟而灵活的机器人编程框架。ROS提供了所需的工具,可以轻松访问传感器数据,处理数据,并为机器人的电机和其它执行器生成适当的响应。整个ROS系统被设计为在计算方面完全分布,因此不同的计算机可以参与控制过程,并作为单个实体(机器人)一起行动。

上周阿波君为大家详细介绍了「进阶课程㉝Apollo ROS原理—2」。

此课程详细地介绍了Apollo ROS对ROS的改进,主要有两个方面,第一,去中心化网络拓扑,使用RTPS服务发现协议完成P2P网络拓扑;第二,数据兼容性扩展,使用深度整合的Protobuf方法,实现数据兼容性扩展。

本周阿波君将继续与大家分享Apollo ROS原理—3的相关课程。下面,我们一起进入进阶课程第34期。

目前ROS仅适用于Apollo 3.0之前的版本,最新代码及功能还请参照Apollo 3.5及5.0版本。


目录

1.TF坐标系转换

2.RQT用户接口

3.Robot Models URDF

4.SDF Simulation Description Format


本节主要讲解四个比较基础的方面,如图所示。第一是TF坐标系转换,它在自动驾驶中用的非常广泛;第二是RQT用户接口;第三是机器人模型;第四是仿真描述。

1.TF坐标系转换

为什么需要TF坐标系转换?因为自动驾驶使用的ROS架构是一个松耦合关系,每个节点独立运行,节点有一套自己的XYZ坐标系,当把他们组装到一块时,每个节点的坐标系都是相对独立的,但整个自动驾驶系统需要把每一个节点所使用的信息和一些参数转化到同一个世界坐标系里。TF节点就提供了对应的坐标系转换功能,TF消息也是通过基于Message的订阅和发布消息来完成的。

例如,当下游的Planning节点想使用Obstacle信息时,需要将Obstacle信息转化到同一个世界坐标系,这时候它会发起一个TF去查询Obstacle处于哪一个世界坐标系里面的哪一个位置,从而感知整个车身周围的情况,基于此再做一个合理的规划和决策行为。

ROS也提供了一些基本功能查看TF的运行机制。例如Rosrun提供了TF监控节点,通过这个节点我们能看到整个复杂网络拓扑结构里面节点之间的关系;每个节点之间进行TF转换时所用到的TF树的结构。此外,还提供了tf_echo命令,可以打印从A节点到B节点,例如Perception节点到Planning节点中间所使用了TF转变树的结构。

TF也提供了一个插件供开发者使用,可以用一些主流开发工具进行ROS工程开发。

下图是结合之前将Publiser使用TF的一个例子,想使用TF,只需要改动两部分:第一是定义TF的对象;第二是直接进行TF数据查询,然后就可以得到一个世界坐标系。


2.RQT用户接口

RQT顾名思义,R实质是ROS的缩写,QT是可视化的图形工具,RQT是ROS给开发者提供的一套比较方便的图形化相关展示的一套工具。下面介绍几个比较常用的RQT功能:

1.  第一个是RQT imageview,这个主要是为自动驾驶顶层的一些传感器设计的,例如Camera图像,如果你想实时查看Driver接收图像是否正确,颜色、方位是否有问题,可以通过此工具简单选择对应Camera的channel,用 Camera的topic信息实时查看图像状态。

2.  Multipot可以将二维的数据在一个二维坐标系里面进行实时展示,这样可以更直观地看到我们所需要的数据是否符合我们的预期。

3.  RQT的graph工具,在开发的实际过程当中使用得比较广泛,这个工具把整个网络拓扑用图形化的方式展现出来。例如启动Perception、 Planning和Roscore这三个节点,它都会在RQT graph工具里面进行实时展示,同时两个节点之间所用的topic信息也会在里面实时展示。

4.  RQT console是对应ROS日志系统所提供的一套可视化工具。ROS提供了五种级别的LOG展示:DEBUG 、IFNO、WARN、ERROR、FATAL。每个模块在某一时刻都会产生大量的日志信息,RQT console把这些信息统一规整到一个可视化工具里面,用户可以通过配置的方式快速定位和找到自己所需要的一些相关信息。

5.  RQT logleve是为ROS日志系统所提供的另外一个可视化工具。在写代码的时候,可能5种类型的日志都会使用,但是在实际调试过程中可能只想看到某几种类别的实时信息,通过这个工具可以实时调整,让节点输出我们想要的级别的一些信息。例如我们只想看到ERROR或者FATAL信息,就可以把某一个节点的信息级别设置为ERROR,这样这个节点所打印的ERROR和FATAL的信息可以通过命令行或者LOG文件里面去看到,其它级别的信息不会干扰实时调试。


3.Robot Models URDF

在进行实际模拟的时候,可以用一套语言来定义机器人模型,这套语言被定义为统一机器人描述格式语言URDF。它也是一套xml的语言描述,这个描述格式里面包含两个核心的概念:一个是节点Link,一个是节点之间的连接关系Joint。Joint会指定Parent节点和Child节点,这样就可以描述一个完整的拓扑结构,也就是对整个网络拓扑结构的xml语言化描述。在进行仿真的时候,通过加载对应的URDF文件,在仿真环境里面实时地展示所需要调试的信息。


4.SDF Simulation Description Format

Simulation Description Format(SDF)是另外一个调试工具。之前介绍的Rviz调试工具,更多的是看到消息收发之间的实体化展示,例如展示点云、图像和其它一些信息。如果进行仿真模拟,如机器人模拟的时候,就用另一套工具Gazebo。Gazebo是ROS的一个开发包,它里面所使用的描述语言就是Simulation Description Format。用Gazebo加载URDF时,Gazebo首先把URDF描述语言转换成SDF语言,然后再进行加载和展示。

Apoll进阶课程㉞丨Apollo ROS原理—3相关推荐

  1. Apollo进阶课程㉟丨Apollo ROS原理—4

    原文链接:进阶课程㉟丨Apollo ROS原理-4 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架. ROS本身是基于消息机制的,可以根据功能把 ...

  2. Apollo进阶课程㉝丨Apollo ROS原理—2

    原文链接:进阶课程㉝丨Apollo ROS原理-2 在ROS系统中,从数据的发布到订阅节点之间需要进行数据的拷贝.在数据量很大的情况下,很显然这会影响数据的传输效率.所以Apollo项目对于ROS第一 ...

  3. Apollo进阶课程㉜丨Apollo ROS原理—1

    原文链接:进阶课程㉜丨Apollo ROS原理-1 ROS在开发过程中,基于功能把整个自动驾驶系统分成多个模块,每个模块负责自己消息的接收.处理.发布.当模块需要联调时,通过框架可以把各个模块快速的集 ...

  4. Apollo进阶课程㊱丨Apollo ROS深入介绍

    原文链接:进阶课程㊱丨Apollo ROS深入介绍 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架.ROS本身是基于消息机制的,可以根据功能把软 ...

  5. Apollo进阶课程㉚丨Apollo ROS背景介绍

    原文链接:进阶课程㉚丨Apollo ROS背景介绍 ROS是机器人学习和无人车学习最好Linux平台软件,资源丰厚.无人车的规划.控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接. ...

  6. Apollo进阶课程㉛丨Apollo ROS概述

    原创: 阿波君 Apollo开发者社区 1周前 ROS提供一些标准操作系统服务,例如硬件抽象.底层设备控制.常用功能实现.进程间消息以及数据包管理.ROS是基于一种图状架构,从而不同节点的进程能接受. ...

  7. Apollo进阶课程㊲丨Apollo自动驾驶架构介绍

    原文链接:进阶课程㊲丨Apollo自动驾驶架构介绍 自动驾驶硬件架构:一般采用激光雷达作为主要感知传感器,同时结合摄像头.GPS/IMU.毫米波雷达.超声波雷达等,以NVIDIA Drive PX2 ...

  8. Apollo进阶课程㊳丨Apollo平台的快速入门

    原文链接:进阶课程㊳丨Apollo平台的快速入门 Apollo是向汽车行业及自动驾驶领域的合作伙伴提供一个开放.完整.安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾驶系 ...

  9. Apollo进阶课程㉘丨Apollo控制技术详解——基于模型的控制方法

    原文链接:进阶课程㉘丨Apollo控制技术详解--基于模型的控制方法 PID控制是一个在工业控制应用中常见的反馈回路部件,由比例单元P.积分单元I和微分单元D组成.PID控制的基础是比例控制:积分控制 ...

最新文章

  1. openresty 前端开发序
  2. Mysql可视化工具Navicat中文版下载和报错解决
  3. Python访问MySQL
  4. Head First FILE Stream Pointer Overflow
  5. 【.NET Core 3.0】小技巧 || 原生DI一对多注入
  6. java 寻找和为定值的多个数_算法笔记_037:寻找和为定值的两个数(Java)
  7. SLAM GMapping(8)重采样
  8. SQL Server MDS(主数据服务)介绍
  9. EXCEL同一个界面下打开两个表格比较
  10. 狂雨小说cms采集规则教程
  11. 摸鱼必备游戏(上班族专用斗地主)
  12. HP Networking/Comware NETCONF interface quick tutorial (using python’s ncclient and pyhpecw7)
  13. linux设备驱动之 i2c设备驱动 at24c08驱动程序分析【全部地址的操作】
  14. 管家婆软件显示服务器连接失败,管家婆软件提示“连接服务器失败”怎么办
  15. 安装Windows+Ubuntu双系统
  16. 【大脑】--如何让大脑快速记忆
  17. [前端面试题][‘1‘,‘2‘,‘3‘].map(parseInt)
  18. Excel定位功能删除空值所在行
  19. SAP 供应商合作伙伴功能设置
  20. 【ROS】RViz使用详解

热门文章

  1. md5与des算法有何不同_到底AI芯片和传统芯片有何区别?
  2. lua 调用文件中的函数调用_深入Lua:调用相关的指令
  3. Linux优盘挂载卸载以及文件查看
  4. C语言#define宏定义可能注意不到的地方
  5. java for循环 等待_java – 主题:忙等待 – 空循环
  6. MinGW编译boost库
  7. x210-II WinCE启动10s,还可继续优化
  8. make xdb file.php,SCWS入门使用指南
  9. python安装后cmd找不到_关于Python3.6环境中,virtualenv找不到命令的解决方法
  10. 【转】foreach for each for_each引发的探讨:c++世界中的循环语句