3.4 代码生成控制器通信

本节导航


本小节的例程源码路径:
RflySimAPIs\SimulinkControlAPI\Rfly_API_CTRL

3.4.1 自动代码生成环境配置

注:本小节内容主要针对课程“RflySim高级版_第02讲_飞行控制算法开发”(即《多旋翼飞行器设计与控制实践》书中的系列实验)中用Simulink开发的控制器的外部通信问题。
  • 针对Simulink生成的Pixhawk控制算法也可以通过的QGC/Simulink API进行控制。运行本小节的例子,需要使用Simulink代码生成控制器,因此需要重新运行安装脚本,如右图所示配置来屏蔽PX4自身输出。
  • 注意:编译命令需要根据自己硬件修改
  • 注意:Simulink自动生成的代码目前不支持px4_sitl_default的编译命令,因此不支持PX4 SITL仿真,本小节例子需要使用Pixhawk硬件进行硬件在环仿真。

3.4.2 使用Simulink生成的遥控器信号控制Simulink设计的控制器

  • 可以使用Simulink输出的遥控器信号控制我们自己设计的姿态控制器,例如“RflySimAPIs\FlightControlExpCourse\code\e0\3.DesignExps\Exp4_AttitudeSystemCodeGen_old.slx”
    • 首先打开“Exp4_AttitudeSystemCodeGen_old.slx”编译固件并烧录Pixhawk,然后用CopterSim连接Pixhawk并开始硬件在环仿真(高级版可以直接运行桌面HITLRun一键快速打开硬件在环)。
    • 打开并运行“RadioControlAPI.slx”文件,可以控制飞机起飞并前后左右移动。在QGC中也可以观察到数据
  • 原理:进一步解释原理,RadioControlAPI.slx文件发送RC_CHANNELS_OVERRIDEmavlink消息到Pixhawk,而Exp4_AttitudeSystemCodeGen_old.slx中使用的遥控器模块会接收该Mavlink消息,因而可以响应。
  • 同理,如果需要自己生成的代码能响应ManulControlAPI.slxOffboardAPI.slx中的输入,需要分别在Simulink控制器中接收相应的uORB消息。其中ManulControlAPI.slx对应的是“MANUAL_CONTROL_SETPOINT”uORB消息,OffboardAPI.slx对应的是“POSITION_SETPOINT”uORB消息。
  • 注:ManulControlAPI.slx对应了“Exp4_AttitudeSystemCodeGen.slx”代码生成的例程,可以响应“MANUAL_CONTROL_SETPOINT”消息。

3.4.3 使用Simulink收发自定义消息

  • RflySim平台还提供了一个外界程序与自己Simulink控制器进行交流的消息。它发送rfly_ctrl.msg(见Firmware\msg文件夹)的uORB消息。定义如下:
  • uORB消息可以通过外部程序发送mavlink消息来实现“HIL_ACTUATOR_CONTROLS”消息,其16维的controls控制量对应于下面的定义。
    • 用MATLAB打开RflySimAPIs\SimulinkControlAPI\Rfly_API_CTRL\Rfly_Mavlink_Receiver.slx,编译生成代码,并烧录到Pixhawk中。如下图所示,它接收了rfly_ctrluORB消息,替换了原来的遥控器信号。
    • 开启CopterSimPixhawk的硬件在环仿真,运行“Rfly_API_CTRL\Rfly_Mavlink_API_Sender.slx”文件,该文件可以向CopterSim发送控制信号,CopterSim会转发为“HIL_ACTUATOR_CONTROLS” Mavlink消息到Pixhawk,然后Pixhawk再发布到rfly_ctrluORB消息池中,给上图中代码生成的px4_simulink_app使用。如下图所示,该slx例程模拟了CH1~Ch5通道的遥控器数据,发送到了rfly_ctrl消息中。
  • 本例程的实验效果与RadioControlAPI.slx中模拟遥控器信号控制PX4官方控制器的操作流程一致
  • 实验现象与效果相同,因为两个例子都是发送了遥控器信号,只不过通信途径有区别。
  • 注:在真机飞行是,用MAVLink向飞控发送HIL_ACTUATOR_CONTROLS消息即可,本模块可以实现向控制发送数据

results matching ""

    No results matching ""