RflySimSDK v3.05
RflySimSDK说明文档
载入中...
搜索中...
未找到
Bat脚本使用参考

RflySim基于批处理技术开发了众多批处理脚本,让用户可以快速一键启动部署多架、多种、多样无人系统组合式仿真。提高了无人系统开发和仿真速度。平台较常用的批处理脚本:① SITLRun.bat:是开启多机软件在环仿真的批处理文件,其本质上是通过脚本方式启动并配置RflySim工具链的部分软件和选项,② HITLRun.bat:是开启多机硬件在环仿真的批处理文件,插入多个飞控之后,再双击该批处理文件,根据提示输入想要参与仿真的Pixhawk串口号,即可开启多机的硬件在环仿真(以输入串口顺序进行飞机ID排序)。除此之外RflySim工具链还提供众多批处理脚本文件,如:SITLRunPos.bat、SITLRunLowGPU.bat、SITLRunMAVLink.bat、HITLRunPos.bat、HITLPosSysID.bat、HITLPosStr.bat等等,部分脚本文件见*\PX4PSP\RflySimAPIs\BatScripts。用户可通过编辑器打开这些文件,根据个人需求修改其中的参数,实现自定义开发,快速开始仿真或算法的验证。

仿真参数设置

CopterSim仿真功能区参数设置

绘图1
参数编号 CopterSim参数名称 BAT脚本参数名称 参数值 对应CopterSim参数值及含义
参数1 CopterID START_INDEX 自定义,应该设置为大于0的整数 设置飞机ID。这个选项在启用多机仿真时用于指定起始飞机的ID。
参数2 3DClassID CLASS_3D_ID 数字索引 设置在RflySim3D中显示的载具3D模型的类型或指定样式ID。三维样式参数可参考平台三维模型资源索引,如需使用自定义的三维样式,参考例程
-1 表示使用默认的3D模型。(通常由dll文件指定)
ClassID 指定载具构型(如四旋翼、固定翼),使用构型类下排在最前面的载具三维样式
Unique3DClassID 指定特定载具构型类下的特定排序三维载具样式
参数3 使用DLL模型文件 DLLModel 数字索引或名称字符串匹配 该参数用于选择不同的DLL文件,选项对应的文件夹地址为:*PX4PSP\CopterSim\external\model,dll模型序号按照命名排序
0 不使用dll文件,此时的动力学模型是在CopterSim的模型配置界面上搭建好的模型
从1开始的dll模型序号或名称 使用指定的dll模型
参数4 仿真模式 SimMode 数字索引或名称字符串匹配 用于选择不同的仿真模式
0 **PX4_HITL**:此模式为PX4官方硬件在环仿真模式。
1 **PX4_SITL**:此模式为PX4官方软在环仿真模式。
2 **PX4_SITL_RFLY**:此模式为RflySim工具链自定义的软件在环仿真模式,由于PX4_SITL仅支持10架无人机集群仿真,在本模式下可支持上百架无人机进行SITL仿真。
3 **Simulink&DLL_SIL**:Simulink中生成的DLL文件仿真模式。(对应综合模型)
4 **PX4_HITL_NET**(限完整版以上):对于Pixhawk 6x等带网口的飞控,支持通过局域网连接飞控实现硬件在环仿真。
5 **EXT_HITL_COM**(限完整版以上):串口方式连接第三方飞控。
6 **EXT_SIM_NET**(限完整版以上): 网络方式连接第三方飞控。
7 **APM_SITL_COM**(限完整版以上):支持连接APM飞控(Ardupilot)进行SITL软件在环仿真,NET表示CopterSim与飞控通过网络连接。
8 **PX4_SIH_COM**(限完整版以上):支持飞控SIH模式(模型运行在飞控中,降低电脑运算量提升稳定性),COM表示通过USB线连接飞控。
9 **PX4_SIH_NET**(限完整版以上):支持飞控SIH模式(模型运行在飞控中,降低电脑运算量提升稳定性),NET表示通过局域网连接飞控。
10 **PX4_SIH_SITL**(限完整版以上):PX4_SIH仿真模式软件在环仿真
11 **PX4_SIH_FLY**(限完整版以上):PX4_SIH仿真模式,硬件在环仿真
参数5 三维显示地图 UE4_MAP 数字索引或名称字符串匹配 该参数用于选择不同的三维场景,选项对应的文件夹地址为:*PX4PSP\CopterSim\external\map,三维场景序号按照命名排序,若需使用自定的三维地图,参考例程
从0开始的三维地图序号或名称 使用指定的三维地图
参数6 联机 IS_BROADCAST 数字标识或IP地址 开启局域网内联机仿真。注:启用联机模式,同时在RflySim3D/RflySimUE5中按下I键(限完整版),就能开启局域网联机仿真,支持多台电脑组网显示所有飞机。
0 仅本机
1 广播
IP地址 指定发送到特定IP地址,在IP模式下,0 等同于 127.0.0.11 等同于 255.255.255.255
使用逗号分隔的IP地址列表 指定发送到多个IP
参数7 GPS坐标(限完整版) isPosGps 数字标识 用于选择不同的坐标初始化模式
0 默认模式,选择直角坐标系
1 启用GPS模式,选择LLA坐标系
参数8 起点位置 ORIGIN_POS_X 自定义整数 地图初始X位置,单位m
ORIGIN_POS_Y 自定义整数 地图初始Y位置,单位m
起点位置(LLA坐标系,限完整版) LatLongAlt 自定义三维浮点数列,用逗号分隔 三维数列依次为经度、纬度、海拔高度
参数9 偏航 ORIGIN_YAW 自定义整数 地图初始yaw角度,设置地图中的初始航向角,单位是度数(degree)。航向角是指在水平面上,相对于北方的方向角。
参数10 飞控选择 启动bat脚本后命令行输入 输入推荐的端口号 选择飞控连接的电脑COM口
参数11 波特率 BaudRate 标准波特率取值,默认为921600 波特率是指每秒钟传输的位数(bits per second, bps),通常用于串行通信中。在选择波特率时,需要确保所有通信设备支持相同的波特率,以确保数据传输的可靠性。
参数12 通信模式 UDPSIMMODE 数字索引 选择不同的MavLink消息通信模式
0 **UDP_Full**:数据最全,Python传输完整的UDP数据给CopterSim,传输数据量较大;CopterSim收到数据后,再转换为Mavlink后传输给PX4飞控;适合中小规模集群(数量小于10)仿真。
1 **UDP_Simple**:数据包大小与发送频率比UDP_Full模式小;适合大规模集群仿真,无人机数量小于100。
2 **Mavlink_Full**:Python直接发送MAVLink消息给CopterSim,再转发给PX4,数据量较大适合单机控制;适合单机或少量飞机仿真,无人机数量小于4;
3 **Mavlink_Simple**:屏蔽部分MAVLink消息包,并降低数据频率,发送数据量比MAVLink_Full小很多,适合多机集群控制;适合小规模集群仿真,无人机数量小于8。
4 **Mavlink_NoSend**:模式下CopterSim不会向外发送MAVLink数据,此模式需要配合硬件在环仿真+数传串口通信,通过有线方式传输MAVLink,此模式局域网内数据量最小,适合分布式视觉硬件在环仿真,无人机数量不限制
5 **Mavlink_NoGPS**:模式下CopterSim不会向外发送MAVLink数据和GPS数据。可以外部发送HIL_GPS数据去提供定位,或者修改EKF2_AID_MASK等参数修改 并配合视觉定位mavlink数据来进行室内定位。注:这种模式适合飞控SLAM仿真时,视觉感知算法需要视觉定位的mavlink消息发给飞控,形成无GPS环境下的视觉控制算法验证。
6 **Mavlink_Vision**:在Mavlink_NoGPS基础上,增加自动发送EKF2_AID_MASK等参数功能(匹配SLAM仿真需求),适合无GPS情况下的SLAM仿真。
7 **Redis_Full**(限完整版):传输完整的Redis数据给CopterSim
8 **Redis_Simple(限完整版)**:数据包大小与发送频率比Redis_Full模式小

其它关键参数

机架设置

参数名称 参数值 解释
PX4SitlFrame 机架名称 设置PX4飞控的机架模式,对应了相应的混控器,Firmware\ROMFS\px4fmu_common\init.d-posix 中查看支持的机架文件,也可以在该文件夹中创建自己的机架文件。

集群设置

参数名称 参数值 解释
TOTOAL_COPTER 自定义整数 设置载具总数
IsSysID 数字标识 是否自动根据 Pixhawk飞控的系统 ID(SysID)来确定载具的 ID(CopterID)
0 未根据飞控系统 ID 确定CopterID。
1 根据飞控系统 ID 确定CopterID。
VEHICLE_INTERVAL 自定义整数 设置两个载具之间的间隔距离,单位为米 (m)

GPS原点模式设置

参数名称 参数值 解释
isBatLLAOrin 数字标识 是否通过BAT脚本设置地图GPS原点
0 使用dll模型或地形校准文件默认的GPS原点
1 使用bat脚本设置地图GPS原点

载具初始位姿设置

参数名称 参数值 解释
PosXStr 命令行输入或自定义浮点数列 isPosGps=0时:载具x 位置列表;isPosGps=1时:载具lat位置列表
PosYStr 命令行输入或自定义浮点数列 isPosGps=0时:载具y位置列表;isPosGps=1时:载具lon位置列表
YawStr 命令行输入或自定义浮点数列 载具偏航角列表,单位deg

RflySim3D初始化启动配置

BAT脚本配置快捷键

-key=S(快捷键1),N1(快捷键2)

cd PSP PATH% RflySimUE5tasklist|find /i "RflySim3D.exe" start PSPPATH%\RflySimUE5\RflySim3D.exe -key=S,N1

BAT脚本配置控制台命令

-cmd=RflyChangeMapbyName(命令1)-LowGPU(参数),RflyChangeMapbyID(命令2)-15(参数)

tasklist|find /i "RflySim3D.exe" || 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台,可根据电脑硬件配置调整,也可修改UDP通信模式以支持更大数量的仿真);/P后输入集群的载具数量(根据这个数量会在之后启动对应的软件);然后根据最大仿真数量和输入的载具数量作出判断,判断通过则进行下一步,否则返回重新输入。

开始仿真

: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

先计算集群的载具总数(为了更好的分配每个载具的ID);然后根据输入的载具数量,利用递归算法每生成一个载具就分配一个编号,并将结果存储在sqrtNum 变量中(便于之后定义每个载具的ID)。

REM QGCPath
tasklist|find /i "QGroundControl.exe" || start %PSP_PATH%\QGroundControl\QGroundControl.exe
ECHO Start QGroundControl
REM UE4Path
cd %PSP_PATH%\RflySim3D
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"
ECHO Kill all CopterSims
REM CptSmPath
cd %PSP_PATH%\CopterSim

启动/关闭一些软件应用程序,并且进行路径的设置。先分别设置路径,找到并启动QGC和RflySim3D应用程序,然后关闭正在运行的CopterSim(因为之后要对CopterSim进行参数配置),再设置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模拟器并设置一些参数。先根据之前的初始ID、集群总数及UDP发送端口设置变量(计数器、循环终止条件),随后进入循环,计算每个载具所在的初始位置坐标(PosXX和PosYY),并使用start命令打开CopterSim程序,传递相应的参数(DLL文件、三维场景等)。choice命令会等待1秒钟,然后返回结果(确保启动前参数及时设置)。之后进行载具ID、端口的递归,满足终止条件后结束循环。

REM Set ToolChainType 1:Win10WSL 3:Cygwin
SET /a ToolChainType=1
if "%IS_BROADCAST%" == "0" (
SET IS_BROADCAST=0
) else (
SET IS_BROADCAST=1
)
SET WINDOWSPATH=%PATH%
if %ToolChainType% EQU 1 (
wsl echo Starting PX4 Build; cd %PSP_PATH_LINUX%/Firmware; ./BkFile/EnvOri.sh; export PATH=$HOME/ninja:$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:$PATH;make px4_sitl_default; ./Tools/sitl_multiple_run_rfly.sh %VehicleNum% %START_INDEX% %PX4SitlFrame%;echo Press any key to exit; read -n 1
) else (
REM CYGPath
cd %PSP_PATH%\CygwinToolchain
CALL setPX4Env.bat
bash -l -i -c 'echo Starting SITL SIMULATION; cd %PSP_PATH_LINUX%/Firmware; ./BkFile/EnvOri.sh; pwd; make px4_sitl_default; ./Tools/sitl_multiple_run_rfly.sh %VehicleNum% %START_INDEX% %PX4SitlFrame%;echo Press any key to exit; read -n 1; pkill -x px4 || true;'
)
SET PATH=%WINDOWSPATH%

构建PX4飞控的固件并启动模拟器。先选择编译环境(默认为平台安装时选择的编译环境),随后进行广播的辨别(如果IS_BROADCAST未定义,则将其设为0),然后根据不同的编译环境设置路径并进行编译(包括传入载具数量,ID,记录飞行状态等)。

结束仿真

REM kill all applications when press a key
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.

首先使用任务列表命令(tasklist)查找是否有名为“CopterSim.exe”、“QGroundControl.exe”和“RflySim3D.exe”的进程正在运行。如果找到了这些进程,则使用任务终止命令(taskkill)终止它们。最后在终端输出“Start End.”的文本。

HITLRun与SITLRun脚本的区别

HITLRun.bat一键脚本中的大部分与SITLRun.bat脚本相同,仅在端口设置(CopterSim中的对应参数设置也会改变)、软件启动顺序(QGC最后启动)和固件编译(硬件在环脚本中没有编译过程)上有所区别:

端口设置

主要用于获取与 Pixhawk 控制器连接的串口信息,并提示用户输入 Pixhawk 的 COM 端口列表,其中,"%" 符号表示环境变量,在脚本运行时会根据实际情况替换成对应的值:

1. 获取 COM 端口信息字符串

REM Get the Com port number
for /f "delims=" %%t in ('%PSP_PATH%\CopterSim\GetComList.exe 3 %BaudRate%') do set ComInfoStr=%%t
  • 目的: 运行 GetComList.exe 工具,使用参数 3BaudRate% 获取所有 COM 端口的信息,并将其存储在 ComInfoStr 变量中。

2. 解析 COM 端口信息字符串

for /f "tokens=1,2,3 delims=#" %%a in ("%ComInfoStr%") do (
set ComNumExe=%%a
set ComNameList=%%b
set ComInfoList=%%c
)
  • 目的: 将 ComInfoStr 变量中的信息解析成三个部分,分别存储在 ComNumExe, ComNameListComInfoList 变量中。
  • 工作原理: 使用 # 作为分隔符,for /f 循环将 ComInfoStr 拆分为三部分并赋值给相应的变量。

3. 显示所有可用的 COM 端口

bat复制代码set remain=%ComInfoList%
echo All COM ports on this computer are:
echo.
:loopInfo
for /f "tokens=1* delims=;" %%a in ("%remain%") do (
echo %%a
set remain=%%b
)
if defined remain goto :loopInfo
echo.
ECHO ---------------------------------------
  • 目的: 显示当前计算机上的所有 COM 端口。
  • 工作原理:
    • set remain=ComInfoList%: 初始化 remain 变量,将所有 COM 端口信息存入其中。
    • :loopInfo 标签和 for /f 循环用于逐个提取 remain 中的端口信息并显示出来。
    • delims=; 指定 ; 作为分隔符,将每次提取的端口信息存入 %a,剩余部分继续存入 remain
    • if defined remain goto :loopInfo: 如果 remain 变量中还有剩余内容,继续循环显示。

4. 检查 COM 端口数量并输出推荐的端口列表

bat复制代码if %ComNumExe% EQU 0 (
echo Warning: there is no available COM port
) else (
echo Recommended COM list input is: %ComNameList%
)
  • 目的:

    根据 ComNumExe变量的值判断是否存在可用的 COM 端口。

    • 如果 ComNumExe 等于 0,则表示没有可用的 COM 端口,输出警告信息。
    • 否则,输出推荐的 COM 端口列表(ComNameList 变量中的内容)。

5. 提示用户输入用于 HITL 仿真的 COM 端口列表

bat复制代码ECHO.
ECHO ---------------------------------------
SET /P ComNum=My COM list for HITL simulation is:
  • 目的: 提示用户输入用于硬件在环 (HITL) 仿真的 COM 端口列表(如果有多个 Pixhawk,用户需要使用逗号 , 分隔每个端口号),并将其保存到 ComNum 变量中。
image-20240812101009313

6. 解析并验证用户输入的 COM 端口列表

bat复制代码SET string=%ComNum%
set subStr = ""
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
REM echo total com number is %VehicleNum%
  • 目的

    : 将用户输入的 COM 端口列表解析为单个端口,并逐个验证输入是否为整数。

    • SET string=ComNum%: 将用户输入的 COM 端口列表存入 string 变量中。
    • for /f 循环使用 , 作为分隔符,从 string 中提取第一个端口并存入 subStr
    • 验证 subStr 是否为整数。如果不是整数,输出错误信息并跳转到脚本末尾。
    • 如果有多个端口,继续循环解析,直到处理完所有端口。

QGC启动顺序

REM CptSmPath
cd /d %PSP_PATH%\CopterSim
set /a cntr = %START_INDEX%
set /a endNum = %VehicleTotalNum% +1
SET string=%ComNum%
:split1
for /f "tokens=1,* delims=," %%i in ("%string%") do (
set subStr=%%i
set string=%%j
)
set /a PosXX=((%cntr%-1) / %sqrtNum%)*%VEHICLE_INTERVAL% + %ORIGIN_POS_X%
set /a PosYY=((%cntr%-1) %% %sqrtNum%)*%VEHICLE_INTERVAL% + %ORIGIN_POS_Y%
REM echo start CopterSim
start /realtime CopterSim.exe 1 %cntr% %CLASS_3D_ID% %DLLModel% %SimMode% %UE4_MAP% %IS_BROADCAST% %PosXX% %PosYY% %ORIGIN_YAW% %subStr%:%BaudRate% %UDPSIMMODE% %IsSysID%
choice /t 2 /d y /n >nul
set /a cntr=%cntr%+1
REM TIMEOUT /T 1
if not "%string%"=="" goto split1
REM QGCPath
tasklist|find /i "QGroundControl.exe" || start %PSP_PATH%\QGroundControl\QGroundControl.exe -noComPix
ECHO Start QGroundControl

会在CopterSim参数设置完成之后再打开QGC, 因为如果QGC 先打开,可能会占用硬件的端口号导致CopterSim 不能开始仿真。

BAT脚本示例

HITLRun.bat

常规硬件在环仿真脚本,支持输入串口序列(英文逗号","分隔),来启动多机的硬件在环仿真 注:REM打头的行是注释语句,不会被执行。其他的bat脚本语法规则可自行搜索学习。 注:本脚本的飞机位置是由脚本按矩形队列自动生成的,控制变量包括:

REM Run script as administrator(管理员方式运行,能够确保CopterSim以实时优先级运行,跑起来更可靠。)
SET /a START_INDEX=1(初始飞机序号,本脚本生成的飞机的CopterID,以此START_INDEX为初始值,依次递增1)
SET /a TOTOAL_COPTER=8 (总飞机数量,仅在多机联机仿真才需要幅值,告诉本脚本实际的飞机总数,以此来确定矩形队列的边长)
SET UE4_MAP=Grasslands (设置地图名字)
SET /a ORIGIN_POS_X=0 (矩形编队的原点X位置,单位米,只支持整数输入)
SET /a ORIGIN_POS_Y=0 (矩形编队的原点Y位置,单位米,只支持整数输入)
SET /a ORIGIN_YAW=0 (矩形编队的原点yaw角度,单位度,只支持整数输入)
SET /a VEHICLE_INTERVAL=2 (矩形编队的飞机间隔,单位米,只支持整数输入)SET /a CLASS_3D_ID=-1(重定义飞机的样式ID,默认-1将使用DLL模型或内置三维样式,如果>0,则重定义为设定样式)
SET /A DLLModelVal=DLLModel (是否使用DLL模型,DLL模型的名字。这里支持将Simulink的飞行器模型生成DLL来导入平台,此模式支持固定翼、无人车等模型)
SimMode (仿真模式,这里设置为0或PX4_HITL,表示硬件在环仿真)
SET IS_BROADCAST=0 (是否联机仿真,这里可输入目标IP地址序列)
SET UDPSIMMODE=0 (UDP模式传输的是平台私有结构体,支持Simulink控制;MAVLink模式传输的是MAVLink协议,支持Python和mavros等控制模式)

SITLRun.bat

常规软件在环脚本,支持输入飞机数量,自动开启多机软件在环仿真 与HITLRun.bat相比,关键代码如下

set SimMode=2 (这里设置为软件在环模式,对应CopterSimUI的值)
set PX4SitlFrame=iris (这里对应了PX4飞控的机架模式,这里是一个四旋翼)

HITLPos.bat

开启硬件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角 注:输入的位置字符串,以英文逗号“,”分隔 关键代码如下:

SET /P PosXStr=Please enter the PosX (m) list: (输入X的初始位置序列,单位米,可以为浮点数)
SET /P PosYStr=Please enter the PosY (m) list: (输入Y的初始位置序列,单位米,可以为浮点数)
SET /P YawStr=Please enter the Yaw (degree) list:(输入偏航的初始值序列,单位度,可以为浮点数)

SITLPos.bat

开启软件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角 注:其余注意事项同上

HITLPosAlt.bat

开启硬件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上

SITLPosAlt.bat

开启软件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上

HITLPosAltStr.bat

开启硬件在环仿真,自动输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上

SITLPosAltStr.bat

开启软件在环仿真,自动输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上

HITLPosStr.bat

开启硬件在环仿真,PosX、PosY和Yaw的值以字符串的形式写在bat文件的PosXStr、PosYStr、YawStr变量中,不需要手动输入 注:使用时,需要手动去修改PosXStr、PosYStr、YawStr字符串的值,来设置生成飞机的位置和偏航 注:输入的位置字符串,以英文逗号“,”分隔 注:位置序列的数量可以大于插入飞控数量,会依次取前面的位置进行幅值,例如本例子位置字符串包含10组飞机初始位姿,因此支持仿真1到10个飞机的硬件在环仿真 关键代码如下:

SET PosXStr=1,2,3,4,5,6,7,8,9,10 (X的初始位置序列,单位米,可以为浮点数)
SET PosYStr=0,0,0,0,0,0,0,0,0,0(Y的初始位置序列,单位米,可以为浮点数)
SET YawStr=0,0,0,0,0,0,0,0,0,0(偏航的初始值序列,单位度,可以为浮点数)

SITLPosStr.bat

开启软件在环仿真,PosX、PosY和Yaw的值以字符串的形式写在bat文件的PosXStr、PosYStr、YawStr变量中,不需要手动输入 注:其余注意事项同上

HITLRunSysID.bat

开启硬件在环仿真,但是CopterID不是自动增1排序,而是根据SysID的值(在QGroundControl中可配置)来自动确定 注:如果使用常规模式,CopterID是和电脑串口序列先后顺序绑定的,每次插拔飞控后串口号会变化,因此无法通过CopterID定位到确定的飞控硬件 注:使用本方法,CopterID可以直接和飞控硬件绑定,便于故障时快速确定飞控序号。 注:如果要再使用常规模式的HITLRun.bat脚本,建议将SysID改回默认值1 关键代码如下:

SET /a IsSysID=1 (开启通过SysID自动计算CopterID的功能)

HITLPosSysIDStr.bat

开启硬件在环仿真,通过SysID自动确定CopterID取值,且支持配置初始位置序列 注:本脚本会以SysID - START_INDEX的值,去索引PosXStr、PosYStr、YawStr列表来确定最终位置 注:例如SysID为15,START_INDEX为11,PosXStr=1,2,3,4,5,6,7,8,9,10,则飞机最终的x取值应该是PosXStr的第4位(从0开始数),也就是PosX=5 关键代码如下:

SET /a IsSysID=1 (开启通过SysID自动计算CopterID的功能)
SET /a START_INDEX=1 (位置列表的初始飞机的值)
SET PosXStr=1,2,3,4,5,6,7,8,9,10 (X的初始位置序列,单位米,可以为浮点数)
SET PosYStr=0,0,0,0,0,0,0,0,0,0(Y的初始位置序列,单位米,可以为浮点数)
SET YawStr=0,0,0,0,0,0,0,0,0,0(偏航的初始值序列,单位度,可以为浮点数)

HITLPosSysID.bat

开启硬件在环仿真,通过SysID自动确定CopterID取值(同HITLPosSysIDStr.bat),但初始位置序列是手动输入的

HITLPosStrGPS.bat

开启硬件在环仿真,使用全球GPS坐标初始化飞机位置 关键代码如下:

SET isPosGps=1(如果isPosGps设为1,则PosXStr和PosYStr可使用纬度和精度格式(单位度)输入;如果无isPosGps或设为0,则使用xy的北东地(单位米)的格式输入初始位置。)
SET isBatLLAOrin=1(如果isBatLLAOrin设置为1,且LatLongAlt设定了经纬高的值,则会使用LatLongAlt的经纬高作为北东地坐标系下,GPS坐标原点。反之,使用模型内部GPS设定值,或者png+txt地形文件中指定的值。)
注:本功能仅支持完整版及以上,免费版无法配置GPS初始位置。

SITLPosStrGPS.bat

开启软件在环仿真,使用全球GPS坐标初始化飞机位置 关键代码如下:

SET isPosGps=1(如果isPosGps设为1,则PosXStr和PosYStr可使用纬度和精度格式(单位度)输入;如果无isPosGps或设为0,则使用xy的北东地(单位米)的格式输入初始位置。)
SET isBatLLAOrin=1(如果isBatLLAOrin设置为1,且LatLongAlt设定了经纬高的值,则会使用LatLongAlt的经纬高作为北东地坐标系下,GPS坐标原点。反之,使用模型内部GPS设定值,或者png+txt地形文件中指定的值。)
注:本功能仅支持完整版及以上,免费版无法配置GPS初始位置。

HITLRunExtNet.bat

使用第三方飞控开启硬件在环仿真

关键代码如下:

set SimMode=EXT_SIM_NET

HITLRunMAVLinkNoGPS.bat

SET UDPSIMMODE=Mavlink_NoGPS

SITLRunMAVLinkNoGPS.bat

HITLRunPX4Net.bat

set SimMode=PX4_HITL_NET

SITLPosStrSel.bat

StartCFclient.bat

在 Windows 系统中运行 cfclient.exe 程序

if not defined PSP_PATH (
SET PSP_PATH=C:\PX4PSP
SET PSP_PATH_LINUX=/mnt/c/PX4PSP
)

这部分代码检查是否已经定义了环境变量 PSP_PATH。如果没有定义,则设置两个环境变量:

  • PSP_PATH 设置为 C:\PX4PSP,这是在 Windows 系统中的路径。
  • PSP_PATH_LINUX 设置为 /mnt/c/PX4PSP,这是在 WSL(Windows Subsystem for Linux)中的路径。
%1(start /min cmd.exe /c %0 :& exit )

这行代码有点复杂,实际上它是用来确保脚本在一个最小化的命令提示符窗口中运行。具体来说:

  • %1 代表批处理文件的第一个命令行参数。如果没有参数,这部分会被忽略。
  • start /min cmd.exe /c %0 启动一个新的最小化命令提示符窗口,并执行当前批处理文件(%0 代表批处理文件自身)。
  • :& exit 确保当前窗口在启动新窗口后立即退出。
cd /d %PSP_PATH%\RflySimAPIs\Python38Scripts

这行代码将当前目录切换到 RflySimAPIs\Python38Scripts 目录,该目录位于之前定义的 PSP_PATH 路径下。

  • /d 参数允许切换到一个不同的驱动器上的目录。
SET PATH=%PSP_PATH%\Python38;%PSP_PATH%\Python38\Scripts

这行代码将 Python 3.8 和其脚本目录添加到系统环境变量 PATH 中,这样在运行 Python 脚本时可以找到相应的可执行文件。

cfclient.exe

最后,这行代码运行名为 cfclient.exe 的可执行文件,假设它位于当前目录或已添加到 PATH 中的某个目录。

StopBuild.bat

在 Windows 系统中检查并终止与 Windows Subsystem for Linux (WSL) 相关的进程。

tasklist|find /i "wsl.exe" && taskkill /f /im "wsl.exe"

这行代码执行以下操作:

  1. tasklist 列出当前正在运行的所有进程。
  2. 通过管道符号 (|),将 tasklist 的输出传递给 find 命令。
  3. find /i "wsl.exe" 在进程列表中查找不区分大小写的字符串 "wsl.exe"。
  4. 如果找到了 "wsl.exe" 进程,&& 后的命令 taskkill /f /im "wsl.exe" 将被执行。taskkill 命令强制(/f)终止(杀掉)进程名为 "wsl.exe" 的所有实例。
tasklist|find /i "wslhost.exe" && taskkill /f /im "wslhost.exe"

这行代码与上一行类似,但它检查并终止 "wslhost.exe" 进程。如果找到 "wslhost.exe" 进程,使用 taskkill /f /im "wslhost.exe" 强制终止它。

tasklist|find /i "bash.exe" && taskkill /f /im "bash.exe"

这行代码同样类似,但它检查并终止 "bash.exe" 进程。如果找到 "bash.exe" 进程,使用 taskkill /f /im "bash.exe" 强制终止它。