2
1

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をMacOSで爆速セットアップ:国産シミュレータ「箱庭」でラクに可視化・制御する方法

2
Last updated at Posted at 2026-06-18

「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 をダウンロードします。

スクリーンショット 2026-06-18 11.21.59.png

ダウンロード成功したら、クローンした 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 をクリックして、

image.png

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

image.png

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

image.png

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

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

スクリーンショット 2026-06-18 11.34.06.png

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

image.png

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

さー、やりましょう。

まずは、QGC 起動だ!

image.png

お次は、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のプレイボタンをクリック。

スクリーンショット 2026-06-18 11.54.59.png

次に、スタートボタンをクリック

スクリーンショット 2026-06-18 11.55.24.png

🎥 操作動画

Unity のプレイボタンを押して、スタートボタンをクリックすると、PX4 SITL と箱庭ドローンシミュレータが連携して動き出します。

最後に

macOS 上でも、PX4 SITL と箱庭ドローンシミュレータを組み合わせることで、実機がなくても制御・可視化・拡張の流れを手元で試せるようになります。

まずはこの記事の手順で「動くところ」まで確認して、そこからセンサ追加、制御ロジックの検証、Unity連携、Python API連携など、自分の用途に合わせて少しずつ拡張してみてください。

箱庭ドローンシミュレータが、PX4を使ったPoCやプロトタイピングの入口になればうれしいです。

商用利用をご検討の方は、以下のページもご参照ください。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?