Dronecode Devマニュアル抜粋&翻訳 - Flight Tasks

#この記事は
前回の [FlightModes](https://qiita.com/sakaeda11/items/6da6344c74bfae399cfe) に引き続き、
Dronecode本家サイトの[FlightModes](https://dev.px4.io/master/en/concept/flight_tasks.html)ページの抜粋・翻訳です。

今回このページはYoutube動画での説明が主なので、動画を抜粋&翻訳します。

※主に自分の理解用に書いています。


# Flight Tasks
フライトタスクとは、特定の移動動作を提供するためにフライトモード内で使用されるものです。

※以降は動画
https://youtu.be/-dkQG8YLffc

## 冒頭 0:00 ~ 0:37
自己紹介等

## 0:38 ~ 3:02
システム全体像の説明と、この動画が扱うのはどの部分かの説明。
固定翼機やVTOLやなどで構成は異なるが、ここではマルチコプターについてを扱うとのこと。

**下の図の赤い部分(NavigatorとPosition Control)についての説明**
- どこへ移動するのか、などを指示するモジュールの高位の概念
- 開発者は任意のモードを追加できる

<img width="70%" alt="ScreenShot 157.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/3b2b8a8c-2e16-90ed-1fbe-0c3331a5006b.png">

## 3:03 ~ 4:20
前述のNavigatorとPosition Controlについての詳細

- おそらく、以前から大きなリファクタリングを行った模様で、なぜリファクタリングしたかの説明

<img width="70%" alt="ScreenShot 158.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/dd37cfe7-10c8-7b6a-d370-2be4ff4ff07f.png">

## 4:21 ~ 6:21
- リファクタリングにおいて設定した目標の説明
- いくつか目標があり、その一つはMCU(Micro Controller Unit)でも動作するようにするなど
- ここでFlightTaskという概念が出てくる

<img width="70%" alt="ScreenShot 159.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/d72f7d08-2e69-0651-3a7e-8e133b571d4e.png">

## 6:22 ~ 7:25

- (どうやら赤枠のNavigatorの一部がFlightTaskの事を指す模様)

<img width="70%" alt="ScreenShot 160.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/552c5d8e-f309-b0cf-b479-16c3367372e0.png">

## 7:26 ~ 9:32
- FlightTaskがPositionControlに対して行う事の説明
- 位置指定ができる
    - 移動の軌跡を指定することもできる
    - NANという指定もある
- 各種制限指定ができる

- <img width="70%" alt="ScreenShot 161.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/4af27631-a037-2d77-45b3-8624903fe067.png">

## 9:33 ~ 11:46
(ここから話者が変わる)
- Flight taskライブラリの説明(ソースコード寄りな説明)

<img width="70%" alt="ScreenShot 162.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/d62b28ce-5d4a-c6c8-ceb1-2bfebd8a1967.png">

## 11:47 ~ 15:56

- Flight task関連のクラス図
- **Flighttasks**はファクトリクラス、Flighttaskインスタンスを生成する

<img width="70%" alt="ScreenShot 163.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/89f1accc-0c0b-d1fa-73c8-94351376e71c.png">


## 15:57 ~ 18:14

- Flight Taskを追加開発したい場合の手順
- `/src/lib/FlightTasks/tasks` に追加する
    - https://github.com/PX4/Firmware/tree/master/src/lib/flight_tasks/tasks

1. 作成したいFlightTask用のディレクトリを作成する
2. "1"のディレクトリにFlightTaskを継承したクラスを作成する
3. CMakeLists.txtを設定する

<img width="70%" alt="ScreenShot 164.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/d2bab07c-3c3f-2234-9d68-62b0b44cfe9f.png">

## 18:15 ~ 19:58
- パラメータ設定によって既存のモードを拡張して新しいFlightTaskを作成する方法
    - 新しい機能を作るというより、既存のモードの動きを少しスムーズにしたい、といった場合など
- クラスの継承で作成する
    - SportやManualPositionSmoothやManualPositionSmoothVelは、ManualPositionを継承して作成している

<img width="70%" alt="ScreenShot 165.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/8aa07b4b-3a53-31e0-cf5d-e977145fd19c.png">

## 19:59 ~ 20:40
- MAVLinkコマンドから新しいFlightTaskを作成する方法
- (この手法の詳細はプレゼンではスキップされた？)

<img width="70%" alt="ScreenShot 166.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/e4e9c928-2b40-6749-6d92-92f7926fc2b4.png">


## 20:41 ~26:09
- FlightTaskを作成する例
- Continuous yawというフライトタスクを作成してみる

**Continuous yawというフライトタスクの条件**
<img width="70%" alt="ScreenShot 167.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/a591f348-32fb-99b9-01b9-11cf73ad307b.png">


**作成するファイル配置**
<img width="70%" alt="ScreenShot 168.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/50aafe8e-21ac-8fbb-46bd-9f10318cfc42.png">

**FlightTaskContinuousYaw.hpp** と **FlightTaskContinuousYaw.cpp**
<img width="70%" alt="ScreenShot 169.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/78da9aea-a010-ea41-79e2-9420edc3ec16.png">


パラメータ設定
**src/modules/mc_pos_control/mc_pos_control_params.c**
と
**src/modules/mc_pos_control/mc_pos_control_main.cpp**
<img width="1061" alt="ScreenShot 170.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/18755f75-f741-e8c2-bf8b-c0fe136b6ef2.png">


## 21:10 ~ 28:10
(最初の話者に戻る)
まとめ
<img width="70%" alt="ScreenShot 171.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/d439055a-9317-0459-8d1f-144bd78e1a83.png">


## 28:11 ~ 
質疑応答