19
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity+Pythonでドローン制御:実習や授業にそのまま使える箱庭ドローンシミュレータ

Posted at

🧑‍🏫 Windows PCひとつで、Python APIを使って、仮想ドローンに「飛べ!」「進め!」と命令を送ります。

難しい制御理論は必要ありません。数行のPythonコードだけで、ドローンが応答してくれる体験ができます。

本記事では、Unityと『箱庭ドローンシミュレータ』、Python APIを使って、仮想ドローンを操作する方法を、教育・実習向けに解説します。


🎯 想定読者

  • Pythonを使って「プログラムでモノを動かす」体験をしたい学生・教育関係者
  • 実機を使わずにドローン操作を学びたい方(Windowsのみで完結)
  • Unityやシミュレーション技術に興味のあるエンジニア・研究者

では、早速始めましょう。

💻 Windows環境

必要なものはこれだけです。

ツール 用途 備考
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 をクリックして、

image.png

hakoniwa-unity-drone/simulation を追加してください。

image.png

成功すると、下図のようになります。

image.png

そして、simulation をクリックすると、Unityが起動します。(何回か再起動メッセージがでますが、めげずにがんばりましょう)

起動後、下図のように、プロジェクトビューから、Scenes/WebAvatar をクリック!

image.png

ヒエラルキービューの HakoniwaWeb を選択して、Inspectorビューの Server Uri のIPアドレスを、WSL2のIPアドレスを指定します。

WSL2のIPアドレスは、Ubuntu 上で ifconfigeth0 のものを入力します。

例:

tmori@WinHako:~/qiita$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.31.9.252  netmask 255.255.240.0  broadcast 172.31.15.255

ちなみに、デフォルトで動くドローンはこちらっす。

image.png

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)で以下のコマンドを実行します:

cd ~/project
code .

起動時、以下のダイアログが出ますが、Allow をクリック。

image.png

起動後、左の EXPLORER から、hakoniwa-drone-core/drone_api/api_control_sample.pyを選択すると、中央にPythonコードが表示されます。

image.png

(サンプルコードの説明は後程説明します。)

WSL2端末を2個起動

この後、箱庭ドローンシミュレータとPythonプログラムの実行をするために、Visual Studio Code 上で、WSLの端末を2個起動しておきましょう。

最初に、メニューの View->Terminalを選択しましょう。

image.png

成功すると、画面下に、端末が現れます。

image.png

この状態で、

wsl

と実行すれば、OKです。

image.png

次に、端末の右上にあるSplit Terminal をクリック。

image.png

すると、もう一つ端末が増えますので、こちらも wsl を実行しておきます。

image.png

お疲れさまでした、さっそく動かしてみましょう

さー、やりましょう。

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のプレイボタンをクリックするだけです。

成功するとこんな形でドローンが待機状態になっています。

image.png

Python プログラムを実行!

端末Bで、以下のコマンドを実行しましょう。

 python3 rc/api_control_sample.py ../config/pdudef/webavatar.json

成功すると、Unity上のドローンが動き出します。

操作デモ動画

サンプルプログラムの解説(api_control_sample.py)

🚀 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)

⑤ 着陸と後処理

そして、最後は、着陸です。

client.land()
19
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?