FOUND
Loading...
Searching...
No Matches
stage-providers.hpp
Go to the documentation of this file.
1#ifndef STAGE_PROVIDERS_H_
2#define STAGE_PROVIDERS_H_
3
4#include <memory>
5
7
8#include "common/pipeline.hpp"
9
11
12#include "distance/edge.hpp"
13#include "distance/distance.hpp"
15
16#include "orbit/orbit.hpp"
17
18// TODO(nguy8tri): Include statement for Orbit Pipeline
19// TODO: Fully Implement this when orbit stage is implemented
20
21#include "common/decimal.hpp"
22
23namespace found {
24
32std::unique_ptr<CalibrationAlgorithm> ProvideCalibrationAlgorithm([[maybe_unused]] CalibrationOptions &&options) {
33 return std::make_unique<LOSTCalibrationAlgorithm>();
34}
35
43std::unique_ptr<EdgeDetectionAlgorithm> ProvideEdgeDetectionAlgorithm(DistanceOptions &&options) {
44 return std::make_unique<SimpleEdgeDetectionAlgorithm>(options.SEDAThreshold,
45 options.SEDABorderLen,
46 options.SEDAOffset);
47}
48
56std::unique_ptr<DistanceDeterminationAlgorithm> ProvideDistanceDeterminationAlgorithm(DistanceOptions &&options) {
57 if (options.distanceAlgo == SDDA) {
58 return std::make_unique<SphericalDistanceDeterminationAlgorithm>(options.radius,
59 Camera(options.focalLength,
60 options.pixelSize,
61 options.image.width,
62 options.image.height));
63 } else if (options.distanceAlgo == ISDDA) {
64 return std::make_unique<IterativeSphericalDistanceDeterminationAlgorithm>(options.radius,
65 Camera(options.focalLength,
66 options.pixelSize,
67 options.image.width,
68 options.image.height),
69 options.ISDDAMinIters,
70 options.ISDDADistRatio,
71 options.ISDDADiscimRatio,
72 options.ISDDAPdfOrd,
73 options.ISDDARadLossOrd);
74 } else {
75 LOG_ERROR("Unrecognized distance algorithm: " << options.distanceAlgo);
76 throw std::runtime_error("Unrecognized distance algorithm: " + options.distanceAlgo);
77 }
78}
79
87std::unique_ptr<VectorGenerationAlgorithm> ProvideVectorGenerationAlgorithm(DistanceOptions &&options) {
88 Quaternion referenceOrientation = SphericalToQuaternion(options.refOrientation);
89 if (options.calibrationData.header.version != emptyDFVer) {
90 LOG_INFO("Using DataFile for calibration information");
91 return std::make_unique<LOSTVectorGenerationAlgorithm>(options.calibrationData.relative_attitude,
92 referenceOrientation);
93 } else {
94 Quaternion relativeOrientation = SphericalToQuaternion(options.relOrientation);
95 if (options.refAsOrientation) {
96 LOG_INFO("Using provided reference orientation for calibration information");
97 return std::make_unique<LOSTVectorGenerationAlgorithm>(referenceOrientation);
98 }
99 return std::make_unique<LOSTVectorGenerationAlgorithm>(relativeOrientation, referenceOrientation);
100 }
101}
102
103// TODO: Uncomment when orbit stage is implemented
111// std::unique_ptr<OrbitPropagationAlgorithm> ProvideOrbitPropagationAlgorithm(OrbitOptions &&options) {
112// return std::make_unique<ApproximateOrbitPropagationAlgorithm>(options.totalTime,
113// options.dt,
114// options.radius,
115// options.mu);
116// }
117
118} // namespace found
119
120#endif // STAGE_PROVIDERS_H_
Definition options.hpp:81
Definition options.hpp:89
A Camera is a mutable object that represents a Camera.
Definition camera.hpp:17
A Quaternion is a mutable object that represents a Quaternion.
Definition attitude-utils.hpp:192
#define LOG_ERROR(msg)
Definition logging.hpp:117
#define LOG_INFO(msg)
Definition logging.hpp:115
Definition calibrate.cpp:7
std::unique_ptr< EdgeDetectionAlgorithm > ProvideEdgeDetectionAlgorithm(DistanceOptions &&options)
Provides an EdgeDetectionAlgorithm.
Definition stage-providers.hpp:43
std::unique_ptr< CalibrationAlgorithm > ProvideCalibrationAlgorithm(CalibrationOptions &&options)
Provides a CalibrationAlgorithm.
Definition stage-providers.hpp:32
std::unique_ptr< DistanceDeterminationAlgorithm > ProvideDistanceDeterminationAlgorithm(DistanceOptions &&options)
Provides a DistanceDeterminationAlgorithm.
Definition stage-providers.hpp:56
std::unique_ptr< VectorGenerationAlgorithm > ProvideVectorGenerationAlgorithm(DistanceOptions &&options)
Provides a VectorGenerationAlgorithm.
Definition stage-providers.hpp:87
Quaternion SphericalToQuaternion(decimal ra, decimal dec, decimal roll)
Converts Euler Angles into a quaternion.
Definition attitude-utils.cpp:182
#define ISDDA
Definition options.hpp:45
#define emptyDFVer
Version for an empty/null Data File.
Definition options.hpp:29
#define SDDA
Definition options.hpp:44