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