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.1,1 等同于 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 工具,使用参数 3 和 BaudRate% 获取所有 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, ComNameList 和 ComInfoList 变量中。
- 工作原理: 使用 # 作为分隔符,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%
)
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%
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
使用第三方飞控开启硬件在环仿真
关键代码如下:
HITLRunMAVLinkNoGPS.bat
SET UDPSIMMODE=Mavlink_NoGPS
SITLRunMAVLinkNoGPS.bat
HITLRunPX4Net.bat
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 路径下。
SET PATH=%PSP_PATH%\Python38;%PSP_PATH%\Python38\Scripts
这行代码将 Python 3.8 和其脚本目录添加到系统环境变量 PATH 中,这样在运行 Python 脚本时可以找到相应的可执行文件。
最后,这行代码运行名为 cfclient.exe 的可执行文件,假设它位于当前目录或已添加到 PATH 中的某个目录。
StopBuild.bat
在 Windows 系统中检查并终止与 Windows Subsystem for Linux (WSL) 相关的进程。
tasklist|find /i "wsl.exe" && taskkill /f /im "wsl.exe"
这行代码执行以下操作:
- tasklist 列出当前正在运行的所有进程。
- 通过管道符号 (|),将 tasklist 的输出传递给 find 命令。
- find /i "wsl.exe" 在进程列表中查找不区分大小写的字符串 "wsl.exe"。
- 如果找到了 "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" 强制终止它。