前言
本课程由Apollo资深工程师是夏黎明主讲,一共是7堂课,属于框架性讲解,需课后自行补充理论知识。下面是随堂记录。
Apollo_ROS背景介绍
- 课程目录

- 背景

为了应对这么复杂的系统,因此选择了ROS:它是一种基于消息传递的分布式多进程框架。

ROS概述
- 本节课程目录


- ROS比较明显的几个特征:点对点通信,支持分布式,跨语言(有专门的订阅接口),轻量级,开源。
- ROS的安装:

- ROS的master

节点的启动没有先后关系(但ROScore要在所有节点之前启动),如perception先启动,向ROScore(roscore作用是启动一个节点管理器(rosmaster),它是ros节点运行的前提,所以在执行启动ros节点前,第一步都需要执行roscore。)注册,并说明会发出obstacles的topic,然后planning启动向ROScore注册名说明会接收obstacles的topic。然后ROScore会向planning说明有个叫perception的节点发出该消息,planning则会寻找perception并与之握手,握手成功后通信建立(基于TCP协议)。MSG定义了通信的数据格式:基本类型和自定义类型。

- ROS的node

6. ROS的topic:/topic是全局变量,所有人都可以看到这个topic。如果不加/,在发送时会自动在topic前加上发送node的namespace,以防命名冲突。

7. ROS的messages:

8. 为解决太多节点启动(需要用启动窗口挨个启动),Apollo提出了ROSlaunch描述文件,用于描述所有节点启动行为。它会做两件事情:找到描述文件中节点的位置,并启动该节点。该描述文件中虽不包含启动ROScore,但ROSlaunch启动时会先检测ROScore,如果未启动则会自行启动core。后面会举个实例(序号11)
9. 实例演示

启动单独节点(如下图中的talker,如发送obstacles的perception),启动单独节点,除了通过ROScore启动外,还可以用rosrun命令,前面是package包,后面是可执行文件。

ROSout是ROScore启动时默认启动的隐藏节点,是记录日志相关的节点。并且每个节点会默认启动两个service:get_loggers和set_logger_level,为了设置节点的日志层级。

Rostopic echo相当其启用了一个lisener节点来展示某个topic中MSG的具体信息,hz是统计发送频率(一般激光雷达是10hz)


可以模拟发送节点,发送自己想要的topic

10. ROS所采用的编译系统,它是基于cmake的一套自己的catkin编译系统,catkin底层就是一些cmake的封装。类似Cpp工程的建立,使用catkin create建立一个节点工程包(会生成一个文件夹如src文件夹放cpp,cmakelist文件夹放整个package编译的过程)。使用catkin build可以编译工程包,该命令执行后会多两个文件
Apollo ROS详解:通信优化与分布式框架

本文深入探讨了Apollo中对ROS的优化,包括通过共享内存提升通信性能,减少数据拷贝,以及去中心化的网络拓扑,增强了系统的稳定性和效率。此外,介绍了ROS的组件如节点、话题、服务、参数和可视化工具,并强调了Apollo在兼容性和异常恢复机制上的改进。
最低0.47元/天 解锁文章
2107





