T
- the type of the field elementspublic class FieldAngularCoordinates<T extends RealFieldElement<T>> extends Object
RealFieldElement
.
The state can be slightly shifted to close dates. This shift is based on a simple quadratic model. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.
This class is the angular counterpart to FieldPVCoordinates
.
Instances of this class are guaranteed to be immutable.
AngularCoordinates
Constructor and Description |
---|
FieldAngularCoordinates(Field<T> field,
AngularCoordinates ang)
Builds a FieldAngularCoordinates from a field and a regular AngularCoordinates.
|
FieldAngularCoordinates(FieldPVCoordinates<T> u1,
FieldPVCoordinates<T> u2,
FieldPVCoordinates<T> v1,
FieldPVCoordinates<T> v2,
double tolerance)
Build the rotation that transforms a pair of pv coordinates into another one.
|
FieldAngularCoordinates(FieldRotation<FieldDerivativeStructure<T>> r)
Builds a FieldAngularCoordinates from a
FieldRotation <FieldDerivativeStructure >. |
FieldAngularCoordinates(FieldRotation<T> rotation,
FieldVector3D<T> rotationRate)
Builds a rotation/rotation rate pair.
|
FieldAngularCoordinates(FieldRotation<T> rotation,
FieldVector3D<T> rotationRate,
FieldVector3D<T> rotationAcceleration)
Builds a rotation / rotation rate / rotation acceleration triplet.
|
Modifier and Type | Method and Description |
---|---|
FieldAngularCoordinates<T> |
addOffset(FieldAngularCoordinates<T> offset)
Add an offset from the instance.
|
FieldPVCoordinates<T> |
applyTo(FieldPVCoordinates<T> pv)
Apply the rotation to a pv coordinates.
|
FieldPVCoordinates<T> |
applyTo(PVCoordinates pv)
Apply the rotation to a pv coordinates.
|
TimeStampedFieldPVCoordinates<T> |
applyTo(TimeStampedFieldPVCoordinates<T> pv)
Apply the rotation to a pv coordinates.
|
TimeStampedFieldPVCoordinates<T> |
applyTo(TimeStampedPVCoordinates pv)
Apply the rotation to a pv coordinates.
|
static <T extends RealFieldElement<T>> |
createFromModifiedRodrigues(T[][] r)
Convert a modified Rodrigues vector and derivatives to angular coordinates.
|
static <T extends RealFieldElement<T>> |
estimateRate(FieldRotation<T> start,
FieldRotation<T> end,
double dt)
Estimate rotation rate between two orientations.
|
static <T extends RealFieldElement<T>> |
estimateRate(FieldRotation<T> start,
FieldRotation<T> end,
T dt)
Estimate rotation rate between two orientations.
|
static <T extends RealFieldElement<T>> |
getIdentity(Field<T> field)
Fixed orientation parallel with reference frame
(identity rotation, zero rotation rate and acceleration).
|
T[][] |
getModifiedRodrigues(double sign)
Convert rotation, rate and acceleration to modified Rodrigues vector and derivatives.
|
FieldRotation<T> |
getRotation()
Get the rotation.
|
FieldVector3D<T> |
getRotationAcceleration()
Get the rotation acceleration.
|
FieldVector3D<T> |
getRotationRate()
Get the rotation rate.
|
FieldAngularCoordinates<T> |
revert()
Revert a rotation / rotation rate / rotation acceleration triplet.
|
FieldAngularCoordinates<T> |
shiftedBy(double dt)
Get a time-shifted state.
|
FieldAngularCoordinates<T> |
shiftedBy(T dt)
Get a time-shifted state.
|
FieldAngularCoordinates<T> |
subtractOffset(FieldAngularCoordinates<T> offset)
Subtract an offset from the instance.
|
AngularCoordinates |
toAngularCoordinates()
Convert to a regular angular coordinates.
|
FieldRotation<FieldDerivativeStructure<T>> |
toDerivativeStructureRotation(int order)
Transform the instance to a
FieldRotation <FieldDerivativeStructure >. |
FieldRotation<FieldUnivariateDerivative1<T>> |
toUnivariateDerivative1Rotation()
Transform the instance to a
FieldRotation <UnivariateDerivative1 >. |
public FieldAngularCoordinates(FieldRotation<T> rotation, FieldVector3D<T> rotationRate)
rotation
- rotationrotationRate
- rotation rate Ω (rad/s)public FieldAngularCoordinates(FieldRotation<T> rotation, FieldVector3D<T> rotationRate, FieldVector3D<T> rotationAcceleration)
rotation
- i.e. the orientation of the vehiclerotationRate
- rotation rate rate Ω, i.e. the spin vector (rad/s)rotationAcceleration
- angular acceleration vector dΩ/dt (rad²/s²)public FieldAngularCoordinates(FieldPVCoordinates<T> u1, FieldPVCoordinates<T> u2, FieldPVCoordinates<T> v1, FieldPVCoordinates<T> v2, double tolerance)
WARNING! This method requires much more stringent assumptions on
its parameters than the similar constructor
from the FieldRotation
class.
As far as the FieldRotation constructor is concerned, the v₂
vector from
the second pair can be slightly misaligned. The FieldRotation constructor will
compensate for this misalignment and create a rotation that ensure v₁ = r(u₁)
and v₂ ∈ plane (r(u₁), r(u₂))
. THIS IS NOT
TRUE ANYMORE IN THIS CLASS! As derivatives are involved and must be
preserved, this constructor works only if the two pairs are fully
consistent, i.e. if a rotation exists that fulfill all the requirements: v₁ = r(u₁)
, v₂ = r(u₂)
, dv₁/dt = dr(u₁)/dt
, dv₂/dt
= dr(u₂)/dt
, d²v₁/dt² = d²r(u₁)/dt²
, d²v₂/dt² = d²r(u₂)/dt²
.
u1
- first vector of the origin pairu2
- second vector of the origin pairv1
- desired image of u1 by the rotationv2
- desired image of u2 by the rotationtolerance
- relative tolerance factor used to check singularitiespublic FieldAngularCoordinates(Field<T> field, AngularCoordinates ang)
field
- field for the componentsang
- AngularCoordinates to convertpublic FieldAngularCoordinates(FieldRotation<FieldDerivativeStructure<T>> r)
FieldRotation
<FieldDerivativeStructure
>.
The rotation components must have time as their only derivation parameter and have consistent derivation orders.
r
- rotation with time-derivatives embedded within the coordinatespublic static <T extends RealFieldElement<T>> FieldAngularCoordinates<T> getIdentity(Field<T> field)
T
- the type of the field elementsfield
- field for the componentspublic FieldRotation<FieldDerivativeStructure<T>> toDerivativeStructureRotation(int order)
FieldRotation
<FieldDerivativeStructure
>.
The DerivativeStructure
coordinates correspond to time-derivatives up
to the user-specified order.
order
- derivation order for the vector componentspublic FieldRotation<FieldUnivariateDerivative1<T>> toUnivariateDerivative1Rotation()
FieldRotation
<UnivariateDerivative1
>.
The UnivariateDerivative1
coordinates correspond to time-derivatives up
to the order 1.
public static <T extends RealFieldElement<T>> FieldVector3D<T> estimateRate(FieldRotation<T> start, FieldRotation<T> end, double dt)
Estimation is based on a simple fixed rate rotation during the time interval between the two orientations.
T
- the type of the field elementsstart
- start orientationend
- end orientationdt
- time elapsed between the dates of the two orientationspublic static <T extends RealFieldElement<T>> FieldVector3D<T> estimateRate(FieldRotation<T> start, FieldRotation<T> end, T dt)
Estimation is based on a simple fixed rate rotation during the time interval between the two orientations.
T
- the type of the field elementsstart
- start orientationend
- end orientationdt
- time elapsed between the dates of the two orientationspublic FieldAngularCoordinates<T> revert()
Build a triplet which reverse the effect of another triplet.
public FieldAngularCoordinates<T> shiftedBy(double dt)
The state can be slightly shifted to close dates. This shift is based on a simple quadratic model. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.
dt
- time shift in secondspublic FieldAngularCoordinates<T> shiftedBy(T dt)
The state can be slightly shifted to close dates. This shift is based on a simple quadratic model. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.
dt
- time shift in secondspublic FieldRotation<T> getRotation()
public FieldVector3D<T> getRotationRate()
public FieldVector3D<T> getRotationAcceleration()
public FieldAngularCoordinates<T> addOffset(FieldAngularCoordinates<T> offset)
We consider here that the offset rotation is applied first and the
instance is applied afterward. Note that angular coordinates do not
commute under this operation, i.e. a.addOffset(b)
and b.addOffset(a)
lead to different results in most cases.
The two methods addOffset
and
subtractOffset
are designed
so that round trip applications are possible. This means that both ac1.subtractOffset(ac2).addOffset(ac2)
and ac1.addOffset(ac2).subtractOffset(ac2)
return angular coordinates equal to ac1.
offset
- offset to subtractsubtractOffset(FieldAngularCoordinates)
public FieldAngularCoordinates<T> subtractOffset(FieldAngularCoordinates<T> offset)
We consider here that the offset Rotation is applied first and the
instance is applied afterward. Note that angular coordinates do not
commute under this operation, i.e. a.subtractOffset(b)
and b.subtractOffset(a)
lead to different results in most cases.
The two methods addOffset
and
subtractOffset
are designed
so that round trip applications are possible. This means that both ac1.subtractOffset(ac2).addOffset(ac2)
and ac1.addOffset(ac2).subtractOffset(ac2)
return angular coordinates equal to ac1.
offset
- offset to subtractaddOffset(FieldAngularCoordinates)
public AngularCoordinates toAngularCoordinates()
public FieldPVCoordinates<T> applyTo(PVCoordinates pv)
pv
- vector to apply the rotation topublic TimeStampedFieldPVCoordinates<T> applyTo(TimeStampedPVCoordinates pv)
pv
- vector to apply the rotation topublic FieldPVCoordinates<T> applyTo(FieldPVCoordinates<T> pv)
pv
- vector to apply the rotation topublic TimeStampedFieldPVCoordinates<T> applyTo(TimeStampedFieldPVCoordinates<T> pv)
pv
- vector to apply the rotation topublic T[][] getModifiedRodrigues(double sign)
The modified Rodrigues vector is tan(θ/4) u where θ and u are the rotation angle and axis respectively.
sign
- multiplicative sign for quaternion componentscreateFromModifiedRodrigues(RealFieldElement[][])
public static <T extends RealFieldElement<T>> FieldAngularCoordinates<T> createFromModifiedRodrigues(T[][] r)
T
- the type of the field elementsr
- modified Rodrigues vector (with first and second times derivatives)getModifiedRodrigues(double)
Copyright © 2002-2020 CS GROUP. All rights reserved.