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

原文链接:进阶课程㉟丨Apollo ROS原理—4 

ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架

ROS本身是基于消息机制的,可以根据功能把软件拆分成为各个模块,每个模块只是负责读取和分发消息,模块间通过消息关联。

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

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

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

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

目录

1. ROS Services

2. ROS Actions

3. ROS Time

4. ROS Bags

5. 调试工具


本节主要介绍几个在实际开发调试过程中使用比较广泛的一些概念。

1. ROS Services

ROS提供了三种节点之间通信的方式:

  • 第一种是大家最常用的基于消息的订阅发布模型;
  • 第二种就是ROS Service;
  • 第三种Param,它借鉴了Service的思想;

Service在自动驾驶系统里面使用的比较广泛,与基于消息发布订阅模型类似, Service有一个service name,同时Service底层是一个SRV描述文件,它和MSG描述文件比较类似,不同是SRV描述文件定义了两种消息:请求信息的消息格式和响应格式。请求是Client向Server发出请求的消息定义格式,与Response逻辑类似。

对应Service,Rosservice提供了一系列命令行工具,例如常用的像List、Call等一些基本的功能响应。

这是一个SRV文件,可以看到所有的Service对应的SRV文件描述都有一个Request和Response方式。当然这两个都可以置为空,置空就没有意义了。此外,也可以写一些具体的类型,比如我向你发送一个什么样的消息请求,你在接受我的对应消息请求之后会返回一个什么样的响应的数据格式指令。

上面结合一个实际的例子,给出Service具体的使用方法。Service启动的时候,需要提前启动Roscore,即节点管理器。第二步启动Service的一个例子程序,之后通过List和Type命令可以看到在启动某一个节点后,这个节点里面注册了某个Service的一个实际展示。

与前面提到的Rostopic对应,ROS也提供了命令行方式调用一个Service,当然命令行方式调用Service也是把它当成了一个节点的方式进行Service、Client链路的建立和响应。

这个是结合实际的C++例子,描述Service的具体使用方法,可以看到Service和普通的Publisher、Subscriber比较类似,尤其是和Subscriber比较类似。但不同的是它有一个Service方法,定义了节点提供的服务类型。以及当Client向它发出请求时,节点会做出什么样的行为同时把这个结果再发送给Client。第二个不同点是在注册Service时,把Service的Name,和Service所提供的函数注册即可。与注册Server的节点对应,Client的节点也比较简单,只需要进行两步就可以完成一个Service的使用,第一步是声明Client对象,第二步是直接去调用Service,传入对应的Request就可以拿到对应的Response结果。


2. ROS Actions

ROS还提供了另外一种通讯方式,这种不常见通讯方式就是Actions,相比Service,它多了一个取消的功能和带有反馈机制。对于Service,发起一个Service请求需要等到返回一个正确的Response结果才会退出。Actions在发送一个Service请求之后,它可以发送取消的命令,取消这个Service请求,可用于一些较长时间的Service场景。当然目前这种场景在Apollo自动驾驶系统里面比较少。ROS Actions

在.action文件里定义了action,跟srv其实类似,只不过是在.action文件里面,定义了更多的类型。


3. ROS Time

ROS系统供了一套time机制,这个time的时间源来自于PC机的系统时间。Rostime基于此提供了一个重要的功能点:仿真时间。用ROS系统进行自动驾驶开发的时候,仿真模拟是一个不可缺少的环节。如刚才提到的Rviz、Gazebo都是为开发者进行离线仿真和模拟的强大调试工具,在使用这些调试工具的时候,实验数据可能是很早之前录制的,也有可能是在其他地方录制的。这种之前的数据在仿真环境下进行模拟时,如何回放当时的场景,或者是如何把当时的时间转化到现在的时间?Rostime就供了虚拟时钟功能,保证在回放一些历史实验数据,或者其他地方实验数据时,让整个仿真系统认为现在的场景就是所需要的那个系统时间和系统场景。


4. ROS Bags

ROS Bags有两个比较重要的功能,第一个是把实际车上调试的数据或者是把自动驾驶进行道路测试的原始传感器数据按一定格式录制到某个bag文件里。实验室或者开发环境可以根据bag文件不断的回放,去复现当时的网络场景。例如,有一个场景,车在某一个特定的地方做了一个错误的决策,我们想改一版算法去验证这个场景有没有被覆盖,这时可以拿那个Rosbag回放,验证新版算法的输出是不是符合预期。另外Rosbag数据对算法进行模型训练和调优也是非常有必要的。


5. 调试工具

最后了解一下调试工具,如下图所示,ROS提供了一些简单的功能,比如说ROS WTF这种功能,可以让用户很简单地查看当前系统是环境变量设置的问题,还是其他的一些核心库链接的位置问题,还是其他的问题导致的一些运行失败,通过WTF都可以很快的定位,同时,ROS也提供了一些其他的Debug诊断功能供开发者在实际开发过程当中去使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《操作系统真象还原》-阅读笔记(中)

第七章 操作系统是由中断驱动的。 中断分为外部中断和内部中断。 外部中断分为可屏蔽中断和不可屏蔽中断,内部中断分为软中断和异常。 外部中断 来自CPU外部的中断。可屏蔽中断:通过INTR引脚进入CPU,外部设备如硬盘、网卡、打印机等发出的…

动手学无人驾驶(2):车辆检测

上一篇博客介绍了无人驾驶中深度学习在交通标志识别中的应用(动手学无人驾驶(1):交通标志识别)。 本文介绍如何使用深度学习进行车辆检测,使用到的模型是YOLO模型,关于YOLO模型的具体检测原理&a…

《操作系统真象还原》-阅读笔记(下)

第十一章 任意进程的页目录表第0~767个页目录项属于用户空间,指向用户页表。第768~1023个页目录项指向内核页表。每创建一个新的用户进程,就将内核页目录项复制到用户进程的页目录表,其次需要把用户页目录表中最后一个页目录项更新为用户进程自己的页目…

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

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

一步步编写操作系统 31 cpu的分支预测 下

让我们说说预测的算法吧。 对于无条件跳转,没啥可犹豫的,直接跳过去就是了。所谓的预测是针对有条件跳转来说的,因为不知道条件成不成立。最简单的统计是根据上一次跳转的结果来预测本次,如果上一次跳转啦,这一次也预…

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

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

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

原文链接:进阶课程㊳丨Apollo平台的快速入门 Apollo是向汽车行业及自动驾驶领域的合作伙伴提供一个开放、完整、安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾驶系统。 上周阿波君为大家详细介绍了「进阶课…

一步步编写操作系统 33 利用bios中断0x15子功能0xe820获取内存

咱们先介绍0xE820子功能,这是最灵活的内存获取方式。 bios中断 0x15的子功能0xE820能够获取系统的内存布局,由于系统内存各部分的类型属性不同,bios就按照类型属性来划分这片系统内存,所以这种查询则呈迭代式,每次bio…

16.深度学习练习:Building your Recurrent Neural Network - Step by Step

本文节选自吴恩达老师《深度学习专项课程》编程作业,在此表示感谢。课程链接:https://www.deeplearning.ai/deep-learning-specialization/Building your Recurrent Neural Network - Step by Step1 - Forward propagation for the basic Recurrent Neur…

【2019icpc徐州站】Random Access Iterator(概率dp,有坑,tricks)

题干: Recently Kumiko learns to use containers in C standard template library. She likes to use the std::vector very much. It is very convenient for her to do operations like an ordinary array. However, she is concerned about the random-access…

一步步编写操作系统 34 内核利用bios中断获取物理内存大小

接上文,另一个获取内存容量的方法是bios 0x15中断的子功能0xE801。 此方法虽然简单,但功能也不强大,最大只能识别4G内存,不过这对咱们32位地址总线足够了。稍微有点不便的是,此方法检测到的内存是分别存放到两组寄存器…

17.深度学习练习:Character level language model - Dinosaurus land

本文节选自吴恩达老师《深度学习专项课程》编程作业,在此表示感谢。 课程链接:https://www.deeplearning.ai/deep-learning-specialization/ 文章目录1 - Problem Statement1.1 - Dataset and Preprocessing1.2 - Overview of the model2 - Building blo…

Apollo进阶课程㊴丨Apollo安装过程概述

原文链接:进阶课程㊴丨Apollo安装过程概述 Apollo是一个自动驾驶的平台,推荐的参考运行环境为:ThinkPAD X240、CPU:i5 、四核 、内存 8G、 硬盘容量40G以上。 上周阿波君为大家详细介绍了「进阶课程㊳丨Apollo平台的快速入门」。 …

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

继承、实现、依赖、关联、聚合、组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继…

CS231n(1):图片分类笔记与KNN编程作业

声明:本博客笔记部分为CS231n官网笔记,这里对其进行引用,在此表示感谢。 课程官网地址为:http://vision.stanford.edu/teaching/cs231n/syllabus.html 本次课程对应B站教学视频为: https://www.bilibili.com/video/av5…

【HDU - 6557】Justice(思维,模拟,套路,SETset)

题干: On the table there are n weights. On the body of the i-th weight carved a positive integer kiki , indicating that its weight is 12ki12ki gram. Is it possible to divide the n weights into two groups and make sure that the sum of the weight…

Apollo进阶课程㊵丨Azure仿真平台使用

原文链接:进阶课程㊵丨Azure仿真平台使用 Azure是一种灵活和支持互操作的平台,它可以被用来创建云中运行的应用或者通过基于云的特性来加强现有应用。它开放式的架构给开发者提供了Web应用、互联设备的应用、个人电脑、服务器、或者提供最优在线复杂解决…

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式…

动手学无人驾驶(3):基于激光雷达3D多目标追踪

上一篇博客介绍了无人驾驶中的车辆检测算法(YOLO模型),该检测是基于图像进行的2D目标检测。在无人驾驶环境感知传感器中还有另一种重要的传感器:激光雷达。今天就介绍一篇无人驾驶中基于激光雷达目标检测的3D多目标追踪论文&#…

换种方法学操作系统,轻松入门Linux内核

计算机已成为现代人日常工作、学习和生活中必不可少的工具。操作系统是计算机之魂,作为用户使用计算机的接口,它负责调度执行各个用户程序,使计算机完成特定的任务;作为计算机硬件资源的管理者,它负责协调计算机中各类…