BAT 脚本使用参考¶
RflySim 基于批处理技术开发了众多批处理脚本,让用户可以快速一键启动部署多架、多种、多样无人系统组合式仿真,提高无人系统开发和仿真速度。
常用脚本:
- SITLRun.bat — 开启多机软件在环仿真
- HITLRun.bat — 开启多机硬件在环仿真(插入飞控后按提示输入串口号)
更多脚本见 *\PX4PSP\RflySimAPIs\BatScripts 目录。
仿真参数设置¶
CopterSim 仿真功能区参数¶

以下参数在 BAT 脚本中通过 SET 命令配置,与 CopterSim GUI 界面一一对应:
参数1 · CopterID / START_INDEX¶
设置飞机 ID,多机仿真时用于指定起始飞机编号。
参数2 · 3DClassID / CLASS_3D_ID¶
设置 RflySim3D 中显示的载具三维模型样式。
| 取值 | 含义 |
|---|---|
-1 |
使用默认 3D 模型(由 DLL 文件指定) |
ClassID |
指定载具构型(如四旋翼、固定翼),使用该构型下默认样式 |
Unique3DClassID |
指定特定构型下的特定三维样式 |
三维样式参数参考 平台三维模型资源索引
参数3 · 使用DLL模型文件 / DLLModel¶
选择不同的 DLL 动力学模型文件(位于 *PX4PSP\CopterSim\external\model)。
| 取值 | 含义 |
|---|---|
0 |
不使用 DLL,使用 CopterSim 界面上搭建的模型 |
≥1 的序号或名称 |
使用指定的 DLL 模型 |
参数4 · 仿真模式 / SimMode¶
仿真模式取值表
| 值 | 模式名称 | 说明 |
|---|---|---|
0 |
PX4_HITL | PX4 官方硬件在环仿真 |
1 |
PX4_SITL | PX4 官方软件在环仿真 |
2 |
PX4_SITL_RFLY | RflySim 自定义 SITL,支持上百架集群 |
3 |
Simulink&DLL_SIL | Simulink 生成的 DLL 仿真(综合模型) |
4 |
PX4_HITL_NET | 网口飞控 HIL(限完整版) |
5 |
EXT_HITL_COM | 串口连接第三方飞控(限完整版) |
6 |
EXT_SIM_NET | 网络连接第三方飞控(限完整版) |
7 |
APM_SITL_COM | APM (Ardupilot) SITL(限完整版) |
8 |
PX4_SIH_COM | SIH 模式 USB 连接(限完整版) |
9 |
PX4_SIH_NET | SIH 模式局域网连接(限完整版) |
10 |
PX4_SIH_SITL | SIH 软件在环(限完整版) |
11 |
PX4_SIH_FLY | SIH 硬件在环(限完整版) |
参数5 · 三维显示地图 / UE4_MAP¶
选择三维场景(位于 *PX4PSP\CopterSim\external\map),支持序号或名称。
参数6 · 联机 / IS_BROADCAST¶
开启局域网联机仿真(同时需在 RflySim3D 中按 I 键)。
| 取值 | 含义 |
|---|---|
0 |
仅本机 |
1 |
广播到全网 |
IP地址 |
指定 IP(0=127.0.0.1,1=255.255.255.255) |
IP1,IP2,... |
发送到多个 IP |
json |
通过 JSON 文件配置通信 IP 和端口 |
参数7 · GPS坐标 / isPosGps(限完整版)¶
| 取值 | 含义 |
|---|---|
0 |
直角坐标系(默认) |
1 |
GPS/LLA 坐标系 |
参数8 · 起点位置¶
SET /a ORIGIN_POS_X=0 :: 初始 X 位置 (m)
SET /a ORIGIN_POS_Y=0 :: 初始 Y 位置 (m)
SET LatLongAlt=116.3,39.9,50 :: LLA 坐标(限完整版)
参数9 · 偏航 / ORIGIN_YAW¶
初始航向角(度),相对于北方。
参数10 · 飞控选择¶
启动 BAT 后在命令行输入推荐的 COM 端口号。
参数11 · 波特率 / BaudRate¶
串口通信波特率,默认 921600。
参数12 · 通信模式 / UDPSIMMODE¶
UDPSIMMODE 通信模式取值表
| 值 | 模式 | 适用规模 | 说明 |
|---|---|---|---|
0 |
UDP_Full | <10 架 | 数据最全,Python→CopterSim→PX4 |
1 |
UDP_Simple | <100 架 | 精简结构体,适合大规模集群 |
2 |
Mavlink_Full | <4 架 | Python 直发 MAVLink,数据量大但最接近真机 |
3 |
Mavlink_Simple | <8 架 | 屏蔽部分消息包,降低频率 |
4 |
Mavlink_NoSend | 不限 | CopterSim 不发 MAVLink,需配合数传串口 |
5 |
Mavlink_NoGPS | — | 不发 GPS 数据,适合室内 SLAM 仿真 |
6 |
Mavlink_Vision | — | NoGPS + 自动发送 EKF2_AID_MASK 参数 |
7 |
Redis_Full | — | Redis 完整模式(限完整版) |
8 |
Redis_Simple | — | Redis 精简模式(限完整版) |
其它关键参数¶
机架设置¶
| 参数 | 取值 | 说明 |
|---|---|---|
PX4SitlFrame |
机架名称 | 对应 Firmware\ROMFS\px4fmu_common\init.d-posix 中的机架文件 |
集群设置¶
| 参数 | 取值 | 说明 |
|---|---|---|
TOTOAL_COPTER |
整数 | 载具总数 |
IsSysID |
0/1 |
是否按飞控 SysID 确定 CopterID |
VEHICLE_INTERVAL |
整数 | 载具间隔距离 (m) |
GPS 原点模式¶
| 参数 | 取值 | 说明 |
|---|---|---|
isBatLLAOrin |
0 |
使用 DLL/地形文件默认 GPS 原点 |
1 |
使用 BAT 脚本设置 GPS 原点 |
载具初始位姿¶
| 参数 | 说明 |
|---|---|
PosXStr |
isPosGps=0 时为 X 位置列表;=1 时为纬度列表 |
PosYStr |
isPosGps=0 时为 Y 位置列表;=1 时为经度列表 |
YawStr |
偏航角列表 (deg) |
RflySim3D 初始化启动配置¶
BAT 脚本配置快捷键:
BAT 脚本配置控制台命令:
主程序及启动参数配置¶
设置仿真数量¶
REM Max vehicle number 50
SET /a MAX_VEHICLE=50
SET /P VehicleNum=Please input UAV swarm number:
SET /A Evaluated=VehicleNum
if %Evaluated% EQU %VehicleNum% (
IF %VehicleNum% GTR 0 (
IF %VehicleNum% GTR %MAX_VEHICLE% (
ECHO The vehicle number is too large, which may cause a crash
pause
)
GOTO StartSim
)
ECHO Not a positive integer
GOTO Top
) ELSE (
ECHO Not a integer
GOTO Top
)
限制最大仿真数量(默认 50,可调整),输入载具数量后校验并进入仿真。
开始仿真¶
:StartSim
SET /A VehicleTotalNum=%VehicleNum% + %START_INDEX% - 1
if not defined TOTOAL_COPTER (
SET /A TOTOAL_COPTER=%VehicleTotalNum%
)
set /a sqrtNum=1
set /a squareNum=1
:loopSqrt
set /a squareNum=%sqrtNum% * %sqrtNum%
if %squareNum% EQU %TOTOAL_COPTER% ( goto loopSqrtEnd )
if %squareNum% GTR %TOTOAL_COPTER% ( goto loopSqrtEnd )
set /a sqrtNum=%sqrtNum%+1
goto loopSqrt
:loopSqrtEnd
计算集群载具总数,利用递归算法分配编号。
REM 启动 QGC 和 RflySim3D
tasklist|find /i "QGroundControl.exe" || start %PSP_PATH%\QGroundControl\QGroundControl.exe
tasklist|find /i "RflySim3D.exe" || start %PSP_PATH%\RflySim3D\RflySim3D.exe
choice /t 5 /d y /n >nul
tasklist|find /i "CopterSim.exe" && taskkill /im "CopterSim.exe"
cd %PSP_PATH%\CopterSim
REM 循环启动 CopterSim
set /a cntr=%START_INDEX%
set /a endNum=%VehicleTotalNum%+1
set /a portNum=%UDP_START_PORT%+((%START_INDEX%-1)*2)
:loopBegin
set /a PosXX=((%cntr%-1) / %sqrtNum%)*%VEHICLE_INTERVAL% + %ORIGIN_POS_X%
set /a PosYY=((%cntr%-1) %% %sqrtNum%)*%VEHICLE_INTERVAL% + %ORIGIN_POS_Y%
start /realtime CopterSim.exe 1 %cntr% %portNum% %DLLModel% %SimMode% %UE4_MAP% %IS_BROADCAST% %PosXX% %PosYY% %ORIGIN_YAW% 1 %UDPSIMMODE%
choice /t 1 /d y /n >nul
set /a cntr=%cntr%+1
set /a portNum=%portNum%+2
if %cntr% EQU %endNum% goto loopEnd
goto loopBegin
:loopEnd
循环中为每个载具计算初始位置并启动 CopterSim 实例。
REM 编译并启动 PX4 SITL
SET /a ToolChainType=1
SET WINDOWSPATH=%PATH%
if %ToolChainType% EQU 1 (
wsl echo Starting PX4 Build; cd %PSP_PATH_LINUX%/Firmware; ...
) else (
cd %PSP_PATH%\CygwinToolchain
CALL setPX4Env.bat
bash -l -i -c '...'
)
SET PATH=%WINDOWSPATH%
结束仿真¶
tasklist|find /i "CopterSim.exe" && taskkill /im "CopterSim.exe"
tasklist|find /i "QGroundControl.exe" && taskkill /f /im "QGroundControl.exe"
tasklist|find /i "RflySim3D.exe" && taskkill /f /im "RflySim3D.exe"
ECHO Start End.
HITLRun 与 SITLRun 的区别¶
HITLRun.bat 与 SITLRun.bat 大部分相同,区别在于:
| 差异点 | HITLRun | SITLRun |
|---|---|---|
| 端口设置 | 需输入 COM 串口号 | 自动分配 UDP 端口 |
| QGC 启动顺序 | CopterSim 之后启动(避免占用串口) | 先启动 |
| 固件编译 | 无 | WSL 中编译 PX4 |
端口设置(HITLRun 特有)¶
1. 获取 COM 端口信息¶
2. 解析 COM 端口信息¶
for /f "tokens=1,2,3 delims=#" %%a in ("%ComInfoStr%") do (
set ComNumExe=%%a
set ComNameList=%%b
set ComInfoList=%%c
)
3. 显示可用 COM 端口¶
set remain=%ComInfoList%
echo All COM ports on this computer are:
:loopInfo
for /f "tokens=1* delims=;" %%a in ("%remain%") do (
echo %%a
set remain=%%b
)
if defined remain goto :loopInfo
4. 输出推荐端口¶
if %ComNumExe% EQU 0 (
echo Warning: there is no available COM port
) else (
echo Recommended COM list input is: %ComNameList%
)
5. 输入 COM 端口列表¶

6. 解析并验证输入¶
SET string=%ComNum%
set /a VehicleNum=0
:split
for /f "tokens=1,* delims=," %%i in ("%string%") do (
set subStr=%%i
set string=%%j
)
set /a eValue=subStr
if not %eValue% EQU %subStr% (
echo Error: Input '%subStr%' is not a integer!
goto EOF
)
set /a VehicleNum = VehicleNum +1
if not "%string%"=="" goto split
QGC 启动顺序(HITLRun)¶
CopterSim 参数设置完成后再启动 QGC,避免 QGC 占用串口。
start /realtime CopterSim.exe 1 %cntr% %CLASS_3D_ID% ... %subStr%:%BaudRate% %UDPSIMMODE% %IsSysID%
...
tasklist|find /i "QGroundControl.exe" || start %PSP_PATH%\QGroundControl\QGroundControl.exe -noComPix
BAT 脚本速查索引¶
下表列出所有可用的 BAT 脚本及其关键特性:
基础仿真脚本¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLRun.bat | HIL | 常规硬件在环,手动输入 COM 串口 |
| SITLRun.bat | SIL | 常规软件在环,输入飞机数量自动开启 |
| HITLRunAuto.bat | HIL | 自动分配串口,无需手动输入 |
| SITLRunDebug.bat | SIL | PX4 官方 SITL 单机调试 |
位置初始化脚本¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLPos.bat | HIL | 手动输入 PosX/PosY/Yaw |
| SITLPos.bat | SIL | 手动输入 PosX/PosY/Yaw |
| HITLPosAlt.bat | HIL | 支持空中/水下初始化 |
| SITLPosAlt.bat | SIL | 支持空中/水下初始化 |
| HITLPosStr.bat | HIL | 位置以字符串写入脚本 |
| SITLPosStr.bat | SIL | 位置以字符串写入脚本 |
| HITLPosAltStr.bat | HIL | 自动输入,支持空中/水下 |
| SITLPosAltStr.bat | SIL | 自动输入,支持空中/水下 |
| SITLPosStrSel.bat | SIL | 字符串位置 + 选择性启用子集 |
GPS 坐标脚本(限完整版)¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLPosStrGPS.bat | HIL | 全球 GPS 坐标初始化 |
| SITLPosStrGPS.bat | SIL | 全球 GPS 坐标初始化 |
关键设置:SET isPosGps=1 + SET isBatLLAOrin=1
SysID 绑定脚本¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLRunSysID.bat | HIL | CopterID 按飞控 SysID 自动确定 |
| HITLPosSysID.bat | HIL | SysID + 手动输入位置 |
| HITLPosSysIDStr.bat | HIL | SysID + 字符串位置 |
关键设置:SET /a IsSysID=1
联机与集群脚本¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLRunLANSwarm.bat | HIL | 局域网联机群飞 (IS_BROADCAST=1) |
| SITLRunLANSwarm.bat | SIL | 局域网联机群飞 |
特殊模式脚本¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLRunFw.bat | HIL | 固定翼 (DLLModel=FixWingModel) |
| SITLRunFw.bat | SIL | 固定翼 SITL |
| HITLRunChange3D.bat | HIL | 切换 3D 载具样式 |
| SITLRunChange3D.bat | SIL | 切换 3D 载具样式 |
| HITLRunMAVLinkNoGPS.bat | HIL | 无 GPS 模式 (SLAM) |
| SITLRunMAVLinkNoGPS.bat | SIL | 无 GPS 模式 (SLAM) |
| HITLRunPX4Net.bat | HIL | 网口飞控 (PX4_HITL_NET) |
| HITLRunExtNet.bat | HIL | 第三方飞控 (EXT_SIM_NET) |
| HITLRunLowGPU.bat | HIL | 低显卡模式 (UE4_MAP=LowGPU) |
| SITLRunLowGPU.bat | SIL | 低显卡模式 |
| HITLRunNoUI.bat | HIL | 无界面后台运行 |
| SITLRunNoUI.bat | SIL | 无界面后台运行 |
| HITLRunUE5.bat | HIL | 使用 UE5 版三维程序 |
| SITLRunUE5.bat | SIL | 使用 UE5 版三维程序 |
ROS 集成脚本¶
| 脚本名 | 仿真类型 | 功能特点 |
|---|---|---|
| HITLRunROS.bat | HIL | HIL + MAVROS 自动拉起 |
| SITLRunROS.bat | SIL | SIL + MAVROS 自动拉起 |
工具与环境脚本¶
| 脚本名 | 功能 |
|---|---|
| CloseALL.bat | 一键清理所有仿真进程 + WSL |
| StopBuild.bat | 终止 WSL 相关进程 |
| DistSim.bat | 启动分布式仿真管理器 |
| UdpPortFree.bat | 端口占用排查与释放 |
| Python38Env.bat | 打开配置好 Python3.8 的命令行 |
| Python38Run.bat | 在当前目录打开 Python3.8 环境 |
| StartCFclient.bat | 启动 cfclient |
| WinWSL.bat | 打开 WSL 控制台 + VcXsrv |
| WslGUI.bat | 一键开启 WSL GUI 支持 |
| WslSwith2.bat | WSL1/WSL2 切换与网络配置 |
| gpedit.bat | Win 家庭版安装组策略编辑器 |
常用脚本参数差异¶
不同脚本的主体流程相同,差异主要集中在仿真模式、位置输入方式、通信链路和后台程序选择。修改脚本时应优先确认下表中的关键变量,再检查端口、地图和载具数量。
| 脚本 | 关键变量或命令 | 使用要点 |
|---|---|---|
HITLRun.bat |
SimMode=0 或 PX4_HITL,UDPSIMMODE=0,用户输入 COM 串口列表 |
常规硬件在环;飞机 ID 按用户输入串口顺序递增 |
SITLRun.bat |
SimMode=2,PX4SitlFrame=iris |
常规软件在环;输入飞机数量后自动启动 PX4 SITL 和 CopterSim |
HITLPos.bat / SITLPos.bat |
SET /P PosXStr,SET /P PosYStr,SET /P YawStr |
运行时手动输入初始位置和偏航角列表 |
HITLPosStr.bat / SITLPosStr.bat |
SET PosXStr=...,SET PosYStr=...,SET YawStr=... |
位置和偏航直接写在脚本中,适合固定队形反复实验 |
HITLPosAlt.bat / SITLPosAlt.bat |
位置、偏航和高度相关变量 | 支持空中或水下初始状态,适合飞行中接管、降落或水面/水下场景 |
HITLRunSysID.bat |
SET /a IsSysID=1 |
CopterID 按飞控 SysID 自动确定,适合固定硬件编号和故障定位 |
HITLPosSysIDStr.bat |
IsSysID=1,START_INDEX,位置字符串 |
用 SysID - START_INDEX 索引位置列表,适合固定硬件与固定队形绑定 |
HITLPosStrGPS.bat / SITLPosStrGPS.bat |
SET isPosGps=1,SET isBatLLAOrin=1,LatLongAlt |
使用经纬度初始化位置;免费版不支持配置 GPS 初始位置 |
HITLRunExtNet.bat |
SimMode=EXT_SIM_NET |
通过网络连接第三方飞控或外部飞控仿真器 |
HITLRunPX4Net.bat |
SimMode=PX4_HITL_NET |
网口 PX4 硬件在环,适合不走串口的飞控链路 |
HITLRunMAVLinkNoGPS.bat / SITLRunMAVLinkNoGPS.bat |
SET UDPSIMMODE=Mavlink_NoGPS |
关闭 GPS 相关 MAVLink 数据,适合室内定位、SLAM 或动捕场景 |
HITLRunAuto.bat |
GetComList.exe,0:%BaudRate% |
输入飞机数量后自动匹配 Pixhawk 串口,减少手动 COM 列表输入 |
HITLRunFw.bat / SITLRunFw.bat |
DLLModel=FixWingModel,PX4SitlFrame=standard_plane |
固定翼仿真脚本,通常使用 OldFactory 地图和 Mavlink_Full 通信模式 |
HITLRunLANSwarm.bat / SITLRunLANSwarm.bat |
IS_BROADCAST=1,RflySim3D -key=I1 |
局域网联机群飞,需要同步配置防火墙和目标主机网络 |
HITLRunLowGPU.bat / SITLRunLowGPU.bat |
UE4_MAP=LowGPU |
低显卡或远程桌面场景,降低三维渲染压力 |
HITLRunNoUI.bat / SITLRunNoUI.bat |
CopterSimNoUI.exe |
无界面后台运行,适合服务器、批量测试和自动化回归 |
HITLRunROS.bat / SITLRunROS.bat |
mavros_run.sh %START_INDEX%,%VehicleNum% |
仿真启动后自动拉起 MAVROS 链路,结束时通常执行 wsl --shutdown |
HITLRunUE5.bat / SITLRunUE5.bat |
%PSP_PATH%\RflySimUE5\RflySim3D.exe |
使用 UE5 版三维程序和 UE5 场景资源 |
UdpPortFree.bat |
netstat -ano,:check_and_kill,:check_and_kill_tcp |
按固定端口和飞机编号推算端口段,释放残留仿真进程 |
位置字符串通常用英文逗号分隔同一维度的多架飞机取值:
对于 SysID 绑定脚本,START_INDEX 同时影响位置列表索引。例如 SysID=15 且 START_INDEX=11 时,会读取位置列表中第 15-11=4 个偏移位置,即从 0 开始计数的第 4 项。
附:常见批处理公共代码片段说明¶
1) 管理员权限自提权¶
NET SESSION >nul 2>&1 || powershell -Command "Start-Process cmd -ArgumentList '/c, ""%~f0""' -Verb RunAs" && exit /b
NET SESSION 只有管理员可成功执行,失败时自举为管理员并重新运行当前脚本。
2) 静默输出与错误重定向¶
抑制标准输出与错误输出。常用组合:cmd1 || cmd2(前者失败才执行后者)。
3) 进程查询与安全结束¶
tasklist | find /i "CopterSim.exe" && taskkill /im "CopterSim.exe"
tasklist | find /i "QGroundControl.exe" && taskkill /f /im "QGroundControl.exe"
先查再杀,避免"未找到进程"报错。/f 强制终止。
4) WSL 环境管理¶
5) X 服务器与 GUI 启动¶
6) 路径与工作目录¶
7) 程序启动与控制台会话¶
/min 最小化窗口,/realtime 高优先级,/k 保留窗口,/c 执行完退出。
8) 延时与节流¶
无交互等待 2 秒,给进程预留启动时间。
9) 环境变量与算术¶
%var% 解析时展开,!var! 执行时展开。
10) 字符串与列表解析¶
for /f "tokens=1,2,3 delims=#" %%a in ("%ComInfoStr%") do (
set ComNumExe=%%a
set ComNameList=%%b
set ComInfoList=%%c
)
11) 标签与子例程¶
12) 临时 PATH 注入¶
13) 管道与条件执行¶
未找到进程则启动新实例。
典型脚本族与使用差异¶
RflySim 的 BAT 脚本通常围绕仿真模式、初始位姿、网络环境、三维引擎和工具链环境组织。除前文列出的参数外,可按下表快速区分常见脚本族。
| 脚本族 | 典型脚本 | 主要用途 | 常见差异 |
|---|---|---|---|
| HITL 启动 | HITLRun.bat、HITLPos.bat、HITLRunFw.bat |
启动硬件在环仿真流程 | 连接真实飞控或外部 PX4 实例,常带串口、网口或位置初始化参数 |
| SITL 启动 | SITLRun.bat、SITLPos.bat、SITLRunFw.bat |
启动软件在环仿真流程 | 自动启动 PX4 SITL,并按飞机编号分配 TCP/UDP 端口 |
| 位姿初始化 | HITLPos.bat、SITLPos.bat、HITLPosAlt.bat、SITLPosAlt.bat |
设置载具初始位置、姿态和高度 | Pos 侧重位置,Alt 额外指定高度,Str 支持字符串形式批量配置 |
| GPS 原点 | HITLPosStrGPS.bat、SITLPosStrGPS.bat |
设置 GPS 原点和多机初始位姿 | 常用于复现实地经纬度、群体起飞位置或跨地图场景 |
| 系统辨识 | HITLRunSysID.bat、HITLPosSysID.bat、HITLPosSysIDStr.bat |
启动适合模型辨识的数据采集仿真 | 通常固定地图、天气、载具初始状态和日志目录 |
| 网络扩展 | HITLRunExtNet.bat、HITLRunPX4Net.bat、HITLRunLANSwarm.bat、SITLRunLANSwarm.bat |
跨主机或局域网集群仿真 | 需要配置目标 IP、组播/单播策略和防火墙 |
| 无 GPS / MAVLink | HITLRunMAVLinkNoGPS.bat、SITLRunMAVLinkNoGPS.bat |
不依赖 GPS 的 MAVLink 控制或室内定位场景 | 适合外部定位、视觉定位、动捕输入 |
| 性能/界面 | HITLRunLowGPU.bat、SITLRunLowGPU.bat、HITLRunNoUI.bat、SITLRunNoUI.bat |
降低显卡占用或无界面运行 | 适合批量测试、服务器部署、远程自动化 |
| ROS/UE5 | HITLRunROS.bat、SITLRunROS.bat、HITLRunUE5.bat、SITLRunUE5.bat |
启动 ROS 桥接或 UE5 场景 | 需要同步配置 ROS、WSL、UE5 工程路径 |
HITLRun 与 SITLRun 的选择¶
- 有真实飞控或外部飞控硬件时使用 HITL。
- 只在电脑中运行 PX4 与仿真器时使用 SITL。
- 两类脚本的端口、进程和故障排查方式不同,不建议混用。
主程序启动顺序¶
典型启动脚本会按以下顺序组织主程序,实际顺序可根据是否使用 QGC、ROS、UE5 或分布式部署微调。
| 阶段 | 典型动作 | 说明 |
|---|---|---|
| 1 | 设置 PSP_PATH、START_INDEX、TOTOAL_COPTER、SimMode |
确定工具链路径、起始飞机编号、飞机总数和仿真模式 |
| 2 | 检查串口或网络端口 | HITL 检查 COMn 或 /dev/ttyUSBn;SITL 检查 TCP/UDP 端口 |
| 3 | 启动 PX4 SITL 或连接硬件飞控 | SITL 脚本启动 PX4,HITL 脚本等待用户选择飞控端口 |
| 4 | 启动 CopterSim | 根据 CopterID、模型、地图和通信模式创建运动仿真实例 |
| 5 | 启动 RflySim3D / UE5 | 加载地图、对象和视觉传感器配置 |
| 6 | 启动 QGroundControl、ROS、Python 或其他外部程序 | 根据任务需要连接地面站、算法节点和控制脚本 |
COM 端口选择流程¶
HITL 脚本通常会先获取系统可用 COM 端口,再提示用户输入用于飞控连接的端口列表。多飞控场景中,用户输入顺序应与 CopterID 顺序一致。
| 步骤 | 说明 |
|---|---|
| 获取端口字符串 | 读取系统串口列表,形成 ComInfoStr 等中间变量 |
| 解析端口 | 用 for /f 按分隔符拆分端口编号、端口名称和描述 |
| 显示可用端口 | 在命令行列出所有候选 COM 端口 |
| 检查数量 | 若可用飞控数量少于仿真飞机数量,提示重新连接或减少飞机数 |
| 用户输入 | 输入如 3,4,5 的端口列表,对应 COM3、COM4、COM5 |
| 验证端口 | 检查输入端口是否存在、是否重复、数量是否匹配 |
QGroundControl 启动顺序¶
多机或多端口仿真时,建议先启动 PX4/CopterSim 通信链路,再启动 QGroundControl。若 QGC 先占用 14550 或相关 TCP 端口,可能导致 CopterSim 或 MAVLink 转发链路连接失败。
多机位姿字符串¶
批量位置脚本常使用字符串描述多机初始位置:
其中 ; 分隔不同载具,, 分隔单个载具的位置分量。脚本内部通常会用 for /f 或延迟变量展开解析字符串。
排查要点¶
- 端口占用时先运行
UdpPortFree.bat或手动检查14550、20100、30100、40100系列端口。 - 多机脚本中
CopterID、PX4 实例编号、CopterSim 编号、RflySim3D 对象编号必须保持一致。 - WSL 相关脚本需要确认发行版、PX4 路径、VcXsrv/图形转发和防火墙规则。
- 批量启动时建议在 PX4、CopterSim、RflySim3D、QGroundControl 之间保留 1 到 3 秒延时。