CAN總線目前已廣泛應用在汽車電子領域,在整個自動駕駛駕駛系統(tǒng)中也有著十分重要的作用,自動駕駛汽車上的某些傳感器(如雷達、Mobileye)的信號傳遞也是通過CAN實現的。本文就帶大家了解一下CAN總線。
CAN 是Controller AreaNetwork 的縮寫,中文名為控制器局域網絡,是ISO國際標準化的串行通信協(xié)議,是一種用于實時應用的串行通訊協(xié)議總線,它可以使用雙絞線來傳輸信號,是世界上應用最廣泛的現場總線之一。
因其具有高性能、高可靠性的通信機制,目前已廣泛應用在汽車電子領域,CAN協(xié)議用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。因此CAN總線在整個自動駕駛系統(tǒng)中也有著十分重要的作用,自動駕駛汽車上的某些傳感器(如雷達、Mobileye)的信號傳遞也是通過CAN實現的。
CAN 總線技術發(fā)展歷程
CAN 總線最早是由德國 Bosch 公司在 1986 年為汽車監(jiān)測和控制而設計,主要用于汽車內部測量與執(zhí)行部件之間的通信。自寶馬公司 1989 年推出第一款使用 CAN-BUS的汽車后,CAN 總線就開始了其輝煌的歷程。CAN 的高性能和可靠性已被認同,并被廣泛地應用于工業(yè)自動化、船舶、醫(yī)療設備、工業(yè)設備等方面。CAN總線是當今自動化領域技術發(fā)展的熱點之一,被譽為自動化領域的計算機局域網。它的出現為分布式控制系統(tǒng)實現各節(jié)點之間實時、可靠的數據通信提供了強有力的技術支持。
CAN通信實時性與可靠性
CAN 總線從誕生之初就憑借著其優(yōu)良的實時性與可靠性迅速發(fā)展成為現場總線的領航者,但它仍存在一些缺陷。CAN 總線通信采用載波監(jiān)聽無損的仲裁技術,在網絡負載較小時,CAN 總線實時性可以滿足各方面的需求,但隨著網絡負載不斷增大,信息在總線上碰撞的概率也隨之增大,如果繼續(xù)使用基本的 CAN 協(xié)議,優(yōu)先級較低的信息發(fā)送的實時性就會受到影響,網絡負載到達一定程度后甚至會退出總線競爭。CAN總線協(xié)議采用靜態(tài)固定優(yōu)先級分配方式,這樣不同優(yōu)先級的信息就很難公平的共享總線使用權,這些缺陷成為制約其進一步發(fā)展的問題。
CAN總線的基本工作原理
CAN協(xié)議的特性包括完整性的串行數據通訊、提供實時支持、傳輸速率高達1Mb/s、同時具有11位的尋址以及檢錯能力。
CAN總線用戶接口簡單,編程方便。網絡拓撲結構采用總線式結構。這種網絡結構簡單、成本低,并且采用無源抽頭連接,系統(tǒng)可靠性高。通過CAN總線連接各個網絡節(jié)點,形成多主機控制器局域網(CAN)。
信息的傳輸采用CAN通信協(xié)議,通過CAN控制器來完成。各網絡節(jié)點一般為帶有微控制器的智能節(jié)點完成現場的數據采集和基于CAN協(xié)議的數據傳輸,節(jié)點可以使用帶有在片CAN控制器的微控制器,或選用一般的微控制器加上獨立的CAN控制器來完成節(jié)點功能。傳輸介質可采用雙絞線、同軸電纜或光纖。
如果需要進一步提高系統(tǒng)的抗干擾能力,還可以在控制器和傳輸介質之間加接光電隔離,電源采用DC-DC變換器等措施。這樣可方便構成實時分布式測控系統(tǒng)。微控制器,或選用一般的微控制器加上獨立的CAN控制器來完成節(jié)點功能。傳輸介質可采用雙絞線、同軸電纜或光纖。如果需要進一步提高系統(tǒng)的抗干擾能力,還可以在控制器和傳輸介質之間加接光電隔離,電源采用DC-DC變換器等措施。這樣可方便構成實時分布式測控系統(tǒng)。
自動駕駛系統(tǒng)如何解析CAN總線的數據
本段主要討論無人駕駛系統(tǒng)獲取到CAN消息后,如何根據CAN協(xié)議,解析出想要的數據?
從CAN總線中解析出傳感器的信息,是每個自動駕駛工程師,甚至每一個汽車電子工程師必備的技能。
認識CAN消息
以百度推出的Apollo開源的代碼為例做CAN消息的講解,我們先看到每一幀的CAN消息是如何被定義的。
可以看到這個名為CanFrame的消息結構中包含4個關鍵信息,分別是:
1.uint32_t id (CAN消息的ID號)
由于CAN總線上傳播著大量CAN消息,因此兩個節(jié)點進行通信時,會先看id號,以確保這是節(jié)點想要的CAN消息。最初的CAN消息id號的范圍是000-7FF(16進制數),但隨著汽車電控信號的增多,需要傳遞的消息變多,信息不太夠用了。工程師在CAN消息基礎上,擴展了id號的范圍,大大增加了id號的上限,并將改進后的CAN消息稱為“擴展幀”,舊版CAN消息稱為“普通幀”。
如果拿寫信做比較,這個id就有點類似寫在信件封面上的名字。
2.uint8_t len(CAN消息的有效長度)
每一幀CAN消息能夠傳遞最多8個無符號整形數據,或者說能夠傳遞8*8的bool類型的數據。這里的len最大值為8,如果該幀CAN消息中有些位沒有數據,這里的len就會小于8。
3.uint8_t data[8](CAN消息的實際數據)
正如剛才提到的,每一幀CAN消息都包含至多8*8個bool類型的數據,因此可以通過8*8個方格,可視化CAN消息中的data。如下圖所示:
在沒有CAN協(xié)議幫助我們解析的情況下,這里的數據無異于亂碼,根本無法得到有用的消息,這也是CAN消息難以破解的原因之一。
4.timestamp(CAN消息的時間戳)
時間戳表示的是收到該CAN消息的時刻。通過連續(xù)多幀的時間戳,可以計算出CAN消息的發(fā)送周期,也可以用于判斷CAN消息是否被持續(xù)收到。
綜上,每幀CAN消息中最重要的部分其實是data,即8*8的bool值。所謂解析CAN消息,其實就是解析這8*8個bool類型的值。
認識CAN協(xié)議
目前業(yè)界的CAN協(xié)議,都是以后綴名為dbc的文件進行存儲的。德國Vector公司提供CANdb++ Editor是一款專門用于閱讀dbc文件的軟件。
如下圖所示,為Mobileye提供的車道線的dbc文件。(文末提供CANdb++ Editor安裝包和Mobileye車道線的dbc文件的獲取方法)
以id號為0x766的LKA_Left_Lane_A為例,這是Mobileye檢測無人車左側車道線的部分信息,包括了左側車道線的偏移量,曲率等。該幀CAN消息(Message)中的五個信號(Signal),分別是Lane_Type、Quality、Curvature、Curvature_Derivative、Width_left_marking、Position。
每個信號的具體描述顯示在軟件右側,其中與解析直接相關的三個要素已用綠色框選中。
1.Value Type(Unsigned或Signed)
某些物理量在描述時是有符號的,比如溫度。而描述另外一些量時,是沒有符號的,即均為正數,比如說曲率。
2.Factor 和 Offset
這兩個參數需要參與實際的物理量運算,Factor是倍率,Offset是偏移量。例如Lane_Type和Quality信號的Factor為1,Offset為0,而其他信號的Factor均為小數。具體的計算方法請往下看。
雙擊LKA_Left_Lane_A,打開Layout頁,會發(fā)現很熟悉的方塊陣列,如下圖所示。
工程師真正關心的恰好是這塊彩色圖,因為該圖上的每個小方塊和data中的每一個bool量一一對應。這就是CAN協(xié)議的真面目。
解析CAN信號
由于彩色方塊圖與data是一一對應的,我們將兩個圖疊加,將得到如下圖所示的data圖。
每個信號物理量的計算公式為:
1.Factor為1的物理量
由于Lane_Type和Quality的Factor為1,Offset為0,因此十進制值為多少,實際物理量即為多少。
從圖中就能直接看出Quality這個信號占據兩個位,二進制數11,換算為十進制是3(1*2 + 1*1);Lane_Type占據四個位,二進制數為0010,換算為十進制是2(0*8 + 0*4 + 1*2 + 0*1)。
所以這一幀信號表示此時的左車道線Lane_Type值為2,Quality值為3。對于整數值,通信雙方可以約定規(guī)則,比如Mobileye就規(guī)定了,Quality為0或者1時表示車道線的置信度較低,不推薦使用此時的值;2表示置信度中等,3表示置信度較高,請放心使用。
2.Factor為小數的物理量
對于Factor不為1的物理量,比如Position,需要使用移位的方法進行解析,但解析公式保持不變。以百度 Apollo提供的源碼為例進行講解。
這里的bytes即為CAN消息中的data,首先將Position信號所在的行取出來,將第1行的8個bool值存儲在變量t1中,將第二行的8個bool值存儲在變量t0中。由于在這條CAN消息中,Position同時占據了高8位和低8位,因此需要將第一行和第二行的所有bool位拿來計算,高8位存儲在32位的變量x中,低8位存儲在32位的變量t中。
現在需要將高8位和低8位拼接,將高8位左移8位,然后與低8位求或運算,即可得到Position的二進制值。隨后進行的左移16位,再右移16位的操作是為了將32位的變量x的高16位全部初始化為0。之后將x乘以Factor再加上Offset即可得到真實的Position值,給真實值加上單位meter,即可獲取實際的物理量。
與CAN類似的通信協(xié)議
VCU、雷達等通過CAN總線傳遞信號,隨著CAN的負載越來越高,很多傳感器選擇了其他通信方式。比如激光雷達的點云數據量太過龐大,使用的是局域網的方式進行傳遞;再比如GPS和慣導使用的是串口進行通信。
雖然通信方式和通信協(xié)議千差萬別,但解析的方法都是一樣的。
最后,提醒一下,由于不同ID的CAN消息的結構不一樣,因此工程師在寫解析代碼時,需要十分仔細,否則會給后續(xù)處理帶來想不到的bug。
-
CAN總線
+關注
關注
145文章
1956瀏覽量
131137 -
自動駕駛
+關注
關注
785文章
13944瀏覽量
167096
原文標題:自動駕駛之——CAN總線簡介
文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
阻性負載的重要作用
淺談展會宣傳推廣的重要作用
CAN總線在機車監(jiān)控系統(tǒng)中的應用
![<b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>在</b>機車監(jiān)控<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>的應用](https://file1.elecfans.com//web2/M00/A4/D7/wKgZomUMNeuAfWmsAAB-Xcx3Rco853.jpg)
究竟終端電阻對CAN總線有什么重要作用和影響呢?
![究竟終端電阻對<b class='flag-5'>CAN</b><b class='flag-5'>總線</b>有什么<b class='flag-5'>重要作用</b>和影響呢?](https://file.elecfans.com/web1/M00/65/EA/pIYBAFuwdtuAAwQiAAAL5i4KQik398.png)
評論