![]() |
RflySimSDK v3.05
RflySimSDK说明文档
|
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参数名称 | 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) |
参数名称 | 参数值 | 解释 |
---|---|---|
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 |
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
首先限制最大仿真数量(这里默认限制为50台,可根据电脑硬件配置调整,也可修改UDP通信模式以支持更大数量的仿真);/P后输入集群的载具数量(根据这个数量会在之后启动对应的软件);然后根据最大仿真数量和输入的载具数量作出判断,判断通过则进行下一步,否则返回重新输入。
先计算集群的载具总数(为了更好的分配每个载具的ID);然后根据输入的载具数量,利用递归算法每生成一个载具就分配一个编号,并将结果存储在sqrtNum 变量中(便于之后定义每个载具的ID)。
启动/关闭一些软件应用程序,并且进行路径的设置。先分别设置路径,找到并启动QGC和RflySim3D应用程序,然后关闭正在运行的CopterSim(因为之后要对CopterSim进行参数配置),再设置CopterSim应用程序的路径
打开CopterSim模拟器并设置一些参数。先根据之前的初始ID、集群总数及UDP发送端口设置变量(计数器、循环终止条件),随后进入循环,计算每个载具所在的初始位置坐标(PosXX和PosYY),并使用start命令打开CopterSim程序,传递相应的参数(DLL文件、三维场景等)。choice命令会等待1秒钟,然后返回结果(确保启动前参数及时设置)。之后进行载具ID、端口的递归,满足终止条件后结束循环。
构建PX4飞控的固件并启动模拟器。先选择编译环境(默认为平台安装时选择的编译环境),随后进行广播的辨别(如果IS_BROADCAST未定义,则将其设为0),然后根据不同的编译环境设置路径并进行编译(包括传入载具数量,ID,记录飞行状态等)。
首先使用任务列表命令(tasklist)查找是否有名为“CopterSim.exe”、“QGroundControl.exe”和“RflySim3D.exe”的进程正在运行。如果找到了这些进程,则使用任务终止命令(taskkill)终止它们。最后在终端输出“Start End.”的文本。
HITLRun.bat一键脚本中的大部分与SITLRun.bat脚本相同,仅在端口设置(CopterSim中的对应参数设置也会改变)、软件启动顺序(QGC最后启动)和固件编译(硬件在环脚本中没有编译过程)上有所区别:
主要用于获取与 Pixhawk 控制器连接的串口信息,并提示用户输入 Pixhawk 的 COM 端口列表,其中,"%" 符号表示环境变量,在脚本运行时会根据实际情况替换成对应的值:
GetComList.exe
工具,使用参数 3
和 BaudRate%
获取所有 COM 端口的信息,并将其存储在 ComInfoStr
变量中。ComInfoStr
变量中的信息解析成三个部分,分别存储在 ComNumExe
, ComNameList
和 ComInfoList
变量中。#
作为分隔符,for /f
循环将 ComInfoStr
拆分为三部分并赋值给相应的变量。set remain=ComInfoList%
: 初始化 remain
变量,将所有 COM 端口信息存入其中。:loopInfo
标签和 for /f
循环用于逐个提取 remain
中的端口信息并显示出来。delims=;
指定 ;
作为分隔符,将每次提取的端口信息存入 %a
,剩余部分继续存入 remain
。if defined remain goto :loopInfo
: 如果 remain
变量中还有剩余内容,继续循环显示。目的:
根据 ComNumExe
变量的值判断是否存在可用的 COM 端口。
ComNumExe
等于 0,则表示没有可用的 COM 端口,输出警告信息。ComNameList
变量中的内容)。,
分隔每个端口号),并将其保存到 ComNum
变量中。目的
: 将用户输入的 COM 端口列表解析为单个端口,并逐个验证输入是否为整数。
SET string=ComNum%
: 将用户输入的 COM 端口列表存入 string
变量中。for /f
循环使用 ,
作为分隔符,从 string
中提取第一个端口并存入 subStr
。subStr
是否为整数。如果不是整数,输出错误信息并跳转到脚本末尾。会在CopterSim参数设置完成之后再打开QGC, 因为如果QGC 先打开,可能会占用硬件的端口号导致CopterSim 不能开始仿真。
常规硬件在环仿真脚本,支持输入串口序列(英文逗号","分隔),来启动多机的硬件在环仿真 注:REM打头的行是注释语句,不会被执行。其他的bat脚本语法规则可自行搜索学习。 注:本脚本的飞机位置是由脚本按矩形队列自动生成的,控制变量包括:
常规软件在环脚本,支持输入飞机数量,自动开启多机软件在环仿真 与HITLRun.bat相比,关键代码如下
开启硬件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角 注:输入的位置字符串,以英文逗号“,”分隔 关键代码如下:
开启软件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角 注:其余注意事项同上
开启硬件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上
开启软件在环仿真,支持输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上
开启硬件在环仿真,自动输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上
开启软件在环仿真,自动输入PosX、PosY和Yaw的值来初始化飞机位置偏航角(可初始化空中或水下) 注:其余注意事项同上
开启硬件在环仿真,PosX、PosY和Yaw的值以字符串的形式写在bat文件的PosXStr、PosYStr、YawStr变量中,不需要手动输入 注:使用时,需要手动去修改PosXStr、PosYStr、YawStr字符串的值,来设置生成飞机的位置和偏航 注:输入的位置字符串,以英文逗号“,”分隔 注:位置序列的数量可以大于插入飞控数量,会依次取前面的位置进行幅值,例如本例子位置字符串包含10组飞机初始位姿,因此支持仿真1到10个飞机的硬件在环仿真 关键代码如下:
开启软件在环仿真,PosX、PosY和Yaw的值以字符串的形式写在bat文件的PosXStr、PosYStr、YawStr变量中,不需要手动输入 注:其余注意事项同上
开启硬件在环仿真,但是CopterID不是自动增1排序,而是根据SysID的值(在QGroundControl中可配置)来自动确定 注:如果使用常规模式,CopterID是和电脑串口序列先后顺序绑定的,每次插拔飞控后串口号会变化,因此无法通过CopterID定位到确定的飞控硬件 注:使用本方法,CopterID可以直接和飞控硬件绑定,便于故障时快速确定飞控序号。 注:如果要再使用常规模式的HITLRun.bat脚本,建议将SysID改回默认值1 关键代码如下:
开启硬件在环仿真,通过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 关键代码如下:
开启硬件在环仿真,通过SysID自动确定CopterID取值(同HITLPosSysIDStr.bat),但初始位置序列是手动输入的
开启硬件在环仿真,使用全球GPS坐标初始化飞机位置 关键代码如下:
开启软件在环仿真,使用全球GPS坐标初始化飞机位置 关键代码如下:
使用第三方飞控开启硬件在环仿真
关键代码如下:
在 Windows 系统中运行 cfclient.exe
程序
这部分代码检查是否已经定义了环境变量 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
启动一个新的最小化命令提示符窗口,并执行当前批处理文件(%0
代表批处理文件自身)。:& exit
确保当前窗口在启动新窗口后立即退出。这行代码将当前目录切换到 RflySimAPIs\Python38Scripts
目录,该目录位于之前定义的 PSP_PATH
路径下。
/d
参数允许切换到一个不同的驱动器上的目录。这行代码将 Python 3.8 和其脚本目录添加到系统环境变量 PATH
中,这样在运行 Python 脚本时可以找到相应的可执行文件。
最后,这行代码运行名为 cfclient.exe
的可执行文件,假设它位于当前目录或已添加到 PATH
中的某个目录。
在 Windows 系统中检查并终止与 Windows Subsystem for Linux (WSL) 相关的进程。
这行代码执行以下操作:
tasklist
列出当前正在运行的所有进程。|
),将 tasklist
的输出传递给 find
命令。find /i "wsl.exe"
在进程列表中查找不区分大小写的字符串 "wsl.exe"。&&
后的命令 taskkill /f /im "wsl.exe"
将被执行。taskkill
命令强制(/f
)终止(杀掉)进程名为 "wsl.exe" 的所有实例。这行代码与上一行类似,但它检查并终止 "wslhost.exe" 进程。如果找到 "wslhost.exe" 进程,使用 taskkill /f /im "wslhost.exe"
强制终止它。
这行代码同样类似,但它检查并终止 "bash.exe" 进程。如果找到 "bash.exe" 进程,使用 taskkill /f /im "bash.exe"
强制终止它。