PX4-Autopilot代码解析(21)-仿真与测试

该仿真测试系统为PX4提供软件在环(SITL)仿真功能,无需物理硬件即可开发、测试和验证飞行控制算法。该系统支持多种仿真后端,包括Gazebo、Gazebo Classic、jMAVSim、FlightGear以及内置的硬件仿真(SIH)模拟器。

有关编译模拟目标的构建系统的信息,请参阅“构建系统”部分。

仿真架构概述

该仿真系统包括仿真器后端选择、传感器数据桥接、执行器输出处理和真实数据生成:

模拟器选择和启动

该仿真系统使用分层启动脚本,根据环境变量和参数选择合适的仿真器后端:

环境变量 范围 模拟器后端 桥接模块

PX4_SIMULATOR=gz

SIM_GZ_EN=1
现代凉亭
gz_bridge

PX4_SIMULATOR=sihsim

SYS_AUTOSTART=0
SIH内部
sih_sim

PX4_SIM_MODEL=jmavsim_iris

SYS_AUTOSTART=10017
jMAVSim
默认 凉亭经典款
simulator_mavlink

启动过程由脚本处理,
px4-rc.simulator
该脚本包含基于检测到的模拟器的特定 RC 文件:

px4-rc.gzsim现代凉亭px4-rc.sihsimSIH模拟器px4-rc.jmavsim用于 jMAVSimpx4-rc.mavlinksim适用于 Gazebo Classic

Gazebo 实施

该类
GZBridge
提供 PX4 和现代 Gazebo 模拟器之间的主要接口,处理双向数据交换:

桥梁关键部件

初始化过程
GZBridge
会根据参数配置订阅必需和可选的传感器主题:

必需订阅:

通过时钟同步
subscribeClock()
通过姿态信息
subscribePoseInfo()
通过IMU数据
subscribeImu()
通过磁力计
subscribeMag()

可选订阅(参数控制):

GPS
subscribeNavsat()
通过
SIM_GZ_EN_GPS=1
通过
subscribeAirPressure()
晴雨表
SIM_GZ_EN_BARO=1
通过
subscribeDistanceSensor()
激光雷达
SIM_GZ_EN_LIDAR=1
光流
subscribeOpticalFlow()
通过
SIM_GZ_EN_FLOW=1

坐标系变换

该桥接器执行 Gazebo 的 FLU(前左上)坐标系和 PX4 的 FRD(前右下)坐标系之间的坐标变换:



// FLU -> FRD transformation
static const auto q_FLU_to_FRD = gz::math::Quaterniond(0, 1, 0, 0);
gz::math::Vector3d accel_b = q_FLU_to_FRD.RotateVector(gz::math::Vector3d(
    msg.linear_acceleration().x(),
    msg.linear_acceleration().y(), 
    msg.linear_acceleration().z()));

模拟传感器

空速传感器模拟


SensorAirspeedSim
模块在以下情况下提供合成空速测量值
SENS_EN_ARSPDSIM=1

空速计算包括大气建模和高度补偿:



const float temperature_local = TEMPERATURE_MSL - LAPSE_RATE * alt_amsl;
const float density_ratio = powf(TEMPERATURE_MSL / temperature_local, 4.256f);
const float air_density = AIR_DENSITY_MSL / density_ratio;

机身配置

模拟机身在目录中按照特定的编号方案进行定义
ROMFS/px4fmu_common/init.d-posix/airframes/

范围 模拟器 示例
1000-1999
gazebo
经典款

1010_gazebo-classic_iris_opt_flow

1030_gazebo-classic_plane
4000-4999
gazebo
(gz)

4001_gz_x500
,,
4003_gz_rc_cessna

4004_gz_standard_vtol
10000-10999 多合一
10015_gazebo-classic_iris

10017_jmavsim_iris
17000-17999 FlightGear
17001_flightgear_tf-g1

Gazebo X500 配置示例


4001_gz_x500
机身展示了典型的仿真参数设置:



PX4_SIMULATOR=${PX4_SIMULATOR:=gz}
PX4_GZ_WORLD=${PX4_GZ_WORLD:=default}
PX4_SIM_MODEL=${PX4_SIM_MODEL:=x500}
 
param set-default SIM_GZ_EN 1
 
# Control allocation for quadrotor
param set-default CA_AIRFRAME 0
param set-default CA_ROTOR_COUNT 4
 
# Motor positions and characteristics
param set-default CA_ROTOR0_PX 0.13
param set-default CA_ROTOR0_PY 0.22
param set-default CA_ROTOR0_KM 0.05

真实数据生成

该仿真系统提供用于算法验证和测试的真实数据。它
GZBridge
通过处理仿真器姿态信息来发布真实数据主题:

基于参数的传感器控制

Gazebo桥接器使用参数来启用/禁用特定传感器,从而实现灵活的仿真配置:

范围 默认 描述

SIM_GZ_EN_GPS
1 启用 GPS/NavSat 传感器

SIM_GZ_EN_BARO
1 启用气压计/气压

SIM_GZ_EN_LIDAR
1 启用激光雷达/距离传感器

SIM_GZ_EN_FLOW
1 启用光流传感器

SIM_GZ_EN_ASPD
1 启用空速传感器

SIM_GZ_EN_ODOM
1 启用视觉里程计

这些参数允许开发人员在不修改车辆配置的情况下,模拟传感器故障或使用不同的传感器套件测试算法。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
星座全知晓的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容