# PX4

## 韌體編譯

### 0. 前置條件

作業系統為Ubuntu或Windows WSL

### 1. 構建PX4開發環境

PX4是一個開源的飛控韌體，主要用於無人機和遙控飛行器。以下是構建 PX4開發環境的步驟：

### 2. 複製PX4 Github儲存庫

1. 開啟終端。
2. 執行以下命令以複製 Betaflight 儲存庫：

   ```bash
   git clone https://github.com/PX4/PX4-Autopilot.git --recursive
   ```
3. 執行PX4開發環境配置腳本，等待安裝完成：

   <pre class="language-bash"><code class="lang-bash"><strong>bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
   </strong></code></pre>

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2Fve7LMrFsXvGCwdBY3uO8%2Fimage.png?alt=media&#x26;token=40a804aa-bbe5-4dea-bdbe-2e7fe7b473f2" alt=""><figcaption></figcaption></figure>

### 3. 編譯PX4韌體

1. 先將工作目錄切換到PX4儲存庫中

   ```
   cd PX4-Autopilot
   ```

2. 執行以下命令進行韌體編譯：

   ```bash
   make <Board Name>
   ```

   *將* Board Name*替換為飛控板的具體名稱。*

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2Fm4cuJ46kB7QUntEB9wRi%2Fimage.png?alt=media&#x26;token=79be442f-cef1-4273-92a1-4048ff7392ef" alt=""><figcaption></figcaption></figure>

3. 編譯的韌體位置在PX4-Autopilot/build/\<Board Name>/底下，包含PX4的韌體檔案(\<Board Name>.bin, \<Board Name>.px4)

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FTngOzf17684aPeieMP4R%2Fimage.png?alt=media&#x26;token=c91c7db4-da7b-4870-a999-b4b66f95a622" alt=""><figcaption></figcaption></figure>

## 韌體燒錄

燒錄PX4韌體目前提供兩種方法

{% tabs %}
{% tab title="QGroundControl" %}
**此方法應用於已安裝PX4或Ardupilot的韌體**

1. 開啟QGroundControl，開啟左上角的Icon，**確保目前沒有連接飛控**

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2F3z3DxMpiQU6NiszlN8jo%2Fimage.png?alt=media&#x26;token=f5429fb4-1848-453c-a32e-84f8de3cce25" alt=""><figcaption></figcaption></figure>
2. 選擇Vehicle Configuration

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FHJxduHluphUqMWb3gGL3%2Fimage.png?alt=media&#x26;token=ae0d1da7-3289-46a7-b381-83ebb8353359" alt=""><figcaption></figcaption></figure>
3. 選擇Firmware，提示表示請插入USB

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FK8TAxtjhXJJmoAtNrpFU%2Fimage.png?alt=media&#x26;token=eba40c0b-d77e-4d7b-be8b-884b45b5571a" alt=""><figcaption></figcaption></figure>
4. 飛控板使用USB連接到電腦，出現以下畫面，選擇PX4 Pro字串的選項。

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FskFaiBi7xcXt5qVGP6qx%2Fimage.png?alt=media&#x26;token=722d9706-897c-43bf-a2d4-2b25c3dec6f9" alt=""><figcaption></figcaption></figure>
5. 按下OK即可開始燒錄
6. 回到QGC連線，觀察是否有數據，有數據表示成功
   {% endtab %}

{% tab title="STM32CubeProgrammer " %}
**此方法可以應用於原先安裝Betaflight或其他非PX4與Ardupilot的韌體**

1. 先下載並安裝STM32CubeProgrammer，[下載來源](https://www.st.com/en/development-tools/stm32cubeprog.html)

2. 飛控板開啟DFU模式，USB 連接到電腦。

3. 開啟STM32CubeProgrammer，選擇USB並按下Connect，連線到飛控板

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2F3dP5X2OEpZdPVafizR8l%2Fimage.png?alt=media&#x26;token=08a189f6-f9f1-4683-a5c7-24124e0cf310" alt=""><figcaption></figcaption></figure>

4. 按下Open file，開啟包含px4韌體的檔案(此處以Ardupilot為例，可以選擇.px4檔案)

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FJlLMAFP5BMppS1Q2VnVG%2Fimage.png?alt=media&#x26;token=19b7335f-80d0-413a-b8d0-687c5bd6a326" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FXie8M5goVet43t6vIkl2%2Fimage.png?alt=media&#x26;token=e9c9dd8b-41cf-4649-b68c-18fe8a5639bb" alt=""><figcaption></figcaption></figure>

5. 下載/燒錄韌體到飛控板上

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FOjny4CjDVEFcYCLvtChp%2Fimage.png?alt=media&#x26;token=b1dddf30-a0f5-452e-874e-75ef2179e076" alt=""><figcaption></figcaption></figure>

6. 燒錄中

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FstENUXh69t1nO809TVlg%2Fimage.png?alt=media&#x26;token=d2b3110c-8047-435d-be1a-96e4dc40c1b9" alt=""><figcaption></figcaption></figure>

7. 完成下載/燒錄

8. 燒錄完成

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FLItbYpFEgzrbclvmexWa%2Fimage.png?alt=media&#x26;token=8d9794bb-ae66-4736-8c8b-0b37d247a0b2" alt=""><figcaption></figcaption></figure>

9. 開啟Mission Planner，連線到飛控

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2F9DiDZj5htxjIHWUVAiHE%2Fimage.png?alt=media&#x26;token=4fd60f80-ee80-4fce-a607-e15ec8178dce" alt=""><figcaption></figcaption></figure>

{% endtab %}
{% endtabs %}

***

## 如何編譯自定義的飛控板

1. 確認已經成功配置PX4開發環境
2. 移動到PX4-Autopilot/board中，複製**已經存在**的飛控板定義，重新命名新飛控板名稱的資料夾，此處以Morakot為例。

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FZsvki5CubRdG9iMcSzay%2Fimage.png?alt=media&#x26;token=d753668b-718e-4db4-9642-e32bfe2d3929" alt=""><figcaption></figcaption></figure>
3. 修改nuttx-config資料夾中的nsh/defconfig以及bootloader/defconfig

   nsh/defconfig，修改`CONFIG_ARCH_BOARD_CUSTOM_DIR="<nuttx-config所在的路徑>"`

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FBa25972lnUhlxUIqt6nZ%2Fimage.png?alt=media&#x26;token=df526e87-19bd-4d5a-b3dd-71848172419c" alt=""><figcaption></figcaption></figure>

   bootloader/defconfig，修改`CONFIG_ARCH_BOARD_CUSTOM_DIR="<nuttx-config所在的路徑>"`

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FGDrbHHKyg9IUtbPg59Wz%2Fimage.png?alt=media&#x26;token=f59d1db2-28e7-46d7-bcd4-a72a062089d9" alt=""><figcaption></figcaption></figure>
4. 修改飛控板資料夾內部的檔案(目前尚未測試完成)

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2Fzm1nBGZuM5n48QzXatv2%2Fimage.png?alt=media&#x26;token=c0b6b457-f900-4c44-8d70-ed692b1a35ac" alt=""><figcaption></figcaption></figure>
5. 修改飛控板資料夾其中的內容，根據實際板子所使用的腳位定義與接線，撰寫自己的飛控板配置(目前尚未測試完成)

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FThDxC72si6pb5zCCIdSB%2Fimage.png?alt=media&#x26;token=5519f396-4f73-46ce-b3d3-6444b1735af5" alt=""><figcaption></figcaption></figure>
6. 修改完畢後，開啟終端機，切換到PX4儲存庫的資料夾
7. 首先，編譯新飛控板的Bootloader，**此步驟不可跳過**。：

   `make <Board Name>_bootloader`

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FnELS34kNawDyFOrEOAlQ%2Fimage.png?alt=media&#x26;token=abbbf98e-7225-4e0c-9539-9d31771b3d38" alt=""><figcaption></figcaption></figure>
8. 接著編譯PX4韌體，**此步驟不可跳過。**

   `make <Board Name>_default`

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FDY0nsg4X7DXHsKoE9tjq%2Fimage.png?alt=media&#x26;token=a09bc657-4292-4561-981b-b9023a103d77" alt=""><figcaption></figcaption></figure>
9. 編譯完成的PX4韌體將會位於`PX4-Autopilot/build/<Board Name>_default`裡面

   <figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FNnXhAX7EodqLxthGzvN7%2Fimage.png?alt=media&#x26;token=4325eaee-9b9d-4db1-8392-637fe2120537" alt=""><figcaption></figcaption></figure>
