読み込み後 数秒で自動的に離陸します。スティックを触ると手動に切り替わります。
3D で飛行を見る(実行中の行つき)→
3D で飛行を見る(実行中の行つき)→
いま動いているもの
ブラウザの中だけで、Kotlin で書かれた Android アプリが動いています。Android SDK も JVM も使っていません (ソースをその場で構文解析して構文木を辿って実行しています)。機体は DJI Mini 3 の飛行モデルで、自動飛行デモは次の順に回り続けます。
- 離陸 → 高度 25 m まで上昇
- 一辺およそ 30 m の四角形(前進 2.6 秒 → 右へ 90° 旋回 を 4 回)
- 撮影 → RTH(30 m まで上昇してホームへ戻り自動着陸)→ 最初へ戻る
自分で飛ばす
- 下の丸いスティックを押したままドラッグ。左=上下・旋回、右=前後・左右(DJI の Mode 2)
- 触った瞬間に自動飛行は止まります。[自動]で戻せます
- ボタンは 離陸 / 着陸 / RTH / 📷 / 自動。残量 15% を切ると自分で帰ってきます
- 同時に動かせるスティックは 1 本です(単一ポインタのため)
DJI Mobile SDK V5 と同じ書き方
クラス名・メソッド名・引数は、本物の com.dji:dji-sdk-v5-aircraft:5.15.0 のバイトコードを
javap で読んで合わせてあります。下は実際に動いているコードの一部です。
// 離陸(DJI 公式サンプルと同じ形) FlightControllerKey.KeyStartTakeoff.create().action({ Toast.makeText(this, "離陸します", Toast.LENGTH_SHORT).show() }, { e: IDJIError -> Log.e("MSDK", e.description()) }) // 仮想スティックで速度を送る(-660〜660) val vs = VirtualStickManager.getInstance() vs.getLeftStick().setVerticalPosition(420) // 上昇 vs.getRightStick().setVerticalPosition(520) // 前進 // 値はキーで読む/監視する val loc = KeyManager.getInstance() .getValue(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D))
機体(DJI Mini 3 の公表値で計算)
| 最大速度 | 16 m/s(無風・スポーツ) |
| 上昇 / 下降 | 5 m/s / 3.5 m/s |
| 高度制限 | 120 m |
| 飛行時間 | 38 分(2453 mAh)— 電池はその割合で減ります |
| 風 | 既定 1.8 m/s の横流れつき |
本物の SDK は動いていません。MSDK V5 は 6664 個のコンパイル済みクラスと 242 MB の ARM ネイティブ・ライブラリでできていて、 実機と USB / Wi-Fi でつながることが前提です。ここでは API の形だけを合わせ、中身を飛行モデルに置きかえています。 実機(Mini 3 は MSDK V5 の対応機)を飛ばすには Android 実機・DJI の App Key・RC-N1 が要ります。