# PX4+ROS2+Micro XRCE-DDS+ROS 2 Workspace安裝
## 基本安裝
以下安裝是以Ubuntu22.04為主
[Ubuntu 22.04](https://releases.ubuntu.com/jammy/)
假設你是全新的Ubuntu系統,那你必須安裝VSC
[安裝參考網站](https://learningsky.io/tools-ubuntu-install-visual-studio-code/)
[VSC](https://code.visualstudio.com/)
```
sudo dpkg -i 下載的安裝檔名稱
```
如果要安裝中文在CMD中輸入
```
sudo apt install fcitx5 fcitx5-chewing
```
安裝完成輸入
```
reboot
```
開機後在CMD輸入,到圖片中設定
```
ibus-setup
```

## 安裝github
1. 透過執行以下命令更新儲存庫:
```
sudo apt-get update
```
2. 使用以下命令安裝 Git:
```
sudo apt install git
```
## 安裝python
要確保empy的版本是3.3.4,不然再colcon build 時會出現問題。
```
sudo apt update
sudo apt install python3-pip
```
```
pip3 --version
```
```
pip3 uninstall empy
```
```
pip3 install empy==3.3.4
```
```
sudo apt install python3-colcon-common-extensions
```
## 安裝PX4
#### 1. 下載 PX4 的官方原始碼,並加上 --recursive 參數來同時下載所有子模組(如 MAVLink、Firmware 等)。
#### 2. 執行 PX4 官方提供的安裝腳本,這會根據你的 Ubuntu 系統版本安裝 PX4 所需的開發工具、依賴函式庫(如 cmake、ninja、python 套件)等。
#### 3. 進入 PX4 專案資料夾,使用 make px4_sitl 編譯並啟動 Software-In-The-Loop (SITL) 模擬器,這是模擬 PX4 在電腦上運行的環境,方便不連接真實硬體的情況下開發與測試。
```
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
cd PX4-Autopilot/
make px4_sitl
```
## 安裝ROS2
### ROS 2 是 PX4 常用的通訊中介平台,用來實現 UAV 與其他軟體(如感測器、控制器)的互聯。
#### 設定系統語系為英文 en_US.UTF-8,避免安裝或執行過程中出現亂碼或語系不符的錯誤。
```
locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale
```
#### 安裝工具以新增 APT 軟體倉庫,並啟用 Ubuntu 的 universe 倉庫,這裡包含許多 ROS 依賴套件。
```
sudo apt install software-properties-common
sudo add-apt-repository universe
```
#### 下載並安裝 ROS 軟體倉庫的 GPG 金鑰(驗證來源)。
```
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
```
#### 根據目前 Ubuntu 發行版本(如 jammy)新增 ROS 2 軟體來源到系統。
```
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
```
#### 更新套件資訊與系統升級。
```
sudo apt update
sudo apt upgrade
```
#### 安裝 ROS 2 Humble 的完整桌面版,包括常用工具(如 rviz, gazebo, rqt)與開發函式庫;python3-argcomplete 用於支援 tab 補全。
```
sudo apt install ros-humble-desktop python3-argcomplete
```
#### 匯入 ROS 環境變數(每次開新 terminal 時都需要,或寫進 .bashrc 自動載入)。
```
source /opt/ros/humble/setup.bash
```
## ROS2測試
#### 啟動 ROS 2 範例節點(Node),讓你確認 ROS 2 安裝是否成功並開始互動式測試。
```
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
```
#### 以下為成功發出訊息示意圖

```
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener
```
#### 以下為成功接收訊息示意圖

## 設定 Micro XRCE-DDS 代理程式和客戶端
* Micro XRCE-DDS Agent 是一個代理程式,它在 ROS 2 主機(如 Ubuntu 電腦) 和 微控制器(用戶端) 之間做橋樑。
* 「XRCE」代表 eXtremely Resource-Constrained Environment,專門設計給資源有限的裝置(如飛控板)。
* 微控制器上的程式會透過 UDP 與代理通訊,代理再轉送資料給 ROS 2 DDS 通訊架構。
#### 1. 從 GitHub 下載 Micro XRCE-DDS Agent 的原始碼。
#### 2. 建立並進入建構資料夾,用於編譯原始碼。
#### 3. 使用 cmake 產生編譯設定,並用 make 編譯原始碼。
#### 4. 安裝編譯完成的可執行檔與函式庫到系統中(通常安裝到 /usr/local/bin 與 /usr/local/lib)。
#### 5. 通知系統更新動態連結庫的搜尋路徑,讓 Agent 的函式庫能被正確載入。
```
git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib
```
#### 啟動代理程式,並指定使用:
#### UDP over IPv4 (udp4) 通訊協定
* 埠號 8888
* 當你執行這個指令後,代理程式會開始聽取來自 MCU 的 UDP 封包,並與 ROS 2 DDS 架構做橋接。
```
MicroXRCEAgent udp4 -p 8888
```
## 安裝 ROS 2 Workspace
### 建構 PX4 與 ROS 2 通訊所需的套件 px4_ros_com 和 px4_msgs,這是你在使用 ROS 2 控制 PX4 飛控器(例如透過 offboard mode) 必備的步驟。
#### 這段指令會:
#### 建立一個 ROS 2 的工作區目錄,叫做 ws_sensor_combined
#### src/ 是用來放原始碼套件的資料夾(符合 ROS 2 工作區結構)
#### 然後切換進入 src/,準備放入套件
```
mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/
```
#### 下載 PX4 對應的 ROS 2 套件
```
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git
```
#### 回到工作區根目錄(~/ws_sensor_combined)
#### 載入 ROS 2 的環境變數(因為你正在使用 ROS 2 工具 colcon)
#### 使用 colcon build 編譯整個工作區
```
cd ..
source /opt/ros/humble/setup.bash
colcon build
```

## 安裝QGC
[QGC安裝辦法](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/getting_started/download_and_install.html)
```
sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y
```
#### 記得下載QGroundControl-x86_64.AppImage
#### 要進入你存放檔案的地方,我這邊是放在Downloads
```
cd Downloads
chmod +x ./QGroundControl-x86_64.AppImage
./QGroundControl-x86_64.AppImage
```
## 虛擬模擬
[PX4模擬](https://hackmd.io/@Yo6S6-QbTX2tGrnWSw-aUw/SyBNddx-lx)
## Offboard
#### 跟著官網做就行了
[官網](https://docs.px4.io/main/en/ros2/user_guide)
#### 建立一個資料夾可以操作offboard
```
mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git
```
#### 因為我們是22.04,所以使用humble
```
cd ..
source /opt/ros/humble/setup.bash
colcon build
```
#### 以下跟著步驟做
```
cd ~/ws_sensor_combined/
source /opt/ros/humble/setup.bash
```
```
source install/local_setup.bash
```
```
ros2 launch px4_ros_com sensor_combined_listener.launch.py
```
成功會看到
