Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CAN总线简介:如何以编程方式控制汽车

CAN总线简介:如何以编程方式控制汽车

作者头像
FB客服
发布于 2018-02-28 07:00:00
发布于 2018-02-28 07:00:00
3.6K0
举报
文章被收录于专栏:FreeBufFreeBuf

最近,我正与Voyage公司的朋友合作研究,以实现福特Fusion空调系统(A/C)的编程控制。目前,Voyage公司正努力打造自动驾驶的终极目标:能够以低廉的价格成本和广泛的投放范围,把世界任何地方有用车需求的人们安全自动地送达目的地。对Voyage来说,在真正实现不需司机的无人驾驶之后,必须给予后座乘客对车辆关键功能的访问控制权。

Voyage Auto:硅谷自动自动驾驶出租车初创公司,由专注机器学习人工智能等方面的在线培训机构Udacity于2017年4月成立,在无人驾驶领域,Voyage将与谷歌、特斯拉、Uber展开竞争。目前,Voyage已完成首轮种子融资和测试车辆外观研发。

CAN-Bus简介

CAN-Bus全称为“控制器局域网总线技术(Controller Area Network-Bus)”,是ISO国际标准化的串行通信协议,最早由德国BOSCH公司1983年开发,并最终成为国际标准(ISO 11898),是全球应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制网络的标准协议。

现代汽车拥有大量控制系统,这些控制系统基于web技术开发并在多种微服务处理中发挥作用,如安全气囊、刹车、巡航控制、电动助力转向、音响系统、电动车窗、门、后视镜调整按钮、电池和充电系统等。这些系统需要相互通信和状态读取,因此CAN-Bus协议被开发并派上用场,如同为汽车配置了神经系统。

可以把CAN-Bus认为是汽车用来进行传感器数据传递的简单网络,它完美地集成了各种复杂部件,从而在汽车使用中展示和实现了各种我们所想所愿的各种新型功能。以下为1988年款的宝马8系,这是全球第一台采用CAN总线的汽车:

自动驾驶汽车与其CAN-Bus

随着自动驾驶技术的的飞速发展,CAN-Bus的应用概念也变得非常普及。为什么呢?因为很多自动驾驶公司并不会大规模地从头制造无人汽车,而是把关注点放在编程控制车辆方面。而通过汽车CAN-Bus协议的逆向工程分析,无人汽车工程师可以利用软件方式实现对汽车的命令发送控制,如转向、加速和刹车等。

通过使用类似激光雷达(LIDAR)这样的传感器,无人汽车就具备了超凡的“感知”世界的能力,车内微型PC可以就引导、加速、刹车等动作做出决定。因为自动驾驶技术的要求非常高,因而Voyage选择了福特Fusion电传线控方式(drive-by-wire!)来传递汽车控制讯号。可以点此阅读更多内容。

破解福特Fusion的CAN-Bus

开始破解福特Fusion温度控制系统时,《汽车黑客手册》成了我的研究参考首选。在深入之前,让我们来看看《汽车黑客手册》第2章描述的三个重要概念:总线协议、CAN总线协议、CAN帧。

CAN-Bus

CAN协议自1994年以来就成为了美国汽车和轻卡的一个行业标准,但分别在2001年和2008年才陆续成为欧盟和美国汽车工业制造的强制性标准。总体来说,CAN-Bus分为一条CAN high (CANH) 线和一条CAN low (CANL)线,通过差分信号传输,当信号传递进入时,CAN在CANH线中升压信号保持高电平,而在CANL中降压等量信号形成低电平状态。

这种差分信号传输方式一般用于对噪声有容错能力要求的环境,如汽车制动系统和生产制造行业中。以下为示波器中观察到的原始CAN信号:

也就是说,通过CAN-Bus传输的数据包不是标准的,每个CAN-Bus数据包包括四个主要部分:

Arbitration ID :用于标识发起通信请求的设备ID广播消息,并且任何一个设备组件都能发起多个Arbitration ID,如果两个CAN数据包同一时间在总线Bus内传输,则Arbitration ID较小的数据包先获得总线使用权,先被传输。 Identifier extension(标识符扩展,IDE) :对标准CAN协议来说,这个数据位总是为o; Data length code (数据长度代码,DLC): 代表数据的大小,从0到8字节不等; Data(数据): 传输数据本身,标准CAN总线可以承载最大数据包为8字节,但有些系统也强制使用8字节进行数据包填充。

标准CAN包格式

CAN帧

一辆车内有多种CAN总线,为了实现A/C系统的打开和关闭,我们需要找到正确的CAN运行总线,以福特Fusion来说,其中至少标记有4个总线,其中3个为运行500kbps的高速率CAN总线HS1、HS2、HS3,1个为运行125kbps的中速CAN总线MS。

OBD-II接口具备两种这类型CAN总线:HS1和HS2,但为了以防一些恶意命令,它们都是被阻断状态的。但在来自Voyage的Alan帮助下,我们彻底把OBD-II这个限制问题翻转解决了,我们发现了直接访问HS1、HS2、HS3和MS的方式。关键在于OBD-II接口背后,一个所有总线汇总,叫做网关模块(Gateway Module)的部件上。以下为Voyage第一辆无人驾驶出租车Homer后座控制接口概览:

由于A/C系统可以通过汽车的媒体界面(SYNC)进行更改,所以,我们直奔MS中速总线而去。但是我们如何才能让电脑可以读写CAN数据包呢?答案就是SocketCAN,这是一个由大众公司向Linux内核基金会研发的开源CAN驱动和网络栈协议集。

我们可以把车辆的GND、MSCANH、MSCANL3条线连接到Kvaser Leaf Light HSv2和CANable设备中,然后在另一端,使用安装有较新版本Linux内核的电脑连接,把CAN总线作为网络设备识别加载:

modprobe can modprobe kvaser_usb ip link set can0 type can bitrate 1250000 ifconfig can0 up

Kvaser Leaf Light HSv2亚马逊售价300美金,CANable在Tindie售价25美金,以下为中速总线MSCAN部件图:

GND:地线,公共接地线; MSCAN:中速总线,也称飞思卡尔控制器局域网总线,是BOSCH公司定义的CAN2.0和CAN3.0协议下的CAN总线控制器,是当前汽车控制器中流行的CAN控制框架。MSCANH、MSCANL为其高电平和低电平线。 Kvaser Leaf Light HSv2是一个用于CAN的单通道USB接口,它能够方便地把几个接口连接到标准的PC机上。

加载之后,我们可以尝试使用candump can0命令,分析其中的流量情况:

can0 33A [8] 00 00 00 00 00 00 00 00 can0 415 [8] 00 00 C4 FB 0F FE 0F FE can0 346 [8] 00 00 00 03 03 00 C0 00 can0 348 [8] 00 00 00 00 00 00 00 00 can0 167 [8] 72 7F FF 10 00 19 F8 00 can0 3E0 [8] 00 00 00 00 80 00 00 00 can0 167 [8] 72 7F FF 10 00 19 F7 00 can0 34E [8] 00 00 00 00 00 00 00 00 can0 358 [8] 00 00 00 00 00 00 00 00 can0 3A4 [8] 00 00 00 00 00 00 00 00 can0 216 [8] 00 00 00 00 82 00 00 00 can0 3AC [8] FF FF FF FF FF FF FF FF can0 415 [8] 00 00 C8 FA 0F FE 0F FE can0 083 [8] 00 00 00 00 00 01 7E F4 can0 2FD [8] D4 00 E3 C1 08 52 00 00 can0 3BC [8] 0C 00 08 96 01 BB 27 00 can0 167 [8] 72 7F FF 10 00 19 F7 00 can0 3BE [8] 00 20 AE EC D2 03 54 00 can0 333 [8] 00 00 00 00 00 00 00 00 can0 42A [8] D6 5B 70 E0 00 00 00 00 can0 42C [8] 05 51 54 00 90 46 A4 00 can0 33B [8] 00 00 00 00 00 00 00 00 can0 42E [8] 93 00 00 E1 78 03 CD 40 can0 42F [8] 7D 04 00 2E 66 04 01 77 can0 167 [8] 72 7F FF 10 00 19 F7 00 can0 3E7 [8] 00 00 00 00 00 00 00 00 can0 216 [8] 00 00 00 00 82 00 00 00 can0 415 [8] 00 00 CC F9 0F FE 0F FE can0 3A5 [8] 00 00 00 00 00 00 00 00 can0 3AD [8] FF FF FF FF FF FF FF FF can0 50B [8] 1E 12 00 00 00 00 00 00

但是,这相当于观察声音信号振幅一样,很难从中发现动作和行为模式。在此,我们需要使用工具cansniffer对频率进行等效化分析,cansniffer显示的一串数据包ID号,可以帮助我们在CAN帧数据区变化时进行准确定位。有了这个功能,我们就能分辨出哪些数据包是应该丢弃的,而哪些又是与我们问题相关的。

CANSniffer:一款收发CAN格式数据包的分析软件,通过串口与外部设备交互,用于分析串口数据包。

以下是cansniffer在MS中速总线的抓包示例,我们正在对所有通过串口的数据包进行过滤,只需要CAN id为355、356和358的数据包。同时,通过按下汽车空气调节按钮后观察数据包变化情况,发现001C00000000代表了该按钮的开关作用。

控制汽车空调系统(A/C系统)

接下来就是把A/C系统功能连接到我们运行于汽车内的微型PC,该PC为机器人操作系统(ROS),而幸运的是,利用前述提及的SocketCAN和ROS中的一个模块,就能很容易实现连接和操作。而且用socketcan_bridge方式可以将我们的CAN数据帧转换成ROS可接收的消息格式。完美!

以下就是A/C系统功能数据包解码方式的一个示例:

if frame.id == 0×356: raw_data = unpack(‘BBBBBBBB’, frame.data) fan_speed = raw_data[1] / 4 driver_temp = parse_temperature(raw_data[2:4]) passenger_temp = parse_temperature(raw_data[4:6])

由此生成的数据被存储在名为CelsiusReport.msg的文件中:

bool auto bool system_on bool unit_on bool dual bool max_cool bool max_defrost bool recirculation bool head_fan bool feet_fan bool front_defrost bool rear_defrost string driver_tempstring passenger_temp

在按下汽车A/C系统相关功能的按钮之后,我们将得到以下这个对应的代码清单:

CONTROL_CODES = { ‘ac_toggle’: 0x5C, ‘ac_unit_toggle’: 0×14, ‘max_ac_toggle’: 0×38, ‘recirculation_toggle’: 0x3C, ‘dual_temperature_toggle’: 0×18, ‘passenger_temp_up’: 0×24, ‘passenger_temp_down’: 0×28, ‘driver_temp_up’: 0x1C, ‘driver_temp_down’: 0×20, ‘auto’: 0×34, ‘wheel_heat_toggle’: 0×78, ‘defrost_max_toggle’: 0×64, ‘defrost_toggle’: 0x4C, ‘rear_defrost_toggle’: 0×58, ‘body_fan_toggle’: 0×04, ‘feet_fan_toggle’: 0x0C, ‘fan_up’: 0x2C, ‘fan_down’: 0×30, }

现在,我们就可以直接将以上字符串对应的数据代码发往ROS节点,由它将这些数据信息转换成汽车可以识别的特殊代码:

rostopic pub /celsius_control celsius/CelsiusControl ac_toggle

研究结果

好了,我们可以向CAN总线发送相应的CAN代码了,这种代码控制方式与我们调节汽车空调A/C系统的外置按钮是一样的效果。这也意味着,在无人驾驶汽车的后座,我们可以实现以手机APP方式远程控制改变汽车的车内温度了。成功了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何激活成功教程汽车–CAN协议
汽车后装的辅助驾驶设备,一般需要知道汽车的CAN协议,各汽车厂家的CAN协议又是保密的,这时就需要激活成功教程,因为CAN协议是明文,所以激活成功教程也就轻松些。
全栈程序员站长
2022/09/14
1.7K0
如何激活成功教程汽车–CAN协议
全面剖析无人车三大基本技术:计算、动力和电传线控
陈桦 编译自 Voyage官方博客 量子位 报道 | 公众号 QbitAI 打造一辆无人车,究竟需要哪些软件和硬件? 无人车创业公司Voyage今天在官方博客上发文,展示了自家无人驾驶出租车Homer
量子位
2018/03/29
9430
全面剖析无人车三大基本技术:计算、动力和电传线控
【Linux】SocketCAN设备调试与开发(模拟器)
大家都知道,车辆底盘系统是通过CAN进行通信的,而常见的有USB-CAN和SocketCAN两种,前者是通过USB口接入PC的,代表的有周立功、创芯等(较便宜),后者是通过网口接入PC的,代表的有Kvaser。
DevFrank
2024/07/24
5310
车联网安全入门——ICSim模拟器使用
🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。
小点点
2024/06/04
3150
车联网安全入门——ICSim模拟器使用
CAN总线调试步骤
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。
zd123
2021/12/08
1.5K0
汽车黑客:没有Security就没有Safety
作者 Taskiller 简介 “汽车黑客”(car hacking) 的话题正越来越多地在媒体和安全公司之间讨论。曾几何时,黑客利用手中的工具黑掉一辆汽车的画面还只是出现在电影中,现如今已经在现实中成为可能,且成为了人们开始担忧的问题,这正是本文要讨论的话题。 对车辆进行大规模技术引进的影响之一就是汽车黑客的出现。汽车黑客(car hacking)这一术语特指可以破坏汽车中的某些高科技组件(technological components)的黑客。 现代汽车(译者注:这里的现代指当今的、现在这个时代的,不
FB客服
2018/02/02
1.2K0
汽车黑客:没有Security就没有Safety
车联网安全入门——CAN总线模糊测试
🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。
小点点
2024/06/05
3950
车联网安全入门——CAN总线模糊测试
详解CAN的高层协议(三)
CAN做为应用比较广泛的通信总线,受到了越来越多的客户喜欢和青睐,广泛应用于工业和汽车,常见的高层协议有CANopen,J1939,DeviceNet等,在公众号曾经分享过超过15篇有关CAN的高层协议J1939的有关内容,今天起我们将连续分6次推文来详细介绍CAN的高层协议J1939的基础和应用以及开发,应该算是比较全面系统的介绍,希望对大家有帮助,如果对你有帮助,欢迎关注嵌入式程序猿公众号。今天我们来看第二部分数据链路层的上半部分,数据链路层比较重要,内容也比较多,分为上下两部分来讲。
用户1605515
2021/04/29
7060
详解CAN的高层协议(三)
一文搞懂CAN和CAN FD总线协议
这篇文章是将一文搞懂CAN总线协议帧格式和一文搞懂CAN FD总线协议帧格式两篇文章的整合,方便各位朋友学习和查阅。
不脱发的程序猿
2022/10/28
7.1K0
基于 CAN 总线操作汽车仪表盘模拟器实用指南
最近在外文博客看了相关的系列文章,学习结束后决定翻译整理做一个笔记,整理笔记的过程中曾试图放弃,阅读实践半小时,整理笔记用几天,以后再慢慢培养整理笔记的技能吧。
信安之路
2020/07/16
5.8K1
基于 CAN 总线操作汽车仪表盘模拟器实用指南
自动驾驶汽车硬件与软件技术介绍
来源:知乎 概要:本文详细介绍了自动驾驶汽车的硬件和软件,以及所需要做的准备工作,每个研发者或者准备投身于无人驾驶领域的人都应该好好看一下。 全球有数不清的公司在忙着研发自动驾驶汽车,他们的产品也千奇百怪,不过基本思路和核心技术是类似的,本文详细介绍了自动驾驶汽车的硬件和软件,以及所需要做的准备工作,每个研发者或者准备投身于无人驾驶领域的人都应该好好看一下。 大家都知道智能车(Intelligent Vehicle)是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统,它集中运用了计算机、现
企鹅号小编
2018/01/29
2.9K0
自动驾驶汽车硬件与软件技术介绍
汽车CAN协议hacking
作者: Eric Evenchick 翻译:看雪论坛『智能设备应用』版主:gjden
CreateAMind
2018/07/24
1.8K0
基于FPGA的CAN总线控制器的设计(下)
今天给大侠带来基于FPGA的CAN总线控制器的设计,由于篇幅较长,分三篇。今天带来第三篇,下篇,程序的仿真与测试以及总结。话不多说,上货。
FPGA技术江湖
2021/05/11
5310
CAN协议深度解析-简单易懂协议详解[通俗易懂]
CAN-bus发布了ISO11898和ISO11519两个通信标准,此两个标准中差分电平的特性不相同。
全栈程序员站长
2022/09/14
3.1K0
CAN协议深度解析-简单易懂协议详解[通俗易懂]
工具推荐: 汽车CAN总线分析框架CANToolz
aka YACHT (又一个汽车黑客工具) CANToolz 是一个分析控制局域网络CAN(Controller Area Network) 和设备的框架。该工具基于不同的模块组装在一起,可以被安全研
FB客服
2018/02/08
2K0
工具推荐: 汽车CAN总线分析框架CANToolz
一文搞懂CAN FD总线协议帧格式
假期更新了一文搞懂CAN总线协议帧格式,CAN FD总线协议怎能错过?本篇博文将讲解CAN FD总线协议帧格式。
不脱发的程序猿
2022/10/28
4.6K0
汽车总线系统
至今没有一种通信网络可以完全满足未来汽车的所有成本和性能要求,为此,汽车制造商和OEM (Original Equipment Manufacture)商仍采用多种协议(LIN、CAN和 MOST等),实现未来汽车上的连网。
不脱发的程序猿
2022/10/04
7690
汽车总线系统
CAN总线35周年特别篇 -- CAN总线的前世今生
本文整理翻译自CAN in Automation(CiA),通过这个帖子大家会对当前市场上各种CAN名词有个全面系统的认识
Simon223
2021/03/04
1.4K0
应用||无人汽车CAN总线协议解码
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是汽车计算机控制系统和嵌入式工业控制局域网的标准总线。随着新能源汽车、无人驾驶汽车的发展,CAN总线得到越来越多的应用。研华提供各种接口的CAN总线通讯产品,包括PCI-1680/PCIE-1680/PCM-3680/MIC-3680等。
SHOUT
2022/05/31
7870
应用||无人汽车CAN总线协议解码
J1939协议之通俗易懂—-简介
J1939协议是由美国汽车工程师协会(SAE) (SAE协会简介)定义的一组标准。J1939标准用于卡车、公共汽车和移动液压等重型车辆。在许多方面,J1939标准类似于旧版J1708和J1587标准,但J1939标准协议建立在CAN(控制器区域网络,ISO11898)上。
全栈程序员站长
2022/08/14
6.9K0
J1939协议之通俗易懂—-简介
相关推荐
如何激活成功教程汽车–CAN协议
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档