原文链接:进阶课程㉟丨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诊断功能供开发者在实际开发过程当中去使用。

Apollo进阶课程㉟丨Apollo ROS原理—4相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Apollo进阶课程㉗丨Apollo控制技术详解——控制理论

    原文链接:进阶课程㉗丨Apollo控制技术详解--控制理论 控制模块根据预测的轨迹和估计的车辆状态向油门.刹车或转向扭矩发送适当的命令.控制模块使汽车尽可能接近计划的轨迹.控制器参数可以通过最小化理想 ...

  9. Apollo进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview

    原文链接:进阶课程㉑丨Apollo规划技术详解--Basic Motion Planning and Overview 运动规划(Motion Planning)就是在给定的位置A与位置B之间为机器人 ...

最新文章

  1. ubuntu平台下搭建PHPWind网站运行环境
  2. 聊一聊:你碰到过哪些操蛋的文档?
  3. POJ 1364 King (差分约束系统)
  4. 【控制】《最优控制理论与系统》-胡寿松老师-第1章-导论
  5. node.js的下载,安装以及卸载
  6. Linux下的C编程实战之文件系统编程
  7. 电脑版剪映v0.6.9内测版
  8. Tensorflow卷积神经网络
  9. 崩溃死我的Dev无法调试,Devc调试点下一步没反应
  10. Aruba7010 默认密码_收藏 | 各大品牌的变频器默认密码、万能密码、超级密码汇总...
  11. 人人开源(后台代码、前端项目、代码自动生成)
  12. 阿里云oss文件分片、断点续传上传
  13. Aviary 图片编辑
  14. 高级密码学复习1-HUST版
  15. 支付宝wap支付开通流程
  16. 趣谈implicit instantiation of undefined template
  17. 一经度是多少公里?一纬度是多少公里
  18. 抖音快手矩阵式操作 精准YL
  19. uniapp 浙政钉埋点——小程序
  20. android 备份整个手机,借助 TWRP,让你的 Android 手机也有「一键 Ghost」式的全面备份...

热门文章

  1. [Leedcode][JAVA][第50题][Pow(x, n)][快速幂][分治][转换类型]
  2. POJ 2299 - Ultra-QuickSort BIT
  3. java mtom_java-axis1.4客户端使用Mtom发送文件
  4. 电子报账系统源码_网上商城系统建设心得,轻松搞定选择困难
  5. 十天学会PHP(第五版),十天学会php之第五天
  6. python中如何替换某列特定数值_python 怎么根据两列值,修改对应的某列值,其中一列的为需要修改的列标题...
  7. uinty粒子系统子物体变大_Unity2018粒子系统全息讲解,坑深慎入(3)
  8. 封装出现 用户.计算机,ES4封装WIN7出现[Administrator.计算机名]目录的可能解决方案...
  9. c语言inline不起作用,C语言inline内联函数学习小结
  10. java rmi 是否 必要_Java学习之路-RMI学习