4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PX4 SITLをWindowsで爆速セットアップ:国産シミュレータ「箱庭」でラクに可視化・制御する方法

Posted at

「PX4のSITL環境、Windowsで動かすのって正直しんどい……」

って思っていませんか。

  • WSLを入れるだけで一苦労
  • ビルドや依存関係で何度も詰まる
  • 動かした後も「で、どうやって可視化するの?」と立ち止まる

本記事では、そんな悩みを抱えたエンジニア・企画担当の方に向けて、
国産のドローンシミュレータ「箱庭ドローンシミュレータ」 を活用して、“サクサク動いて拡張しやすい”PX4 SITLのセットアップ手順を紹介します。

想定読者

  • PX4をPoCやプロトタイピングで使いたい方
  • 実機がなくても制御ロジックを検証したい開発者
  • UnityやWeb連携も含めた「拡張しやすいSITL環境」を探している方

💡ちなみに:ArduPilotでも同じこと、できます

「うちはArduPilot派なんだけど、箱庭で同じようなことできないの?」

──できます!

箱庭ドローンシミュレータは、オープンソースフライトコントローラの2大巨頭「PX4」「ArduPilot」の両方に対応しているのです。

ArduPilot派の方は、以下の記事をご参照ください:

📖 WindowsでArduPilot SITLを超簡単に動かす!箱庭シミュレータの使い方


この記事でできるようになること

  • WSL2上でPX4 SITLを手軽に試せる
  • Unityでビジュアライズもできる
  • Python APIとの接続で“次のステップ”にも進める

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

💻 Windows環境

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

ツール 用途 備考
Windows 11 / WSL2 ホスト環境 WSL2は必須(WSL1不可)
Ubuntu 24.04.2 LTS PX4のビルド/実行 WSL2内で動かします
UnityHub/Unity(6.1) 可視化(任意) 自機やセンサの3D表示が可能
QGC MAVLinkの通信確認 -

💡 UnityやQGCは「あとからでも導入可」です。
まずは PX4 を動かすところまでサクッと進めるのがポイントです。

🛠 環境セットアップ

まずは、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 ディレクトリ作成して、そこで行うのがお勧めです。

✈️ PX4本体(ビルドが必要)

ここみて!

クローンする場所は、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

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

さー、やりましょう。

まずは、QGC 起動だ!

image.png

お次は、PX4 SITL 起動だー。

hakoniwa-drone-core に、PX4 SITL 起動スクリプトおいてありますから、以下のように起動してください。

bash hakoniwa-drone-core/tools/px4/run.bash

成功すると、こんな感じで、PX4の起動ログが出力されます。

tmori@WinHako:~/qiita$ bash hakoniwa-drone-core/tools/px4/run.bash
[0/1] launching px4 none_iris (SYS_AUTOSTART=10016)

______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] startup script: /bin/sh etc/init.d-posix/rcS 0
env SYS_AUTOSTART: 10016
INFO  [param] selected parameter default file parameters.bson
INFO  [param] importing from 'parameters.bson'
INFO  [parameters] BSON document size 350 bytes, decoded 350 bytes (INT32:15, FLOAT:3)
INFO  [param] selected parameter backup file parameters_backup.bson
INFO  [dataman] data manager file './dataman' size is 1208528 bytes
INFO  [init] PX4_SIM_HOSTNAME: 127.0.0.1
INFO  [simulator_mavlink] using TCP on remote host 127.0.0.1 port 4560
WARN  [simulator_mavlink] Please ensure port 4560 is not blocked by a firewall.
INFO  [simulator_mavlink] Resolved host '127.0.0.1' to address: 127.0.0.1
INFO  [simulator_mavlink] Waiting for simulator to accept connection on TCP port 4560

ラスボス・箱庭ドローンシミュレータを起動だ!

以下を実行してください。

bash hakoniwa-drone-core/docker/run.bash
bash hakoniwa-drone-core/docker/tools/run-hako.bash px4

成功すると、PX4 と QGC が反応します。

PX4 のログはこんな感じです。

INFO  [simulator_mavlink] Simulator connected on TCP port 4560.
ERROR [simulator_mavlink] poll timeout 0, 111
ERROR [simulator_mavlink] poll timeout 0, 111
INFO  [lockstep_scheduler] setting initial absolute time to 1748046466970062 us
INFO  [commander] LED: open /dev/led0 failed (22)
WARN  [health_and_arming_checks] Preflight Fail: ekf2 missing data
WARN  [health_and_arming_checks] Preflight Fail: system power unavailable
INFO  [uxrce_dds_client] init UDP agent IP:127.0.0.1, port:8888
INFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 18570 remote port 14550
INFO  [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540
INFO  [mavlink] mode: Onboard, data rate: 4000 B/s on udp port 14280 remote port 14030
INFO  [mavlink] mode: Gimbal, data rate: 400000 B/s on udp port 13030 remote port 13280
INFO  [logger] logger started (mode=all)
INFO  [mavlink] partner IP: 172.31.0.1
INFO  [logger] Start file log (type: full)
INFO  [logger] [logger] ./log/2025-05-24/00_27_47.ulg
INFO  [logger] Opened full log file: ./log/2025-05-24/00_27_47.ulg
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [px4] Startup script returned successfully
pxh> INFO  [tone_alarm] home set
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
INFO  [commander] Ready for takeoff!

Unity でドローンの雄姿を見たい人向け

Unityのプレイボタンをクリックして、ヒエラルキービューから、DJIAvatar2 をダブルクリックすると、その雄姿が見えます!

操作動画:

🚀 まとめと次の一歩

ここまでお疲れさまでした!

  • PX4 SITLをWSL2上で動かし、
  • QGC で状態を確認し、
  • Unityで可視化する

という一連のステップを、国産のドローンシミュレータ「箱庭」を使って体験できたと思います。

これだけで終わりではありません。
Hakoniwa Drone Core は、Python API、Web連携、ROS2連携、AR拡張まで可能な拡張性の高いプラットフォームです。

「制御ロジックを試したい」「実機前のPoCを作りたい」「自社プロダクトに組み込みたい」

そういった次のステップに踏み出すための、第一歩になれば嬉しいです。

4
3
0

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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?