public class AttitudesSequence extends Object implements AttitudeProvider
序列中只有一个姿态提供者处于活动状态。当与活动提供者关联的切换事件之一发生时,活动提供者变为事件指定的提供者。一个简单的例子是轨道的太阳照射部分提供者和日食时间提供者。当太阳照射提供者处于活动状态时,检查日食入口事件,当发生时激活日食提供者。当日食提供者处于活动状态时,检查日食退出事件,当发生时再次激活太阳照射提供者。这个序列是一个简单的循环。
活动姿态提供者可能有几个切换事件和下一个提供者设置,导致根据触发的事件不同而产生不同的激活模式。这个特性的一个例子是处理安全模式切换,如果满足某些突发情况条件,除了对应于正常操作的标准切换。另一个例子是处理机动模式。
请注意,这个姿态提供者是有状态的,它在内存中保留了活动底层提供者的序列及其切换日期以及从一个提供者到另一个提供者的过渡。这意味着这个提供者不应该在同时被不同的推算器共享,每个推算器应该使用自己的这个提供者的实例。
在调用resetActiveProvider(AttitudeProvider)
时,内存中保留的序列将被重置,只保留指定的提供者。每次开始传播时,序列也会部分重置。如果在第一次传播运行后启动新的传播,则所有已计算的切换都将被擦除,这些切换发生在正向传播的传播开始之后或反向传播的传播开始之前。新的切换将根据新的传播设置正确计算和应用。未覆盖的已计算的切换将保留在内存中。这意味着如果传播被中断并在同一方向重新启动,则姿态切换将保持不变,确保即使中断发生在姿态过渡的中间,第二次传播也将正确完成第一个推算器开始的过渡。
Modifier and Type | Class and Description |
---|---|
static interface |
AttitudesSequence.SwitchHandler
姿态切换通知的接口。
|
Constructor and Description |
---|
AttitudesSequence()
初始为空序列的构造函数。
|
Modifier and Type | Method and Description |
---|---|
<T extends EventDetector> |
addSwitchingCondition(AttitudeProvider past, AttitudeProvider future, T switchEvent, boolean switchOnIncrease, boolean switchOnDecrease, double transitionTime, AngularDerivativesFilter transitionFilter, AttitudesSequence.SwitchHandler handler)
在两个姿态提供者之间添加切换条件。
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
getAttitude(FieldPVCoordinatesProvider<T> pvProv, FieldAbsoluteDate<T> date, Frame frame)
计算与轨道状态对应的姿态。
|
Attitude |
getAttitude(PVCoordinatesProvider pvProv, AbsoluteDate date, Frame frame)
计算与轨道状态对应的姿态。
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
getAttitudeRotation(FieldPVCoordinatesProvider<T> pvProv, FieldAbsoluteDate<T> date, Frame frame)
计算与轨道状态对应的姿态相关旋转。
|
org.hipparchus.geometry.euclidean.threed.Rotation |
getAttitudeRotation(PVCoordinatesProvider pvProv, AbsoluteDate date, Frame frame)
计算与轨道状态对应的姿态相关旋转。
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
registerSwitchEvents(org.hipparchus.Field<T> field, FieldPropagator<T> propagator)
将所有包装的切换事件注册到推算器。
|
void |
registerSwitchEvents(Propagator propagator)
将所有包装的切换事件注册到推算器。
|
void |
resetActiveProvider(AttitudeProvider provider)
重置活动提供者。
|
public void resetActiveProvider(AttitudeProvider provider)
调用此方法会清除所有已看到的切换历史记录,因此在传播过程中不应使用它,它只应在开始时使用
provider
- 要激活的提供者
public void registerSwitchEvents(Propagator propagator)
在传播之前必须调用此方法一次,之后通过调用addSwitchingCondition
设置切换条件。
propagator
- 将处理事件的推算器
public <T extends org.hipparchus.CalculusFieldElement<T>> void registerSwitchEvents(org.hipparchus.Field<T> field, FieldPropagator<T> propagator)
在传播之前必须调用此方法一次,之后通过调用addSwitchingCondition
设置切换条件。
T
- 字段元素的类型
field
- 元素所属的字段
propagator
- 将处理事件的推算器
public <T extends EventDetector> void addSwitchingCondition(AttitudeProvider past, AttitudeProvider future, T switchEvent, boolean switchOnIncrease, boolean switchOnDecrease, double transitionTime, AngularDerivativesFilter transitionFilter, AttitudesSequence.SwitchHandler handler)
过去
和未来
姿态提供者是根据时间的自然流动定义的。这意味着如果传播是正向的,推算器将在事件发生时从过去
提供者切换到未来
提供者,但如果传播是反向的,推算器将在事件发生时从未来
提供者切换到过去
提供者。两种姿态法之间的过渡不是瞬时的,切换事件定义了过渡的开始(即离开过去
姿态法并进入插值过渡法)。过渡的结束(即离开插值过渡法并进入未来
姿态法)发生在切换时间加上transitionTime
。
一个姿态提供者可能有几个不同的切换事件与之关联。根据触发的事件,适当的提供者将被切换到。
这里指定的切换事件不应直接注册到推算器。正确的注册方式是在设置所有切换条件后一次调用registerSwitchEvents(Propagator)
。原因是这些事件将在注册之前被包装。
如果底层探测器有与之关联的事件处理程序,那么该处理程序将被触发(即其eventOccurred
方法将被调用),无论事件是否真正触发姿态切换。例如,如果使用日食探测器在进入日食时从白天切换到夜晚姿态模式,其中switchOnIncrease
设置为false
,switchOnDecrease
设置为true
。那么直接在日食探测器级别设置的处理程序将在日食入口和日食退出时触发,但姿态切换仅发生在日食入口时。请注意,为了对称起见,过渡的开始和结束日期应该对正向和反向传播都匹配。这意味着对于反向传播,我们必须在查找事件时补偿transitionTime
。一个不幸的后果是,eventOccurred
方法可能看起来与传播不同步(当推算器到达过渡结束时将被调用,尽管它是指过渡开始,根据transitionTime
的补偿),如果方法返回Action.STOP
,它将在过渡结束时停止,而不是在开始时停止。因此,不建议为用于切换姿态的事件设置事件处理程序。如果需要其他目的的事件处理程序,应该向推算器注册第二个处理程序,而不是依赖姿态切换的副作用。
可以使用transitionTime
和transitionFilter
参数调整过去和未来姿态法之间的过渡平滑度。 transitionTime
参数指定从一种法到另一种法切换所需的时间。为了确保姿态连续性,它应该大于事件收敛阈值
。 transitionFilter
参数指定在过去姿态法和过渡法之间以及过渡法和未来姿态法之间的边界处应匹配的姿态时间导数。 AngularDerivativesFilter.USE_R
表示只有旋转应该相同,AngularDerivativesFilter.USE_RR
表示旋转和旋转速率都应相同,AngularDerivativesFilter.USE_RRA
表示旋转、旋转速率和旋转加速度都应相同。在过渡期间,姿态法通过在切换时间处的过去姿态法和当前中间时间处的未来姿态法之间插值来计算。
T
- 切换事件的类类型
past
- 适用于切换事件发生过去时间的姿态提供者
future
- 适用于切换事件发生未来时间的姿态提供者
switchEvent
- 触发姿态提供者切换的事件
switchOnIncrease
- 如果为true,则在增加事件时切换
switchOnDecrease
- 如果为true,则在减少事件时切换
transitionTime
- 过去和未来姿态法之间过渡的持续时间
transitionFilter
- 指定过渡法时间导数应匹配过去和未来姿态法
handler
- 在切换发生时调用的处理程序(可以为null)
public Attitude getAttitude(PVCoordinatesProvider pvProv, AbsoluteDate date, Frame frame)
getAttitude
在接口 AttitudeProvider
pvProv
- 当前日期周围的本地位置-速度提供者
date
- 当前日期
frame
- 计算姿态的参考坐标系
public <T extends org.hipparchus.CalculusFieldElement<T>> FieldAttitude<T> getAttitude(FieldPVCoordinatesProvider<T> pvProv, FieldAbsoluteDate<T> date, Frame frame)
getAttitude
在接口 AttitudeProvider
T
- 字段元素的类型
pvProv
- 当前日期周围的本地位置-速度提供者
date
- 当前日期
frame
- 计算姿态的参考坐标系
public org.hipparchus.geometry.euclidean.threed.Rotation getAttitudeRotation(PVCoordinatesProvider pvProv, AbsoluteDate date, Frame frame)
getAttitudeRotation
在接口 AttitudeProvider
pvProv
- 当前日期周围的本地位置-速度提供者
date
- 当前日期
frame
- 计算姿态的参考坐标系
public <T extends org.hipparchus.CalculusFieldElement<T>> org.hipparchus.geometry.euclidean.threed.FieldRotation<T> getAttitudeRotation(FieldPVCoordinatesProvider<T> pvProv, FieldAbsoluteDate<T> date, Frame frame)
AttitudeProvider
getAttitudeRotation
在接口 AttitudeProvider
T
- 字段元素的类型
pvProv
- 当前日期周围的本地位置-速度提供者
date
- 当前日期
frame
- 计算姿态的参考坐标系
Copyright © 2002-2023 CS GROUP. All rights reserved.