網頁

2022-04-15

[openpilot] 第一次開發openpilot就上手


openpilot不但是一個後裝市場的ADAS,由於它的軟體免費開源,它更是許多對於汽車產業與機電控制學習的好平台。就像在XDA網站有非常多android資源的開發團體與軟體資源,comma ai的discord也是有非常多的開發資訊可以學習。很多人知道openpilot的開源,卻往往不得其門而入。而這邊要做一個簡單的入門介紹,讓有興趣的人可以了解。如果讀者本身是software的人員,也可以透過這篇馬上開始進行openpilot的開發。

首先,你要有一台主機,不論是O1/C2與C3的開發方式都類似,並不限於硬體差異。所以當你準備好主機的時候,我們就可以開始開發你的openpilot囉!

一、連線openpilot

你要先學會如何SSH連線到你的comma device,所以請先服用這帖:openpilotToolkit (OT) - 連接comma two/comma three的好用工具。你只要能連線你的設備,就可以加入開發openpilot了。

當SSH FTP連線到你的主機不成問題以後,再來就是你需要一個好用的編輯器,這裡我推薦Notepad++


安裝好Notepad++之後,我習慣在FileZilla指定Notepad++為預設編輯器。在編輯->設定->檔案編輯裡面,指定Notepad++執行檔的完整路徑。然後押下確認,就預設成功了。


這時候你已經成功設置好你的開發環境了。


二、更改速度的顯示顏色

會以此作為開發範例,是因為comma ai也是使用這個例子,不過他們採用Git diff為主的方式,是真的開發者常用的工具。為了讓讀者可以更快進入開發階段,所以我直接使用FTP編輯程式碼的方式。

變更速度文字的顏色的程式在這支data/openpilot/selfdrive/ui/qt/onroad.cc。你可以找到這隻檔案以後,押右鍵點選編輯。

在內文中找到OnboardHud的類別

void OnroadHud::drawText(QPainter &p, int x, int y, const QString &text, int alpha) {
  QFontMetrics fm(p.font());
  QRect init_rect = fm.boundingRect(text);
  QRect real_rect = fm.boundingRect(init_rect, 0, text);
  real_rect.moveCenter({x, y - real_rect.height() / 2});

  // p.setPen(QColor(0xff, 0xff, 0xff, alpha)); 刪除此行
  p.setPen(Qt::blue); //新增此行
  p.drawText(real_rect.x(), real_rect.bottom(), text);
}


把原本p.setPen(..........................)改成藍色p.setPen(Qt::blue);


然後儲存Notepad++這隻程式並關閉,FileZilla就會自動通知儲存comma device裡的檔案。然後你就把O1/C2/C3重新開機。上車連線一看,時速的顏色就變成藍色的了。


你看,開發openpilot是不是很簡單呢?你現在就已經上手開發openpilot這件事了。


三、自訂車型的改法

在台灣許多使用者安裝官方openpilot後,第一個問題就是遇到car unrecognized,有些錯誤的說法是說官方openpilot支援性不佳。你想想,怎麼可能呢?其實因為早期台灣許多銷售,為了省成本,是不包含comma power或不支援comma power功能的線組配件,這使得官方的二代指紋無法被支援,因為你無法支援官方FPV2,抓不到車型也實在是非官方之罪。

再來是台灣車款版本往往跟美規版本配備不同,因為車型配備不同,所以產生無法辨識的狀況也是合情合理。

這時候你如果會開發程式,你就可以靠自己指定車型。首先你要先知道你的車型名稱。我們可以進入data/openpilot/selfdrive/car/toyota/values.py來看。(其中toyota可以換成其他汽車廠牌,然後一樣進入values.py。)

class CAR:
  # Toyota
  ALPHARD_TSS2 = "TOYOTA ALPHARD 2020"
  ALPHARDH_TSS2 = "TOYOTA ALPHARD HYBRID 2021"
  AVALON = "TOYOTA AVALON 2016"
  AVALON_2019 = "TOYOTA AVALON 2019"
  AVALONH_2019 = "TOYOTA AVALON HYBRID 2019"
  AVALON_TSS2 = "TOYOTA AVALON 2022"  # TSS 2.5
  AVALONH_TSS2 = "TOYOTA AVALON HYBRID 2022"
  CAMRY = "TOYOTA CAMRY 2018"
  CAMRYH = "TOYOTA CAMRY HYBRID 2018"
  CAMRY_TSS2 = "TOYOTA CAMRY 2021"  # TSS 2.5
  CAMRYH_TSS2 = "TOYOTA CAMRY HYBRID 2021"
  CHR = "TOYOTA C-HR 2018"
  CHRH = "TOYOTA C-HR HYBRID 2018"
  COROLLA = "TOYOTA COROLLA 2017"
  COROLLA_TSS2 = "TOYOTA COROLLA TSS2 2019"

例如,你的車是C-HR那你的車型ID就是"TOYOTA C-HR 2018",如果你的車是Altis或CC那你的車型ID就是"TOYOTA COROLLA TSS2 2019"。像VAG的MQB的車型ID就是"VOLKSWAGEN GOLF 7TH GEN",基本上MQB都通用。

這時候要去找/data/openpilot/launch_env.sh這支檔案。

if [ -z "$PASSIVE" ]; then
  export PASSIVE="1"
fi

export STAGING_ROOT="/data/safe_staging"
export FINGERPRINT="VOLKSWAGEN GOLF 7TH GEN"

在最後一行新增這段:export FINGERPRINT="車型ID",一樣儲存重新開機。只要車型正確,雖然你沒有FPV2或是沒有comma power,你的車也是能馬上抓到使用囉。


四、版號更新

聽說C2進入0.8.13就是最後一版了,很多人都覺得扼腕嘆息,但是天下沒有不散的筵席,不管是PS2/PS3,還是iphone7/iphone8其實也會有停止更新的一天。但如果可以,我也希望我的主機可以無限更新。

你的願望被聽見了!只要有開發能力,區區的更新不算什麼。

你先用FTP去找selfdrive/common/version.h這支宣告檔案,然後開啟編輯。裡面只有簡單的一行。

#define COMMA_VERSION "0.8.13-release"


接著你只要修改#define COMMA_VERSION "XXXX" 內的文字,你就可以自行升級版本了。所以更新從來都不會是一個問題,一個最大的問題是ai model到底有沒有升級,ai到底有沒有變聰明,ai的操控有沒有更精緻??如果只是想要讓版本編號的數字增加,現在的你,也可以自己做到囉!



好了,你知道官方0.8.14 master開發版,不但有O1/C2的bigmodel,而且還多了允許油門了嗎?你現在已經可以自行指定車型,然後安裝0.8.14了,何不來試試看官方的最新測試版呢?

安裝網址:https://installer.comma.ai/commaai/master

要提醒一點,原生的官方釋出版release版(例如目前的0.8.13 release),修改程式碼是沒有用的,因為釋出版為了穩定與一致性,程式都已經預先編譯過,開機也不會編譯。


最後要勉勵各位想要參與openpilot開發的人們,GeorgeHotz已經說了,想要在comma ai得到一份工作並不難,就是下載表單,填寫內容,然後重複這件事情直到你有能力為止。有沒有很勵志??

送給每一個想要成為OP高手的你。

----------------------------------------------------------------------------------------------------------------

如果你是第一次來到這邊,歡迎加入下方社群,我都會在第一時間報導與解析Comma ai與openpilot的最新動態,快來一起follow吧!