0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CAN总线在无人驾驶上的应用

ml8z_IV_Technol 来源:未知 作者:胡薇 2018-07-15 09:02 次阅读

前言

本文主要内容是——无人驾驶中的CAN(Controller Area Network )总线。

CAN总线在整个无人驾驶系统中有着十分重要的作用。除了在VCU信号需要通过CAN总线进行传输外,无人车上的某些传感器(如雷达、Mobileye)的信号传递也是通过CAN实现的。

我在无人驾驶,个人如何研究?中提到过实现一个无人驾驶系统,会有几个层级: 感知层 → 融合层 → 规划层 → 控制层 更具体一点为: 传感器层 → 驱动层 → 信息融合层 → 决策规划层 → 底层控制层

“传感器层”在之前的分享中已经介绍过了,这次主要介绍的是“驱动层”相关的内容。

正文

CAN通信是一套高性能、高可靠性的通信机制,目前已广泛应用在汽车电子领域。有关CAN的总线的原理及特性并不是本次分享的重点。本文的重点在无人驾驶系统获取到CAN消息后,如何根据CAN协议,解析出想要的数据。从CAN总线中解析出传感器的信息,可以说是每个自动驾驶工程师,甚至每一个汽车电子工程师必备的技能。

认识CAN消息

以百度推出的Apollo开源的代码为例做CAN消息的讲解,我们先看到每一帧的CAN消息是如何被定义的。

可以看到这个名为CanFrame的消息结构中包含4个关键信息,分别是:

1. uint32_tid

CAN消息的ID号。

由于CAN总线上传播着大量CAN消息,因此两个节点进行通信时,会先看id号,以确保这是节点想要的CAN消息。最初的CAN消息id号的范围是000-7FF(16进制数),但随着汽车电控信号的增多,需要传递的消息变多,信息不太够用了。工程师在CAN消息基础上,扩展了id号的范围,大大增加了id号的上限,并将改进后的CAN消息称为“扩展帧”,旧版CAN消息称为“普通帧”。

如果拿写信做比较,这个id就有点类似写在信件封面上的名字。

2. uint8_tlen

CAN消息的有效长度。

每一帧CAN消息能够传递最多8个无符号整形数据,或者说能够传递8*8的bool类型的数据。这里的len最大值为8,如果该帧CAN消息中有些位没有数据,这里的len就会小于8。

3. uint8_tdata[8]

CAN消息的实际数据。

正如刚才提到的,每一帧CAN消息都包含至多8*8个bool类型的数据,因此可以通过8*8个方格,可视化CAN消息中的data。如下图所示:

在没有CAN协议帮助我们解析的情况下,这里的数据无异于乱码,根本无法得到有用的消息,这也是CAN消息难以破解的原因之一。

4.timestamp

CAN消息的时间戳。

时间戳表示的是收到该CAN消息的时刻。通过连续多帧的时间戳,可以计算出CAN消息的发送周期,也可以用于判断CAN消息是否被持续收到。

综上,每帧CAN消息中最重要的部分其实是data,即8*8的bool值。所谓解析CAN消息,其实就是解析这8*8个bool类型的值。

认识CAN协议

目前业界的CAN协议,都是以后缀名为dbc的文件进行存储的。德国Vector公司提供CANdb++ Editor是一款专门用于阅读dbc文件的软件。

如下图所示,为Mobileye提供的车道线的dbc文件。(文末提供CANdb++ Editor安装包和Mobileye车道线的dbc文件的获取方法)

以id号为0x766的LKA_Left_Lane_A为例,这是Mobileye检测无人车左侧车道线的部分信息,包括了左侧车道线的偏移量,曲率等。该帧CAN消息(Message)中的五个信号(Signal),分别是Lane_Type、Quality、Curvature、Curvature_Derivative、Width_left_marking、Position。

每个信号的具体描述显示在软件右侧,其中与解析直接相关的三个要素已用绿色框选中。

1. Value Type(Unsigned或Signed)

某些物理量在描述时是有符号的,比如温度。而描述另外一些量时,是没有符号的,即均为正数,比如说曲率。

2. Factor 和 Offset

这两个参数需要参与实际的物理量运算,Factor是倍率,Offset是偏移量。例如Lane_Type和Quality信号的Factor为1,Offset为0,而其他信号的Factor均为小数。具体的计算方法请往下看。

双击LKA_Left_Lane_A,打开Layout页,会发现很熟悉的方块阵列,如下图所示。

工程师真正关心的恰好是这块彩色图,因为该图上的每个小方块和data中的每一个bool量一一对应。这就是CAN协议的真面目。

解析CAN信号

由于彩色方块图与data是一一对应的,我们将两个图叠加,将得到如下图所示的data图。

每个信号物理量的计算公式为:

1.Factor为1的物理量

由于Lane_Type和Quality的Factor为1,Offset为0,因此十进制值为多少,实际物理量即为多少。

从图中就能直接看出Quality这个信号占据两个位,二进制数11,换算为十进制是3(1*2 + 1*1);Lane_Type占据四个位,二进制数为0010,换算为十进制是2(0*8 + 0*4 + 1*2 + 0*1)。

所以这一帧信号表示此时的左车道线Lane_Type值为2,Quality值为3。对于整数值,通信双方可以约定规则,比如Mobileye就规定了,Quality为0或者1时表示车道线的置信度较低,不推荐使用此时的值;2表示置信度中等,3表示置信度较高,请放心使用。

2.Factor为小数的物理量

对于Factor不为1的物理量,比如Position,需要使用移位的方法进行解析,但解析公式保持不变。以百度 Apollo提供的源码为例进行讲解。

这里的bytes即为CAN消息中的data,首先将Position信号所在的行取出来,将第1行的8个bool值存储在变量t1中,将第二行的8个bool值存储在变量t0中。由于在这条CAN消息中,Position同时占据了高8位和低8位,因此需要将第一行和第二行的所有bool位拿来计算,高8位存储在32位的变量x中,低8位存储在32位的变量t中。

现在需要将高8位和低8位拼接,将高8位左移8位,然后与低8位求或运算,即可得到Position的二进制值。随后进行的左移16位,再右移16位的操作是为了将32位的变量x的高16位全部初始化为0。之后将x乘以Factor再加上Offset即可得到真实的Position值,给真实值加上单位meter,即可获取实际的物理量。

与CAN类似的通信协议

VCU、雷达等通过CAN总线传递信号,随着CAN的负载越来越高,很多传感器选择了其他通信方式。比如激光雷达的点云数据量太过庞大,使用的是局域网的方式进行传递;再比如GPS和惯导使用的是串口进行通信。

虽然通信方式和通信协议千差万别,但解析的方法都是一样的。

结语

好了\(^o^)/~,这篇分享的内容基本上讲清楚了CAN总线消息的解析过程。这是无人驾驶系统传感器驱动层的基本理论。

由于不同ID的CAN消息的结构不一样,因此在写解析代码时,需要十分仔细,否则会给后续处理带来想不到的bug。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN总线
    +关注

    关注

    145

    文章

    1811

    浏览量

    129582
  • 无人驾驶
    +关注

    关注

    97

    文章

    3876

    浏览量

    118962

原文标题:自动驾驶技术之——无人驾驶中的CAN总线

文章出处:【微信号:IV_Technology,微信公众号:智车科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    无人驾驶导航平台

    `` 本帖最后由 hexiaoyan1111 于 2014-11-11 11:27 编辑 无人驾驶导航平台作者:北京太速科技有限公司发达国家从20世纪70年代开始研究无人驾驶汽车,目前可行性
    发表于 11-11 11:21

    百度无人驾驶车北京完成路测

    国内无人驾驶汽车的消息一直处于沉寂状态,终于有一家打破国内该行业的平静局面。12月10日,百度正式对外宣布,百度无人驾驶车首次实现城市、环路及高速道路混合路况下的全自动驾驶,测试时最高速度达到100
    发表于 12-12 16:53

    谷歌欲英国首推无人驾驶汽车

    前两天,百度已经北京完成路测,如今国外又传来谷歌无人驾驶汽车的消息。12月14日,谷歌在过去的两年里,不断与英国***进行多次会谈,希望能在英国推广无人驾驶汽车。谷歌认为,无人驾驶
    发表于 12-14 14:07

    【话题】无人驾驶汽车,真的要来了么?

    无人驾驶技术中走得比较远的的一个。已研制出实体产品,并且已经安全无故障地行驶48 万公里。奔驰作为一家传统的汽车厂商很久之前就在自己的车型上配备了自动巡航功能,这也是最早自动驾驶技术的雏形,因此奔驰
    发表于 06-24 14:28

    无人驾驶电子与安全

    ,处理器经过数据分析然后根据机器学习长期积累的驾驶经验选择最优的解决方案,直接跨越到无人驾驶的阶段。基于大数据的分析,将可能出现的各种隐患消除未发生的萌芽中。不管是安全驾驶还是
    发表于 02-22 16:07

    无人驾驶上的车辆传感器

    近来无人驾驶车辆引起了广泛热议。 业界正在努力开发这种技术,将其作为提高安全性和节省费用的方法。 这已不再是遥不可及的构想,宝马、奔驰和特斯拉等公司均已发布或即将发布可使汽车自动驾驶的车辆系统。一些
    发表于 04-28 17:11

    无人驾驶与自动驾驶的差别性

    自动驾驶领域,目前有两大技术路径:一是以特斯拉等汽车厂商为代表的“辅助驾驶”升级路线,其探测技术基础是摄像头(机器视觉)、毫米波雷达、超声雷达;二是以谷歌等互联网公司为代表的“无人驾驶
    发表于 09-28 16:50

    激光雷达-无人驾驶汽车的必争之地

    `就在不久前,著名咨询公司罗兰贝格发布了《汽车行业颠覆性数据探测》第二期报告,报告指出,全球汽车行业向无人驾驶出行方向的发展速度有一定提升。而其中,提升的关键在于,整体变革进程上,各国均呈现出朝
    发表于 10-20 15:49

    无人驾驶汽车的关键技术是什么?

    无人驾驶汽车开发的关键技术主要有两个方面:车辆定位和车辆控制技术。这两方面相辅相成共同构成无人驾驶汽车的基础。
    发表于 03-18 09:02

    无人驾驶分级及关键技术

    无人驾驶分级无人驾驶汽车关键技术
    发表于 01-21 07:13

    无人驾驶汽车的工作原理是什么?

    无人驾驶汽车的工作原理是什么?无人驾驶汽车包括哪些技术?
    发表于 06-28 07:19

    介绍无人驾驶硬件平台设计

    本文是无人驾驶技术系列的第十篇,着重介绍无人驾驶硬件平台设计。无人驾驶硬件系统是多种技术、多个模块的集成,主要包括:传感器平台、计算平台、以及控制平台。本文将详细介绍这三个平台以及现有的解决方案
    发表于 09-09 07:37

    无人驾驶硬件系统主要包括哪些

    本文是无人驾驶技术系列的第十篇,着重介绍无人驾驶硬件平台设计。无人驾驶硬件系统是多种技术、多个模块的集成,主要包括:传感器平台、计算平台、以及控制平台。本文将详细介绍这三个平台以及现有的解决方案
    发表于 09-09 08:16

    如何实现无人驾驶硬件平台的设计?

    如何实现无人驾驶硬件平台的设计?
    发表于 11-02 09:29

    无人驾驶驶向低谷

    无人驾驶上路仍是一个遥远的未知数。
    的头像 发表于 06-06 14:57 3654次阅读