Tag: Autonomous Driving

  • 快速上手百度Apollo开发的一点经验之谈

    本文

    主要面向由ROS快速转向CyberRT框架的开发者,是一份QuickStart手册。因为是从ROS出发,所以需要读者具备一定的ROS基础。

    预备知识

    1. Linux
    2. ROS
    3. C++

    简而言之,会Linux命令行操作,熟悉ROS框架,了解基本C++类对象语法。

    CyberRT v.s. ROS

    CyberRT是参考ROS开发的,所以将他们联系起来看,会比较好地理解和上手apollo的开发。

    基本概念

    首先我们来看下两者在开发相关的一些主要概念上的异同。

    CyberRT ROS Description
    component package 组件/包,都是构建项目的最小单元
    node node 节点,一个组件/包里可包含多个节点
    channel topic 通道/话题名,用于节点间通信,一个节点可包含多个通道/话题
    message message 消息名,定义了数据传输的格式,一个通道/话题对应一种消息
    Reader/Writer Subscriber/Publisher 读写器/发布订阅器,都是实现节点通信的具体接口

    另外 Services 与 Parameters 等概念也类似,因为Service/Client通信模型用的少就不赘述了。

    工程目录

    了解以上概念后,现在我们从两者的工程目录来看,就比较清晰了。

    CyberRT ROS Description
    conf config 配置文件
    dag/launch launch 启动文件
    proto msg 消息文件
    nodes 源码文件
    BUILD CMakeLists.txt 编译文件
    test* test 测试文件

    注: 其中是CyberRT一个组件目录中一些具体节点名,ROS中把他们都放在一个目录nodes里了

    熟悉ROS的朋友可以很明显看出两者其实非常类似,差异主要有这两点:

    1. Apollo引入了google的protobuf取代了ROS原有的msg消息定义
    2. Apollo采用Bazel编译工具来管理C++依赖环境,而不是Cmake

    所以从一个ROS开发者切换到CyberRT下,需要简单了解下google的gflags、glog、gtest以及protobuf用法,还有就是Bazel的基本语法,为此我在本文最后梳理了一份参考资料供大家阅读。

    开发工具

    最后在开发工具上,Apollo其实也准备了许多ROS中比较常用的工具。因为开发必然会用到,所以我也简单提下。

    CyberRT ROS Description
    cyber_visualizer Rviz 用于消息的可视化
    cyber_monitor rostopic/rqt 查看实时消息数据
    cyber_recorder rosbag 录制/回放消息数据

    参考资料

    1. 官方关于CyberRT的README,其中 ‘Quickstart’、 ‘API’ 与 ‘DeveloperTools’ 这三个是必看,也最好跟着做下,可以很快的了解CyberRT框架。
    2. google关于protobuf的Guide,其中’Defining A Message Type’这段内容是必读的,其他消息嵌套等用法可以等用到了再来查阅。

      另外我们可以结合apollo开放平台文档里的’数据格式’那栏内容来加深我们对Apollo消息格式的理解。
    3. 关于gflags的简介,这篇说明是比较简俗的,内容不多可以看完。
    4. 关于glog的简介 ,可以先简单浏览下。日志输出在后期调试还是比较重要的,完整的说明到时用到了,可在google的github仓库里找到glog的README细看。
    5. gtest的入门手册,其中’Googletest Primer’必看,其他内容可到时再查。
  • Autoware调试心得-astar_avoid的避障实现

    简介

    网上有关 astar_avoid 模块的源码分析挺多的,我这里就不对它用到的 AStar 算法做过多赘述了。不过知道它的实现原理跟实际调试还是存在很大出入,因为 AStar 算法在实际应用时需要跟Autoware的其他模块所结合,为此了解其实际避障逻辑尤为重要,这也是本文的由来。

    准备工作

    1. 实车或仿真环境
    2. 已部署成功 Autoware
    3. 一个可被检测到的障碍物

    避障逻辑

    因为我看到 astar_avoid 模块里的源码用到了有限状态机(Finite State Machine)来应对各种可能遇到的环境,所以我就以期望的避障状态出发绘制了下面两张时序图。

    成功避障

    下图是我们最期望看到的,一次成功的避障会经历的各个状态的切换过程。
    [wppa type=”photo” photo=”86″]

    没有避障

    而实际调试中没有避障成功的话,那就大概率是卡在下图的某一环节里了。
    [wppa type=”photo” photo=”87″]

    这两图放一起应该很清晰就能认识 astar_avoid 模块的避障逻辑了。