「PX4のSITL環境、MacOS で動かすのって正直しんどい……」
って思っていませんか。
- MacOS でビルドや依存関係で何度も詰まる
- 動かした後も「で、どうやって可視化するの?」と立ち止まる
本記事では、そんな悩みを抱えたエンジニア・企画担当の方に向けて、
国産のドローンシミュレータ「箱庭ドローンシミュレータ」 を活用して、“サクサク動いて拡張しやすい”PX4 SITLのセットアップ手順を紹介します。
想定読者
- Macユーザー
- PX4をPoCやプロトタイピングで使いたい方
- 実機がなくても制御ロジックを検証したい開発者
- UnityやWeb連携も含めた「拡張しやすいSITL環境」を探している方
この記事でできるようになること
- MacOS 上でPX4 SITLを手軽に試せる
- Unityでビジュアライズもできる
- Python APIとの接続で“次のステップ”にも進める
では、早速始めましょう。
💻 MacOS 環境
必要なものはこれだけです。
| ツール | 用途 | 備考 |
|---|---|---|
| MacOS(apple silicon) | ホスト環境 | - |
| 箱庭コア機能 | 時刻同期と共有メモリ通信 | - |
| UnityHub/Unity(6.3 LTS) | 可視化(任意) | 自機やセンサの3D表示が可能 |
| QGC | MAVLinkの通信確認 | - |
💡 UnityやQGCは「あとからでも導入可」です。
まずは PX4 を動かすところまでサクッと進めるのがポイントです。
🛠 環境セットアップ
まずは、ターミナルを起動です!
箱庭コア機能のインストール
git clone --recursive https://github.com/hakoniwalab/hakoniwa-core-pro.git
cd hakoniwa-core-pro
bash build.bash
sudo bash install.bash
環境変数を設定します。
export DYLD_LIBRARY_PATH="/usr/local/hakoniwa/lib:$DYLD_LIBRARY_PATH"
export PATH="/usr/local/hakoniwa/bin:$PATH"
📦 箱庭ドローンシミュレータ本体
git clone --recursive https://github.com/toppers/hakoniwa-drone-core.git
クローンする場所は、ホーム直下に project ディレクトリ作成して、そこで行うのがお勧めです。
次に、最新リリースから、mac.zip をダウンロードします。
ダウンロード成功したら、クローンした hakoniwa-drone-core 直下に配置して展開します。
cd hakoniwa-drone-core
unzip mac.zip
ログ:
rchive: mac.zip
creating: mac
inflating: mac/libhako_service.a
inflating: mac/libhako_aircraft.a
inflating: mac/libhako_service_c.dylib
inflating: mac/mac-main_hako_aircraft_service_px4
inflating: mac/mac-aircraft_service_px4
inflating: mac/mac-drone_service_rc_mujoco
inflating: mac/mac-main_hako_drone_service
inflating: mac/libhako_mavlink.a
inflating: mac/mac-drone_visual_state_publisher
inflating: mac/libhako_controller.a
inflating: mac/mac-drone_service_rc
inflating: mac/libdrone_physics_c.a
inflating: mac/libhako_logger.a
inflating: mac/libhako_comm.a
inflating: mac/libhako_drone_core.a
inflating: mac/mac-aircraft_service_ardupilot
inflating: mac/mac-main_hako_aircraft_service_ardupilot
inflating: mac/libdrone_physics.a
ただ、このままだと、mujoco ライブラリとのリンクができていません。
そのため、次の手順で、mujoco ライブラリへのリンクを行います。
MuJoCoをダウンロード。
bash tools/install-mujoco-mac.bash .
ログ:
Downloading MuJoCo 3.9.0...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 26.0M 100 26.0M 0 0 23.9M 0 0:00:01 0:00:01 --:--:-- 86.7M
Protective Master Boot Record (MBR : 0)のチェックサムを計算中…
Protective Master Boot Record (MBR :: 検証済み CRC32 $38E48897
GPT Header (Primary GPT Header : 1)のチェックサムを計算中…
GPT Header (Primary GPT Header : 1): 検証済み CRC32 $746CBE4A
GPT Partition Data (Primary GPT Table : 2)のチェックサムを計算中…
GPT Partition Data (Primary GPT Tabl: 検証済み CRC32 $B219A472
(Apple_Free : 3)のチェックサムを計算中…
(Apple_Free : 3): 検証済み CRC32 $00000000
disk image (Apple_APFS : 4)のチェックサムを計算中…
.......................................................................................................................
disk image (Apple_APFS : 4): 検証済み CRC32 $C3AE7CB5
(Apple_Free : 5)のチェックサムを計算中…
(Apple_Free : 5): 検証済み CRC32 $00000000
GPT Partition Data (Backup GPT Table : 6)のチェックサムを計算中…
GPT Partition Data (Backup GPT Table: 検証済み CRC32 $B219A472
GPT Header (Backup GPT Header : 7)のチェックサムを計算中…
GPT Header (Backup GPT Header : 7): 検証済み CRC32 $FB021CD9
検証済み CRC32 $7FD34572
/dev/disk4 GUID_partition_scheme
/dev/disk4s1 Apple_APFS
/dev/disk5 EF57347C-0000-11AA-AA11-0030654
/dev/disk5s1 41504653-0000-11AA-AA11-0030654 /Volumes/MuJoCo
"disk4" ejected.
SUCCESS
成功すると、vendor ディレクトリができます。
tree -L 3 vendor
vendor
└── mujoco
├── include
│ └── mujoco
├── lib
│ └── libmujoco.3.9.0.dylib
└── MuJoCo.framework
├── Headers
├── Modules
├── Resources
└── Versions
リンクします。
bash tools/link-mujoco-mac.bash mac --lib-dir vendor/mujoco/lib
ログ:
Scanning 9 executables under mac ...
[OK mac:dylib] libhako_service_c.dylib -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-main_hako_aircraft_service_px4 -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-aircraft_service_px4 -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-drone_service_rc_mujoco -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-main_hako_drone_service -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-drone_service_rc -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-aircraft_service_ardupilot -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
[OK mac:dylib] mac-main_hako_aircraft_service_ardupilot -> rpath += vendor/mujoco/lib ; dep=@rpath/libmujoco.3.9.0.dylib
Done. Verify with: otool -l <bin> | grep -A2 LC_RPATH ; otool -L <bin> | grep -i mujoco
成功すると、このようなログが出力されます。
./mac/mac-main_hako_drone_service
Usage: ./mac/mac-main_hako_drone_service <drone_config_dir_path> <custom_json_path> [--asset-name NAME] [--disable-conductor] [--mujoco-viewer] [--real-sleep-msec N]
✈️ PX4本体(ビルドが必要)
PX4 SITL での動作確認は、次の手順で行います。
PX4 をクローンします。
git clone --recursive https://github.com/PX4/PX4-Autopilot.git
PX4をビルドします。
cd PX4-Autopilot
./Tools/setup/macos.sh --no-nuttx --no-sim-tools
source .venv/bin/activate
rm -rf build/px4_sitl_default
make px4_sitl_default
ビルドに成功すると、以下の実行ファイルが生成されます。
build/px4_sitl_default/bin/px4
🎮 Unityで可視化したい場合はこちら
git clone --recursive https://github.com/hakoniwalab/hakoniwa-unity-drone.git
クローン終わったら、Unity Hubで下図のように Add をクリックして、
hakoniwa-unity-drone/simulation を追加してください。
成功すると、下図のようになります。
そして、simulation をクリックすると、Unityが起動します。(何回か再起動メッセージがでますが、めげずにがんばりましょう)
起動後、下図のように、プロジェクトビューから、Scenes/Avatar をクリック!
ちなみに、デフォルトで動くドローンはこちらっす。
お疲れさまでした、さっそく動かしてみましょう
さー、やりましょう。
まずは、QGC 起動だ!
お次は、PX4 SITL 起動だー。
PX4_SIM_MODEL=none_iris ./build/px4_sitl_default/bin/px4
成功すると、こんな感じで、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
ラスボス・箱庭ドローンシミュレータを起動だ!
以下を実行してください。
./mac/mac-main_hako_aircraft_service_px4 127.0.0.1 4560 config/drone/px4-1 config/pdudef/drone-pdudef-1.json
成功すると、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のプレイボタンをクリック。
次に、スタートボタンをクリック
🎥 操作動画
Unity のプレイボタンを押して、スタートボタンをクリックすると、PX4 SITL と箱庭ドローンシミュレータが連携して動き出します。
最後に
macOS 上でも、PX4 SITL と箱庭ドローンシミュレータを組み合わせることで、実機がなくても制御・可視化・拡張の流れを手元で試せるようになります。
まずはこの記事の手順で「動くところ」まで確認して、そこからセンサ追加、制御ロジックの検証、Unity連携、Python API連携など、自分の用途に合わせて少しずつ拡張してみてください。
箱庭ドローンシミュレータが、PX4を使ったPoCやプロトタイピングの入口になればうれしいです。
商用利用をご検討の方は、以下のページもご参照ください。








