金曜日, 6月 6, 2025
- Advertisment -
ホームニューステックニュースUnity+Pythonでドローン制御:実習や授業にそのまま使える箱庭ドローンシミュレータ #教育 - Qiita

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



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

🧑‍🏫 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 をクリックして、

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

起動時、以下のダイアログが出ますが、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

この状態で、

と実行すれば、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上のドローンが動き出します。

操作デモ動画

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

⑤ 着陸と後処理

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





Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -