12306网站建设团队,wordpress实现付费浏览,有哪些程序网站,网站源码交易平台代码导读
一个开启多机软件在环仿真的批处理文件 (对应卓面RflyTools文件夹中SITLRun快捷方式)#xff0c;双击它#xff0c;输入想要生成的飞机数量#xff0c;即可生成多机软件在环仿真#xff0c;等待RflySim3D显示3DFixed 4/4#xff0c;然后可通过QGC控制飞机起飞。运行…导读
一个开启多机软件在环仿真的批处理文件 (对应卓面RflyTools文件夹中SITLRun快捷方式)双击它输入想要生成的飞机数量即可生成多机软件在环仿真等待RflySim3D显示3DFixed 4/4然后可通过QGC控制飞机起飞。运行完毕后在CMD命令窗口中按下任意键即可自动关闭所有程序。注: 该批处理文件本质上是通过脚本方式配置CopterSim软件选项可以用编辑器打开该文件查看并根据需求修改其中的启动参数。 平台使用篇 | 批处理(bat)脚本使用教程(四 仿真过程演示 01打开SITLRun.bat一键运行脚本
用“以管理员身份运行”打开可以提高RflySim平台的软件在系统中的优先级这样能够解决大部分如飞机抖动无法起飞等问题。
02运行脚本
在终端输入飞机数量会自动启用平台仿真软件其中RflySim3D、QGC各自打开一个窗口每个CopterSim窗口对应一架飞机窗口数等于输入飞机数量。此时所有参数已设置完成可以直接在QGC中对飞机进行起飞降落等操作仿真完成后在终端按任意键可以关闭所有软件结束仿真。
运行效果如图。 源码详解
此脚本是一个软件在环飞行仿真的 BAT 脚本分为CopterSim参数设置和主程序两部分。参数设置包括设置 RflySim 工具路径、开始机器编号、飞行器数量、UDP 端口号、使用 DLL 模型名称或数字索引、仿真模式、PX4 SITL 仿真载具模型、UE4 地图名称、起始位置和间隔、UDP 数据传输模式、广播 IP 地址等选项。主程序包含打开 QGroundControl 和 RflySim3D 等应用程序、编译 PX4 SITL、启动 CopterSim.exe 仿真多个无人机、关闭所有应用程序等功能。用户可以在脚本中根据需要修改各项参数来进行多台无人机的飞行仿真。 01
参数设置
REM The text start with REM is annotation, the following options are corresponding to Options on CopterSim REM Set the path of the RflySim tools
SET PSP_PATHC:\PX4PSP
SET PSP_PATH_LINUX/mnt/c/PX4PSP
C:
...省略中间部分代码
REM Set broadcast to other computer; IS_BROADCAST0: only this computer, IS_BROADCAST1: broadcast;
REM or use IP address to increase speed, e.g., IS_BROADCAST192.168.3.1
REM Note: in IP mode, IS_BROADCAST0 equals to IS_BROADCAST127.0.0.1, IS_BROADCAST1 equals to IS_BROADCAST255.255.255.255
REM You can also use a IP list with seperator , or ; to specify IPs to send, e.g., 127.0.0.1,192.168.1.4,192.168.1.5
SET IS_BROADCAST0 REM Set UDP data mode; 0: UDP_FULL, 1:UDP_Simple, 2: Mavlink_Full, 3: Mavlink_simple. input number or string
REM e.g., UDPSIMMODE1 equals to UDPSIMMODEUDP_Simple
SET UDPSIMMODE0
CopterSim界面中的参数设置(可参见上一讲均包含在SITL/HITL一键脚本内 · 设置RflySim工具的路径
SET PSP_PATHC:\PX4PSP SET PSP_PATH_LINUX/mnt/c/PX4PSP C: 所有的批处理文件里的路径设置都默认在 C 盘会生成一个 PX4PSP 的一个文件夹里面安装路径设为C盘 · 设置飞机起始的ID
SET /a START_INDEX1
这里起始ID为1 · 设置飞机起始的ID
SET /a START_INDEX1
这里起始ID为1 · 设置飞机起始UDP端口
SET /a UDP_START_PORT20100
一个飞机占两个端口 · DLL文件模型调用
set DLLModel0
是否使用DLL模型名称赋值0则CopterSim中无名称默认调用多旋翼模型。可以使用数字索引或名称字符串调用其他类型的载具而不仅仅是多旋翼。 SET /A DLLModelValDLLModel
if %DLLModelVal% NEQ %DLLModel% ( REM Copy the latest dll file to CopterSim folder copy /Y %~dp0\%DLLModel%.dll %PSP_PATH%\CopterSim\external\model\%DLLModel%.dll) 检查“DLLModel”参数是否为名称字符串如果是将相应的DLL文件复制到CopterSim文件夹中。运行效果如图。 02
主程序
:Top
ECHO.
ECHO ---------------------------------------
REM Max vehicle number 50
...省略中间部分代码
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.
主程序部分是提前编辑完成的不建议直接修改如有需要可改变之前的参数设置。 · 设置仿真数量
REM Max vehicle number 50
SET /a MAX_VEHICLE50
SET /P VehicleNumPlease input UAV swarm number:
SET /A EvaluatedVehicleNum
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 sqrtNum1
set /a squareNum1
: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 ToolChainType1 if %IS_BROADCAST% 0 ( SET IS_BROADCAST0
) else ( SET IS_BROADCAST1
) 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.”的文本。 硬件在环一件运行脚本
开启多机硬件在环仿真的批处理文件插入多个Pixhawk等飞控再双击该批处理文件根据提示输入想要参与仿真的Pixhawk串口号 (不同串口间逗号分隔)即可开启多机的硬件在环仿真 (以输入串口顺序进行飞机ID排序) 01
与SITLRun脚本的区别
HITLRun.bat一键脚本中的大部分与SITLRun.bat脚本相同仅在端口设置CopterSim中的对应参数设置也会改变、软件启动顺序QGC最后启动和固件编译硬件在环脚本中没有编译过程上有所区别 · 端口设置
ECHO.
ECHO ---------------------------------------
REM Get the Com port number
for /f delims %%t in (%PSP_PATH%\CopterSim\GetComList.exe 2) do set ComNumExe%%t REM Get the Com port list
for /f delims %%t in (%PSP_PATH%\CopterSim\GetComList.exe 0) do set ComNameList%%t REM Get the Com port info
for /f delims %%t in (%PSP_PATH%\CopterSim\GetComList.exe 1) do set ComInfoList%%t echo Please input the Pixhawk COM port list for HIL
echo Use , as the separator if more than one Pixhawk
echo E.g., input 3 for COM3 of Pixhawk on the computer
echo Input 3,6,7 for COM3, COM6 and COM7 of Pixhawks
echo.
set remain%ComInfoList% 获取计算机上可用的串口列表和信息并提示用户输入Pixhawk COM端口列表以便进行硬件在环仿真。 · 使用 GetComList.exe 获取当前计算机上可用的串口数量保存在变量 ComNumExe 中。 · 再次使用 GetComList.exe 获取当前计算机上所有可用的串口名称列表保存在变量 ComNameList 中。 · 第三次使用 GetComList.exe 获取当前计算机上所有可用串口的详细信息列表保存在变量 ComInfoList 中。 ·通过 echo 命令提示用户输入 Pixhawk 的 COM 端口列表告知用户如果有多个 Pixhawk 设备则需要使用逗号作为分隔符。效果如图。 在用户输入了 COM 端口列表后脚本会使用 for 循环语句遍历 ComInfoList 变量中的每一个串口信息输出该串口的详细信息包括串口名称、波特率、数据位、校验位等。 if %ComNumExe% EQU 0 ( echo Warning: there is no available COM port
) else ( echo Available COM ports on this computer are: :loopInfo for /f tokens1* delims; %%a in (%remain%) do ( echo %%a set remain%%b ) if defined remain goto :loopInfo echo. echo Recommended COM list input is: %ComNameList%
)
如果当前计算机没有可用的 COM 端口则输出提示信息否则输出所有可用的 COM 端口并且推荐使用的 COM 列表输入名称为 %ComNameList%的变量此判断目的在于区分电脑连接的其余硬件和飞控。 其中% 符号表示环境变量在脚本运行时会根据实际情况替换成对应的值。具体来说%ComNumExe% 表示可用的 COM 端口数量%remain% 是一个变量用于存储剩余的 COM 端口列表。脚本通过 for 循环和 set 命令依次取出每个 COM 端口名称并输出直到 remain 变量为空。 02
QGC启动 会在CopterSim参数设置完成之后再打开QGC, 因为如果QGC 先打开可能会占用硬件的端口号导致CopterSim 不能开始仿真。