## System
Ubuntu 18.04
## 連結
* [ROS Installation on VOXL 1](https://docs.modalai.com/ros-installation-voxl/)
* [How to Run MAVROS](https://docs.modalai.com/mavros/)
* [如何解決“dpkg:error processing/var/cache/apt/archives/python-apport_2.0.1-0ubuntu9_all.deb”?](https://ubuntuqa.com/zh-tw/article/1984.html)
* [Qualcomm Robotics RB5 SDK Manager
User Guide
](https://thundercomm.s3-ap-northeast-1.amazonaws.com/shop/doc/1590131656070623/Thundercomm_Turbox_RB5_SDK_Manager_User%20Guide.pdf)
* [SDK Manager 2.x+ 中 LE 和 LU 分別是什麼意思?](https://developer.qualcomm.com/forum/qdn-forums/hardware/qualcomm-robotics-rb5-development-kit/68626)
* [高通機器人 RB5-Thundercomm SDK Manager 3.0.0 入門](https://developer.ridgerun.com/wiki/index.php/QUALCOMM_Robotics_RB5/Thundercomm_SDK/Getting_Started)
* [高通USB閃存工具](https://www.96boards.org/documentation/consumer/guides/qdl.md.html)
---
## windows 安裝 ADB
adb工具可以讓RB5在windows系統上直接輸入指令
### 1.下載platform-tools文件
下載後的檔案放入電腦裡的C槽位置
[下載連結](https://developer.android.com/studio/releases/platform-tools?hl=zh-tw)

### 2.設定ADB的windows環境變數
鍵盤按鍵"Windows + R", 輸入"sysdm.cpl" 開啟系統內容

點擊"進階 > 環境變數" 在系統變數中找到"PATH",點擊"編輯"

點擊"新增"填入platform-tools的資料夾路徑,在點擊"確認",即完成設定

### 3.測試ADB功能
於CMD輸入查詢ADB版本指令,若列出版本號表示成功

將RB5與電腦使用USB TypeC連接,於CMD輸入"adb shell"指令即可開始使用
```
$ adb shell
```

---
## RB5刷機
刷機**必須使用實體作業系統進行操作**,若使用虛擬機進行刷機則因為Windows無法抓取RB5在EDL mode下的USB驅動,進而造成虛擬機也無法抓到裝置。刷機輸入作業系統版本為 Ubuntu 18.04。
### 注意!!不得使用虛擬機進行刷機
### 參考資料
* [Qualcomm Robotics RB5 SDK Manager](https://thundercomm.s3-ap-northeast-1.amazonaws.com/shop/doc/1590131656070623/Thundercomm_Turbox_RB5_SDK_Manager_User%20Guide.pdf)
* [Qualcomm Robotics RB5- Getting Started with Thundercomm SDK Manager 3.0.0](https://developer.ridgerun.com/wiki/index.php/QUALCOMM_Robotics_RB5/Thundercomm_SDK/Getting_Started)
* [Qualcomm USB flashing tool](https://www.96boards.org/documentation/consumer/guides/qdl.md.html)
### 1. 註冊 thundercomm 帳戶
完成帳戶註冊,以利後續提供 SDK Manager 登入使用
[Thundercomm 網站](https://www.thundercomm.com/)
### 2.安裝Qualcomm USB flashing tool
#### 2.1 下載Linux flashing tool
```
$ git clone https://git.linaro.org/landing-teams/working/qualcomm/qdl.git
```
#### 2.2 安裝編譯工具
```
$ sudo apt-get update
$ sudo apt-get install libxml2-dev libudev-dev
```
#### 2.3 禁用 Dragonboard
```
$ sudo systemctl stop ModemManager
```
### 3.下載 SDK Manager
[SDK Manager下載連結](https://www.thundercomm.com/product/qualcomm-robotics-rb5-development-kit/)
將下載的SDK Manager檔案解壓縮
```
$ unzip TC-sdkmanager-x.x.x.zip
```
### 4.安裝 SDK Manager
在Linux系統中安裝SDK Manager分為兩種不同安裝方法,分別為for Ubuntu 18.04的安裝方法與for Ubuntu 16.04, 20.04的安裝方法,根據本機Linux作業系統版本選擇操作方法
### 注意!!步驟4.1請依照作業統版本擇一執行
#### **4.1 On Ubuntu 18.04 Host**
##### 4.1.1 安裝 qemu-user-static & openssh-server
```
$ sudo apt-get install qemu-user-static openssh-server -y
```
##### 4.1.2 安裝 SDK Manager
```
$ sudo dpkg -i tc-sdkmanager-vx.x.x_amd64.deb
```
##### 4.1.3 啟動SDK Manager
開啟SDK Manager後跳到步驟5開始操作SDK Manager
```
$ sdkmanager
```
#### **4.1 On Other Ubuntu Host (Ubuntu 16.04, 20.04)**
##### 4.1.1 安裝 qemu-user-static & openssh-server & udev
```
$ sudo apt-get install qemu-user-static openssh-server udev -y
```
##### 4.1.2 安裝Docker
[Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)
###### 4.1.2.1 更新apt包索引並安裝包以允許apt通過 HTTPS 使用存儲庫
```
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg
```
###### 4.1.2.2 添加Docker官方GPG密鑰
```
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
```
###### 4.1.2.3 設置存儲庫
```
$ echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
###### 4.1.2.4 安裝最新版本Docker
```
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
###### 4.1.2.5 通過運行鏡像來驗證Docker Engine安裝是否成功 hello-world
此命令下載測試映像並在容器中運行它。當Docker運行時,它會打印一條確認消息並退出。
```
$ sudo docker run hello-world2
```
##### 4.1.3 生成 Ubuntu 18.04 docker 鏡像
```
$ sudo docker build -t ubuntu:18.04-sdkmanager .
```
##### 4.1.4 建立 Docker 容器
```
$ sudo docker run -v /home/${USER}:/home/hostPC/ --privileged -v /dev/:/dev -v /run/udev:/run/udev -d --name sdkmanager_container -p 36000:22 buntu:18.04-sdkmanager
```
##### 4.1.5 在Docker容器啟動SDK Manager
啟動 Docker 環境,若第一次啟動 SDK Manager 則跳過此步驟
```
$ sudo docker start sdkmanager_container
```
開啟SDK Manager後跳到步驟5開始操作SDK Manager
```
$ sudo docker exec -it sdkmanager_container sdkmanager
```
### 5. SDK Manager 下載映像檔
#### 5.1 登入 Thundercomm 帳戶
輸入於步驟1.註冊的電子郵件與密碼

#### 5.2 確認目標路徑
輸入"y"確認路徑

#### 5.3 選擇裝置型號
輸入"1"選擇RB5

#### 5.4 設定映像檔作業系統類型
[What does LE mean and what does LU mean in SDK Manager 2.x+?](https://developer.qualcomm.com/forum/qdn-forums/hardware/qualcomm-robotics-rb5-development-kit/68626)
輸入"1"選擇LU Platform(Ubuntu)

輸入"1"選擇LU1.0 Platform

#### 5.5 選擇映像檔版本
輸入"1"選擇最新版本映像黨

#### 5.6 下載映像檔
輸入"1"開始下載映像檔版本,該步驟執行需要比較長時間

#### 5.7 RB5 進入EDL Mode
1. 移除RB5所有的外接線路,包括USB、Type C與HDMI,否則會造成RB5損壞
2. 持續按壓著"F_DL"按鍵(下圖所示),同時插入電源線

3. 繼續按壓著"F_DL"按鍵,插入電腦USB與Type C連接線,接著釋放"F_DL"按鍵
4. 輸入下列指令查詢電腦是否抓到RB5裝置,當電腦抓到RB5則會多出"/dev/ttyUSB0"的項目
```
$ ls /dev/tty*
```
#### 5.8 燒入映像檔
輸入"2"開始燒入映像檔。燒入完成後等待RB5開機即完成RB5的刷機

---
## Setting WiFi
### 1.進入WiFi配置檔案位置
```
$ cd /data/misc/wifi
```
### 2.修改WiFi配置檔案
修改以下WiFi設定,修改後退出
* ssid=輸入WiFi
* psk=WiFi密碼
```
$ vim wpa_supplicant.conf
```
### 3.重新載入WiFi配置
```
$ wpa_cli -i wlan0 reconfigure
```
### 4.測試連線
查詢IP,若輸入指令後於wlan0顯示IP表示WiFi連接成功
```
$ ifconfig
```
測試ping google通互聯網
```
$ ping www.google.com
```
---
## 系統更新
更新軟體的最新資訊及列表
```
$ apt-get update
```
更新目前已安裝的軟體到最新版本
```
$ apt-get full-upgrade
```
刪除依賴項
```
$ apt autoremove
```
---
## Install ROS
安裝 ROS Melodic 版本
### 1.重新設定apt的來源
備份 sources.list 檔案
```
$ cp /etc/apt/sources.list sources_backup.list
```
修改 sources.list
```
$ cd /etc/apt
$ vim sources.list
```
sources.list 內容覆蓋為以下資料,如下圖所示
> deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse
> deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
> deb [arch=amd64,i386] http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
> deb [arch=arm64,armhf,ppc64el,s390x] http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe multiverse
> deb [arch=arm64,armhf,ppc64el,s390x] http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe multiverse
> deb [arch=arm64,armhf,ppc64el,s390x] http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted universe multiverse
> deb [arch=arm64,armhf,ppc64el,s390x] http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse
示意圖

### 2.Setup your sources.list
```
$ apt-get update
$ sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
### 3.設定金鑰
安裝 curl 工具
```
$ apt install curl
```
加入金鑰
```
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -
```
### 4.更新軟體的最新資訊及列表
```
$ apt-get update
```
### 5.安裝ROS
由於 RB5 沒有 GUI 工具,因此只能安裝 ROS-Base 版本
```
$ apt install ros-melodic-ros-base
```
### 6.環境設置
將ROS環境變數加入.bash
```
$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
```
重新載入.bash
```
$ source ~/.bashrc
```
### 7.安裝構建包的依賴關係
安裝構建 ROS 包的依賴項
```
$ apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
```
安裝rosdep
```
$ apt install python-rosdep
```
初始化rosdep
```
$ rosdep init
$ rosdep update
```
---
## Install MAVROS
### 1.MAVROS 簡易安裝程序
```
$ apt-get install ros-melodic-mavros ros-melodic-mavros-extras
$ wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
$ chmod a+x install_geographiclib_datasets.sh
$ ./install_geographiclib_datasets.sh
```
### 2.安裝 catkin tool
```
apt-get install python3-catkin-tools
```
---
## 建立 ArduPilot 與 ROS 連線環境
```
$ mkdir -p ardupilot_ws/src
$ cd ardupilot_ws
$ catkin init
```
### 1.配置Launch檔案
```
$ mkdir launch
$ cd launch
$ roscp mavros apm.launch apm.launch
```
### 2.連接無人機
用USB線將無人機與RB5連接,輸入以下指令開始ROS連線
```
$ roslaunch apm.launch
```
### 3.驗證連線
在開啟一個cmd視窗進入adb shell,輸入以下指令查看ROS連線狀態
```
$ rostopic echo /mavros/state
```
# 群飛測試
### 開啟mavros
```
$ "Home"
$ cd /home/catkin_ws/launch
$ roslaunch apm.launch
```
### 查看mavros連線狀態
開啟新SSH視窗
```
$ rostopic echo /mavros/state
```