# 110-2 韌體組開發筆記 (PX4 v1.12.3)
###### tags: `飛控` `建立環境` `WSL` `Ubuntu`
[TOC]
## 建立環境
參考資料: [PX4 Dev Setting up a Developer Environment](https://docs.px4.io/v1.12/en/dev_setup/dev_env.html)
> 根據參考資料所述,建議開發環境為Ubuntu Linux,但是有鑑於安裝雙系統有點麻煩(其實也蠻簡單的啦),因此我們選擇使用Windows WSL2做為開發環境,其使用方式與Ubuntu Linux一樣。
> [飛控組參考資料](https://hackmd.io/fF4YJoOrT6aflARJPJUgoA)
> [name=沈張德]
### WSL2 & Ubuntu 20.04
**目標:安裝WSL2 & 安裝與設定Ubuntu 20.04**
### 安裝WSL2
這個方法只適用第一次安裝Linux的電腦,如果要更新請參考下面連結其他疑難排解的方法進行設定。
[Windows 10 2004 版、Windows 11或更新版本](https://learn.microsoft.com/zh-tw/windows/wsl/install)
[舊版WSL](https://learn.microsoft.com/zh-tw/windows/wsl/install-manual)
在Windows 開始 搜尋Powershell

打開Powershell,輸入
```
wsl --install
```

基本上,沒有要選擇版本或特殊處理的話,這樣就算是安裝完成了。如果有特殊需求,一樣點上方的連結就可以查到相關指令。在應用程式裡面也會出現WSL

### 安裝Ubuntu 20.04
這個蠻簡單的,在Windows市集(Microsoft Store)中搜尋Ubuntu,會出現很多版本。選擇Ubuntu 20.04.1、Ubuntu 20.04.5...等都可以,注意商店中應用程式介紹要是Ubuntu2004或是目前是屬於這個版本的才行。

(其實打錯字也找的到)
安裝完成之後,依照下面網頁做設定。可以從附圖的位置開始繼續。
[設定 WSL 開發環境](https://learn.microsoft.com/zh-tw/windows/wsl/setup/environment?source=recommendations)

開啟Ubuntu 2004之後,系統會要求您為Linux建立使用者名稱和密碼。在輸入密碼時,畫面上不會顯示任何專案。不會看到輸入的內容,這稱為盲目輸入。
一旦您建立使用者名稱和密碼,帳戶就會是您散發套件的預設使用者,而且會在啟動時自動登入。(**但是密碼不要忘記!!執行部分指令時還是會要輸入密碼**)
如果忘記密碼的話可以Google或是點[設定 WSL 開發環境](https://learn.microsoft.com/zh-tw/windows/wsl/setup/environment?source=recommendations)的連結,不要急著重灌,蠻費時的。
> [name=張朝雄]
### 安裝Toolchain
> 因為我們要將toolchain安裝在WSL2上面,因此我們可以按照Ubuntu Setup的方式安裝。
> ==但是各位安裝的WSL是沒有包含圖形化(GUI)介面的版本,因此下面會提到要將安裝時要多加上一個flag==
> [name=沈張德]
選擇 Ubuntu Setup

#### 下載原始碼
從Github上下載(clone)原始碼
```
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
```
:::warning
後面的 --recursive 一定要加上去喔
:::
:::info
第一次使用ubuntu尚未安裝git工具的,請先安裝git
```
sudo apt install git
```
:::
進入資料夾&切換版本(分支)至v1.12.3
```
cd PX4-Autopilot
git checkout v1.12.3
```
執行ubuntu.sh安裝各必要元件
```
bash ./Tools/setup/ubuntu.sh --no-sim-tools
```
:::danger
最後面一定要加上 --no-sim-tools避免安裝SITL套件相關Dependencies
:::
### 安裝 VSCode 並連結 WSL2
可以參考[設定 WSL 開發環境](https://learn.microsoft.com/zh-tw/windows/wsl/setup/environment?source=recommendations)的下半部,但是有些不一樣。
1.先安裝vscode
```
https://code.visualstudio.com/
```
2.正常安裝完打開長這樣

會發現左下角,是沒有連接的狀態

3.直接點擊上圖綠色的部分,正上方會跳出選單。選擇New WSL Windows就可以完成連接。如果已經下載完PX4的資料,可以選擇Open Folder in WSL >>PX4-Autopilot的資料夾開啟。

> [name=張朝雄]
### 編譯韌體
這邊介紹的是編譯要燒錄至飛控板上的binary檔案,依照不同的板子選擇不動的編譯參數
[PX4 Building the Code](https://docs.px4.io/v1.12/en/dev_setup/building_px4.html)

### 如果無法完成編譯
如果在進行編譯時出現error(例如:什麼什麼declared之類的)
請進到PX4-Autopilot的資料夾打上
[Troubleshooting](https://docs.px4.io/v1.12/en/dev_setup/building_px4.html?#troubleshooting)
```
git submodule update --recursive
make distclean
```
在編譯一次應該就可以了
## 概論
參考資料:[PX4 Dev Concepts](https://docs.px4.io/v1.12/en/concept/)
### 飛控板架構

### 頂層軟體架構

> 請大家將下面每個子項目都看一遍做個summary
> Flight mode, Mixing and Actuators, ...etc
> [name=沈張德]
## Middleware
### uORB Messaging
### MAVLink Messaging
1. 在mavlink/include/mavlink/v2.0/資料夾中新增將要輸出的訊息內容的資訊(訊息格式與大小等等)參考UAV github
2. 在src/driver/中根據要增加driver的類型選一個資料夾把寫好的driver(參考ina226)丟進去
> 以ina219來說,將ina219資料夾丟進power_moniter中就好
3. 在src/driver/drv_sensor.h中定義sensor編號
4. 在boards/中選擇飛控板所需的韌體,以pixhawk4而言選擇fmu-v5,並將driver位置告訴編譯器,在default.cmake中添加driver。

> 以ina219而言,在第二步中將資料夾放在power_moniter中,因此位置就是power_monitor/ina219
### flymode 設定
在自訂flymode中可以選擇需要控制那些東西,例如下圖便是stabalize時控制器會控制的東西。

有這些可以進行調整

### System ID