🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
KinematicRotation.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "Rotation.hpp"
25#include "AstCore/OrbitElement.hpp"
26
27AST_NAMESPACE_BEGIN
28
32{
33public:
34 using Rotation::getMatrix;
35 using Rotation::transformVector;
36 using Rotation::getQuaternion;
37
39 static KinematicRotation Identity();
40
42 KinematicRotation() = default;
43
47 KinematicRotation(const Rotation& rot, const Vector3d& angvel);
48
49
53 KinematicRotation(const Matrix3d& mat, const Vector3d& angvel);
54
57 const Vector3d& getRotationRate() const { return angvel_; }
58
61 void setRotationRate(const Vector3d& angvel) { angvel_ = angvel; }
62
65 const Rotation& getRotation() const { return *this; }
66 Rotation& getRotation() { return *this; }
67
68
71 void setRotation(const Rotation& rot) { (Rotation&)*this = rot; }
72
76 KinematicRotation& compose(const KinematicRotation& next);
77
82 KinematicRotation composed(const KinematicRotation& next) const;
83
88 KinematicRotation operator*(const KinematicRotation& next) const;
89
94 KinematicRotation& operator*=(const KinematicRotation& next);
95
98 void getInverse(KinematicRotation& inversed) const;
99
102 KinematicRotation inverse() const;
103
109 void transformVectorVelocity(const Vector3d& vector, const Vector3d& velocity, Vector3d& vectorOut, Vector3d& velocityOut) const;
110
114 CartState transformCartState(const CartState& state) const;
115
122 void transformVectorVelocityInv(const Vector3d& vector, const Vector3d& velocity, Vector3d& vectorOut, Vector3d& velocityOut) const;
123protected:
124 Vector3d angvel_;
125};
126
127A_ALWAYS_INLINE KinematicRotation KinematicRotation::Identity()
128{
129 return KinematicRotation(Matrix3d::Identity(), Vector3d::Zero());
130}
131
132A_ALWAYS_INLINE KinematicRotation::KinematicRotation(const Matrix3d &mat, const Vector3d &angvel)
133 : Rotation(mat)
134 , angvel_(angvel)
135{
136}
137
138A_ALWAYS_INLINE KinematicRotation::KinematicRotation(const Rotation &rot, const Vector3d &angvel)
139 : Rotation(rot)
140 , angvel_(angvel)
141{
142}
143
145{
146 angvel_ = this->angvel_ + next.angvel_ * this->matrix_;
147 matrix_ = next.matrix_ * this->matrix_;
148 return *this;
149}
150
152{
153 return KinematicRotation(next.matrix_ * this->matrix_, this->angvel_ + next.angvel_ * this->matrix_);
154}
155
157{
158 return composed(next);
159}
160
162{
163 return compose(next);
164}
165
166A_ALWAYS_INLINE void KinematicRotation::getInverse(KinematicRotation &inversed) const
167{
168 inversed.setRotationRate(-(this->matrix_*angvel_));
169 this->Rotation::getInverse(inversed);
170}
171
173{
174 KinematicRotation retval;
175 this->getInverse(retval);
176 return retval;
177}
178
179A_ALWAYS_INLINE void KinematicRotation::transformVectorVelocity(const Vector3d &vector, const Vector3d &velocity, Vector3d& vectorOut, Vector3d &velocityOut) const
180{
181 // 注意:这里要先计算velocityOut,防止vector和vectorOut地址相同时值被覆盖
182 velocityOut = this->matrix_ * (velocity - this->angvel_.cross(vector));
183 vectorOut = this->matrix_ * vector;
184}
185
187{
188 CartState stateOut;
189 this->transformVectorVelocity(state.pos(), state.vel(), stateOut.pos(), stateOut.vel());
190 return stateOut;
191}
192
193A_ALWAYS_INLINE void KinematicRotation::transformVectorVelocityInv(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
194{
195 vectorOut = vector * this->matrix_;
196 velocityOut = velocity* this->matrix_ + this->angvel_.cross(vectorOut);
197}
198
199AST_NAMESPACE_END
直角坐标
定义 OrbitElement.hpp:46
const Vector3d & pos() const
获取位置
定义 OrbitElement.hpp:59
const Vector3d & vel() const
获取速度
定义 OrbitElement.hpp:64
运动学坐标系旋转
定义 KinematicRotation.hpp:32
void setRotationRate(const Vector3d &angvel)
设置坐标系旋转角速度
定义 KinematicRotation.hpp:61
KinematicRotation composed(const KinematicRotation &next) const
组合下一个旋转
定义 KinematicRotation.hpp:151
CartState transformCartState(const CartState &state) const
变换状态向量和速度
定义 KinematicRotation.hpp:186
Vector3d angvel_
角速度
定义 KinematicRotation.hpp:124
const Vector3d & getRotationRate() const
获取坐标系旋转角速度
定义 KinematicRotation.hpp:57
void transformVectorVelocityInv(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
变换位置和速度(逆变换)
定义 KinematicRotation.hpp:193
KinematicRotation()=default
运动学旋转默认构造函数
const Rotation & getRotation() const
获取坐标系旋转
定义 KinematicRotation.hpp:65
void transformVectorVelocity(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
变换向量和速度
定义 KinematicRotation.hpp:179
KinematicRotation & operator*=(const KinematicRotation &next)
组合下一个坐标系旋转
定义 KinematicRotation.hpp:161
void getInverse(KinematicRotation &inversed) const
获取逆旋转
定义 KinematicRotation.hpp:166
KinematicRotation operator*(const KinematicRotation &next) const
组合下一个旋转
定义 KinematicRotation.hpp:156
KinematicRotation & compose(const KinematicRotation &next)
组合下一个坐标系旋转
定义 KinematicRotation.hpp:144
void setRotation(const Rotation &rot)
设置坐标系旋转
定义 KinematicRotation.hpp:71
KinematicRotation inverse() const
获取逆旋转
定义 KinematicRotation.hpp:172
坐标系旋转类
定义 Rotation.hpp:39
void getInverse(Rotation &inversed) const
获取逆旋转
定义 Rotation.hpp:290