化的四步路徑)
把 CAN 總線延遲砍半openpilot 延遲優(yōu)化的四步路徑【免費(fèi)下載鏈接】openpilotopenpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/op/openpilot跑 openpilot 的時(shí)候你有沒(méi)有覺(jué)得車反應(yīng)慢半拍openpilot 是開源駕駛輔助系統(tǒng)CAN 總線延遲優(yōu)化直接決定它跟車、轉(zhuǎn)向跟不跟手。社區(qū)里有人在一臺(tái)豐田 Camry 上把轉(zhuǎn)向響應(yīng)從 150ms 壓到了 75ms全程沒(méi)換硬件。這篇文章不從頭科普而是倒著講先給你結(jié)果再一步步拆解它是怎么做到的。 先看結(jié)果150ms 是怎么變成 75ms 的先把最終數(shù)據(jù)擺出來(lái)你心里有個(gè)錨點(diǎn)轉(zhuǎn)向指令端到端延遲150ms → 75ms95% 分位延遲120ms → 65ms單包解析耗時(shí)約 0.012ms → 0.006msCAN 總線Controller Area Network是車?yán)锏膬?nèi)部通信主干車上幾十個(gè)小電腦ECU電子控制單元都掛在這條線上openpilot 通過(guò) panda 接口板讀寫它。你的轉(zhuǎn)向指令要在總線上跑一趟這趟路程的耗時(shí)就是延遲。150ms 是什么概念120km/h 時(shí)車已經(jīng)走了 4 米。 動(dòng)手前先定位延遲是四段拼出來(lái)的那位車主第一步不是改代碼而是把延遲拆成四段分別看這樣才知道錢花在哪硬件傳輸panda 板收發(fā)消息的時(shí)間基本是固定的動(dòng)不了總線占用消息太多、總線擁堵指令排隊(duì)等待消息解析收到原始字節(jié)后按 DBC 文件一份信號(hào)字典定義了每個(gè)字節(jié)是什么含義解碼成車速、轉(zhuǎn)向角這些可讀數(shù)據(jù)這是 CPU 開銷的大頭進(jìn)程調(diào)度處理進(jìn)程搶不到 CPU 時(shí)間片只能干等他的診斷結(jié)果指向第 3 段DBC 文件里塞了大量這輛車根本用不上的信號(hào)定義每收到一包數(shù)據(jù)都要多翻一遍字典。方向定了后面的動(dòng)作才有意義。 openpilot 延遲測(cè)試三種測(cè)量方法定位靠猜不行得靠量。openpilot 自帶的工具鏈剛好覆蓋離線測(cè)、在線看、可視化三個(gè)場(chǎng)景。離線測(cè)解析耗時(shí)用回放工具把一段真實(shí)駕駛記錄重放一遍程序會(huì)統(tǒng)計(jì)平均延遲、最大延遲和每包耗時(shí)。跑之前先把倉(cāng)庫(kù)拉下來(lái)git clone https://gitcode.com/GitHub_Trending/op/openpilot在線看總線狀態(tài)行駛中啟動(dòng) CAN 監(jiān)視器實(shí)時(shí)打印每個(gè)消息 ID 的頻率和數(shù)據(jù)內(nèi)容。哪條消息在刷屏、總線負(fù)載高不高一眼就能看出來(lái)??梢暬治鯟abana 是項(xiàng)目里的 CAN 分析工具能加載駕駛記錄、按 ECU 過(guò)濾消息、畫出延遲分布圖。優(yōu)化前后各導(dǎo)出一份分布圖對(duì)比比單點(diǎn)數(shù)據(jù)更有說(shuō)服力。# 行駛中實(shí)時(shí)觀察總線消息 python tools/scripts/car/can_printer.py? CAN 消息解析提速案例里真正起效的三招診斷和測(cè)量做完他動(dòng)的是下面這三處按收益從大到小排第一招精簡(jiǎn) DBC。把 DBC 里與這輛車無(wú)關(guān)的信號(hào)定義刪掉解析表變小翻字典的速度直接翻倍。注意只刪確認(rèn)用不到的信號(hào)刪錯(cuò)了會(huì)導(dǎo)致解碼錯(cuò)位這一步是整個(gè)案例里收益最大、也是唯一有技術(shù)含量的改動(dòng)。第二招砍掉沒(méi)必要的消息處理。pandad 服務(wù)負(fù)責(zé) CAN 消息收發(fā)和解碼的核心進(jìn)程源碼在 selfdrive/pandad/按消息 ID 做過(guò)濾只處理控制閉環(huán)真正用到的報(bào)文其余的直接丟棄。總線負(fù)載降下來(lái)排隊(duì)等待的時(shí)間也跟著降。第三招能吃上 CAN-FD 就吃。CAN-FD 是 CAN 的升級(jí)協(xié)議單幀容量更大、速率更高。如果你的車硬件支持且用的是 red panda官方記錄里 red panda 已支持 CAN-FD切過(guò)去能明顯提升帶寬余量。不支持的車跳過(guò)這招別硬上。另外有個(gè)免費(fèi)加成openpilot 的實(shí)時(shí)進(jìn)程管理模塊common/realtime.py會(huì)給關(guān)鍵進(jìn)程設(shè)置更高的調(diào)度優(yōu)先級(jí)確認(rèn)你的系統(tǒng)跑的是較新版本這招不用改任何東西。? 怎么驗(yàn)證以及別碰的紅線驗(yàn)證環(huán)節(jié)他做了一件事用 Cabana 分別導(dǎo)出優(yōu)化前后的延遲分布圖。95% 分位從 120ms 降到 65ms均值曲線整體左移——這才算閉環(huán)不是感覺(jué)變快了。最后提醒一句紅線任何 CAN 相關(guān)的改動(dòng)都應(yīng)當(dāng)在安全模型的框架內(nèi)進(jìn)行詳見(jiàn) docs/SAFETY.md。openpilot 的設(shè)計(jì)原則是系統(tǒng)在任何異常下都能安全降級(jí)所以改動(dòng)要小步走一次只改一項(xiàng)改完用模擬器回放驗(yàn)證再上實(shí)車。復(fù)盤一下這個(gè)案例拆段定位 → 三法測(cè)量 → 精簡(jiǎn) DBC、過(guò)濾消息、升級(jí)協(xié)議三板斧 → 分布圖對(duì)比驗(yàn)證。你現(xiàn)在就可以動(dòng)手先跑一次回放測(cè)試拿到自己車上的基線數(shù)字基線在手優(yōu)化才有方向。【免費(fèi)下載鏈接】openpilotopenpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/op/openpilot創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考