草庐IT

【导弹四种坐标系及坐标系之间的变换】

钢蛋儿(顺利毕业) 2023-10-22 原文

本文参考钱杏芳等编著的《导弹飞行力学》

文章目录


前言

坐标系是为描述导弹位置和运动规律而选取的参考基准。为了准确,简洁和清晰的描述导弹的运动方程,我们需要选取合适的坐标系并熟练掌握坐标系之间的转换。本文介绍了地面坐标系、弹体坐标系、弹道坐标系和速度坐标系四种坐标系的定义以及各坐标系之间的变换过程。


一、导弹常用的四种坐标系

1.地面坐标系

O-X-Y-Z坐标系

'OX轴':弹道(航迹)面与水平面的交线,指向目标为正;

'OY轴':垂直于OX轴,沿着垂线向上;

'OZ轴':根据右手定则判断。

随地球自转而自转,相对地面静止。

2.弹体坐标系


O-Xt-Yt-Zt坐标系

'OXt轴':导弹的纵轴,指向弹头为正;

'OYt轴':位于导弹的对称面,并垂直于OXt轴;

'OZt轴':根据右手定则判断。

3.弹道坐标系


O-Xd-Yd-Zd坐标系

'OXd轴':与速度矢量重合;

'OYd轴':位于铅垂面,并垂直于OXd轴;

'OZd轴':根据右手定则判断。

4.速度坐标系


O-Xa-Ya-Za坐标系

'OXa轴':与速度矢量重合;

'OYa轴':位于导弹对称面,并垂直于OXa轴;

'OZa轴':根据右手定则判断。

二、坐标系之间的变换

以2维坐标系变换为例:

由上图可得如下关系:
x ′ = x cos ⁡ θ − y sin ⁡ θ y ′ = x sin ⁡ θ + y cos ⁡ θ \begin{array}{l} x^{'} = x\cos \theta - y\sin \theta \\ y^{'} = x\sin \theta + y\cos \theta \end{array} x=xcosθysinθy=xsinθ+ycosθ
改写成矩阵形式为:
[ x ′ y ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x y ] \left[ {\begin{array}{} {x^{'}}\\ {y^{'}} \end{array}} \right] = \left[ {\begin{array}{} {\cos \theta }&{ - \sin \theta }\\ {\sin \theta }&{\cos \theta } \end{array}} \right]\left[ {\begin{array}{} x\\ y \end{array}} \right] [xy]=[cosθsinθsinθcosθ][xy]
所以 [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \left[ {\begin{array}{} {\cos \theta }&{ - \sin \theta }\\ {\sin \theta }&{\cos \theta } \end{array}} \right] [cosθsinθsinθcosθ]为坐标系 o x y oxy oxy o x ′ y ′ ox^{'}y^{'} oxy的变换矩阵。

1.地面坐标系 =>弹体坐标系

坐标变换可表示为
[ x t y t z t ] = C t g [ x y z ] \left[ {\begin{array}{} {{x_t}}\\ {{y_t}}\\ {{z_t}} \end{array}} \right] = {C_{tg}}\left[ {\begin{array}{} x\\ y\\ z \end{array}} \right] xtytzt =Ctg xyz
其中 C t g C_{tg} Ctg为变换矩阵。
变换过程如图所示:

俯仰角 ϑ \vartheta ϑ :导弹纵轴与水平面的夹角;
偏航角 ψ \psi ψ :弹体坐标系纵轴在水平面上的投影 o x ′ ox^{'} ox与地面坐标系 o x ox ox轴的夹角;
倾斜角 γ \gamma γ y t y_t yt轴与铅锤面( o x ′ y ′ ox^{'}y^{'} oxy)的夹角。

变换过程如下:
1.绕地面坐标系 o y oy oy轴旋转 ψ \psi ψ角度,则变换矩阵为:
L ( ψ ) = [ cos ⁡ ψ 0 − sin ⁡ ψ 0 1 0 sin ⁡ ψ 0 cos ⁡ ψ ] L(\psi ) = \left[ {\begin{array}{} {\cos \psi }&0&{ - \sin \psi }\\ 0&1&0\\ {\sin \psi }&0&{\cos \psi } \end{array}} \right] L(ψ)= cosψ0sinψ010sinψ0cosψ
2.绕过渡坐标系 o z ′ oz^{'} oz旋转 ϑ \vartheta ϑ角度,则变换矩阵为:
L ( θ ) = [ cos ⁡ ϑ sin ⁡ ϑ 0 − sin ⁡ ϑ cos ⁡ ϑ 0 0 0 1 ] L(\theta ) = \left[ {\begin{array}{} {\cos \vartheta }&{\sin \vartheta }&0\\ { - \sin \vartheta }&{\cos \vartheta }&0\\ 0&0&1 \end{array}} \right] L(θ)= cosϑsinϑ0sinϑcosϑ0001

3.绕弹体坐标系 o x t ox_{t} oxt轴旋转 γ \gamma γ角度,则变换矩阵为:
L ( γ ) = [ 1 0 0 cos ⁡ γ sin ⁡ γ 0 − sin ⁡ γ cos ⁡ γ 0 ] L(\gamma ) = \left[ {\begin{array}{} 1&0&0\\ {\cos \gamma }&{\sin \gamma }&0\\ { - \sin \gamma }&{\cos \gamma }&0 \end{array}} \right] L(γ)= 1cosγsinγ0sinγcosγ000

所以变换矩阵 C t g = L ( γ ) L ( ϑ ) L ( ψ ) C_{tg}=L(\gamma )L(\vartheta )L(\psi ) Ctg=L(γ)L(ϑ)L(ψ)

2.地面坐标系=>弹道坐标系

由于弹道坐标系与地面坐标系的z轴均在水平面内,因此只需要两个角就可以进行坐标系变换。

坐标变换可表示为
[ x d y d z d ] = C d g [ x y z ] \left[ {\begin{array}{} {{x_d}}\\ {{y_d}}\\ {{z_d}} \end{array}} \right] = {C_{dg}}\left[ {\begin{array}{} x\\ y\\ z \end{array}} \right] xdydzd =Cdg xyz
其中 C d g C_{dg} Cdg为变换矩阵。
变换过程如图所示:

弹道倾角 θ \theta θ:速度矢量 V V V与水平面之间的夹角;
弹道偏角 ψ v {\psi _v} ψv::速度矢量 V V V在水平面的投影 o x ′ ox^{'} ox与地面坐标系 o x ox ox轴的夹角。

变换过程如下:
1.绕地面坐标系 o y oy oy轴旋转 ψ v {\psi _v} ψv角度,则变换矩阵为:
L ( ψ v ) = [ cos ⁡ ψ v 0 − sin ⁡ ψ v 0 1 0 sin ⁡ ψ v 0 cos ⁡ ψ v ] L(\psi _v ) = \left[ {\begin{array}{} {\cos \psi _v }&0&{ - \sin \psi _v }\\ 0&1&0\\ {\sin \psi _v }&0&{\cos \psi _v } \end{array}} \right] L(ψv)= cosψv0sinψv010sinψv0cosψv
2.绕弹道坐标系 o z d oz_{d} ozd旋转 θ \theta θ角度,则变换矩阵为:
L ( θ ) = [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] L(\theta ) = \left[ {\begin{array}{} {\cos \theta }&{\sin \theta }&0\\ { - \sin \theta }&{\cos \theta }&0\\ 0&0&1 \end{array}} \right] L(θ)= cosθsinθ0sinθcosθ0001

所以变换矩阵 C d g = L ( θ ) L ( ψ v ) C_{dg}=L(\theta )L(\psi _v ) Cdg=L(θ)L(ψv)

3.速度坐标系=>弹体坐标系

由于速度坐标系与弹体坐标系的y轴均在导弹对称面内,因此只需要两个角就可以进行坐标系变换。

坐标变换可表示为
[ x t y t z t ] = C t a [ x a y a z a ] \left[ {\begin{array}{} {{x_t}}\\ {{y_t}}\\ {{z_t}} \end{array}} \right] = {C_{ta}}\left[ {\begin{array}{} x_a\\ y_a\\ z_a \end{array}} \right] xtytzt =Cta xayaza
其中 C t a C_{ta} Cta为变换矩阵。
变换过程如图所示:

攻角 α \alpha α:导弹纵轴 o x t ox_t oxt与水平面之间的夹角;
侧滑角 β \beta β:导弹纵轴在水平面的投影 o x ′ ox^{'} ox与速度坐标系 o x a ox_a oxa轴的夹角。
变换过程如下:
1.绕速度坐标系 o y a oy_a oya轴旋转 α {\alpha} α角度,则变换矩阵为:
L ( α ) = [ cos ⁡ α 0 − sin ⁡ α 0 1 0 sin ⁡ α 0 cos ⁡ α ] L(\alpha ) = \left[ {\begin{array}{} {\cos \alpha }&0&{ - \sin \alpha }\\ 0&1&0\\ {\sin \alpha }&0&{\cos \alpha } \end{array}} \right] L(α)= cosα0sinα010sinα0cosα
2.绕弹体坐标系 o z t oz_{t} ozt旋转 β \beta β角度,则变换矩阵为:
L ( β ) = [ cos ⁡ β sin ⁡ β 0 − sin ⁡ β cos ⁡ β 0 0 0 1 ] L(\beta ) = \left[ {\begin{array}{} {\cos \beta }&{\sin \beta }&0\\ { - \sin \beta }&{\cos \beta }&0\\ 0&0&1 \end{array}} \right] L(β)= cosβsinβ0sinβcosβ0001
所以变换矩阵 C t a = L ( β ) L ( α ) C_{ta}=L(\beta )L(\alpha ) Cta=L(β)L(α)

4.弹道坐标系=>速度坐标系

由于弹道坐标系和速度坐标系的x轴均与速度矢量重合,因此只需要一个角就可以完成坐标变换。

坐标变换可表示为
[ x a y a z a ] = C a d [ x d y d z d ] \left[ {\begin{array}{} {{x_a}}\\ {{y_a}}\\ {{z_a}} \end{array}} \right] = {C_{ad}}\left[ {\begin{array}{} x_d\\ y_d\\ z_d \end{array}} \right] xayaza =Cad xdydzd
其中 C a d C_{ad} Cad为变换矩阵。
变换过程如图所示:

速度倾斜角 γ v {\gamma _v} γv:速度坐标系 o y a oy_a oya轴与铅垂面( o x d y d ox_dy_d oxdyd)之间的夹角。
变换过程如下:
1.绕弹道坐标系 o x d ox_{d} oxd轴旋转 γ v \gamma _v γv角度,则变换矩阵为:
L ( γ v ) = [ 1 0 0 cos ⁡ γ v sin ⁡ γ v 0 − sin ⁡ γ v cos ⁡ γ v 0 ] L(\gamma _v) = \left[ {\begin{array}{} 1&0&0\\ {\cos \gamma _v}&{\sin \gamma _v}&0\\ { - \sin \gamma _v}&{\cos \gamma _v}&0 \end{array}} \right] L(γv)= 1cosγvsinγv0sinγvcosγv000
所以变换矩阵 C a d = L ( γ v ) C_{ad}=L(\gamma _v) Cad=L(γv)


总结

导弹坐标系及坐标系之间的变换是导弹运动及控制的研究基础。上述四种坐标系的变换可总结为下图所示,这样我们就可以通过角度进行任意坐标系之间的变换了。

有关【导弹四种坐标系及坐标系之间的变换】的更多相关文章

  1. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  2. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  3. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  4. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  5. ruby - 无法理解 `puts{}.class` 和 `puts({}.class)` 之间的区别 - 2

    由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A

  6. ruby - 在模块/类之间共享全局记录器 - 2

    在许多ruby​​类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..

  7. ruby - 在两个 ActiveRecord 类之间合并/复制属性的好方法? - 2

    之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote

  8. ruby-on-rails - 2个用户之间的产品订单 - 2

    我有三个模型:User、Product、Offer以及这些模型之间的关系问题。场景:用户1发布了一个产品用户2可以向用户1发送报价,例如10美元用户1可以接受或拒绝提议我现在的问题是:用户、产品和报价之间的正确关系是什么?我如何处理那些“接受或拒绝”操作?是否有更好的解决方案?用户模型:classUser:productsend产品型号:classProduct:usersend提供模型:classOffer提前致谢:)编辑:我正在使用Rails3.2.8 最佳答案 警告:小小说来了第1部分:设置关联我建议阅读Railsguideo

  9. Ruby:read_timeout 和 open_timeout 之间的区别 - 2

    标题本身就说明了......read_timeout和open_timeout之间有什么区别? 最佳答案 open_timeout是您愿意等待“打开连接”的时间。在TCP上下文中,在放弃尝试并引发超时错误之前等待握手完成的时间量。read_timeout您可能会猜到,是您愿意等待从连接方接收到某些数据的时间。一个例子可能会清楚地说明这一点:在SOAPoverHTTPoverTCP上下文中(简化):您尝试与服务器建立TCP连接。如果建立连接的时间比open_timeout长,则放弃连接尝试并引发/发出/返回超时错误。如果连接成功,您发

  10. ruby-on-rails - ActiveRecord 和 ActiveRecord::Relation 对象之间的区别 - 2

    我已经搜索过但无法找到ActiveRecord和ActiveRecord::relation对象之间区别的简要说明。我知道ActiveRecord是通过类似的东西找到的单个对象User.find(1)ActiveRecord::Relation是类似对象的数组,通过类似的方式查找User.where(id:1)我正在寻找它们在查询执行或对它们的深入解释方面的区别,因此它将清楚其背后的整个概念。提前致谢! 最佳答案 ActiveRecord::Base的一个实例是一个对象,表示您的数据库的特定行(或者可能保存到数据库中)。而Activ

随机推荐