25 #ifndef INCLUDED_OptimizationBase_h_GUID_C3489E14_63D4_4290_45C0_225AC84A8BF5
26 #define INCLUDED_OptimizationBase_h_GUID_C3489E14_63D4_4290_45C0_225AC84A8BF5
66 auto system = makeHDKTrackingSystem(params);
67 auto &body = system->getBody(
BodyId(0));
68 auto &target = *(body.getTarget(
TargetId(0)));
69 return OptimData(std::move(system), body, target,
70 commonData.camParams);
73 return OptimData::make(commonData.initialParams, commonData);
85 : camParams_(camParams), system_(std::move(system)), body_(&body),
89 std::unique_ptr<TrackingSystem> system_;
103 makeImageOutputDataFromRow(row, optim.getCamParams());
119 makeImageOutputDataFromRow(row, optim.getCamParams());
121 std::move(inputData));
127 bool havePose()
const {
return gotPose; }
128 Eigen::Isometry3d
const &getPose()
const {
return pose; }
129 std::size_t getNumResets(
OptimData const &optim) {
134 bool gotPose =
false;
135 Eigen::Isometry3d pose;
146 flippedPose_ =
false;
148 Eigen::Quaterniond quat;
151 optim.getCamParams(), pos, quat);
155 double yAxisYComponent = (quat * Eigen::Vector3d::UnitY()).y();
156 if (yAxisYComponent < 0) {
168 ransacPoseFilter.
filter(dt, pos, quat);
171 pose = ransacPoseFilter.getIsometry();
174 bool flippedPose()
const {
return flippedPose_; }
175 std::size_t getNumFlips()
const {
return numFlips_; }
176 bool havePose()
const {
return gotPose; }
177 Eigen::Isometry3d
const &getPose()
const {
return pose; }
180 util::filters::PoseOneEuroFilterd ransacPoseFilter;
183 bool gotPose =
false;
184 bool flippedPose_ =
false;
185 std::size_t numFlips_ = 0;
186 Eigen::Isometry3d pose;
200 : base_(reftracker::getBaseTransform(
201 reftracker::getRefTrackerTransformParams())),
202 inner_(reftracker::getInnerTransform(
203 reftracker::getRefTrackerTransformParams())) {}
207 pose_ = base_ *
makeIsometry(row.xlate, row.rot) * inner_;
209 bool havePose()
const {
return true; }
210 Eigen::Isometry3d
const &getPose()
const {
return pose_; }
213 Eigen::Isometry3d base_;
214 Eigen::Isometry3d inner_;
215 Eigen::Isometry3d pose_;
219 #endif // INCLUDED_OptimizationBase_h_GUID_C3489E14_63D4_4290_45C0_225AC84A8BF5
OSVR_EXTERN_C_END double osvrTimeValueDurationSeconds(const OSVR_TimeValue *tvA, const OSVR_TimeValue *tvB)
Compute the difference between the two time values, returning the duration as a double-precision floa...
bool hasPoseEstimate() const
Do we have a pose estimate for this body in general?
bool uncalibratedRANSACPoseEstimateFromLeds(CameraParameters const &camParams, Eigen::Vector3d &xlate, Eigen::Quaterniond &quat, int skipBrightsCutoff=-1, std::size_t iterations=5)
Eigen::Isometry3d getIsometry() const
Header wrapping include of and for warning quieting.
::OSVR_TimeValue TimeValue
C++-friendly typedef for the OSVR_TimeValue structure.
void operator()(OptimData &optim, TimestampedMeasurements const &row)
Header defining some filters for Eigen datatypes.
LedUpdateCount const & updateLedsFromVideoData(ImageOutputDataPtr &&imageData)
General configuration parameters.
BodyIndices const & updateBodiesFromVideoData(ImageOutputDataPtr &&imageData)
std::size_t numTrackingResets() const
Isometry3< typename Derived1::Scalar > makeIsometry(Eigen::MatrixBase< Derived1 > const &translation, Eigen::RotationBase< Derived2, 3 > const &rotation)
A simpler, functional-style alternative to .fromPositionOrientationScale when no scaling is performed...
Input from main to the optimization routine (wrapper)
void filter(scalar dt, Vec3 const &position, Quat const &orientation)