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端实现对仿真模型运行的控制(shellPC上位机), 开发版上电后
  • 要手动选择模型, 手动选择开始仿真, 并且手动停止模型, 软件重置模型.
  • 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 端口定义图

GPS MODULE端口

SPI 端口

I/O PWM OUT 端口

总体连线示意图:

开发版的 IO 接口定义图,管脚和红框中的定义标记依次对应:

如下图,将串口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 IMUIIC 气压计, 对于磁力计飞控会自动检测外部磁力计, 所以不需要专门添加命令. 如果要上真机, 那么将脚本恢复原状即可, 注意备份以及传感器校准.
请再次确认飞控中安装的 PX4 飞控固件版本是 1.11.3 版本!并且飞控的模式是四旋翼!


8.5.4 开发版固件安装

开发板采用 SD 启动方式. 步骤如下:

  1. 从开发板上取下 SD 卡, 使用读卡器将固件复制到 SD 卡根目录上. 固件下载链接:https://pan.baidu.com/s/1kJAbc_Gfp4AoMb_ZrnXC9g 提取码:cjz1
  2. SD 卡需要提前格式化为FAT32格式!! 一般默认也是 FAT32 格式.
  3. 固件的名字必须是 BOOT.bin
  4. 确保开发板的上电启动模式为 SD 卡模式(需要设置拨码开关).
  5. 拨码开关设置参考下图, 应设置为0101, 对应到图中从左到右是上下上下
  6. 将 SD 卡插回到开发板上
  7. 完成以上设置后, 给开发板通电, 并且连接 USB 到电脑, 可以在设备管理器中看到(可能需要安装驱动), 使用串口终端连接串口
  8. 这里使用MobaXterm 举例打开串口,具体步骤如下(必须确保开发板插到电脑上):

    1)点击Session

    2)点击Serial
    3)在Serial port处选择含有Silicon前缀的这一项,在Speed选择115200波特率
    4)打开后在串口终端里help并回车。 当然也可以先连接串口再打开开发板, 或者按下开发板的复位键(RESET), 能看到更多启动信息

  9. 如果连接了串口转 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平台的搭建

整体的操作流程如下:

  1. 用杜邦线连接 Pixhawk4的端口到对应的开发版的引脚上(具体的飞控端口以及开发版引脚图如前文所述)。
  2. 修改飞控传感器启动脚本并重新烧录到飞控中,具体操作为将原来的飞控传感器启动脚本注释,并添加两行外置传感器启动命令如下(分别为 SPI IMUIIC 气压计):
    Icm20689 -S start  
    Ms5611 -X start
    
  3. 取出开发版的 SD 卡,并将固件保存到 SD 卡中(切记要让固件的名称为BOOT.BIN),同时将开发版的启动方式改为 SD 卡启动,即调整拨码开关,具体见前文所述。之后将 SD 卡插回开发版。
  4. 下载MobaXterm串口软件,将开发版的 PS 端口连接电脑,同时给开发版通电,打开串口调试,在终端可以输入指令(具体操作见前文所述)
  5. 打开地面站,将飞控连接电脑,注意飞控固件的版本,必需要为PX4 飞控固件版本是1.11.3版本。同时确保所选机型为四旋翼。之后进行调参数



    调参的目的是确保连接 GPS,同时避免检查拒绝解锁。
  6. 接下来通过操纵开发版来校准传感器,具体步骤为: (前提说明:开发版的 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
列出所有可修改的变量

param listfile
列出SD卡根目录下所有文件

param save 保存参数到默认参数文件, 要查看当前默认的参数文件名, 可以使用param list函数查看, 如下图所示, 系统在第一次使用的时候参数文件名字是FrameConfig.json

param save [filename]
保存参数到指定参数文件中, 文件不存在会自动新建. 并且会将新建的文件自动设置为默认参数文件. [filename] 目标文件名 如下效果

param load 加载默认参数文件

param load [filename] 加载指定参数文件 [filename] 目标文件名

param set [index] [value] 设置指定参数的数值, 该参数是保存在内存中, 重启后会恢复为默认参数文件中的数值. 如果要保存需要设用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]表示要设置的数值

上面的例子是将编号为2的参数中的第3个元素设置为1 param set [filename] 设置默认参数文件, 如果文件不存在依然会设置成功, 并在下次系统启动后会自动创建对应的文件


8.5.8 通过串口软件修改参数注入故障

具体步骤如下:

  1. 在所有的配置都按照第五节所述配置好之后,打开串口调试软件并成功连接后(具体操作见5.4小节),打开地面站,打开RFlySim3D,按下开发板上的复位键(RESET),则会启动。如下图所示:
  2. 输入param list则可以看到能修改的参数
  3. 切换到地面站,手动解锁飞机并起飞:
  4. 此时切换到串口软件,尝试将其中第八项参数motorTc修改为2,此时可以再RFlySim3D上看到飞机发生翻转,注入故障成功。

results matching ""

    No results matching ""