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 家庭版安装组策略编辑器 |
附:常见批处理公共代码片段说明¶
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) 管道与条件执行¶
未找到进程则启动新实例。