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的RS485 CAN HAT(<10美元),PyCAN(<50美元),Komodo CAN Solo分析仪,以及Vector工具(>1000美元)。

使用RS485 CAN HAT Raspberry Pi3和PyCAN Raspberry Pi3都是低成本且可靠的CAN信息分析方法。RS485 CAN HAT和PyCAN提供了用于经典Pi3的CAN总线硬件以及基于Python和C的驱动,用户可基于此在Pi3上用RS485 CAN HAT和PyCAN模块编写应用。新纳传感提供了一个开源的测试应用,用户可以借助RS485 CAN HAT和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,进行编译并安装应用即可。(安装步骤可以参考我们的在线文档)

基于J1939的IMU和动态倾角传感器

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了解更多信息。

vector can通信源码_CAN总线IMU在自动驾驶安全控制中的应用相关推荐

  1. vector can通信源码_汽车电子CAN网络dbc文件

    CAN网络作为汽车网络已经被广泛使用,随着电子零部件被越来越多的应用到汽车中,零部件之间的通信越来越多,德国vector公司作为行业内的标杆企业,vector公司定义了一套文件规范-----dbc,作 ...

  2. 多摩川绝对值编码器CPLD FPGA通信源码(VHDL格式+协议+说明书)

    多摩川绝对值编码器CPLD FPGA通信源码(VHDL格式+协议+说明书) 用于伺服行业开发者开发编码器接口,对于使用FPGA开发电流环的人员具有参考价值. 适用于TS5700N8501,TS5700 ...

  3. boost::asio使用UDP协议通信源码实现

    说明:以下源码来自参考文献[1], 比原文更丰富, 更有指导意义, 方便日后参考. udp servr端源码 //g++ -g udp_server.cpp -o udp_server -lboost ...

  4. python3 tcp 通信源码

    tcp套接字 *************************************** from socket import * s=socket() s.setsockopt(SOL_SOCK ...

  5. spark学习-33-Spark的RPC通信源码分析

    1.概述 private[spark] trait ThreadSafeRpcEndpoint extends RpcEndpoint 凡是继承RpcEndpoint,都是一个消息通讯体,能接收消息. ...

  6. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】

    进行TCP协议网络程序的编写,关键在于ServerSocket套接字的熟练使用,TCP通信中所有的信息传输都是依托ServerSocket类的输入输出流进行的. TCP协议概念 先来了解一下TCP协议 ...

  7. Java-TCP通信(实现多发多收、群聊功能),BS通信源码

    个人简介 大家好,我是韩慧腾.一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教.

  8. 全网疯传!Java利用TCP协议实现客户端与服务器通信【附通信源码

    目录 TCP协议概念 ServerSocket类 服务器端程序 客户端程序 Hello!大家好哇!我是灰小猿! 上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP.TCP.UDP以及端口和套 ...

  9. 易语言PHP非对称加密,RSA非对称加密通信源码

    RSA非对称加密通信 非对称加密是非常安全的一类加密算法 TXQQ客户Duan的通信也用了椭圆曲线非对称加密(ECC) 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(priva ...

最新文章

  1. C++知识点1——基础
  2. MATLAB的size()函数的返回值是一个1*2的向量哦,即使参数是向量也是1*2的向量哦!
  3. 【AI白身境】只会用Python?g++,CMake和Makefile了解一下​​​​​​​
  4. 焊接件技术要求怎么写_专硕论文写作要求有高么?具体怎么写?
  5. jmeter难吗_Jmeter集成Jira提交缺陷
  6. 面对这么多困境,梅耶尔还能怎么应对?
  7. mysql8.0免安教程图解,mysql 8.0.21免安装版配置方法图文教程
  8. Android Glide数据更新及内存缓存、硬盘缓存清理
  9. Toast-Android 专属浮动小提示
  10. 阿里云创新产品团队招聘!一大波岗位呼唤你
  11. 达梦数据库(简称DM)的初级教程分享
  12. 浅谈能耗分项计量监测系统在某大型公建的应用
  13. PDF转Word的免费软件推荐
  14. 在那海的那边,山的那边,有一条蓝鲸鱼----它的名字叫Docker!!
  15. C语言删除字符串中的单词
  16. 生命是一个无解的谜——《我喜欢生命本来的样子》读后感作文2100字
  17. 多重比较和多重比较陷阱
  18. insert into bak select * from test会锁表吗
  19. #{}和¥{}的区别?
  20. Artifact xxx:war exploded: Error during artifact deployment.See server log for details.

热门文章

  1. 多分类学习方法、One vs. Rest、One vs. One、Many vs. Many、多输出分类
  2. 华为NPU卡ubuntu(无网络连接情况)驱动安装记录
  3. 目前服务器操作系统版本号,目前服务器操作系统版本号
  4. StatQuest学习笔记23——RNA-seq简介
  5. 关系抽取论文总结(relation extraction)不断更新
  6. mysql隐藏用户名_系统默认的MySQL用户名消失的解决方法(修正版)
  7. tf.keras.layers.Conv2D 示例
  8. could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 错误的解决办法
  9. windows10下 tensorflow2.0 gpu 安装
  10. 二十六、内存管理的概念