8.5 基于FPGA平台的故障注入
8.5.1 平台特点
ARM A53
单核裸机, 采用简单的时间片轮询.- Letter Shell终端支持, 方便用户交互. 网上还有一个叫
xc_shell
. - FATFS文件系统实现对SD卡的基本操作 网上还有一个叫littlefs
- 串口wifi模块无线传输显示数据到
RflySim3D
显示软件, - 串口wifi模块参数可以通过串口
Shell
修改 - 默认
2000Hz
中断实时运行多旋翼模型 - 模型参数(cJSON)可修改. 模型参数文件预先存放到
SD
卡, 或者PC端远程修改模型参 - 参数可以远程保存, 多参数文件支持,便于快速切换模
- 用
PX4 ulog
日志格式, 与飞控的ulog
文件采用相同的API
处理. - 对
MAVLINK
的支持,QGC
地面站修改模型参数, 甚至接入控制台
*PC
端故障注入 - 更好的交互体验,
PC
端实现对仿真模型运行的控制(shell
和PC
上位机), 开发版上电后 - 要手动选择模型, 手动选择开始仿真, 并且手动停止模型, 软件重置模型.
ls cd mkdir rm cat
等文件操作函数的实现
8.5.2 硬件设备需求
ALINX MPSoC
开发板, 开发板型号AXU2CG-E
, 主控芯片型号XCZU2CG-SFVC784-1-E
Pixhawk 4
GH1.25
转杜邦连接线- 正点原子串口转wifi模块
8.5.2.1硬件接口定义
将飞控与开发板对应引脚使用GH1.25
杜邦线对应连接在一起, 引脚定义查看下面几副图.
Pixhawk4接口定义图:(每个接口的左数第一个引脚是PIN 1
,也就是VCC
)
I2C A 端口定义图
WI-FI
模块插入开发版如图所示的位置上,效果如下: 8.5.2.2其他连接
- 连接开发版的 PS 串口到电脑,并通过安装串口调试软件(推荐
MobaXterm
)来管理串口,实现命令行功能。 - 开发版的电源连接。
8.5.3飞控固件设置
SocFPGA HIL
仿真平台通过模拟真实的传感器实现半物理仿真, 故而需要让飞控默认使用外置传感器与开发板进行通信, 故而需要对飞控的传感器启动脚本进行简单修改重新编译烧录到飞控中.飞控固件支持的版本是 v1.11,
。链接如下:
链接:https://pan.baidu.com/s/1kmhsAttPNvhvMOcPAsr-zw
提取码:24qx
飞控固件下载步骤见1.2节(注意需将固件换成上面链接里版本的固件)。
其他版本暂不支持, 对于使用 RflySim
可以在安装目录下找到飞控固件目录PX4PSP\Firmware\boards\px4\fmu-v5\init\
中的rc.board_sensors
文件。如 果 使 用 官 方 原 生 固 件 , 也 需 要 到 对 应 的 目 录Firmware\boards\px4\fmu-v5\init\
下修改 rc.board_sensors
文件, 需要修改
内容也是一样的使用编辑器打开rc.board_sensors
, 建议使用 vscode
之类的编辑软件编辑,修改如下:
SPI IMU
和IIC
气压计, 对于磁力计飞控会自动检测外部磁力计, 所以不需要专门添加命令. 如果要上真机, 那么将脚本恢复原状即可, 注意备份以及传感器校准.请再次确认飞控中安装的 PX4 飞控固件版本是 1.11.3 版本!并且飞控的模式是四旋翼!
8.5.4 开发版固件安装
开发板采用 SD 启动方式. 步骤如下:
- 从开发板上取下 SD 卡, 使用读卡器将固件复制到 SD 卡根目录上. 固件下载链接:https://pan.baidu.com/s/1kJAbc_Gfp4AoMb_ZrnXC9g 提取码:cjz1
- SD 卡需要提前格式化为
FAT32
格式!! 一般默认也是FAT32
格式.- 固件的名字必须是
BOOT.bin
- 确保开发板的上电启动模式为 SD 卡模式(需要设置拨码开关).
- 拨码开关设置参考下图, 应设置为
0101
, 对应到图中从左到右是上下上下- 将 SD 卡插回到开发板上
- 完成以上设置后, 给开发板通电, 并且连接 USB 到电脑, 可以在设备管理器中看到(可能需要安装驱动), 使用串口终端连接串口
- 这里使用
MobaXterm
举例打开串口,具体步骤如下(必须确保开发板插到电脑上):1)点击
Session
2)点击Serial
3)在Serial port
处选择含有Silicon
前缀的这一项,在Speed
选择115200
波特率4)打开后在串口终端里help
并回车。 当然也可以先连接串口再打开开发板, 或者按下开发板的复位键(RESET), 能看到更多启动信息- 如果连接了串口转
wifi
模块, 此时打开RflySim3D
软件应该可以看到一架四旋翼飞行器出现在窗口中(如果没有显示,可能是被防火墙拦截,可以先关闭防火墙)
串口 WIFI 的设置方法:
首先打开串口软件,在串口终端输入setwifi [WifiName] [Password] [Target IP]
指令,例如 setwifi abc 123456 192.168.****
。后面的 IP 可以改成你用的电脑的 IP, 255 的话就是局域网内广播, 所有电脑就都能收到。当终端显示 WIFI CONNECTED WIFI GOT IP
则表明WIFI
设置成功。此时打开 RFlySim3D
可以看到一个四旋翼。(如失败,则不会显示四旋翼)
注:常见问题:
- 当在串口中断无法输入命令时(即在终端输入命令而终端上没反应时检查开发版是否通电,如果没通电则无法输入命令),重新给开发板通电。
- 当输入
setwifi
指令时,终端没有任何反馈或者显示busy p
,首先检查WIFI
模块的引脚连接处的焊接口是否断开,如断开则即使连接成功了也不会在RFlySim3D
上出现四旋翼;其次可以登陆路由器查看连接设备是否前缀为ATK
的这一个设备,也可以通过ping
指令检查一下。 - 在初次连接成功之后,之后的每次启动串口
WIFI
都会自动连接,不用重新输入指令
8.5.5飞控上电
此时为飞控连接电脑(确保已经按照前面步骤重刷修改过启动脚本的固件),打开 QGC
可以看到地面站连接到飞控. 在地面站的控制台中输入sensors status
回车, 可以看到飞控读取到的传感器信息.
FPGA
模拟出来的, 飞控却会认为这是真实的传感器. - 飞控的
Px4
版本是1.11.3.
- 且飞行模式是四旋翼模式.
- 确认飞控和开发板物理接线正确.
- 检查地线是否正确连接.
- 检查开发板是否通电
8.5.6 FPGA平台与Pixhawk平台的搭建
整体的操作流程如下:
- 用杜邦线连接
Pixhawk4
的端口到对应的开发版的引脚上(具体的飞控端口以及开发版引脚图如前文所述)。 - 修改飞控传感器启动脚本并重新烧录到飞控中,具体操作为将原来的飞控传感器启动脚本注释,并添加两行外置传感器启动命令如下(分别为
SPI IMU
和IIC
气压计):Icm20689 -S start Ms5611 -X start
- 取出开发版的 SD 卡,并将固件保存到 SD 卡中(切记要让固件的名称为
BOOT.BIN
),同时将开发版的启动方式改为 SD 卡启动,即调整拨码开关,具体见前文所述。之后将 SD 卡插回开发版。 - 下载
MobaXterm
串口软件,将开发版的 PS 端口连接电脑,同时给开发版通电,打开串口调试,在终端可以输入指令(具体操作见前文所述) - 打开地面站,将飞控连接电脑,注意飞控固件的版本,必需要为
PX4
飞控固件版本是1.11.3
版本。同时确保所选机型为四旋翼。之后进行调参数调参的目的是确保连接GPS
,同时避免检查拒绝解锁。 - 接下来通过操纵开发版来校准传感器,具体步骤为:
(前提说明:开发版的 PL_KEY 为更改模式的按键,一共有三个模式,即正常模式、加速度计模式和磁力计模式。每按一下 PL_KEY 就切换一个模式。PS_KEY 为调整多旋翼的姿态按键。)
- 首先打开
RFlySim3D
软件,可以看到一个四旋翼(如果没有看到四旋翼,请检查WIFI
模块是否正确连接)四旋翼的初始模式为正常模式,按一下PL_KEY
切换为加速度计模式,此模式可以用来校准加速度计。具体步骤为:根据地面站提示的四旋翼姿态,地面站每完成一个姿态的校准,就按一下PS_KEY
以切换到下一个待校准姿态,此过程可以在RFlySim3D
上看到对应的姿态调整过程。 - 在加速度计校准完后,按一下
PL_KEY
切换到磁力计模式,校准步骤同加速度计模式。在校准完之后完成剩余的传感器校准(此是不需要切换模式)在完成所有传感器的校准之后,再次按PL_KEY
,使飞机切换到正常模(否则不会正常起飞),打开地面站的任务界面,就可以解锁起飞了。
- 首先打开
8.5.7 如何修改模型参数
在串口终端输入param 可以看到param相关的功能. 参数文件是.json后缀名的文本文件, 在设置文件名的时候注意手动输入后缀名
用法:
param list
列出可修改的参数param listfile
列出根目录下的文件param save
保存当前参数到默认参数文件中param save [filename]
保存当前参数到指定参数文件中, 并且将该文件设置为默认参数文件param load
加载默认参数文件param load [filename]
加载指定参数文件param set [index] [value]
修改模型参数值param set [index] [value_index] [value] column major
修改模型参数值, 针对数组param set [filename]
设置指定文件为默认参数文件, 如果设置的文件不存在, 下次系统重启会自动新建文件
param list
列出所有可修改的变量
列出SD卡根目录下所有文件
FrameConfig.json
保存参数到指定参数文件中, 文件不存在会自动新建. 并且会将新建的文件自动设置为默认参数文件. [filename] 目标文件名 如下效果
param load [filename] 加载指定参数文件 [filename] 目标文件名
param save
命令或者param save [filename]
[index]指的是参数序号, 也就是param list中的参数前的编号
[value]表示要设置的数值param set [index] [value_index] [value] column major 功能和param set [index] [value]相同, 区别为这里是设置数组参数中指定元素的值, 其中 [index]指的是参数序号, 也就是param list中的参数前的编号 [value_index]表示参数的角标, 对于3x3矩阵而言, value_index范围是0-8, 按列排序, 序号如下 0 3 6 1 4 7 2 5 8 其他数组则按照从左到右的顺序并且从0开始. 使用举例 [value]表示要设置的数值
8.5.8 通过串口软件修改参数注入故障
具体步骤如下:
- 在所有的配置都按照第五节所述配置好之后,打开串口调试软件并成功连接后(具体操作见5.4小节),打开地面站,打开
RFlySim3D
,按下开发板上的复位键(RESET
),则会启动。如下图所示:- 输入
param list
则可以看到能修改的参数- 切换到地面站,手动解锁飞机并起飞:
- 此时切换到串口软件,尝试将其中第八项参数
motorTc
修改为2,此时可以再RFlySim3D上看到飞机发生翻转,注入故障成功。