导读
Pixhawk Pilot Support Package (PSP,自驾仪支持包)工具箱是Mathworks公司官方为Pixhawk推出的一个工具箱。本篇围绕RflySim平台Simulink-PSP工具箱使用进行详解。
RflySim平台Simulink-PSP工具箱使用简介
PSP工具箱
Pixhawk Pilot Support Package (PSP,自驾仪支持包)工具箱是Mathworks公司官方为Pixhawk推出的一个工具箱。该工具箱能在Simulink中利用嵌入式代码产生器(Embedded Coder)将Simulink模型自驾仪算法自动编译和部署到Pixhawk硬件系统中。
在安装完工具箱后,可以在Simlink的浏览器中找到一个名为"Pixhawk Target Blocks"的模块。实际上,这个模块在PSP工具箱中生成的算法代码会被嵌入到我们的PX4软件系统中,并创建一个名为"px4_simulink_app"的独立模块。这个模块是独立运行的,不会影响PX4系统中的本地控制模块的运行。它与其他模块并行运行。这样一来,我们可以替换掉PX4的自定义滤波器和姿态控制器等原生模块。本节具体例程均可在平台安装目录下的“C:\PX4PSP\RflySimAPIs\Exp02_FlightControl\e0-PlatformStudy“找到。
PART
01与Pixhawk自驾仪系统关系
1) Pixhawk自驾仪系统的软硬件结构包括:硬件系统(类似于电脑主机)+PX4自驾仪软件系统(类似于主机上运行的操作系统和应用程序)的构架方式。
2) 整个PX4自驾仪软件系统可以分为若干个小模块,每个模块独立运行(多线程并行),各个模块通过uORB消息模块的订阅与发布功能实现数据的传输与交互。
3) Simulink生成的代码部署到PX4自驾仪软件之后,不会影响原生PX4自驾仪软件的运行,而是新增一个名为“px4_simulink_app”的独立模块(独立线程)并行于其他模块运行。
4) 由于原生PX4控制算法可能需要访问和“px4_simulink_app”同样的硬件输出资源,这会产生读写冲突。因此,平台一键部署脚本提供了自动屏蔽PX4原生固件对执行器的选项,以确保只有“px4_simulink_app”模块能够输出电机控制量。
PART
02
主要功能
1) 能在Simulink中对不同的飞机模型和自驾仪算法进行仿真和测试,并能自动将算法部署到Pixhawk自驾仪中;
2) 工具箱提供了一些实用实例,包括灯光控制、遥控器数据处理和姿态控制器等;
3) 工具箱中提供了很多接口模块,用于访问Pixhawk的软硬件组件;
4) 能自动记录传感器、执行机构以及自己部署进去的控制器的飞行数据;
5) 能订阅和发布uORB话题消息。PX4自驾仪软件的所有数据都暂存在一个uORB消息池中,通过uORB订阅功能可以从消息池中读取感兴趣的话题,通过uORB发布功能可以特定的话题发布到消息池中供其他模块使用。
PART
03
代码生成与部署过程
1) PSP工具箱将在Simulink中设计的控制算法生成C代码;
2) 将该代码导入到PX4自驾仪的源代码中,生成一个“px4_simulink_app”独立运行的程序;
3) PSP工具箱调用编译工具将所有代码编译为“.px4” 的PX4自驾仪软件固件文件;
4) 将得到的固件下载到Pixhawk自驾仪中并烧录,由Pixhawk自驾仪执行带有生成的算法代码的PX4软件。
PART
04
Pixhawk Target Blocks模块库介绍及各个模块的使用说明
图 Simulink PSP工具箱展示
图 PSP工具箱传感器和执行器接口库示意图
如上图,在Simulink的库浏览器中可以找到Pixhawk Target Blocks模块库。本套课程主要使用到的模块包括传感器和执行器的接口库,以及uORB消息读取和写入模块。
这里提到的所有PSP工具箱传感器和执行器接口模块在底层均是通过uORB消息的读写来实现的。理论上通过uORB消息的读写,我们可以获取并改变自驾仪内的所有消息和中间变量,实现更高级的控制器功能。因此掌握该模块的使用,我们拥有更大的权限与自由度,使得实现更为复杂的功能称为可能。更多使用教程可以参考https://dev.px4.io/master/en/middleware/uorb.html
4.1 uORB模块
通过下图所示的uORB模块可以从PX4自驾仪软件中读取或发送uORB消息,其中PX4自驾仪支持的所有uORB消息类型可以在本平台安装目录(默认路径是“C:\PX4PSP”)下的“Firmware\msg”目录中查看。双击“uORB write”模块可以打开uORB消息配置界面,在其中可以选择发送的uORB消息名称和数据。
图 用于消息读写的uORB 模块
图 uORB 写接口模块参数设置框
点击图“uORB write”模块配置界面中的“Open .msg file”按钮可以打开选定的uORB消息文件(见图 uORB 消息文件);点击按钮“Open .msg folder”打开消息目录(见图 uORB 模块参数设置框“Open .msg folder”按钮弹出框)。
图 uORB write模块配置界面
图 uORB 消息文件
图 uORB 模块参数设置框“Open .msg folder”按钮弹出框
uORB写操作有两个模块可以选择,下图带后缀“_dai”的模块允许发送基于某uORB消息基类(例如actuator_controls)的扩展消息(例如, actuator_controls_0)。
为了方便调参与测试,PSP工具箱还提供了访问Pixhawk内部参数的方法,这样可以在飞行测试实验中,通过地面站软件来修改Simulink生成控制器参数,而不需要在Simulink中修改后再生成代码。使用时需要将参数声明函数放入Simulink的菜单栏的“File”–“Model Properities”-“Callbacks” -“InitFcn” 中。
图 Pixhawk参数读取例程
图 Pixhawk参数读取的Simulink初始脚本设置
4.2电机PWM模块
通过这个模块可以发送PWM信号到PX4IO的输出端口以控制电机转动,可以选择PWM的更新率及输入通道。
图.电机PWM输出模块及其参数设置框
4.3 遥控器输入模块
通过这个模块可以选择接收遥控器的通道数量,以及其他的一些信息。每个选项的含义可点击对话框的“help”按钮查看或者查阅官方PDF文档。
图 遥控器输入模块及其参数设置框
4.4蜂鸣器模块
通过这个模块可以控制蜂鸣器在特定的事件发出特定的音调。
图蜂鸣器模块及其参数设置框
4.5 RGB_LED模块
通过这个模块可以控制LED灯闪烁的模式和颜色。如下图所示,模块接收两个输入,一个是模式(Mode),另一个是颜色(Color),可用模式和可用颜色可以点击对话框的“help”按钮查看。
图多彩LED灯模块及其参数设置框
4.6 传感器组合模块
通过这个模块可以获取Pixhawk中可用的传感器数据,然后这些数据可以用于控制模型的设计。可获取的数据包括磁力计、加速度计、陀螺仪、气压计和时间戳。
图传感器数据组合模块及其参数设置框
4.7姿态数据模块
该模块提供了经过滤波的姿态数据(欧拉角和四元数),通过复选框可以勾选想要输出的姿态数据。
图 姿态模块及其参数设置框
4.8 GPS数据模块
通过这个模块可以获取Pixhawk的GPS数据,它是通过订阅uORB话题“vehicle_gps” 实现的,所以在实际运行时需要保证Pixhawk上插入GPS模块才能获取正确数据。
图 GPS数据模块及其参数设置框
4.9 电池数据模块
通过这个模块可以获取电池的实时数据,它也是通过订阅uORB话题“battery_status” 实现的,所以在实际运行时需要保证Pixhawk上插入电源模块才能获取正确数据。
图 电池数据模块及其参数设置框
PART
05
Simulink配置实现PSP工具箱自动代码生成
1) 控制器代码生成前的准备工作
在Simulink中设计一个控制器,并进行软件在环仿真验证;将通过验证的控制器复制到一个新的Simulink文件中;n将控制器的输入输出口与PSP工具箱模块库中的输入(传感器、遥控器)和输出(电机PWM、LED灯和蜂鸣器)接口进行连接。这样连接后就组成了一个完整的例程。
图 . 控制器连接PSP接口模块
2) 选择目标硬件
为了让Simulink根据目标硬件编译和组建模型,需要点击Simulink的“设置”按钮进行相应的设置。在弹出的模型配置页面,在“Hardware Implementation”标签页的“Hardware Board”下拉框中设置硬件板卡为“Pixhawk PX4”。
3) 编译与固件生成
点击Simulink的“编译” 按钮,再点击Simulink的“诊断”按钮
4) 编译过程与结果
一次成功的编译过程在“Diagnostic Viewer”窗口中可以看到编译进度条完成,同时显示“Successfully generated all binary outputs”消息。此外,在编译完成之后,Simulink会自动弹出“Code Generation Report”代码生成文档。
5) 固件的上传
MicroUSB线将Pixhawk与电脑连接;对于MATLAB 2017b~2019a,点击Simulink菜单栏【Code】-【PX4 PSP:Upload code to Px4FMU】将代码上传进入飞控;对于MATLAB 2019b及更高版本,在MATLAB的“命令行窗口”输入“PX4Upload”命令来下载固件。注意看窗口提示,有时需要重新插拔Pixhawk才能上传并烧录。