gazebo:固定翼的空气动力学

发布时间 2024-01-02 19:35:16作者: Hyaline-w

LiftDragPlugin::LiftDragPlugin() : cla(1.0), cda(0.01), cma(0.0), rho(1.2041)

源码

分两个部分

  1. 空气动力学实现的插件
  2. 插件的使用位置

实现

官方给了一个教程
https://classic.gazebosim.org/tutorials?tut=aerodynamics
插件名为 LiftDragPlugin ,大概400行

空气动力学的简化

简化为两个力 升力和 阻力

升力的计算

关键概念

  • 攻角 AOA(Angle of Attack) 用 $\alpha$ 表示
  • 升力系数 C
  • 失速 stall


图中 红色为 升力系数随攻角的变换,绿色将曲线拟合为两段,前半段是正常状况,后半段是失速状况

因此 描述 升力 两个线性方程 四个关键 参数为

  • $C_{L\alpha}$ : 升力曲线 斜率
  • $C_{L\alpha,stall}$ : 失速后升力曲线 斜率
  • $\alpha_{stall}$ 失速攻角
  • $\alpha_{0}$ 升力系数为0的攻角

其他参数

代码 void LiftDragPlugin::OnUpdate()

以 Tools/sitl_gazebo/models/plane 中的飞机为例

# 伪代码
不写了 就是一堆 kx+b  看绿色曲线自己猜就行。
复杂的是坐标变换

使用

<plugin name="left_wing" filename="libLiftDragPlugin.so">
      <a0>0.05984281113</a0>
      # 直观猜测 cla 升力系数 (lift) cda 阻力系数 (drag) cma (moment)
      <cla>4.752798721</cla>
      <cda>0.6417112299</cda>
      <cma>0.0</cma> 
      
	# 失速攻角 alpha_stall,失速系数cla_stall
      <alpha_stall>0.3391428111</alpha_stall> 
      <cla_stall>-3.85</cla_stall>
      <cda_stall>-0.9233984055</cda_stall>
      <cma_stall>0</cma_stall> 
      
      <cp>-0.05 0.45 0.05</cp> 
      <area>0.6</area>
      <air_density>1.2041</air_density>
      <forward>1 0 0</forward>
      <upward>0 0 1</upward>
      <link_name>base_link</link_name>
      <!--<topic_name>lift_force/left_elevon</topic_name> Uncomment to draw the force -->
      <control_joint_name>
        left_elevon_joint
      </control_joint_name>
      <control_joint_rad_to_cl>-0.3</control_joint_rad_to_cl>
      <robotNamespace></robotNamespace>
      <windSubTopic>world_wind</windSubTopic>

备注

升力和阻力由当前状态决定

推力由电机映射 Tools/sitl_gazebo/src/gazebo_motor_model.cpp