🧑🏫 Windows PCひとつで、Python APIを使って、仮想ドローンに「飛べ!」「進め!」と命令を送ります。
難しい制御理論は必要ありません。数行のPythonコードだけで、ドローンが応答してくれる体験ができます。
本記事では、Unityと『箱庭ドローンシミュレータ』、Python APIを使って、仮想ドローンを操作する方法を、教育・実習向けに解説します。
- Pythonを使って「プログラムでモノを動かす」体験をしたい学生・教育関係者
- 実機を使わずにドローン操作を学びたい方(Windowsのみで完結)
- Unityやシミュレーション技術に興味のあるエンジニア・研究者
では、早速始めましょう。
必要なものはこれだけです。
ツール | 用途 | 備考 |
---|---|---|
Windows 11 / WSL2 | ホスト環境 | WSL2は必須(WSL1不可) |
Ubuntu 24.04.2 LTS | 箱庭ドローンシミュレータ | WSL2内で動かします |
UnityHub/Unity(6.1) | 可視化(任意) | 自機やセンサの3D表示が可能 |
Visual Studio Code | Python プログラム編集とコマンド実行用 | – |
まずは、WSL2を起動です!
📦 箱庭ドローンシミュレータ本体
git clone --recursive https://github.com/toppers/hakoniwa-drone-core.git
クローンする場所は、WSL2/Ubuntuのホーム直下に project
ディレクトリ作成して、そこで行うのがお勧めです。
クローンおわったら、WSL に docker をインストールしよう!
箱庭Webサーバー
git clone --recursive https://github.com/toppers/hakoniwa-webserver.git
クローンする場所は、WSL2/Ubuntuのホーム直下に project
ディレクトリ作成して、そこで行うのがお勧めです。
🎮 Unity環境
git clone --recursive https://github.com/hakoniwalab/hakoniwa-unity-drone.git
クローンする場所は、Windowsのファイルシステム(例えば /mnt/c
)直下に project
ディレクトリ作成して、そこで行うのがお勧めです。
クローン終わったら、Unity Hubで下図のように Add
をクリックして、
hakoniwa-unity-drone/simulation を追加してください。
成功すると、下図のようになります。
そして、simulation
をクリックすると、Unityが起動します。(何回か再起動メッセージがでますが、めげずにがんばりましょう)
起動後、下図のように、プロジェクトビューから、Scenes/WebAvatar
をクリック!
ヒエラルキービューの HakoniwaWeb
を選択して、Inspectorビューの Server Uri
のIPアドレスを、WSL2のIPアドレスを指定します。
WSL2のIPアドレスは、Ubuntu 上で ifconfig
で eth0
のものを入力します。
例:
tmori@WinHako:~/qiita$ ifconfig
eth0: flags=4163 mtu 1500
inet 172.31.9.252 netmask 255.255.240.0 broadcast 172.31.15.255
ちなみに、デフォルトで動くドローンはこちらっす。
Visual Studio Code のセットアップ
箱庭ドローンを Python で動かすには、Visual Studio Code を利用すると便利です。以下、インストールとセットアップ手順を説明します。
(Visual Studio Code は、必須ではありません、使い慣れたものがあればそちらで)
🧑💻 Visual Studio Code のインストールとセットアップ
以下の公式サイトから、インストーラーをダウンロードして実行します。
🔗 Visual Studio Code ダウンロードページ
インストール時、以下のチェックを入れておくと便利です:
✅ 「code コマンドを PATH に追加する」
✅ 「右クリックメニューに ‘Open with Code’ を追加する」
Pythonスクリプトを書く&WSL2内で実行するために、Visual Studio Code(VS Code)をインストールしましょう。
また、WSL2との連携に必要な拡張機能も忘れずに入れます。
WSL/Ubuntu 側から VS Code を起動する
Ubuntu(WSL2)で以下のコマンドを実行します:
起動時、以下のダイアログが出ますが、Allow
をクリック。
起動後、左の EXPLORER
から、hakoniwa-drone-core/drone_api/api_control_sample.py
を選択すると、中央にPythonコードが表示されます。
(サンプルコードの説明は後程説明します。)
WSL2端末を2個起動
この後、箱庭ドローンシミュレータとPythonプログラムの実行をするために、Visual Studio Code 上で、WSLの端末を2個起動しておきましょう。
最初に、メニューの View->Terminal
を選択しましょう。
成功すると、画面下に、端末が現れます。
この状態で、
と実行すれば、OKです。
次に、端末の右上にあるSplit Terminal
をクリック。
すると、もう一つ端末が増えますので、こちらも wsl
を実行しておきます。
さー、やりましょう。
docker コンテナに入ります。
左側のWSLの端末(端末A)で、以下を実行してください。
bash hakoniwa-drone-core/docker/run.bash
右側のWSLの端末(端末B)で、以下を実行してください。
bash hakoniwa-drone-core/docker/attach.bash
その後、hakoniwa-drone-core/drone_api
に移動しましょう。
実行例:
tmori@WinHako:~/project$ bash hakoniwa-drone-core/docker/attach.bash
root@WinHako:~/workspace# cd hakoniwa-drone-core/drone_api/
root@WinHako:~/workspace/hakoniwa-drone-core/drone_api# ls
README-ja.md README.md assets libs rc
root@WinHako:~/workspace/hakoniwa-drone-core/drone_api#
箱庭ドローンシミュレータを起動だ!
端末Aで、以下を実行してください。
bash hakoniwa-drone-core/docker/tools/run-hako.bash api
Unity を起動!
Unityのプレイボタンをクリックするだけです。
成功するとこんな形でドローンが待機状態になっています。
Python プログラムを実行!
端末Bで、以下のコマンドを実行しましょう。
python3 rc/api_control_sample.py ../config/pdudef/webavatar.json
成功すると、Unity上のドローンが動き出します。
🚀 main関数で何が行われているか?
main 関数では、デモでお見せしたドローンの操作プログラムが書かれています。
全体として、以下のような流れです。
[接続] → [LiDAR取得] → [離陸] → [移動&つかむ] → [戻る&離す] → [再びLiDAR] → [カメラ撮影] → [着陸]
ドローン操作のAPIは、Pythonで定義されたもので、以下で仕様を公開しています(AirSim風のAPIです)。
また、簡単なAPI紹介をこちらでもしておりますので、ぜひご覧ください。
① シミュレータへの接続
まず、以下のコードで、対象ドローンへの接続をします。
client = hakosim.MultirotorClient(sys.argv[1], "Drone")
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
② LiDARデータの取得・解析
次に、ドローンの前方に装着しているLiDARのデータを取得します。
lidarData = client.getLidarData()
...
filtered_points = points[numpy.any(condition, axis=1)]
③ ドローンの基本操作:離陸・移動・荷物操作
その後、ドローンの基本操作で、離陸して、目的地へ移動して、荷物を運搬するプログラムが続きます。
client.takeoff(0.5)
client.moveToPosition(...)
client.grab_baggage(True/False)
④ カメラ画像の取得
荷物運搬後、ドローン全貌に設置されたカメラで画像を取得します。
png_image = client.simGetImage("0", hakosim.ImageType.Scene)
⑤ 着陸と後処理
そして、最後は、着陸です。
Views: 0