跳转至

BAT 脚本使用参考

RflySim 基于批处理技术开发了众多批处理脚本,让用户可以快速一键启动部署多架、多种、多样无人系统组合式仿真,提高无人系统开发和仿真速度。

常用脚本:

  • SITLRun.bat — 开启多机软件在环仿真
  • HITLRun.bat — 开启多机硬件在环仿真(插入飞控后按提示输入串口号)

更多脚本见 *\PX4PSP\RflySimAPIs\BatScripts 目录。


仿真参数设置

CopterSim 仿真功能区参数

CopterSim 参数映射

以下参数在 BAT 脚本中通过 SET 命令配置,与 CopterSim GUI 界面一一对应:


参数1 · CopterID / START_INDEX

设置飞机 ID,多机仿真时用于指定起始飞机编号。

SET /a START_INDEX=1

参数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),支持序号或名称。

SET UE4_MAP=Grasslands

参数6 · 联机 / IS_BROADCAST

开启局域网联机仿真(同时需在 RflySim3D 中按 I 键)。

取值 含义
0 仅本机
1 广播到全网
IP地址 指定 IP(0=127.0.0.11=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

初始航向角(度),相对于北方。

SET /a ORIGIN_YAW=0

参数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 脚本配置快捷键:

start %PSP_PATH%\RflySimUE5\RflySim3D.exe -key=S,N1

BAT 脚本配置控制台命令:

start %PSP_PATH%\RflySim3D\RflySim3D.exe -cmd=RflyChangeMapbyID-15

主程序及启动参数配置

设置仿真数量

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 端口信息
for /f "delims=" %%t in ('%PSP_PATH%\CopterSim\GetComList.exe 3 %BaudRate%') do set ComInfoStr=%%t
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 端口列表
SET /P ComNum=My COM list for HITL simulation is:

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=0PX4_HITLUDPSIMMODE=0,用户输入 COM 串口列表 常规硬件在环;飞机 ID 按用户输入串口顺序递增
SITLRun.bat SimMode=2PX4SitlFrame=iris 常规软件在环;输入飞机数量后自动启动 PX4 SITL 和 CopterSim
HITLPos.bat / SITLPos.bat SET /P PosXStrSET /P PosYStrSET /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=1START_INDEX,位置字符串 SysID - START_INDEX 索引位置列表,适合固定硬件与固定队形绑定
HITLPosStrGPS.bat / SITLPosStrGPS.bat SET isPosGps=1SET isBatLLAOrin=1LatLongAlt 使用经纬度初始化位置;免费版不支持配置 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.exe0:%BaudRate% 输入飞机数量后自动匹配 Pixhawk 串口,减少手动 COM 列表输入
HITLRunFw.bat / SITLRunFw.bat DLLModel=FixWingModelPX4SitlFrame=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 按固定端口和飞机编号推算端口段,释放残留仿真进程

位置字符串通常用英文逗号分隔同一维度的多架飞机取值:

SET PosXStr=1,2,3,4,5,6,7,8,9,10
SET PosYStr=0,0,0,0,0,0,0,0,0,0
SET YawStr=0,0,0,0,0,0,0,0,0,0

对于 SysID 绑定脚本,START_INDEX 同时影响位置列表索引。例如 SysID=15START_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) 静默输出与错误重定向

someCommand >nul 2>&1

抑制标准输出与错误输出。常用组合: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 环境管理

wsl --shutdown          :: 关闭所有 WSL 发行版
wsl -d RflySim-20.04    :: 在指定发行版中执行

5) X 服务器与 GUI 启动

cd /d %PSP_PATH%\VcXsrv
tasklist|find /i "vcxsrv.exe" >nul || Xlaunch.exe -run config.xlaunch

6) 路径与工作目录

cd /d %PSP_PATH%\CopterSim     :: 跨盘符切换
pushd "%~dp0"                   :: 进入脚本所在目录

7) 程序启动与控制台会话

start /realtime CopterSim.exe ...
start cmd.exe /k "SET PATH=...;%PATH% & someCommand"

/min 最小化窗口,/realtime 高优先级,/k 保留窗口,/c 执行完退出。

8) 延时与节流

choice /t 2 /d y /n >nul

无交互等待 2 秒,给进程预留启动时间。

9) 环境变量与算术

set /a VEHICLE_INTERVAL=2
setlocal enabledelayedexpansion
echo !var!   :: 延迟展开,循环中使用

%var% 解析时展开,!var! 执行时展开。

10) 字符串与列表解析

for /f "tokens=1,2,3 delims=#" %%a in ("%ComInfoStr%") do (
  set ComNumExe=%%a
  set ComNameList=%%b
  set ComInfoList=%%c
)

11) 标签与子例程

call :check_and_kill 20010
goto :eof

:check_and_kill
REM ...实现...
exit /b 0

12) 临时 PATH 注入

SET WINDOWSPATH=%PATH%
SET PATH=%PSP_PATH%\Python38;%PATH%
...
SET PATH=%WINDOWSPATH%

13) 管道与条件执行

tasklist | find /i "RflySim3D.exe" || start %PSP_PATH%\RflySim3D\RflySim3D.exe

未找到进程则启动新实例。


典型脚本族与使用差异

RflySim 的 BAT 脚本通常围绕仿真模式、初始位姿、网络环境、三维引擎和工具链环境组织。除前文列出的参数外,可按下表快速区分常见脚本族。

脚本族 典型脚本 主要用途 常见差异
HITL 启动 HITLRun.batHITLPos.batHITLRunFw.bat 启动硬件在环仿真流程 连接真实飞控或外部 PX4 实例,常带串口、网口或位置初始化参数
SITL 启动 SITLRun.batSITLPos.batSITLRunFw.bat 启动软件在环仿真流程 自动启动 PX4 SITL,并按飞机编号分配 TCP/UDP 端口
位姿初始化 HITLPos.batSITLPos.batHITLPosAlt.batSITLPosAlt.bat 设置载具初始位置、姿态和高度 Pos 侧重位置,Alt 额外指定高度,Str 支持字符串形式批量配置
GPS 原点 HITLPosStrGPS.batSITLPosStrGPS.bat 设置 GPS 原点和多机初始位姿 常用于复现实地经纬度、群体起飞位置或跨地图场景
系统辨识 HITLRunSysID.batHITLPosSysID.batHITLPosSysIDStr.bat 启动适合模型辨识的数据采集仿真 通常固定地图、天气、载具初始状态和日志目录
网络扩展 HITLRunExtNet.batHITLRunPX4Net.batHITLRunLANSwarm.batSITLRunLANSwarm.bat 跨主机或局域网集群仿真 需要配置目标 IP、组播/单播策略和防火墙
无 GPS / MAVLink HITLRunMAVLinkNoGPS.batSITLRunMAVLinkNoGPS.bat 不依赖 GPS 的 MAVLink 控制或室内定位场景 适合外部定位、视觉定位、动捕输入
性能/界面 HITLRunLowGPU.batSITLRunLowGPU.batHITLRunNoUI.batSITLRunNoUI.bat 降低显卡占用或无界面运行 适合批量测试、服务器部署、远程自动化
ROS/UE5 HITLRunROS.batSITLRunROS.batHITLRunUE5.batSITLRunUE5.bat 启动 ROS 桥接或 UE5 场景 需要同步配置 ROS、WSL、UE5 工程路径

HITLRun 与 SITLRun 的选择

  • 有真实飞控或外部飞控硬件时使用 HITL。
  • 只在电脑中运行 PX4 与仿真器时使用 SITL。
  • 两类脚本的端口、进程和故障排查方式不同,不建议混用。

主程序启动顺序

典型启动脚本会按以下顺序组织主程序,实际顺序可根据是否使用 QGC、ROS、UE5 或分布式部署微调。

阶段 典型动作 说明
1 设置 PSP_PATHSTART_INDEXTOTOAL_COPTERSimMode 确定工具链路径、起始飞机编号、飞机总数和仿真模式
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 的端口列表,对应 COM3COM4COM5
验证端口 检查输入端口是否存在、是否重复、数量是否匹配

QGroundControl 启动顺序

多机或多端口仿真时,建议先启动 PX4/CopterSim 通信链路,再启动 QGroundControl。若 QGC 先占用 14550 或相关 TCP 端口,可能导致 CopterSim 或 MAVLink 转发链路连接失败。

多机位姿字符串

批量位置脚本常使用字符串描述多机初始位置:

set POS_STR=0,0,0;5,0,0;10,0,0
set YAW_STR=0;90;180

其中 ; 分隔不同载具,, 分隔单个载具的位置分量。脚本内部通常会用 for /f 或延迟变量展开解析字符串。

排查要点

  • 端口占用时先运行 UdpPortFree.bat 或手动检查 14550201003010040100 系列端口。
  • 多机脚本中 CopterID、PX4 实例编号、CopterSim 编号、RflySim3D 对象编号必须保持一致。
  • WSL 相关脚本需要确认发行版、PX4 路径、VcXsrv/图形转发和防火墙规则。
  • 批量启动时建议在 PX4、CopterSim、RflySim3D、QGroundControl 之间保留 1 到 3 秒延时。