CAN总线IMU在自动驾驶安全控制中的应用

自动驾驶设计工程师如何采用CAN总线集成IMU导航系统

        CAN(Controller Area Network)作为一种成熟可靠的车载设备通信标准,在过去30多年中几乎应用于所有的客车和重型车辆,通过低成本的物理层和稳定可靠的传输层可实现总线上的消息传输。自动驾驶汽车需要大量传感器来进行可靠的数据交换,CAN就是中低速设备通信接口的理想之选,如轮速传感器、转向角度传感器、节气门位置传感器和惯性测量单元(IMU)。

CAN总线网络示意图 (Image Credit: Tek Eye)

        惯性测量单元(IMU)由三轴加速度计和三轴角速度传感器(陀螺仪)组成,分别测量车辆的位移和转动。与单芯片加速度计和陀螺仪不同,经过温度校准的IMU模块在其工作温度范围内的零偏接近于零。通常,IMU模块还包含可实现电子指南针功能的磁传感器。

        尽管CAN总线标准已经非常成熟,但直到最近才广泛应用于车载IMU 。新纳OpenIMU300RI就是代表之一。

具有开源通信和导航软件的CAN总线OpenIMU300RI

        OpenIMU300RI是一个九轴IMU模块,配备CAN总线接口,RS-232接口和ARM Corte M4 CPU。借助新纳传感的免费开源开发者工具链,可在该CPU上运行标准或定制的算法。

为什么要自定义CAN总线IMU应用?

        在自动驾驶汽车中,IMU数据通过CAN总线传输到其他传感器及主控制器。我们的一些客户会使用CAN总线将IMU数据与多达20个其他车辆子系统进行数据通信,例如,激光雷达、相机、雷达以及主计算引擎。这些子系统都将受益于高性能IMU。

        基于CAN总线的OpenIMU300RI还可以接收其他设备的数据。这是一个非常强大的功能,例如,新纳VG_AHRS应用中提供的动态倾角测量算法,能够通过CAN总线获取里程表或车速等信息,更好地补偿线加速度对滚动和俯仰角度的影响,进一步完善测量性能。此外,OpenIMU300RI配有RS-232接口,可用于输入或输出额外数据。例如,在新纳INS导航应用中,通过RS-232接口输入GPS测量数据,与OpenIMU300RI内部IMU融合,可实现GNSS/INS组合导航。

        OpenIMU300RI支持CAN 2.0A和2.0B。本文将讨论两个立即可用的示例应用,并演示如何开发自定义应用程序。第一个示例中使用CAN 2.0A,第二个使用CAN 2.0B。

        CAN有两种标准消息格式:CAN 2.0A的消息标识符为11bit;CAN 2.0B的消息标识符为29bit。

CAN2.0A 和CAN2.0B 信息传递 (Image Credit: Sparkfun Electronics)

        这两种消息格式的最大有效数据载荷都只有8个字节。标准的CAN通信速率为250Kbps、500Kbps和1Mbps。根据以往惯例,这两种消息格式和三种波特率在实际应用中都很常见。消费型汽车通常使用11bit标识符的自定义信息,重型车辆更常用29bit的标识符并根据J1939标准来定义信息。近来,一些应用程序开始使用新的CAN FD协议,该协议支持高达64字节的有效数据负载。

        得益于CAN总线在车辆上的普及,CAN接口成为一种方便可靠的车载IMU数据传输方式。

如何用CAN调试应用程序?

        惯性导航和GNSS导航系统的开发者似乎对CAN总线并不熟悉。使用CAN分析仪可以简化解析CAN信息的过程。一个典型的CAN分析仪包括可用于Raspberry Pi3的PyCAN(<50美元),Komodo CAN Solo分析仪,以及Vector工具(>1000美元)。

        使用PyCAN Raspberry Pi3是一种低成本且可靠的CAN信息分析方法。PyCAN提供用于经典Pi3的CAN总线硬件以及基于Python和C的驱动,用户可基于此在Pi3上用PyCAN编写应用。新纳传感提供了一个开源的测试应用,用户可以借助PyCAN通过CAN总线读取和解析消息。

        另一种方法是使用一个低成本的基于USB的CAN分析仪,例如Komodo CAN Solo。该设备价格合理,提供标准的Windows图形应用来读取和记录总线信息,无需用户编程。

        最后,Vector提供了一系列成熟的CAN工具和软件,广泛应用于汽车工业,具有完整的功能支持。通过Vector软件工具,可轻松创建和加载“DBC”文件,记录解码后数据(DBC文件是描述一组CAN总线消息的纯文本文件格式)。Vector还兼容工业标准消息格式,如J1939。Vector软硬件工具目前的唯一缺点是价格过高。

可自定义CAN信息的IMU

        目前,大量汽车使用CAN 2.0A(11bit标识符)在CAN总线上传输传感器数据。这些数据可通过ODBII端口获取,但数据编码并不是标准化的。开源工程opendbc整理了大量常见车辆的信息结构并在GitHub上发布了相应的DBC文件。

        下面是2017年本田奥德赛引擎数据信息的一个示例:

本田奥德赛示例CAN 2.0A信息

        第一行的“344”是11bit信息ID,对应各行描述了传输速度、引擎转速、里程表、计数器以及校验和如何编码为64bit有效数据。该GitHub页面提供了DBC文件格式的关键细节。

        类似地,IMU可以为其加速、速率和其他IMU数据定义一组信息,然后创建DBC文件来描述所选编码。典型的IMU传感器分辨率通常为16bit或更高,8字节的有效数据载荷无法存放完整的6轴或更多轴IMU数据。如下所示,3轴加速度数据编码为一条信息,三轴角速度编码为另一条信息。两条信息都包含了时间戳以进行时间同步。

OpenIMU300RI CAN 2.0A信息

        若要获取上述信息对应的OpenIMU300RI示例源代码,需安装Microsoft Visual Studio Code中的Aceinna extension,进行编译并安装应用即可。(安装步骤可以参考我们的在线文档

基于J1939IMU和动态倾角传感器

        J1939是一个使用CAN 2.0B信息对车载传感器和诊断数据进行编码的SAE标准。由于信息内容和大小的标准化,J1939简化了数据交换过程。J1939还为设备提供自定义信息空间。

        J1939中的一条信息对应一个PGN(PGN是29bit标识符的一部分)。例如,加速度数据的PGN为61485。61485信息的内部数据同样进行了标准化。传感器的x轴、y轴和z轴读数通过一个“SLOT”数字编码(SLOT是”Scaling,Limit,Offset and Transfer ”的缩写)。在J1939中,SLOT定义了每一个传感器数据的编码。例如,加速度信息的SLOT为303。即303 SLOT编码加速度的分辨率为0.01m/s2,范围为-320~320m/s2,偏置为-320m/s2

J1939信息标识符定义 (Image Credit: Ixxat)

        新纳OpenIMU300RI官方IMU应用提供了符合J1939的IMU输出,加速度和角速度的PGN分别为61485和61482。

        新纳OpenIMU300RI还支持动态倾角算法,新纳传感将该算法称为“Vertical Gyro”,通过编译OpenIMU的VG_AHRS应用,可在OpenIMU300RI平台上安装该算法(具体方法可参考新纳传感在线OpenIMU手册)。该算法通过对角速度传感器输出进行积分并利用加速度计测量作为水平参考以修正长期的积分漂移,来计算动态倾角,即滚动角和俯仰角。J1939的Slope Sensor 2信息(PGN为61481)用于编码动态滚动角和俯仰角。

        尽管J1939是一个国际标准,但为了方便起见,IMU设备的信息结构仍可通过DBC文件来描述。该DBC文件说明了不同信息的编码方式,包括加速度、角速度和动态倾角。

编写自定义应用

        上述内容介绍了CAN和OpenIMU300RI的基本内容,下面将讨论如何在OpenIMU300RI上编写自定义应用。首先下载Microsoft Visual Studio Code,安装Aceinna extension获取所需工具链。新纳传感的开发工具链支持Mac、Windows和Ubuntu。开始编写自定义应用的最佳选择是使用上述两个示例应用中的一个。

        下图给出了OpenIMU300RI应用程序的顶层数据流。

OpenIMU300RI软件数据流图

        综上所述,CAN总线作为一种广泛应用于汽车行业的通用标准总线,同样也是自动驾驶或辅助驾驶车辆上IMU的理想数据接口选择。OpenIMU300RI的开源代码和工具链为我们提供了简单灵活的集成方法。

 

关于新纳传感系统有限公司

        新纳传感系统有限公司是全球领先的MEMS传感解决方案提供商,产品线包括基于磁阻薄膜的高频率高带宽电流传感器、高性能代码开源惯性测量单元(IMU)、高精度实时动态(RTK)导航系统和厘米级精度定位服务。公司在中国无锡设有研发与生产基地,并在波士顿、芝加哥和硅谷设有全球研发中心。请访问新纳官网www.aceinna.cn了解更多信息。