PX4-14-HITL仿真框架

在上一篇 PX4-13-仿真系统 分享中我们聊了PX4的的几种仿真方式,SITL、HITL、SIH。这一篇我们详细说一下PX4中的HITL仿真框架。

上图是PX4开发者文档 ( https://docs.px4.io/master/zh/simulation/hitl.html )中的HITL仿真结构框图,里面包含了PX4飞控硬件、仿真器(gazebo等)、地面站、机载计算机API。

从数据流上可以看出为了简化与飞控硬件的接线,仅通过USB与飞控相连接,地面站和机载计算机与飞控的数据流通过仿真器转发。实际上我们也可以通过串口将地面站与机载计算机直接接在飞控硬件上。这部分数据流我们不重点分析。

我们主要分析一下飞控与仿真器间的数据交互。下图为PX4与gazebo的组件结构图:

在PX4中,所有的消息通过uORB传递,因此对于导航与控制层(navigator/ekf)与驱动层无关,对于imu、mag、baro传感器,在 src/modules/mavlink/mavlink_receiver.cpp handle_message_hil_sensor 函数中,解析到相应的仿真数据,实例化对应的 PX4Gyroscope、PX4Accelerometer、PX4Magnetometer、PX4Barometer类并发布仿真数据,对于gps则直接通过uORB发布传感器数据。

// gyro
if ((hil_sensor.fields_updated & SensorSource::GYRO) == SensorSource::GYRO) {
    if (_px4_gyro == nullptr) {
        // 1310988: DRV_IMU_DEVTYPE_SIM, BUS: 1, ADDR: 1, TYPE: SIMULATION
        _px4_gyro = new PX4Gyroscope(1310988);
    }

    if (_px4_gyro != nullptr) {
        _px4_gyro->update(timestamp, hil_sensor.xgyro, hil_sensor.ygyro, hil_sensor.zgyro);
    }
}

在gazebo中传感器插件的代码可以在 Tools/sitl_gazebo/src 中找到,具体的代码这里不做分析,感兴趣的同学可以通过源码去学习了解。

我的微信公众号,文章同步更新,欢迎关注。

微信公众号