3.3 PX4官方控制器通信

本节导航


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

3.3.1 Simulink模拟发送遥控器原始数据控制无人机

  • 首先用CopterSim连接Pixhawk并开始硬件在环仿真同时打开三维软件(RflySim高级版可以直接运行桌面HITLRun一键快速打开硬件在环,或运行SITLRun一键打开软件在环仿真),然后通过MATLAB打开“RflySimAPIs\SimulinkControlAPI\RadioControlAPI.slx”文件,并运行。
    • 首先,向右拖动VeZ滑块(模拟向上推油门过中点),可以控制飞机Z方向速度,使飞机垂直起飞;
    • 然后,拖动VeX(模拟前后推俯仰摇杆)和VeY(模拟左右拨滚转摇杆)滑块可以实现前后与左右运动,
    • 同样,拖动Yaw滑块(模拟左右拨偏航摇杆)可以控制偏航速度,控制飞机偏转。
  • 双击“RCOverrideMavlink”模块,可以看到下图所示的内部信息
  • 双击“RCControlTrans”模块,可以看到下图所示的内部信息
  • 双击进入“CMDPack”模块,可以看到下图所示的内部信息 先将数据幅值给inHILCMDData结构体,然后将结构体数据存储到netDataShortShort结构体的payload数据段中,最后将数据发出去
    两层封装(保证数据安全)
    struct inHILCMDData{
    uint32_t time_boot_ms;
    uint32_t copterID;
    uint32_t modes;
    uint32_t flags;
    float ctrls[16];
    };
    struct netDataShortShort {
    TargetType tg;
    int len;
    char payload[112];
    }netDataShortShort;
    
  • CopterSim收到来自SimulinkUDP消息后,会生成MAVLink消息RC_CHANNELS_OVERRIDE(遥控器器通道覆盖),并转发给Pixhawk实现遥控器信号的模块
  • 再回到最外层,点击进入“UDP_SIL_State_Receiver”模块
  • 原理:接收CopterSim通过UDP发送的outHILStateData结构体的数据,并从中提取感兴趣的值
  • CopterSim数据来源:转发来自PixhawkMavlink消息,包括LOCAL_POSITION_NEDATTITUDE,HOME_POSITIONESTIMATOR_STATUS
    struct outHILStateData{ // mavlink data forward from Pixhawk  
    uint32_t time_boot_ms; //Timestamp of the message  
    uint32_t copterID; //Copter ID start from 1  
    int32_t GpsPos[3]; //Estimated GPS position,lat&long: deg*1e7, alt: m*1e3 and up is positive  
    int32_t GpsVel[3]; //Estimated GPS velocity, NED, m/s*1e2->cm/s  
    int32_t gpsHome[3]; //Home GPS position, lat&long: deg*1e7, alt: m*1e3 and up is positive  
    int32_t relative_alt; //alt: m*1e3 and up is positive  
    int32_t hdg; //Course angle, NED,deg*1000, 0~360  
    int32_t satellites_visible; //GPS Raw data, sum of satellite  
    int32_t fix_type; //GPS Raw data, Fixed type, 3 for fixed (good precision)  
    int32_t resrveInit; //Int, reserve for the future use  
    float AngEular[3]; //Estimated Euler angle, unit: rad/s  
    float localPos[3]; //Estimated locoal position, NED, unit: m  
    float localVel[3]; //Estimated locoal velocity, NED, unit: m/s  
    float pos_horiz_accuracy; //GPS horizontal accuracy, unit: m  
    float pos_vert_accuracy; //GPS vertical accuracy, unit: m  
    float resrveFloat; //float,reserve for the future use  
    }
    

3.3.2 Simulink模拟发送归一化遥控信号控制无人机

  • 上一个例子发送的是遥控器的原始数据,因此PWM的输出值需要与遥控器校准值一致,否则可能出现控制偏差
  • 打开“RflySimAPIs\SimulinkControlAPI\ ManulControlAPI.slx”,得到和上一个例子相同功能的demo,实验流程相同,但是本demo不需要关心遥控器校准值
  • 该消息是通过实现MANUAL_CONTROLmavlink消息,在实际飞行时,也可以通过数传发送该信号来复现控制指令。

3.3.3 Simulink模拟发送使用Offboard模式的控制无人机 (推荐)

  • Offboard模式是无人机的一种控制模式,通常给机载计算机或地面计算机(上位机)实时控制飞机的速度、位置、姿态等,可以把飞机当成一个整体对象,专注于顶层的视觉与集群算法开发。
  • 遥控器信号控制没法定量地控制飞机的速度,因此使用起来没有Offboard控制模式方便,但是遥控器信号控制模式是最接近人的操作的方式,在一些高机动表演控制中有更好的效果
  • 本课程后续实验都是将飞机看出一个整体子对象(接收并实现速度/位置/加速度/航路等指令),因此后续系列实验将主要采用Offboard模式来控制飞机。由于Offboard模式是PX4官方控制器提供的功能,因此需要确保Pixhawk运行的是官方固件(在前面的设置中有提到)。
    • 开启CopterSim的硬件在环(或软件在环)仿真系统
    • 打开“RflySimAPIs\SimulinkControlAPI\OffboardAPI.slx”运行即可,可以看到飞机首先自动起飞到10m高度,然后切换“速度/位置控制”开关,拖动滑块,可以输入X方向速度5m/s(或拖动滑块VeX到期望值),在QGC中观察速度与给定速度是否一致
  • 原理:该例子会使PX4进入Offboard模式,然后发送SET_POSITION_TARGET_LOCAL_NEDmavlink消息来实现飞机的速度、位置、与角度等控制。该指令不需要飞机进行遥控器校准或模态设置,直接给定指定的速度或位置即可。
  • OffboardAPI.slx文件中展示了三个模块例子,VelEarthFrameOffboardCtrl是地球坐标系下速度控制模块,VelBodyFrameOffboardCtrl是机体坐标系下速度控制,PosTargetEarthFrameOffboardCtrl是地球坐标系下位置控制模块(给定相对起飞点的x,y,z坐标,飞机会自动飞到该点并悬停)。
  • 三个模块实现方法完全相同,只不过是Offboard消息的几个参数(位置/速度控制模式&机体/地球坐标系)不同,Offboard控制指令是以解锁的位置为Home_Position坐标为原点的相对坐标(Local_Position),因此发送的位置指令是指飞到相对解锁位置的相对坐标值。
  • SimulinkOffboard模式接口如下图,可以自行组合需要控制的指令 https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_LOCAL_NED MAVLink消息的实现方法如下图

results matching ""

    No results matching ""