こんにちは。掃除大嫌いなポン吉です。
うちは共働きで普段まったく掃除しないため、大掃除でほこりと格闘することに。特に天井で回っているシーリングファン。アイツ常に回っているくせに何故かほこりが溜まるんです。
ルンバが飛んでくれればいいのに
そんな悩みに「ドローン風圧でシーリングファンのほこりを落としルンバに掃除させる」という、割とダメでアホなアイデアを思いつきました。
今回は、そんなスマートホームにおけるドローンTelloの活用例を紹介しようと思います。
iRobot社も10年後にはこのアイデアにたどり着き「ドローン・ルンバ・ブラーバ」の3台体制を採用するであろうと未来予想しておきます(笑)
うーむ。これぞまさに技術の無駄遣い・・・アホや!
ドローンをラズパイで自動操縦するだけでは面白くないので、掃除状況をエヴァンゲリオン風動画としてラズパイに自動生成。ただのホコリ掃除に無駄な緊張感を与えてみました!
▼ いきなり結論ですが、ラズパイに作成させた動画をご覧ください!
エヴァっぽい画像(笑)はWindows/Macで明朝フォントで自作。オペレータ音声は、別記事で紹介した「VOICEVOXの「冥鳴ひまり」さんの音声」を活用。ラズパイだけでかっこいい動画が作れますよ!また、画像編集処理については下記記事も参考にしてみてください。
アホ制御(無制御)なので注意
ホームベース帰還成功率は0%!(涙)手動で「前、右・・」とドローン手動入力をそのまま再生させただけのアホ制御なので墜落しまくりです。まだネタの域を出ておらずすみません。
2022/6現在、ドローンTelloのプログラム制御は「公式SDKやる気なさすぎ問題」のため、技術者有志による各種手法が乱立。非常にややこしいカオスな状況となっております。
公式マジ仕事してくれ!ムキー!
こうなるとネットで調べてもよくわからない・・・。初心者でも悩まずコピペだけで動画と同じことができるよう記事にしてみました。
今回の記事を読めば、誰でもラズパイでドローンTelloの自動操縦が出来るようになります♪
今回のテーマはこちら!
- ドローン(tello)をRaspberry Piを使って自動操縦する最もシンプルなやり方を紹介
- ドローンはスマートホームで「掃除マシーン」として活用できるのか?を評価
※ラズパイ上でのエヴァンゲリオン風動画の作り方も公開予定です
それではやってみましょう~♪
ドローンTelloとは?
最大手ドローンメーカーであるDJI社とIntel技術を融合して生まれた「初心者向けドローン」です。
ドローンTelloのスペック
- 外寸:98×92.5×41mm
- 重量:80g
- 飛行時間:13分 (体感では10分前後)
- 動画撮影:720p
- Intel® Movidius™ Myriad™ 2 Vision Processing Unit 搭載
ラズパイのAI機能ドーピングでもお世話になっているIntel Movidius系プロセッサ搭載。1万円台のドローンとしてはずば抜けた安定飛行を実現。子供でも簡単に飛ばせて遊べるお手軽ドローンです。
ドローンTelloの詳細については以下公式サイトを参照ください。
現在、国内販売されているドローンTelloは下記の3種類が存在します。
Tello |
Tello EDU |
Tello アイアンマン |
【特徴】 標準タイプ。基本ハードスペックは他機種と同様のため、他機種と飛行性能は同じ。 |
【特徴】 教育用タイプ。ミッションパッド等のアイテムが追加。複数ドローンによる編隊飛行が可能。 |
【特徴】 MARVELコラボ商品。専用カラーリングでTello Heroというアイアンマン専用アプリで遊べる。 |
【重量】80g(プロペラとバッテリ含む) | 【重量】87g(プロペラとバッテリ含む) | 【重量】87g(プロペラとバッテリ含む) |
SDK1.3 対応 | SDK2.0 対応 | SDK2.0 対応 |
使用するのは一番安い通常版Telloになります
ドローン規制強化について
2022/6/20よりドローンの規制が強化されました。
- 100g以上のドローンを飛行させるために機体登録が義務化
- 100g以上の機体についても航空法の規制対象になり飛行許可証が必要
これまで登録不要だった100~200gのドローンが自由に飛ばせなくなりました(涙)
ドローンTelloの重量は約80gなので2022/6規制強化後でも登録は不要です。不正飛行によるトラブル多発が背景にあると思いますが、なかなか厳しい状況になってしまいました。
無登録だとTelloくらいしか飛ばせない・・・しくしく
ドローンTello自動操縦に必要な機材一覧
リアルタイム画像処理にかなりのCPUスペックが必要です。今回はラズパイ4を推奨します。
一番安い通常版のTelloを使います。
「バグ作るごとにTello墜落して破損」という事を避けるために球状体ゲージは必須。「スネ夫レベルのお金持ちでTello残機∞」でない限りゲージ購入を推奨いたします(笑)
デメリットもありまして、こちらを装着すると宙返りは出来なくなります。アクロバティックなことをしたい時は、プロペラガードに付け替えて遊びましょう。
ドローンTelloの飛行時間は体感で10分前後と短いです。バッテリー×3くらいは常備して充電も平行しながらテストしましょう。飛ばしたい時に充電切れとなるとイライラしますので。
トラブル実績
球状ゲージは本当に強い。回転中のシーリングファンに何度も吹っ飛ばされましたがTelloは無事でした。こんな過酷な環境で飛ばす人はあまりいないと思いますが。過去に2回ほど羽が折れたことがありました。落ちた場所が平坦だと割と大丈夫な印象です。
- 子供が階段で飛ばしていて壁にあたり墜落。階段の角に当たったようで羽破損
- プロペラに髪の毛が絡まっている事に気づかずに離陸させ羽破損
シーリングファン止めてテスト飛行しろよ!アホなの!?
男なら常にバグを作りこむリスクと向き合うのだ・・・
ラズパイ自体も品薄で購入が難しい状況が続いています。ラズパイの在庫と価格をリアルタイム確認できるページを作りました。ラズパイを購入しようとしている方は是非参考にしてみてください。
ドローン Telloの飛ばし方
スマホアプリでのドローンTelloの飛ばし方を簡単に説明します。
ドローン(TELLO)の飛ばし方
- iPhoneに公式アプリをインストール
- ドローンTelloの電源を入れる
- スマホからドローンTelloのwifiアクセスポイントに接続
- スマホアプリでドローンTelloを操作
iPhoneに公式アプリをインストール
以降、スマホはiPhoneの例で説明します。
「 TELLO 」という名称で検索して下記アプリをインストールしてください。
ドローンTelloの電源を入れる
ドローンTelloの電源ボタンが側面にあるので押します。
ドローンTelloのカメラ横にLEDが虹色に点滅を開始します。
その後「オレンジ点滅」になりましたら準備完了です。
スマホからドローンTelloのwifiアクセスポイントに接続
スマホからドローンのWiFiアクセスポイントに接続しましょう。
SSIDは「TELLO-XXXXXX」という名称で見えます。
スマホアプリでドローンTelloを操作
Wi-Fi接続後にiPhoneの公式Telloアプリを起動します。
左上に「離陸」のアイコンがあるのでタップします。
スライドバーを右にスワイプするとドローンが離陸します。
離陸後は、コントローラで上下、左右回転、移動などが出来ます。
スマホによるドローンの操作については上記の図左イメージになります。このスマホによる操作を「ラズパイからの操作」に変えていきます。
どれくらい積載できる?
Raspberry Pi Zero(Lipoバッテリ内蔵デンジャラス改造版)の危険物搭載にもチャレンジしたのですが重くて離陸時に墜落(涙)ドローンTelloの最大積載量は20g程度でしょうか。
100g超えないように注意!
室内なら良いのでは・・・
【準備】Raspberry Pi にドローン(Tello)操作環境をセットアップ
難易度:★★★☆☆
ドローンを墜落しないよう制御する難易度は∞です(汗)
必要なもの
- Raspberry Pi 4(リアルタイム画像処理は3では厳しいです) ※飛ばすだけなら3でもOK
- USB wifiドングル(有線LAN使うのであれば不要ですが購入推奨)
必要パッケージのインストール
ドローンTelloが搭載しているカメラ画像を扱うためにOpenCV関連をインストールします。ドローンTelloをラズパイで飛ばして遊ぶだけであれば、下記パッケージのインストールは不要です。
ラズベリーパイにOpenCVをインストールする方法を紹介します。OpenCVをラズベリーパイ上でmakeすると3時間以上もかかってしまいます。そこで、インストール時間を最小限にしつつ、シンプルに新しめのパッケージを入れる方法を紹介します。
注意
最新Raspberry Pi OS bullseye での構築例を紹介します。以前のRaspberry Pi OS buster等では python ⇒ python3 pip ⇒ pip3 と読み替えて実行してください。
ラズパイ初期セットアップの詳細は、上記記事を参照してください。
sudo apt update
sudo apt install -y python3-pip
sudo apt install -y libatlas-base-dev
sudo apt install -y libopencv-dev
pip install -U opencv-python
pip install -U numpy
pip install -U pillow
コピーボタンを押してコンソールに貼り付けてインストールしましょう。最後の行のpillowは画像処理をする際に必要になる場面が多いので、OpenCVと一緒に入れておきます。
所要インストール時間
初期セットアップ済みのRaspberry Pi 4 でデスクトップ(GUI版)で約6分、デスクトップなし(CUI版)Liteで約10分ほどかかります。
インストール時に下記警告が出ますが無視してOK!「$HOME/.local/bin」にパスが通っていないが大丈夫か?」という警告。そもそもf2pyとか使いません。気になる方はパスを通してください。
WARNING: The scripts f2py, f2py3 and f2py3.9 are installed in '/home/ponkichi/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
次にOpenCVが正しくインストールできているか動作確認します。下記のようにコンソールから「python」と入力してEnterキーを押しましょう。「>>>」と表示されPythonインタプリタモードの対話形式になります。
ponkichi@raspberrypi:~ $ python
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> ← ここに何も表示されなければ正常です
ponkichi@raspberrypi:~ $
ここで「import cv2」と入力してEnterキーを押します。ここでエラーが出なければインストール成功です。CTRL+Dを押して終了させます。
今後のパッケージ最新化に伴い、本手順通りに実施しても動かなくなる可能性もあると思います。エラー発生時の対処方法について下記にまとめておきますので参考にしてみてください。
import cv2 エラー発生時の対処方法
ドローンTello通信用USB wifiの設定
ラズパイによるドローンTelloの飛ばし方
- ドローンTelloの電源を入れる
- Raspberry Pi OSからドローンTelloのwifiアクセスポイントに接続
- PythonプログラムでTelloを操作
手順は先ほど実施した「スマホによる操作」を「ラズパイ+python」で置き換えたものになります。
ラズパイの内蔵無線LANは、SSH接続やVNC接続で家庭内のWi-Fiルータに接続して使用済みのため、新たにUSB Wi-Fiドングルを使用してドローンを制御します。
有線LANを使っている方や直接ラズパイにディスプレイ、キーボードを接続されている方はUSBドングルは不要ですが、あった方が便利だと思います。
ドローンのWi-Fiは2.4GHzのみ 5GHzは使えません・・・
電子レンジで撃墜されるの!!弱っ!
ドローンTelloの電源を入れると、ドローンがwifi親機アクセスポイントになります。このwifiアクセスポイントに接続し操作します。ラズパイの内蔵無線Lanは家庭内Wifi接続ですでに使ってしまっているため、USBにドローンTello接続用のUSB Wifi ドングルを差し込みます。
ラズパイのデスクトップ画面右上にある「無線LAN」のアイコンをクリックします。
wlan0はラズパイ内蔵の無線LANですが、無線LANモジュールをUSBに接続している場合はwlan1が追加されます。
ドローンTelloの電源を入れると、WiFi接続先SSID名称の中から「Tello-XXXXXX」というものが出てきます。
このSSIDをクリックして接続してください(デフォルトでパスワードはありません)
【実践】ドローンTelloをpythonで制御
ドローンTelloを自動操作するプログラムを記載してみました。以下のpythonプログラムをコピペしましょう。
import socket
import threading
import cv2
import time
# Tello機体状態の保存先パス
status_file_path = "/tmp/tello_status.csv"
# ドローンTelloカメラ動画の保存先パス
file_path = "/tmp/tello.avi"
# Tello自動操縦用の関数
def tello_ctrl():
global end_flag
# ここに操作したいコードを記載
sock_cm.sendto("takeoff".encode('utf-8'), TELLO_ADDRESS)
time.sleep(10)
sock_cm.sendto("land".encode('utf-8'), TELLO_ADDRESS)
time.sleep(5)
# 操作完了したのでプログラム終了を伝える
end_flag=True
# Tello機体ステータス 受け取り用の関数
def udp_receiver_status(sock):
global end_flag
global tello_status
while end_flag==False:
try:
response, _ = sock.recvfrom(1024)
# 機体ステータスをグローバル変数に格納
tello_status = response.decode('utf-8')
except Exception as e:
print(e)
break
# Telloコマンド結果 受け取り用の関数
def udp_receiver_command(sock):
global end_flag
global tello_response
while end_flag==False:
try:
response, _ = sock.recvfrom(1024)
# コマンドの応答結果をグローバル変数に格納
tello_response = response.decode('utf-8')
except Exception as e:
print(e)
break
# 出力動画フォーマット
fmt = cv2.VideoWriter_fourcc('h', '2', '6', '4')
fps = 30
size = (960, 720)
writer = cv2.VideoWriter(file_path , fmt, fps, size)
# 変数
end_flag=False
tello_response=''
tello_status=''
tello_all_status=''
frame_skip=60
# TelloのIPアドレス、ポート(コマンド用)、ポート(機体ステータス用)
TELLO_IP = '192.168.10.1'
TELLO_CM_PORT = 8889
TELLO_ST_PORT = 8890
TELLO_ADDRESS = (TELLO_IP, TELLO_CM_PORT)
# Telloからの映像受信用のローカルIPアドレス、宛先ポート番号
TELLO_CAM_ADDRESS = 'udp://@0.0.0.0:11111?overrun_nonfatal=1&fifo_size=50000000'
# UDP通信用ソケットを作成してBIND
sock_cm = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_cm.bind(('', TELLO_CM_PORT))
sock_st.bind(('', TELLO_ST_PORT))
# コマンド送信結果 受信用スレッドの作成
thread_cm = threading.Thread(target=udp_receiver_command, args=(sock_cm,))
thread_cm.daemon = True
thread_cm.start()
# 機体ステータス 受信用スレッドの作成
thread_st = threading.Thread(target=udp_receiver_status, args=(sock_st,))
thread_st.daemon = True
thread_st.start()
# Tello側がコマンド受付の準備が間に合っていない場合がある
# ここだけはしっかりとループでcommand応答が返るまで待つ
tello_response = ''
while True:
# コマンドモード
sock_cm.sendto('command'.encode('utf-8'), TELLO_ADDRESS)
time.sleep(1)
if tello_response == 'ok':
print("command response OK")
break
print("wait for command response...")
# Telloのバッテリ取得
sock_cm.sendto('battery?'.encode('utf-8'), TELLO_ADDRESS)
time.sleep(1)
print('Tello Battery: ' + tello_response.strip() + '%')
# 飛行できる分のバッテリ残量が無い場合はプログラムを終了
if int(tello_response) < 20:
print("Error: Low Battery")
exit()
# カメラ映像のストリーミング開始)
sock_cm.sendto('streamon'.encode('utf-8'), TELLO_ADDRESS)
# Telloカメラ映像のキャプチャ(5~6秒時間がかかる)
cap = cv2.VideoCapture(TELLO_CAM_ADDRESS)
cap.open(TELLO_CAM_ADDRESS)
# Tello自動操縦スレッドの作成
thread_tello = threading.Thread(target=tello_ctrl)
thread_tello.daemon = True
thread_tello.start()
print("Drone Control Program : Start")
# メインループ処理
try:
while end_flag == False:
ret, frame = cap.read()
# 最初のフレームをある程度捨ててから録画開始
if 0 < frame_skip:
frame_skip = frame_skip - 1
continue
# 動画フレームが空の時の処理 現状不要?
if frame is None or frame.size == 0:
print("frame.size 0")
continue
# 動画ファイルとして書き込み
writer.write(frame)
# Tello機体情報を記録(動画フレーム数に同期させて記録)
tello_all_status = tello_all_status + tello_status
except Exception as ex:
print(ex)
# 異常時は念のため着陸コマンド送ってから終わらせる
sock_cm.sendto("land".encode('utf-8'), TELLO_ADDRESS)
time.sleep(5)
end_flag=True
finally:
print("Drone Control Program : END")
# Tello機体情報をファイルに出力する
f = open(status_file_path, 'w')
f.write(tello_all_status)
f.close()
# ビデオストリーミング停止
sock_cm.sendto('streamoff'.encode('utf-8'), TELLO_ADDRESS)
writer.release()
cap.release()
以下のようにサンプルプログラムを実行します。
python drone.py
実行時に以下のような警告が表示されますが、ドローンからの動画取得時にフレームなしとなっている場合に出ているもので、実害はないので無視して頂いて大丈夫です。
[h264 @ 0x15fc2d80] no frame!
[h264 @ 0x15fc2d80] non-existing PPS 0 referenced
[h264 @ 0x15fc2d80] non-existing PPS 0 referenced
[h264 @ 0x15fc2d80] decode_slice_header error
プログラムを実行し、上記警告メッセージが出てから8~10秒後にドローンが離陸します。(割と待たされますので注意)その後10秒後に着陸。指定したパスに動画ファイルと機体情報のcsvファイルが出力されていると思います。
16行目~20行目の箇所でドローンTelloを操作しています。下記、コマンドを使って操作しましょう。
コマンド名 | 説明 | 値の指定範囲 | コマンド応答 |
up x | x[cm] 上に移動 | x: 20~500 | ok / error |
down x | x[cm] 下に移動 | x: 20~500 | ok / error |
left x | x[cm] 左に移動 | x: 20~500 | ok / error |
right x | x[cm] 右に移動 | x: 20~500 | ok / error |
forward x | x[cm] 前方に移動 | x: 20~500 | ok / error |
back x | x[cm] 後方に移動 | x: 20~500 | ok / error |
cw x | x[度] 右に回転(時計回り) | x: 1~3600 | ok / error |
ccw x | x[度] 左に回転(反時計回り) | x: 1~3600 | ok / error |
実行例としてドローンTelloを前方に100[cm]移動させるためには、以下のように記載します。
sock_cm.sendto("forward 100".encode('utf-8'), TELLO_ADDRESS)
通常版TelloのSDKバージョンは1.3になります。コマンド詳細については下記URLリンクを参照してみてください。
ドローンTelloの自動運転ノウハウ
プログラムの変更してないのに、飛んだり飛ばなかったりで悩むことが多かったです。マニュアルには記載がないドローンTello挙動で???となる事が多かったです。動いたり動かなかったりして何かおかしいなぁ?と思った方は、下記ポイントに該当していないか確認してみてください。
ハマったポイントを共有
- ドローンWi-Fi接続後5秒程度の準備時間が必要(UDP通信の準備が出来ていない)
(サンプルではリトライ処理入れて対策。動かなかったらCTRL+Cで抜けて再実行を) - OpenCVによるストリーミング開始までに更に5~6秒待たされる
- UDP通信故に不安定?なのか動画の乱れやフレーム欠損が発生する
- ドローンは電源入れて放置しているだけで高熱になり熱暴走防止でシャットダウンします
- ドローンのバッテリが一定以下(20%)になると、接続できていても飛ばなくなる
- Sleepを入れる時間が短すぎて、ドローン移動中に次のコマンドを入れても無視される
- RCコマンドは移動中に何度も継続的に命令を発信する(一度だけ入れてもだめ)
特定のルートを巡回したい場合、いきなりプログラムコードで試行錯誤するのは非効率です。ドローンもすぐ電池切れます。スマホアプリ等で、ある程度ドローンの移動イメージを確立してから、手動で操作した内容をトレースするようにコードにしましょう。
次の章は、CUI版での情報になります。最終ゴールとしてドローンによる定期時間巡行を考えたい方向けにCUIによる自動化手順を記載します。
興味のない方は、下記リンクで「まとめ」まで飛ぶことをお勧めします~
以降、ドローン完全自動化したい人向け
こちらはガチでドローン操作の完全自動化を企むマニアック向けの情報となります。
まずは、追加したUSB Wi-FiドングルをドローンTello用に設定していきます。wlan0は家庭内無線LANへ、wlan1はドローンTelloへ と分けて通信させるためには、下記のように「wpa_supplicant-wlan1.conf」という名称で無線LAN設定をすると実現できます。
sudo vi /etc/wpa_supplicant/wpa_supplicant-wlan1.conf
複数無線LAN接続してこのような使い方をするケースはレアなので、なかなか情報がないのですがこちらで実現できると思います。
以下、ファイルの内容を貼り付けて保存します。ssid="TELLO-XXXXXX" の部分は、お持ちのドローン機体ごとに異なるので変更してください。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1
update_config=1
network={
ssid="TELLO-XXXXXX"
key_mgmt=NONE
}
ポイント
ドローンTelloが搭載している無線LANのssidは各環境ごとに変更してください。Telloスマホアプリから好きなSSID名称に変更することも可能です。
上記のファイル作成後にラズパイを再起動しましょう。
CUI環境でドローンのWi-Fiに接続させる方法
sudo ip link set wlan1 down
sleep 1
sudo ip link set wlan1 up
while :
do
result=`ifconfig wlan1 | grep "inet"`
if [ "$result" != "" ]; then
echo "connected"
break
fi
echo "wait..."
sleep 1
done
上記コマンドを「connect.sh」というファイル名で保存します。 #実行権限つけてください
ドローンTello起動後に、上記シェルスクリプトを実行すると、ドローンTelloに接続するまでループ処理を実行します。
コピーしてそのまま使えるはずです。参考にしてみてください。
【コラム】なぜ公式SDKを使わなかったのか?
ドローンtelloをpythonで操作するには、主に3パターンからの選択になると思います。
ドローンtelloの自動操縦パターン
- 公式DJIのSDKパッケージを使用
- 非公式のtellopyパッケージを使用
- pythonプログラム自作して使用
私が実際にあれこれ試した結果、自作プログラムに落ち着いた理由を経験談として記載しておきます。
公式DJIのSDKパッケージを使用
上記githubを参照して頂くとわかるのですが、2018年あたりから更新されていません。特に悩ましいのが、公式SDKがpython2ベースのソースしかなない!ソース修正が必須です。また、動画取得するのもソースからmakeしないといけないとか・・・公式やる気なさすぎ!
このご時世にPython2はないだろ!公式仕事しろ!
そんな公式のやる気なさに対して、下記 hsgucciさん のサイトで公式DJIのSDKを動かすための情報が詳細にまとめられています。とてもよいサイトなので紹介しておきます!
非公式のtellopyパッケージを使用
こちらは有志の方が作成されたtellopyという非公式パッケージ。tellopyはpython3ベース記載されており、動画取得もpyavというパッケージを入れれば簡単に動きます。私もドローンTello購入時はこちらを長らく使っていました。ただ、Telloに備わっている各種APIを直接呼び出すことができません。
具体的にはrcコマンドやtemp?コマンドが使えない。・・・結局こちらもソース修正しながら使うことになりました。
ちょっと試して遊ぶ用途であれば一番おすすめ♪
pythonプログラム自作して使用
どのパッケージを使ってもソース修正が必要という状況。最後にたどり着いたのが 「自作プログラムでよくね?」 というところでした。UDP通信処理を書くだけなので、1つのpythonファイルで200step以内の単純プログラムで動かせます。
何もインストールせずに動かせる 「シンプル イズ ベスト!」 という結論に至りました。
ドローンTelloが発売されたときはスペックの低いラズパイ3だったので
出来ないことが多く断念していましたが、今ならいろいろと遊べるように!
【評価】「ほこりハタキ掃除自動化」の効果は?
掃除さぼりすぎで使うと部屋中が埃まみれに…
動画ではシーリングファンVSドローンを繰り返した後なので、正直だいぶ埃が減った状態ですが、それでも部屋中が埃だらけになり酷いことに・・・ルンバが掃除してくれる とは言え、テーブルやソファーの上の埃までは取れません。
ほこりが大量に溜まらないように日々定期的に埃掃除させるようにすることで真の成果を発揮できると思います。そしてよく見てみると・・・
まだまだ改善すべき点は多そうです(涙)
ルンバのように定期巡視飛行できれば実用性あり!
ドローンTelloは距離センサがないため、カメラ画像認識による制御が必要。天井の柱などありきたりすぎる物体の検知が難しいです。家の中でARマーカーや顔画像を貼ったりすれば出来そうですが家族からNGに。自然かつスマートに運用するのは難易度高そうですが引き続きチャレンジしたい!
AIとドローンの組み合わせは夢があると思います。NCS2のドーピングパワーも活用しリアルタイム処理させていこうと思います。
まとめ
- 未来のスマートホームとしてドローンによる掃除は可能!改善が必要だが実用性あり!
- ラズパイにエヴァンゲリオン風演出をさせ、無駄にかっこよくなり掃除のテンションUP
- 3分で終わる掃除にドローン使って何してるのか・・・と家族に白い目で見られる。
ドローン制御とAIの組み合わせは楽しい!改善していきます!
エヴァンゲリオン風の動画の作り方については、下記のOpenCVの記事も参考にしてみてください。
ドローン電源ON自動化の壁
最大の課題は「ドローンTelloの電源ON自動化」です。ドローンは軽いのでサーボモータで「ぺしっ」と押しても機体ごと移動してしまう。むむむ・・・充電自動化までは出来る見通しがあるのですが「電源ON」をどうすべきか… 3Dプリンタ使いの賢い方からのアイデア募集中です。