2.2 基础实验

本节导航


2.2.1 实验一: LED灯闪烁实验

1. 打开LED例程

  • 用MATLAB打开例程文件RflySimAPIs\FlightControlExpCourse\demos\1.RC-LED-Ctrl\px4demo_input_rc.slx,可以看到如下图的获取遥控器CH3-CH4通道信号,并生成LED灯控制指令的代码(具体原理请学习基础版课程)。

2. 编译与代码生成

  • 在Simulink工具栏点击Build“编译” 按钮即可开始Simulink中设计模块与PX4固件的编译;再点击“诊断”按钮,可以观察到编译的详细过程。

3. 代码生成过程与结果

  • 编译过程如下图,当代码生成完毕时,会弹出右下侧窗口,可以查看报告。这里生成的px4固件在PX4PSP\Firmware\\build\px4_fmu-v5_default\px4_fmu-v5_default.px4

4. 固件自动上传

  • 用USB线连接计算机和Pixhawk的MicroUSB口。对于MATLAB 2017b~2019a,在Simulink的Code下拉菜单中点击“PX4 PSP: Upload code to Px4FMU”选项;对于MATLAB 2019b及更高版本,在MATLAB主界面的“命令行窗口”输入“PX4Upload”命令来开始自动固件上传。注:如果自动上传方法失效,请用QGC手动将上一步生成的px4文件烧录到Pixhawk中。

5. 观察效果

默认状态下,即不操作遥控器时,LED灯是蓝色慢闪状态。拨动左手的油门杆可以观察到如下效果:

  • 油门杆置于右上角:蓝灯快闪;油门杆左上角:红灯快闪;油门杆左下角:红灯慢闪;油门杆右下角:蓝灯慢闪。



2.2.2 实验二:姿态控制器设计实验

1. 打开例程

  • 用MATLAB打开例程文件RflySimAPIs\FlightControlExpCourse\demos\2.Attitude-Ctrl\Exp4_AttitudeSystemCodeGen_old.slx,可以看到如下图的获取遥控器CH1-CH4通道信号,订阅姿态和姿态角信息,并生成执行器和LED灯控制指令的姿态控制器代码(具体原理请学习基础版课程)。

    注意:这里发送的是uORB消息actuator_outputs而不是真实电机指令,是硬件在环仿真HITLRun的专用输出口。 如果要将代码用于真机控制请使用同文件夹下的例程文件Exp5_ AttitudeSystemCodeGenRealFlight_old.slx。需要将输出换成PWM_output模块,来直接控制电机PWM值。

2. 实验步骤与结果

  • 在Simulink中用上一实验相同步骤进行固件编译与上传
  • 正确连接电脑、Pixhawk、接收机与遥控器,确认配置正确。
  • 运行桌面的HITLRun快捷方式,并输入飞控的串口号,开启硬件在环仿真

  • 将遥控器CH5拨杆开关拨到最下(最靠近操作者的位置)就可以解锁控制器(Simulink控制器中编程实现的,注意这里不需要使用PX4的右下三秒解锁规则),同时观察到LED等变为红灯闪烁。
  • 推动油门杆可以看到飞机起飞,然后用遥控器操控飞机进行适当飞行。
  • 由于例程中控制器非常简单,飞行效果没有之前测试PX4官方固件时平稳,这也说明我们的控制器已经发挥作用。

2.2.3 实验三:log数据记录

  1. 用MATLAB打开例程文件RflySimAPIs\FlightControl ExpCourse\demos\3.Log-Write-Read\px4demo_log.slx
  2. 本例程使用了binary_logger模块,设定了记录20s(程序步长250Hz,因此有5000个数据点)的四维随机数据,数据存储位置/fs/microsd/log/pixhawk
  3. 按前面实验相同步骤,将slx编译并上传Pixhawk
  4. 飞控重启后等待20s以上,断电,拔出内存卡,将其插入电脑,可以在log文件夹看到Pixhawk_A.bin的日志文件(_A.bin后缀是系统自动加的)
  5. Pixhawk_A.bin拷贝到slx的目录下来,运行如下指令即可得到四维5000个点的数据。
    [datapts, numpts]=px4_read_binary_file(‘pixhawk_A.bin’)
  6. 再用MATLAB进行数据处理即可。

    更多的RflySim平台数据记录和分析方法见此处


2.2.4 实验四:uORB读写通信

  1. PX4的uORB消息系统是提供了非常强大且方便的内部模块间数据交互能力,所有模块都可以将数据放在消息池中,其他模块可以从消息池订阅到所需数据。
  2. 用MATLAB打开RflySimAPIs\FlightControlExpCourse\demos\4.uORB-Read-Write\ px4demo_uORB_read_write.slx例程文件,可以看到用uORB订阅和发布了一些消息。
  3. uORB模块的使用方法,请参考基础版教程;本例程主要展示了,可以发布和订阅一些消息ID与消息文件名不符的情况,例如actuator_controls.msg的消息文件,可以读取或发送消息ID为actuator_controls_***的消息。

2.2.5 实验五:自定义uORB消息

  • PX4中如果要发布uORB消息,需要在PX4PSP\Firmware\msg文件夹中新建.msg后缀的消息文件,并需要在CMakeLists.txt中添加消息名字。RflySim平台提供了一个自动化的脚本PX4uORBMsgGen.m来实现上述注册过程。
  • 在目标slx文件的同级目录新建一个子文件夹(例如,msg),在其中新建多个.msg格式的消息文件,并将PX4uORBMsgGen.m置于此文件夹,完成下面的配置之后,启动相应.slx文件时就会自动搜索所有msg并配置。
  • 新建一个init_control,并在slx的File-Model Properties-Callbacks(MATLAB 2019b以上的版本在MODELING-Model Settings-Model Properties-Callbacks)中添加打开slx文件时自动调用init_control脚本。
  • 在init_control.m加入如下代码,来调用PX4uORBMsgGen addpath('.\msg')将子目录添加到路径方便脚本调用 PX4uORBMsgGen执行脚本PX4uORBMsgGen.m
  • 经过上述步骤,可以实现打开slx底层控制器文件时自动运行PX4uORBMsgGen脚本,它会自动搜索本目录下的所有.msg格式的uORB消息,并自动注册到Firmware/msg路径中。
    • 例如,这里在msg目录下新建名为rfly_test.msg的消息文件,内容为uint64 timestampfloat32[8] control。注意:其中timestamp变量是每条消息都必须保留的,其他变量根据自己需求添加,请参考Firmware\msg下其他消息。可自行新建其他msg消息文件。
    • 用MATLAB打开RflySimAPIs\\FlightControlExpCourse\ demos\5.uORB-Create\px4demo_ uORB_create.slx文件,点击编译代码,并将固件上传烧录Pixhawk飞控。
    • 本例程将数字1到8发送给了刚才新建的rfly_test消息,这里使用了uORB发送模块。
    • 打开QGC连上Pixhawk,在MAVLink Console中输入listener rfly_test即可检测到我们的程序输出的rfly_test消息,可以看到数据与预设的一致。

2.2.6 实验六:回传提示消息

  • 在飞控中,我们时常需要向外发布一些文字消息,来反映系统当前的运行状态,这个功能可以通过发送mavlink_log的uORB消息来实现。
  • 打开RflySimAPIs\FlightControlExpCourse\demos\6.Mavlink -Msg-Echo\px4demo_mavlink_rc.slx例程文件,编译并上传到Pixhawk中。
  • 运行桌面的HITLRun快捷方式,输入飞控串口号,开始硬件在环仿真。
  • 此时,可以在CopterSim的左下消息栏和QGC的消息栏接收到发送的文本信息,横向拨动遥控器油门杆,可以返回的信息变化。

2.2.7 实验七:PX4控制器的外部通信

  • 在进行硬件在环仿真时,我们常常需要向设计的Simulink控制器中发送数据(传感器数据、故障触发、控制指令、参数调整等),同时接收一些感兴趣的数据。
  • RflySim平台的Simulink控制器设计功能,提供了rfly_ctrl这一uORB消息来接收外部数据(UDP发送指定结构体到CopterSim的30100系列端口),同时提供rfly_px4这一uORB消息来向外发送数据(向40100系列端口发送特定数据。)


    注:本例子作为外界与Simulink控制值器的桥梁,能够大大提高控制器开发和参数调整的效率。 注:也可以手动修改Firmware的源码,将感兴趣的数据发送到rfly_px4,同时在需要的地方接收rlfy_ctrl的uORB消息,实现PX4原生控制器的通信。

  • 打开RflySimAPIs\FlightControlExpCourse\demos\7.PX4CtrlExternalTune\PX4ExtMsgReceiver.slx,编译并烧录到Pixhawk中。本例程以外部发送的rfly_ctrl数据来作为遥控器输入,同时会将收到的数据向rfly_px4发送出去,回传给外部程序。

  • 运行HITLRun,输入飞控串口号,开启硬件在环仿真。
  • 用Simulink运行PX4ExtMsgSender.slx程序,它的接收和发送的数据如图。在右下角拨动CH3(模拟油门杆)可以实现飞机起飞。
  • PX4ExtMsgReceiver.slx中定义了左侧rfly_px4的数据与rfly_ctrl数据相同,实验结果与此一致。
  • 在QGC的MAVLink Inspector也可以通过ACTUATOR_CONTROL_TARGET观察到rfly_px4的值。

2.2.8 实验八:QGC实时调整控制器参数

  • 在进行硬件在环仿真和真机实验时,常常需要在QGC地面站中观察飞行状态,并对控制器参数进行实时调整,以使得飞机达到最佳的控制效果。
  • 这里提供一个例程,见RflySimAPIs\FlightControlExpCourse\demos\8.QGC-Param-Tune文件夹
  • 新建一条自定义的参数总共需要四步 操作:
    1. 在slx文件所在目录,建一个px4_simulink_app_params.c的空白文件,并填写参数信息(包括注释),例如下图所示例程,使用PARAM_DEFINE_FLOAT定义浮点数参数名和默认值,用PARAM_DEFINE_INT32定义整型数据,并在注释中定义参数最小、最大、精度和增长量。在本例中,我们定义了SL_RFLY_FLTPARAM_DEFINE_INT32两个参数。
    2. 在MATLAB工作空间中,调用Pixhawk_CSC.Parameter函数来注册参数。这里我们通过init_control.m来在slx打开时自动注册两参数。
    3. 在Simulink中增加了一个Parameter Update Module实现定义参数的自动更新,双击本模块,点Auto-populate List ***,来确认参数正确导入。注:这里可以打开PX4QGCTune.slx来进行测试。
    4. 然后就可以在Simulink中直接调用新建的参数,进行控制器的设计,参数可以用于常数模块、积分模块、比例模块等需要配置参数的地方,在使用时需要注意参数类型的转换(浮点数还是整型)。注:在本例中,我们使用SL_RFLY_FLTPARAM_DEFINE_INT32来发送rfly_px4的uORB消息。
  • 打开RflySimAPIs\FlightControlExpCourse\demos\8.QGC-Param-Tune\PX4QGCTune.slx文件,编译并上传到Pixhawk中。
  • 连接Pixhawk到电脑,并打开QGC地面站,等待与Pixhawk建立连接。
  • 在QGC的设置-参数-Other-Misc中可以看到刚才新建的两条消息(如果没找到自己的消息,可以用搜索框搜索),然后手动修改两个参数的值。
  • 去QGC的MAVLink Inspector中查看ACTUATOR_CONTROL_TARGET消息(接收来自rfly_px4的数据),查看两个参数的值,是否为刚才修改的值。

results matching ""

    No results matching ""