PX4 HW/SW setup

# HW/SW setup for S500

**この記事の主な対象：**
PX4 v1.12のはず
Holybro S500
PM07
- これ以外の機種もサイトに記載がある．
- 下記公式サイトのリンクを中心にこの記事内リンクから飛べる．

基本的には以下の公式サイトを確認のこと
ただし、公式サイトではpixhawk2であったり、PMB (power management board)が違ったりするので、適宜それ用のサイトを確認する必要がある。

## pX4公式
https://docs.px4.io/master/en/
dronecode（QGC）公式
https://docs.qgroundcontrol.com/master/en/

https://docs.px4.io/master/en/frames_multicopter/holybro_s500_v2_pixhawk4.html#install-configure-px4
基本これで全て事足りる

## HW setup
https://docs.px4.io/master/en/dev_setup/config_initial.html#vehicle-configuration
も参考になる．
### Wiring

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452637/94195416-34fa-3ba2-448a-3fe331251008.png)
Taken from [Pixhawk 4 Wiring Quick Start](https://docs.px4.io/master/en/assembly/quick_start_pixhawk4.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452637/c27af7c8-c60b-37ed-04bc-60b8ffa49656.png)
Taken from https://docs.px4.io/v1.12/en/power_module/holybro_pm07_pixhawk4_power_module.html#wiring-connections

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452637/5cc5279d-7189-dba0-b25d-c3510032cba9.png)
Taken from https://docs.px4.io/master/en/airframes/airframe_reference.html#quadrotor-x

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452637/7a96a12b-1faa-1127-eb34-1be965b4a483.jpeg)

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR_s-lGxWnCLL0gIosBR24dsCyY2uRmdDagHcWwr4ObrpC4g3ZGcY410Bw&s=10

## QGC
Pixhawkのセットアップには、pcにQGCをインストールする必要がある

### Installation
[PX4公式サイト](https://docs.px4.io/master/en/config/)を参考に、[Ardupilotサイト](https://docs.qgroundcontrol.com/master/en/getting_started/download_and_install.html#ubuntu)経由でQGCインストール

こっちもあるけど未確認
(https://docs.qgroundcontrol.com/master/en/releases/daily_builds.html)

### Setup
QGCのインストールされたpcとpixhawkをusb-microで接続し、QGC起動
**純正ケーブルでないとQGCに認識されなかった**

QGCのセットアップはdronecodeのサイトがわかりやすい
https://docs.qgroundcontrol.com/master/en/SetupView/SetupView.html

```
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage 
```

[S500](https://docs.px4.io/master/en/frames_multicopter/holybro_s500_v2_pixhawk4.html#install-configure-px4)など、広く使われている機体は[セットアップ（チューニング）が容易らしい](https://docs.px4.io/master/en/frames_multicopter/holybro_s500_v2_pixhawk4.html#install-configure-px4)

参考： https://docs.px4.io/master/en/config/#advanced-configuration

基本的には[これ](https://docs.px4.io/master/en/config/)の通りに行うのがいい。
適用して再起動をクリックするとピロピロ〜と音がする。

はじめ、ファームウェアの更新しようとしたらこういった画面が出てあせったが、USB接続を外して、再度ファームウェア（Pro）を選択して「適用して再起動」したら直った。
![Screenshot from 2022-06-11 22-52-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452637/47507911-6da5-7f72-cd52-56de3013170f.png)

Airframeは上記サイト通り機体フレーム（S500）を選択して適用して再起動。
![Screenshot from 2022-06-11 23-08-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452637/e1c6ec28-c570-dd6e-023a-65f7725cba86.png)

あとはhttps://docs.px4.io/master/en/frames_multicopter/holybro_s500_v2_pixhawk4.html#install-configure-px4
の通りにやれば良さそう
抜粋すると，以下の設定が必要らしい
- mandatory setup/calibration
[Sensor Orientation](https://docs.px4.io/master/en/config/flight_controller_orientation.html#calculating-orientation)
Compass
Accelerometer
Level Horizon Calibration
Radio Setup
    - MODE2の方がより一般的らしい
Flight Modes
- Ideally you should also do:
ESC Calibration
Battery
Safety
- Fine tuning
[Multicopter PID Tuning Guide](https://docs.px4.io/master/en/config_mc/pid_tuning_guide_multicopter.html)
    - sensor tuning
[Level Horizon Calibration ](https://docs.px4.io/master/en/config/level_horizon_calibration.html)
https://docs.px4.io/master/en/advanced_config/advanced_flight_controller_orientation_leveling.html


## Flight
https://docs.px4.io/master/en/advanced_config/prearm_arm_disarm.html

### Indoor Flight with RC
https://discuss.px4.io/t/indoor-flying/409
https://ardupilot.org/copter/docs/indoor-flying.html
- *Stabilize* Mode が屋内飛行には良さそう
- [Feed Motion Capture data to PX4](https://risc.readthedocs.io/1-indoor-flight.html#feeding-mocap-data)-to-pixhawk

- **GPSのLEDサインも要調査(safety switchの状態など)**

「safety switchはデフォルトでオンになっている。
GPSについているsafety switchを1秒押すと解除/オンにできる。」
らしいが，押しても反応しなかった．prearm checkが通っていないのが原因？
https://docs.px4.io/master/en/assembly/quick_start_pixhawk4.html#gps-compass-buzzer-safety-switch-led

### Arming/Disarming
https://docs.px4.io/master/en/getting_started/px4_basic_concepts.html#arming-and-disarming

https://docs.px4.io/master/en/advanced_config/prearm_arm_disarm.html#arming-gesture
プロポの設定（Mode 1/2）で*Arm*, *Disarm*のためのスティック操作が異なる．

#### GPS pos error too high
QGCからArmしようとすると，このエラーメッセージが出て，disarmされる．
**プロポからArmすれば問題ない**
一応こういった解決策もある．
https://discuss.px4.io/t/warning-preflight-gps-horizontal-pos-error-too-high/14933


GPS horizontal position error etcのエラーが出ると pre arm safety checksが満たせない
https://ardupilot.org/copter/docs/common-prearm-safety-checks.html


### Tuning
https://docs.px4.io/v1.12/en/config_mc/pid_tuning_guide_multicopter_basic.html
https://docs.qgroundcontrol.com/master/en/SetupView/tuning_px4.html
http://docs.px4.io/master/en/config/actuators.html
http://docs.px4.io/master/en/config/autotune.html

#### Telemetry
チューニングには実際に飛行する必要があるため，テレメトリが必要になる．
https://docs.px4.io/master/en/telemetry/



### Flight Mode
https://docs.px4.io/master/en/getting_started/px4_basic_concepts.html#flight-modes

https://docs.px4.io/master/en/getting_started/flight_modes.html#multicopter

RCならPosition Mode (MC)、Altitude Mode (MC)が楽そう

#### Offboard Control
https://docs.px4.io/master/en/ros/offboard_control.html#on-board-processor-and-wifi-link-to-ros-recommended


## Simulation
### Simulaition in Hardware (SIH)
https://docs.px4.io/master/en/simulation/simulation-in-hardware.html

### Hardware in the Loop Simulation (HITL)
https://docs.px4.io/master/en/simulation/hitl.html

基本PX4 User Guideを見る。ただし、Vehicle Setup -> HITL -> HITLの部分で、選択肢にある`external HITL`, `HITL and SIH disabled`, `HITL enabled`, `SIH enabled`については、以下のページの`SYS_HITL (INT32)`が参考になる。
https://dev.px4.io/master/en/advanced/parameter_reference.html#system

モデルはこれ
https://docs.px4.io/master/en/airframes/airframe_reference.html#copter_simulation_(copter)_hil_quadcopter_x

自作launch fileでの手順（要検証）
1. USBでPixhawkをpcに接続
    1. RCが接続されていることを確認
1. mavros_posix_sitl.launchのworldに$(find px4)/Tools/sitl_gazebo/worlds/hitl_iris.worldを指定
1. roslaunch
1. QGC起動


[公式の方法](https://docs.px4.io/master/en/simulation/hitl.html#gazebo)

#### 問題
QGCからtakeoffしたのにドローンが振動して離陸できない
挙句ひっくり返る。なんで、、



## Real Flight
https://aerial-robotics-iitk.gitbook.io/wiki/control-system/model-predictive-control/example-launch-files-for-system-identification

https://github.com/KumarRobotics/kr_docs/blob/master/docs/source/references/hardware/computation/pixhawk.md
https://kumar-robotics-github-documentation.readthedocs.io/en/master/references/hardware/computation/pixhawk.html

https://github.com/mavlink/mavros/issues/624#issuecomment-257778003

PX4のPARAMSを以下のとおりに書き換えたが、別のパラメータをいじる説もある
https://docs.px4.io/master/en/peripherals/mavlink_peripherals.html#example

ttyTHS1に繋がっているPixhawkとの通信を可能にするため、companion computer (Jetson)で以下のポートを有効にする必要がある
```
sudo chmod 666 /dev/ttyTHS1
```

## Note
- Pixhwk2.4.8では付いていたbuzzer, switchなどがなくなっている。([記事上部画像](https://qiita.com/noby_aoao/items/3db290a2f15270032f1d#wiring)参照)
GPSの中に compass, safety switch, buzzerが入っている模様。
[この動画](https://www.youtube.com/watch?v=nEMllpEfzv4)でも触れられているけど，全体的にかなりシンプルになっており，スマートな印象．内部のセンサ類も新しめのいいやつらしい．

## 3rd party video

### Pixhawk4 Wiring
https://www.youtube.com/watch?v=dDOQI5NoNP0
https://www.youtube.com/watch?v=nEMllpEfzv4
https://www.youtube.com/watch?v=dDOQI5NoNP0

### S500 Body assembly
https://www.youtube.com/watch?v=ibXNw8jLwBs&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=67
https://www.youtube.com/watch?v=WWoDdBTV67Q&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=66

https://www.youtube.com/watch?v=OmPZooAjChY
https://www.youtube.com/watch?v=6-lx9fO0tQs&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=66&t=403s

### Pixhawk set-up
https://youtu.be/kB9YyG2V-nA
https://www.youtube.com/watch?v=uH2iCRA9G7k&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=73
ArduPilot
https://www.youtube.com/watch?v=zr37vSsx7ug&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=69&t=292s

### flight controller intro
https://www.youtube.com/watch?v=4dmrahCJonM&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=69&t=1136s


https://docs.px4.io/master/en/config/


### T265
#### Companion Computer Connection
##### raspi
**公式**
https://ardupilot.org/copter/docs/common-vio-tracking-camera.html

**個人**
[Precision Landing with Realsense T265 Camera and AprilTag - Part ½](https://discuss.ardupilot.org/t/precision-landing-with-realsense-t265-camera-and-apriltag-part-1-2/48978)

https://www.youtube.com/watch?v=QJCMNSSLig0&list=PLLWi_794bXMF6v4f7WmZBe4-3p3FKWJuF&index=25

#### Mount
https://www.thingiverse.com/thing:4774604
https://www.thingiverse.com/thing:3483497


### LiPo
https://cami.jp/tech/1/
https://www.hyperdouraku.com/item/gforce/index.html
https://www.laylax.com/en/information/detail.php?news_id=47