48 lines
2.3 KiB
Markdown
48 lines
2.3 KiB
Markdown
# angular-motion-lib
|
||
|
||
Библиотека расчета программ управления угловым движением КА.
|
||
|
||
Библиотека создана как перенос расчетного контура из проекта `OrbitalMotion/AISTPUUD/SurveyPUUD`:
|
||
|
||
- `ConstOrientAISTPUUD` → `ConstOrientPUUD`;
|
||
- `AzimuthAISTPUUD` → `AzimuthPUUD`;
|
||
- `SmoothSDIAISTPUUD` → `SmoothSDIPUUD`.
|
||
|
||
В новых классах нет префикса `AIST`. Вместо старого C++/Qt `Ballistics` используется существующая Kotlin-библиотека проекта PCP:
|
||
|
||
- `ballistics.orbitalPoints.timeStepper.AbstractStepper` для выхода на заданное время;
|
||
- `ballistics.types.OrbitalPoint`, `Orientation`, `BLHPoint`;
|
||
- `ballistics.utils.astro.AstronomerJ2000`;
|
||
- `ballistics.utils.math.Vector3D`, `Matrix3D`, `Quaternion3D`.
|
||
|
||
В текущей модели спутника используется одна центральная линия визирования. Номер линии визирования и отклонения боковых линий из расчетного API удалены.
|
||
|
||
Основной API:
|
||
|
||
```kotlin
|
||
val calculator = AngularMotionCalculatorFactory.create(
|
||
mode = AngularMotionMode.AZIMUTH,
|
||
stepper = stepper,
|
||
)
|
||
|
||
val result = calculator.calculate(
|
||
SurveyId(
|
||
t = startTimeSeconds,
|
||
b = latitudeRad,
|
||
l = longitudeRad,
|
||
h = heightMeters,
|
||
duration = 20.0,
|
||
sdi = listOf(150.0),
|
||
azimuth = azimuthRad,
|
||
)
|
||
)
|
||
```
|
||
|
||
## Примечания по переносу
|
||
|
||
1. Временные параметры задаются в интегральных секундах, как в `ballistics-lib`.
|
||
2. Углы задаются в радианах.
|
||
3. Линейные параметры оптики в `AngularMotionConfig` сохранены в миллиметрах, как в исходном `sBLS_KA`.
|
||
4. Расчет времени начала режима сохраняет подход `calcTn`: поиск корня на интервале `t ± 180 с` и округление к `discreteTimes`.
|
||
5. Интервал успокоения рассчитывается обратной интерполяцией первых точек ПУУД, аналогично `TauIntervalCalculator`.
|