您的位置 首页 IC

CAN总线:用编程来操控轿车

自动驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,让电脑可以在没有任何人类主动的操作下,自动安全地操作机动车辆。

主动驾驶轿车依托人工智能、视觉核算、雷达、监控设备和全球定位体系协同协作,让电脑能够在没有任何人类主动的操作下,主动安全地操作机动车辆。

Voyage是轿车主动驾驶范畴内的一家专业公司,他们想要完结的终极方针是:关于世界上的任何一个人,他都能够随时随地呼唤一辆轿车直接开到他的家门口,并将他安全地送到达目的地,并且价格也十分廉价。关于Voyage来说,他们将不可避免地给乘客供给轿车要害功用的操控权,由于总有一天开车的将不再是咱们人类,而这一天立刻就要到来了。

CAN总线介绍

一台现代化轿车具有许多的操控体系,这些操控体系的效果与Web运用中各种微服务的效果是十分相似的。关于一台电动轿车来说,它具有安全气囊、主动刹车体系、电动助力转向体系、音响体系、电动车门、后视镜调整体系、以及电池与充电体系等等。这些体系需求彼此通讯并获取其他体系的运转状况。1983年, 博世公司 (德国一家从事轿车与智能交通技能的公司)的一个团队开端测验经过研讨CAN(Controller Area Network-操控器区域网络)总线来处理这一杂乱的问题。

你能够把CAN总线当作一个简略的网络,轿车中的任何一个体系都能够经过这个网络来监听或发送指令,它能够将轿车中那些杂乱的组件以一种“高雅”的方法组合起来,并给咱们的轿车供给各式各样的现代化功用。

下图为一辆1988年款的宝马8系,这也是全球第一台采用了CAN总线的轿车:

主动驾驶轿车与CAN总线

近些年来,跟着主动驾驶轿车的快速开展,CAN总线的概念也得到了遍及。为什么呢?由于主动驾驶轿车范畴内的绝大多数公司都不会从零开端规划和制作自家的轿车,并且他们还需求想办法经过编程的方法来操控轿车。

经过对轿车CAN总线进行逆向工程剖析,工程师将能够经过软件来向轿车发送操控指令。比如说,最常用的操控指令有旋转方向盘、加快(踩油门)和制动(踩刹车)。

经过运用相似LIDAR(激光雷达)这样的传感器,轿车将能够“看到”或“感受到”它所在的外部环境。轿车内的电脑能够依据传感器传回的数据来决定向轿车发送怎样的操控指令,比如说将方向盘旋转多少度、加快到多少迈、或许是否应该当即踩刹车等等。

下图为LIDAR技能的动态演示图:

实际上,并不是每一台轿车都能够成为主动驾驶轿车。

CAN总线

自从1994年开端,CAN已经成为了美国轿车和轻型货车中的一种规范了,可是直到2008年它才成为一种强制规范。它首要运用了两条线:CAN high(CANH)和CAN low(CANL)。CAN运用的是差分信号,这意味着当信号传输进来时,CAN会提高一条线路的电压,并等量下降另一条线路的电压。一般来说,只要对噪声容错较高的环境才会运用差分信号,例如轿车体系或工业制作范畴。

下图显现的是示波器中调查到的原始CAN信号:

这也就意味着,经过CAN总线传输的数据包并非规范化的数据包,每一个CAN总线数据包都包括下面这四个要害元素:

1.裁定ID(Arbitration ID):裁定ID是一种播送音讯,代表的是需求进行数据通讯的设备ID,不过一台设备能够发送多个裁定ID。假如两个CAN数据包一起在总线上进行发送,那么裁定ID较小的那个数据包将优先传输;

2.标识符扩展(IDE):关于规范CAN来说,这部分数据永远为o;

3.数据长度码(DLC):它代表数据的长度,规模从0到8字节不等;

4.数据(Data):需求传输的数据,规范CAN总线数据包可带着的数据巨细最多为8字节,但某些体系会将数据包强制填充至8个字节;

规范CAN数据包的格局

CAN结构

为了能够操控轿车空调体系的敞开和封闭,咱们首要需求找到正确的CAN总线(由于一辆轿车有许多CAN总线)。福特Fusion至少有四条总线(厂商记载),其间有三条为高速CAN(500 kbps),还有一条为中速CAN(125 kbps)。

OBD-II端口暴露了其间的两条总线:HS1和HS2,但这台轿车上这两条总线有防火墙的维护,因而不允许咱们向其发送诈骗指令。在Alan(Voyage职工)的协助下,咱们处理了这个问题并成功拿到了HS1、HS2、HS3和MS的拜访权。注:OBD-II端口后边有一个名叫Gateway Module的设备,一切的总线终究都要将数据传输到这个设备中,这便是咱们的处理方案。

由于空调体系能够经过轿车多媒体接口(SYNC)来进行调整,因而咱们直接将方针锁定在了MS总线身上。

可是咱们怎样才能让咱们的核算机去读写CAN数据包呢?答案便是 SocketCAN ,它是一套开源CAN驱动,并且也是 Linux内核 中的一种网络栈。

现在,咱们能够将轿车上的三条线路(GND、MSCANH和MSCANL)衔接到Kvaser Leaf Light HSv2或CANable上,然后经过一台具有最新版Linux内核的核算机将这些总线当作一种网络设备来进行加载和读取。

modprobe can

modprobe kvaser_usb

ip link set can0 type can bitrate 1250000

ifconfig can0 up

加载完结之后,咱们能够运用指令candump can0,然后开端检查CAN的数据流量:

可是,咱们这样去监控总线的数据流量,就相当于用眼睛来调查声响信号的振幅相同,咱们不只很难弄清楚总线到底在传输什么数据,并且也很难发现其间的形式或规则。因而,咱们需求像剖析声响频率相同来剖析这个问题,咱们能够调用cansniffer.和cansniffer来检查相应的ID,然后首要剖析CAN结构的数据区域中详细发生了哪些改动。咱们经过研讨后发现,咱们能够使用特定的ID来过滤掉那些咱们不需求的数据,然后只留下与咱们问题相关的那些数据。

下面咱们对MS总线调用cansniffer指令。咱们只留下了CAN id 355、356和358的相关数据,并过滤掉了其他无效内容。与此一起,按下了轿车中的温度调理按钮,咱们能够看到数据下方呈现了001C00000000,它代表的便是咱们按下调理按钮的操作。

下一步便是将轿车的空调体系与咱们运转于轿车内的PC进行衔接,PC运转的是Robot操作体系(ROS)。走运的是咱们运用了SocketCAN,由于它有一个模块能够便利咱们的操作,即socketcan_bridge能够将咱们的CAN结构转换成一种ROS可接受的音讯格局。

下面演示的是整个解码进程:

if frame.id == 0x356:

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_temp

string passenger_te

在按下了轿车内一切的相关按钮之后,咱们得到了下面这个清单列表:

CONTROL_CODES = {

‘ac_toggle’: 0x5C,

‘ac_unit_toggle’: 0x14,

‘max_ac_toggle’: 0x38,

‘recirculation_toggle’: 0x3C,

‘dual_temperature_toggle’: 0x18,

‘passenger_temp_up’: 0x24,

‘passenger_temp_down’: 0x28,

‘driver_temp_up’: 0x1C,

‘driver_temp_down’: 0x20,

‘auto’: 0x34,

‘wheel_heat_toggle’: 0x78,

‘defrost_max_toggle’: 0x64,

‘defrost_toggle’: 0x4C,

‘rear_defrost_toggle’: 0x58,

‘body_fan_toggle’: 0x04,

‘feet_fan_toggle’: 0x0C,

‘fan_up’: 0x2C,

‘fan_down’: 0x30,

}

现在,咱们就能够直接向ROS节点发送字符串数据,然后经过它来将咱们发送的信息转换成轿车能够辨认的特别代码:

rostopic pub /celsius_control celsius/CelsiusControl ac_toggle

剖析成果

咱们现在能够向CAN总线发送相应的CAN操控代码了,这些代码与咱们按下轿车物理实体按钮时所宣布的总线操控指令是相同的。这也就意味着,咱们能够长途改动轿车的车内温度了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/154940.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部