7.1 平台构架与使用
本讲的例程源码路径:
RflySimAPIs\SimulinkSwarmAPI
RflySimAPIs\PythonSwarmAPI
本讲PPT公益课视频B站地址:https://www.bilibili.com/video/BV1mu411k7Tw
7.1.1 集群例程文件夹介绍
- 本讲课程的集群控制例程都存放在
“RflySimAPIs\SimulinkSwarmAPI”
和“PythonSwarmAPI”
路径下,里面的集群控制算法主要通过Simulink实现,同时也提供了Python
接口 - 例程中包含了多机碰撞
CollisionDemo
、数据分析DataAnalysis
、Python
集群控制、自动飞控重启、Simulink
集群控制、集群编队等例子
7.1.2 集群通信构架介绍
- RflySim通信构架如右图所示,其中集群控制模块主要使用了CopterSim进行压缩中转机制
- 真机使用的MAVLink通信的数据量过于庞大,不适合在大规模集群时在通信网络中直接传输,因此需要对MAVLink数据进行压缩中转
- Python或Simulink集群控制器接收飞控状态数据并发送Offboard指令(速度、位置、加速度等顶层控制)来控制飞机完成指定飞行任务
- 多个CopterSim+飞控组合会同时向局域网内的三维引擎、集群控制、视觉控制模块发送数据,从而实现集群通信仿真。
7.1.3 RflySim集群系统分布式构架(仅支持高级完整版)
- 每个APP都是独立进程,可在局域网电脑中多开
- 插入多个飞控可以进行多机的集群仿真
- 内部组网模拟实际硬件数传组网
7.1.4 集群控制通信优化
- 随着飞机数量的增加,网络通信负载越来越大,为了在有限带宽下实现更多数量的无人机集群仿真,需要对通信进行优化
- 目前平台的数据协议主要有两种:
MAVLink
数据(包含大量无关数据,且数据包非常大,不适合集群)和UDP
压缩结构体(仅包含需要信息,且数据包小,适合集群) - 目前平台的通信优化方式也有两种:
Full
模式,包含尽量多的数据、以尽量高频率发送来保证完整性(适合飞机≤8);Simple
模式,仅包含必需数据、降低发送频率来保证大规模集群下的通信实时性和流畅性(适合飞机数量>4) - 两者组合起来有:
UDP_Full
、UDP_Simple
、MAVLink_Full
、MAVLink_Simple
四种模式;此外,MAVLink
通信针对多电脑视觉硬件在环仿真优化,还增加一种MAVLink_NoSend
协议 CopterSim
中UDP
数据模式配置框Simulink
集群控制接口中UDP
数据模式配置框bat
集群控制启动脚本中UDP
数据模式配置框(对应CopterSim
选项)Python
集群控制器中UDP
数据模式配置框
7.1.5 集群软件在环仿真测试
- 双击运行
“RflySimAPIs\SITLRun.bat”
(或桌面同名快捷方式),在弹出命令提示符中输入“4”,点击回车键,就能快速开启4个飞机的集群仿真系统 - 自动打开的软件包括4个
CopterSim
(每个飞机对应一个)、1个RflySim3D
(会同时显示所有飞机)、1个QGC
地面站(同时显示并控制所有飞机)和1个命令提示符窗口(调用Win10WSL
编译器开启4个PX4 SITL
控制器,每个控制器的log
和参数可以访问Firmware\build\px4_sitl_default\\instance_*
)注:在此页面按下回车(或任意键)即可关闭所有打开的仿真程序窗口
7.1.6 集群软件在环仿真结果
- 如下图显示,
Windows
任务栏上可以看到所有打开的程序 - 如下图所示,依次切换各个飞机(Vehicle 1~4),并依次点击“起飞”按钮,然后点“滑动来确认”,即可控制4个飞机依次起飞
- 起飞后再在
RflySim3D
中按下“S”键可显示各飞机ID(按“T”键显示轨迹),效果如下RflySim
: 如何快速启动多无人机集群的软件在环仿真
本视频观看地址:
优酷:https://v.youku.com/v\_show/id\_XNDcwNjA4MzA0NA==.html
YouTube:https://youtu.be/88dGpErxPJ8
7.1.7 集群硬件在环仿真
- 如下图所示,将所有
Pixhawk
飞控插入电脑(请提前配置还原好Pixhawk
固件,并设置进入HITL
模式) - 双击运行
“RflySimAPIs\HITLRun.bat”
(或桌面同名快捷方式),在下图所示弹出窗口中根据提示输入飞控串口号(英文逗号隔开),点击回车键,就能快速开启多个飞机的集群仿真系统 以上两个图对应了连接5个飞控进行硬件在环仿真的情形,运行结果和
SITL
相同RflySim
: 如何快速启动多机的硬件在环编队仿真,本视频观看地址:
优酷:https://v.youku.com/v\_show/id\_XNDcwNjA3OTQ0MA==.html
YouTube:https://youtu.be/oZ\_-yhEgebA
7.1.8 集群bat一键脚本修改
START_INDEX
:起始飞机序号,如果这里设为1,同时SITL
输入飞机数量4(或HITL
输入4个串口号),那么创建飞机序号为1到4;如果START_INDEX
设为5,那么就是5到8号飞机TOTOAL_COPTER
:非必需参数,多电脑分布式组网仿真才时需要用到,描述局域网内所有飞机数量(限高级完整版);用于根据给定初始位置和间隔,以矩形方式自动排列飞机UE4_MAP
:RflySim3D
地图名称,请去目录PX4PSP\CopterSim\external\map
选择地图名字ORIGIN_***
:飞机在地图上的初始位置和偏航VEHICLE_INTERVAL
:多机时排列间隔(米)IS_BROADCAST
:是否启用多台电脑联机仿真,或指定联机电脑IP地址列表(限高级完整版)UDPSIMMODE
:通信数据收发模式注:复制一个bat
脚本(例如RflySimAPIs\SITLRun.bat
),然后在此基础上修改上述参数,使满足仿真需求。
7.1.9 集群bat脚本修改示例
- 需求1:
SITLRun
脚本自动设置飞机数量(例如4),不用手动输入。删除从“:Top”到“:StartSim”代码,并添加行“SET VehicleNum=4”
即可。请参考RflySimAPIs\SimulinkSwarmAPI\SimulinkDemo\RflyUdpFullFour.bat
- 需求2:两台电脑仿真20个飞机(限完整版)。需要两个
bat
脚本,IS_BROADCAST
设为1,启用联机功能;第一个bat
脚本START_INDEX=1
和TOTOAL_COPTER=20
,运行SITL
脚本时输入10,第二个bat
脚本START_INDEX=11
和TOTOAL_COPTER=20
,输入10。再选择合适的地图、起始位置和飞机间隔即可。 - 需求3:改变地图名称。直接修改
UE4_MAP
为需要地图即可。 - 需求4:手动指定每个飞机位置。请参考
RflySimAPIs
目录下的HITLRunPos.bat
和SITLRunPos.bat
快捷方式,支持手动指定每个飞机的x坐标序列、y坐标序列和偏航角序列,飞机数量根据输入序列自动确定。 - 需求5:其他机型的集群仿真。请结合第4讲内容,修改
DLLModel
(飞机DLL模型名称)和PX4SitlFrame
(SITL
时的飞机机架,如果是HITL
仿真没有本变量,需要通过QGC
去手动修改机架) - 需求6:大规模集群需选择合适的数据通信模式。直接修改
UDPSIMMODE
即可,对应CopterSim
界面的“UDP_Mode”
选项,具体协议将在后文介绍。
注:请自行搜索bat
批处理语言编程方法,并自行查看/运行RflySimAPIs
文件夹中所有bat
文件来熟悉bat
脚本的配置规则。
7.1.10 RflySim3D集群快捷方式使用
F1
:弹出帮助菜单提示;ESC
:清除所有飞机S
:显示/隐藏飞机ID;B
:在不同飞机间切换视角焦点;B+数字*
:切换到第*号飞机T
:开启或关闭飞机轨迹记录功能T+数字*
:开启/更改轨迹粗细为*号P
:开启物理碰撞引擎(不同飞机会碰撞坠机,仅限高级完整版)CTRL+鼠标滚轮
:缩放所有飞机尺寸(多机时便于观察);CTRL + C
:切换全部飞机三维样式注:可以同时打开多个CopterSim
和一个RflySim3D
,然后尝试下列快捷方式
注:更多RflySim3D
的快捷方式请参考第一讲教程https://doc.rflysim.com/2511825#131_RflySim_4
7.1.11 集群仿真难点与RflySim平台解决方式
- 问题一:启动N个飞机进行仿真太麻烦?
解决方案:一键脚本启动所有程序并完成参数配置 - 问题二:多个飞机同时在同一场景显示?
解决方案:UDP
广播方式,RflySim3D
根据接收飞机数据自动新建飞机,理论上可以扩展任意多个飞机,也支持新建障碍物、行人等辅助对象 - 问题三:飞机太多网络拥堵?
解决方案:提供多种数据协议,大规模集群时可选用最精简数据模式,确保网络通畅 - 问题四:多机集群使用硬件在环的话成本高操作复杂?
解决方案:支持PX4 SITL
软件在环仿真,直接在电脑上新建并运行N个完整PX4
控制器,且可访问每个控制器的log
日志、飞行参数等 - 问题五:仿真平台性能如何?
回答:主要是QGC
和RflySim3D
占用计算资源,模型和控制器占用资源较小。初步测试:配置较好的电脑软件在环仿真能稳定15架次以上,不运行QGC
和RflySim3D
数量增加,使用Pixhawk
硬件在环仿真可再翻倍 - 问题六:
Simulink
随着控制飞机的增加速度变慢,无法实时控制?
解决方案:支持Simulink
自动代码生成exe
可执行文件,电脑性能占用趋近于0 - 问题七:单电脑性能有限,只能仿真特定数量的飞机?
解决方案:支持局域网内集群联机仿真,确保大规模集群顺利进行,支持局域网广播与指定IP
方式,减小通信延迟 - 问题八:集群仿真如何与实际飞行尽量接近?
解决方案1:Simulink
集群接口接收的是Pixhawk
通过MAVLink
发送的内部估计状态而非仿真理想值,且发送控制指令也是MAVLink
控制格式,因此集群控制器可直接用于真机实飞。
解决方案2:Simulink
控制器支持生成C/C++
代码嵌入到原有集群系统中,也支持实飞时直接用Simulink
接收局域网Pixhawk
内发送的MAVLink
消息进行集群控制。即:仿真完不需要修改可直接用于实飞