1. はじめに
ドローン「Tello」を「M5StickC」でコントロールするスケッチを作ってみました。
2. 環境
「Tello」と「M5StickC」間は、WiFi無線、UDPプロトコルで通信を行います。
Telloのコマンドは公式のTello SDKを使用しました。
https://www.ryzerobotics.com/jp/tello/downloads
2.1 開発環境
Arduino IDE 1.8.9
3. 操作方法
(1) ボタン操作
ボタンA(真ん中): 時計回りに45度回転
ボタンB(右側面): 離陸と着陸トグル切替
(2) 前進・後退・左・右移動
「M5StickC」を傾けた方向に「Tello」が移動します。
(3) 上・下移動
後退に傾けながら、ボタンA(真ん中)を押す: 上昇
前進に傾けながら、ボタンA(真ん中)を押す: 下降
4. スケッチ
https://github.com/tomtaozhou/ubi-tello/tree/main/ubi_tello_M5StickC
4.1 変数
| 型 | 変数名 | コメント |
| const char* | TELLO_SSID | 自分のTello WiFi1SSIDを設定 |
| const char* | TELLO_IP | TelloのIPアドレス(初期値:192.168.10.1) |
| const int | PORT | Telloのポート番号(初期値:8889) |
| WifiUDP | Udp | WifiUDPクラスからUdpインスタンス作成 |
| char | packetBuffer[255] | TelloからのUDPメッセージ受信バッファー |
| String | message | Telloからの受信メッセージ |
| float | accX | 加速度x |
| float | accY | 加速度y |
| float | accX_sum | 加速度xの10回合計(平均値を求める) |
| float | accY_sum | 加速度yの10回合計(平均値を求める) |
| float | accX_sum | 加速度xの補正値 |
| float | accY_sum | 加速度yの補正値 |
| char | msgx[6] | 加速度x文字列 |
| char | msgy[6] | 加速度y文字列 |
| bool | if_land | 離陸、着陸の状況フラグ(初期値:true 着陸) |
4.2 ユーザ関数
| ユーザ関数 | コメント |
| void print_msg(String status_msg) | 画面メッセージエリアへ状況メッセージ表示 |
| void tello_command_exec(char* tello_command) | Telloへメッセージ送信&コマンド実行 |
| String listenMessage() | Telloからのメッセージ受信 |
5. スケッチでの注意点
(1) TelloのWiFi SSIDの修正
8行目
const char* TELLO_SSID = “TELLO-XXXXXX”; // 自分のTelloのWi-Fi SSIDを入力
自分のTelloの値に置き換える。
Tello本体のバッテリー装着するところにSSIDが書かれたシールがあります。
(2) 加速度X,Y基準値の調整
142行目
if (fabs(y)> 0.5){
161行目
if (fabs(x)> 0.5){{
173行目
if (fabs(y)> 0.5){
左右前後の移動がうまくいかないときはこの値を調整してください。
6. 終わりに
加速度X,Yの補正値を取得するために、10回ダミーで加速度を読み取ったのちに、10回読み取りを行なってからその平均値を補正値としました。
位置情報は四元数を使えばより正確になると思いますが、今回は簡易的な方法で行いました。