<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > CAN總線(xiàn):用編程來(lái)控制汽車(chē)

CAN總線(xiàn):用編程來(lái)控制汽車(chē)

作者: 時(shí)間:2018-07-26 來(lái)源:網(wǎng)絡(luò ) 收藏

自動(dòng)駕駛依靠人工智能、視覺(jué)計算、雷達、監控裝置和全球定位系統協(xié)同合作,讓電腦可以在沒(méi)有任何人類(lèi)主動(dòng)的操作下,自動(dòng)安全地操作機動(dòng)車(chē)輛。

本文引用地址:http://dyxdggzs.com/article/201807/384044.htm

Voyage是自動(dòng)駕駛領(lǐng)域內的一家專(zhuān)業(yè)公司,他們想要實(shí)現的終極目標是:對于世界上的任何一個(gè)人,他都可以隨時(shí)隨地召喚一輛直接開(kāi)到他的家門(mén)口,并將他安全地送達到目的地,而且價(jià)格也非常便宜。對于Voyage來(lái)說(shuō),他們將不可避免地給乘客提供汽車(chē)關(guān)鍵功能的控制權,因為總有一天開(kāi)車(chē)的將不再是我們人類(lèi),而這一天馬上就要到來(lái)了。

介紹

一臺現代化汽車(chē)擁有大量的控制系統,這些控制系統的作用與Web應用中各種微服務(wù)的作用是非常相似的。對于一臺電動(dòng)汽車(chē)來(lái)說(shuō),它擁有安全氣囊、自動(dòng)剎車(chē)系統、電動(dòng)助力轉向系統、音響系統、電動(dòng)車(chē)門(mén)、后視鏡調整系統、以及電池與充電系統等等。這些系統需要相互通信并獲取其他系統的運行狀態(tài)。1983年, 博世公司 (德國一家從事汽車(chē)與智能交通技術(shù)的公司)的一個(gè)團隊開(kāi)始嘗試通過(guò)研究CAN(Controller Area Network-控制器區域網(wǎng)絡(luò ))總線(xiàn)來(lái)解決這一復雜的問(wèn)題。

你可以把當作一個(gè)簡(jiǎn)單的網(wǎng)絡(luò ),汽車(chē)中的任何一個(gè)系統都可以通過(guò)這個(gè)網(wǎng)絡(luò )來(lái)監聽(tīng)或發(fā)送命令,它可以將汽車(chē)中那些復雜的組件以一種“優(yōu)雅”的方式組合起來(lái),并給我們的汽車(chē)提供各種各樣的現代化功能。

下圖為一輛1988年款的寶馬8系,這也是全球第一臺采用了的汽車(chē):

自動(dòng)駕駛汽車(chē)與CAN總線(xiàn)

近些年來(lái),隨著(zhù)自動(dòng)駕駛汽車(chē)的快速發(fā)展,CAN總線(xiàn)的概念也得到了普及。為什么呢?因為自動(dòng)駕駛汽車(chē)領(lǐng)域內的絕大多數公司都不會(huì )從零開(kāi)始設計和制造自家的汽車(chē),而且他們還需要想辦法通過(guò)的方式來(lái)控制汽車(chē)。

通過(guò)對汽車(chē)CAN總線(xiàn)進(jìn)行逆向工程分析,工程師將可以通過(guò)軟件來(lái)向汽車(chē)發(fā)送控制命令。比如說(shuō),最常用的控制命令有旋轉方向盤(pán)、加速(踩油門(mén))和制動(dòng)(踩剎車(chē))。

通過(guò)使用類(lèi)似LIDAR(激光雷達)這樣的傳感器,汽車(chē)將能夠“看到”或“感受到”它所處的外部環(huán)境。汽車(chē)內的電腦可以根據傳感器傳回的數據來(lái)決定向汽車(chē)發(fā)送怎樣的控制命令,比如說(shuō)將方向盤(pán)旋轉多少度、加速到多少邁、或者是否應該立即踩剎車(chē)等等。

下圖為L(cháng)IDAR技術(shù)的動(dòng)態(tài)演示圖:

實(shí)際上,并不是每一臺汽車(chē)都可以成為自動(dòng)駕駛汽車(chē)。

CAN總線(xiàn)

自從1994年開(kāi)始,CAN已經(jīng)成為了美國汽車(chē)和輕型卡車(chē)中的一種標準了,但是直到2008年它才成為一種強制標準。它主要使用了兩條線(xiàn):CAN high(CANH)和CAN low(CANL)。CAN使用的是差分信號,這意味著(zhù)當信號傳輸進(jìn)來(lái)時(shí),CAN會(huì )提升一條線(xiàn)路的電壓,并等量降低另一條線(xiàn)路的電壓。一般來(lái)說(shuō),只有對噪聲容錯較高的環(huán)境才會(huì )使用差分信號,例如汽車(chē)系統或工業(yè)制造領(lǐng)域。

下圖顯示的是示波器中觀(guān)察到的原始CAN信號:

這也就意味著(zhù),通過(guò)CAN總線(xiàn)傳輸的數據包并非標準化的數據包,每一個(gè)CAN總線(xiàn)數據包都包含下面這四個(gè)關(guān)鍵元素:

1.仲裁ID(Arbitration ID):仲裁ID是一種廣播消息,代表的是需要進(jìn)行數據通信的設備ID,不過(guò)一臺設備可以發(fā)送多個(gè)仲裁ID。如果兩個(gè)CAN數據包同時(shí)在總線(xiàn)上進(jìn)行發(fā)送,那么仲裁ID較小的那個(gè)數據包將優(yōu)先傳輸;

2.標識符擴展(IDE):對于標準CAN來(lái)說(shuō),這部分數據永遠為o;

3.數據長(cháng)度碼(DLC):它代表數據的長(cháng)度,范圍從0到8字節不等;

4.數據(Data):需要傳輸的數據,標準CAN總線(xiàn)數據包可攜帶的數據大小最多為8字節,但某些系統會(huì )將數據包強制填充至8個(gè)字節;

標準CAN數據包的格式

CAN框架

為了能夠控制汽車(chē)空調系統的開(kāi)啟和關(guān)閉,我們首先需要找到正確的CAN總線(xiàn)(因為一輛汽車(chē)有很多CAN總線(xiàn))。福特至少有四條總線(xiàn)(廠(chǎng)商記錄),其中有三條為高速CAN(500 kbps),還有一條為中速CAN(125 kbps)。

OBD-II端口暴露了其中的兩條總線(xiàn):HS1和HS2,但這臺汽車(chē)上這兩條總線(xiàn)有防火墻的保護,因此不允許我們向其發(fā)送欺騙指令。在A(yíng)lan(Voyage員工)的幫助下,我們解決了這個(gè)問(wèn)題并成功拿到了HS1、HS2、HS3和MS的訪(fǎng)問(wèn)權。注:OBD-II端口后面有一個(gè)名叫Gateway Module的設備,所有的總線(xiàn)最終都要將數據傳輸到這個(gè)設備中,這就是我們的解決方案。

由于空調系統可以通過(guò)汽車(chē)多媒體接口(SYNC)來(lái)進(jìn)行調整,因此我們直接將目標鎖定在了MS總線(xiàn)身上。

但是我們怎樣才能讓我們的計算機去讀寫(xiě)CAN數據包呢?答案就是 SocketCAN ,它是一套開(kāi)源CAN驅動(dòng),而且也是 Linux內核 中的一種網(wǎng)絡(luò )棧。

現在,我們可以將汽車(chē)上的三條線(xiàn)路(GND、MSCANH和MSCANL)連接到Kvaser Leaf Light HSv2或CANable上,然后通過(guò)一臺擁有最新版Linux內核的計算機將這些總線(xiàn)當作一種網(wǎng)絡(luò )設備來(lái)進(jìn)行加載和讀取。

modprobe can

modprobe kvaser_usb

ip link set can0 type can bitrate 1250000

ifconfig can0 up

加載完成之后,我們可以使用命令candump can0,然后開(kāi)始查看CAN的數據流量:

但是,我們這樣去監控總線(xiàn)的數據流量,就相當于用眼睛來(lái)觀(guān)察聲音信號的振幅一樣,我們不僅很難弄清楚總線(xiàn)到底在傳輸什么數據,而且也很難發(fā)現其中的模式或規律。因此,我們需要像分析聲音頻率一樣來(lái)分析這個(gè)問(wèn)題,我們可以調用cansniffer.和cansniffer來(lái)查看相應的ID,然后主要分析CAN框架的數據區域中具體發(fā)生了哪些變化。我們通過(guò)研究后發(fā)現,我們可以利用特定的ID來(lái)過(guò)濾掉那些我們不需要的數據,然后只留下與我們問(wèn)題相關(guān)的那些數據。

下面我們對MS總線(xiàn)調用cansniffer命令。我們只留下了CAN id 355、356和358的相關(guān)數據,并過(guò)濾掉了其他無(wú)效內容。與此同時(shí),按下了汽車(chē)中的溫度調節按鈕,我們可以看到數據下方出現了001C00000000,它代表的就是我們按下調節按鈕的操作。

下一步就是將汽車(chē)的空調系統與我們運行于汽車(chē)內的PC進(jìn)行連接,PC運行的是Robot操作系統(ROS)。幸運的是我們使用了SocketCAN,因為它有一個(gè)模塊可以方便我們的操作,即socketcan_bridge可以將我們的CAN框架轉換成一種ROS可接受的消息格式。

下面演示的是整個(gè)解碼過(guò)程:

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

在按下了汽車(chē)內所有的相關(guān)按鈕之后,我們得到了下面這個(gè)清單列表:

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節點(diǎn)發(fā)送字符串數據,然后通過(guò)它來(lái)將我們發(fā)送的信息轉換成汽車(chē)可以識別的特殊代碼:

rostopic pub /celsius_control celsius/CelsiusControl ac_toggle

分析結果

我們現在可以向CAN總線(xiàn)發(fā)送相應的CAN控制代碼了,這些代碼與我們按下汽車(chē)物理實(shí)體按鈕時(shí)所發(fā)出的總線(xiàn)控制命令是一樣的。這也就意味著(zhù),我們可以遠程改變汽車(chē)的車(chē)內溫度了。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>