gazebo:固定翼的空气动力学
LiftDragPlugin::LiftDragPlugin() : cla(1.0), cda(0.01), cma(0.0), rho(1.2041)
源码
分两个部分
- 空气动力学实现的插件
- 插件的使用位置
实现
官方给了一个教程
https://classic.gazebosim.org/tutorials?tut=aerodynamics
插件名为 LiftDragPlugin ,大概400行
空气动力学的简化
简化为两个力 升力和 阻力
升力的计算
关键概念
- 攻角 AOA(Angle of Attack) 用
表示 - 升力系数 C
- 失速 stall
图中 红色为 升力系数随攻角的变换,绿色将曲线拟合为两段,前半段是正常状况,后半段是失速状况
因此 描述 升力 两个线性方程 四个关键 参数为
: 升力曲线 斜率 : 失速后升力曲线 斜率 失速攻角 升力系数为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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!