< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-空气动力学(Aerodynamics)插件

ROS2与Gazebo11入门教程-空气动力学(Aerodynamics)插件

说明:

  • 介绍升力(lift)和阻力(drag)这两种物理现象以及它们在Gazebo软件的LiftDragPlugin插件中是如何实现的

物理学背景知识

  • 流体力学

  • 流体力学是对液体和气体上或由于液体和气体引起的力的研究。流体力学问题的解决非常复杂,对流体力学进行真实完整的仿真在计算上是令人望而却步的。因此,Gazebo对浸没在流体中的物体上的力进行仿真并将这些力直接施加到该物体的链节上。特别是升力和阻力现象对于水下和空气动力学交通工具而言很有帮助。

  • 升力

  • 当流体流经一个物体表面时会对其产生一个表面力,该表面力中垂直于流体流向的分力即为升力

  • 阻力

  • 阻力是由于流体流经物体而产生的与物体运动方向相反的力。

  • 迎角和阿尔法斜率

  • 迎角AOA或α(alpha)是物体运动方向与参考平面之间的角度。参考平面通常是水平的(垂直于重力方向)。

请输入图片描述

  • 在进行空气动力学建模时,必须考虑物体的迎角和升力系数之间的关系:

请输入图片描述

  • 物体的alpha-升力曲线通常是通过实验确定的。

  • 阻力系数与alpha也具有相似的关系,但是请注意,对于既定物体,alpha -升力系数曲线和alpha -阻力系数曲线不一定相同。

  • 失速(stall)

  • 临界迎角是alpha-升力系数曲线达到最大值时的角度。失速定义为临界迎角之后的时期,此时升力系数会随迎角的增大而减小。

使用LiftDragPlugin插件

  • 插件LiftDragPlugin对迎角(或alpha)与升力系数之间的关系做了一个重要假设:把alpha -升力系数曲线简化成两条直线,而不是平滑曲线(见下图)。

请输入图片描述

  • 该插件对迎角与阻力系数之间的关系也做了这个相同的假设。

  • 请注意,在本示例中,机翼的外倾角非零,并且在零迎角处具有净正升力。若要使用Gazebo当前的LiftDragPlugin插件参数获得等效表示,则请将整个曲线向右平移,以使零升力点对应于零迎角。这样可以将原始零迎角位置标记为平移后曲线中的a0(a0等于5°)。也要相应地平移失速角,即alpha_stall现在是19.2°。

  • 下面是一个示例插件,实现了上图中的升力系数值和失速角:

<plugin name="lifting_surface" filename="libLiftDragPlugin.so">



<!-- taken from the lift curve figure -->

<!-- alpha_0 is 5 degrees -->

<a0>0.08727</a0>

<!-- alpha_stall is 19.3 degrees -->

<alpha_stall>0.3368</alpha_stall>

<!-- slope of the lift curve to the left of the stall angle -->

<cla>5.418</cla>

<!-- slope of the lift curve to the right of the stall angle -->

<cla_stall>-2.1419</cla_stall>



<!-- below are just random values in this example -->

<cda>0.0</cda>

<cda_stall>0.0</cda_stall>

<cma>0.0</cma>

<cma_stall>0.0</cma_stall>

<area>3</area>

<fluid_density>1.2041</fluid_density>

<forward>-1 0 0</forward>

<upward>0 -1 0</upward>

<cp>0 0 1</cp>

<link_name>lifting_surface_link</link_name>

<radial_symmetry>false</radial_symmetry>

</plugin>
  • 而且,机翼坐标系由下图定义:

请输入图片描述

  • 在不仿真诱导阻力的情况下,机翼的前进(forward)方向表示的是机翼预期的飞行前进方向,该方向平行于机翼弦线;而上升(upward)方向是与前进方向垂直的方向,并朝向与正迎角相对应的升力方向。按照惯例,阻力是与机身的惯性速度相反的,而升力是垂直于阻力方向的,并朝向正迎角。参考平面由矢量和翼展方向矢量正交构成(其中翼展方向又是由 正交构成的)

  • 最后,将压力中心定义为父级链接坐标系中的一个偏移量。对自由流体速度的测量是在该压力中心上进行的,同时也将计算出的升力、阻力和力矩应用在该压力中心上。 参见下图:

请输入图片描述

  • 输入参数

  • 插件LiftDragPlugin使用以下参数:

  • link_name:受到升力/阻力属性组影响的链接名称。

  • air_density:模型悬浮于其中的流体(空气)的密度。

  • area:该链接的表面积。

  • a0:初始“ alpha”或初始迎角。a0也是alpha-升力系数曲线的y-截距。

  • cla:失速前升力系数与alpha曲线斜率的比率。即alpha-升力系数曲线第一部分的斜率。

  • cda:失速前阻力系数与alpha曲线斜率的比率。

  • cp:压力中心。由升力和阻力引起的力会作用在此处。

  • forward:3维矢量,代表机体移动在链接坐标系中的前进方向。

  • upward:3维矢量,代表升力或阻力的方向。

  • alpha_stall:失速点的迎角,即峰值迎角(最大迎角)。

  • cla_stall:失速后升力系数与alpha曲线斜率的比率,即alpha-升力系数曲线第二部分的斜率。

  • cda_stall:失速后的阻力系数与alpha斜率的比率。

  • 固定翼模型

  • 用Gazebo打开cessna_demo.world仿真环境,命令为:

gazebo --verbose worlds/cessna_demo.world

请输入图片描述

  • 该仿真世界包含一个具有以下三种不同插件的Cessna C-172固定翼模型:

  • CessnaPlugin:该模型插件会发布〜/cessna_c172/control话题,用于通过Gazebo消息控制推力(thrust)和控制表面。该插件还会将模型状态发布到话题〜/cessna_c172/state中。要获取有关该插件必需参数和可选参数的详细说明,请参阅包含在该插件头文件中的文档。下面是cessna_demo.world世界文件中包含该插件的代码块:

<!-- A plugin for controlling the thrust and control surfaces -->

<plugin name="cessna_control" filename="libCessnaPlugin.so">

<propeller>cessna_c172::propeller_joint</propeller>

<propeller_max_rpm>2500</propeller_max_rpm>

<left_aileron>cessna_c172::left_aileron_joint</left_aileron>

<left_flap>cessna_c172::left_flap_joint</left_flap>

<right_aileron>cessna_c172::right_aileron_joint</right_aileron>

<right_flap>cessna_c172::right_flap_joint</right_flap>

<elevators>cessna_c172::elevators_joint</elevators>

<rudder>cessna_c172::rudder_joint</rudder>

</plugin>
  • CessnaGUIPlugin:该GUI插件会发布Cessna消息以修改控制表面的角度和推力。Cessna可用的控制键包括以下11个键:
w 加大推力Increase thrust (+10 %)
s 减小推力Decrease thrust (-10 %)
d 加大舵角Increase rudder angle (+1 degree)
a 减小舵角Decrease rudder angle (-1 degree)
Left-Key 向左翻转Left roll (+1 degree)
Right-Key 向右翻转Right roll (+1 degree)
Up-Key 向下俯冲Pitch down (+1 degree)
Down-Key 向上仰冲Pitch up (+1 degree)
预设起飞Preset for take-off
预设巡航Preset for cruise
预设着陆Preset for landing
  • LiftDragPlugin:可以在飞机模型的某些组件中使用该插件来产生升力和阻力。螺旋桨将根据其角速度生成推力。控制表面将根据其具体的角度和速度生成不同的力。Gazebo使用来自Cessna 172P的jsbsim值,对LiftDragPlugin空气动力学参数进行了近似估算。

  • 打开一个新终端并执行以下命令来可视化Cessna的状态:

gz topic -e /gazebo/default/cessna_c172/state
  • 在Gazebo窗口中,鼠标右键点击该固定翼模型并选中“跟随(Follow)”菜单项。用户相机将会在飞行过程中跟随飞机,这样就不会跟丢飞机

  • 按数字“ 1”键启动起飞预设过程。螺旋桨应该会开始旋转,这样该模型应该会在跑道方向上获得加速。

  • 使用“向下箭头键(Down-arrow key)”来使该固定翼模型向上仰冲并起飞。尝试使用箭头键让飞机在空中保持平衡。

  • 在飞行过程中,可以探索一下前面详细说明过的可用控制键的所有不同控制组合,以观察它们的不同作用。

  • 可以打开下面这个链接来观看该固定翼模型的飞行仿真视频

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程