aboutsummaryrefslogtreecommitdiff
path: root/src/poser_sba.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/poser_sba.c')
-rw-r--r--src/poser_sba.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/poser_sba.c b/src/poser_sba.c
index bd7d520..1dbc820 100644
--- a/src/poser_sba.c
+++ b/src/poser_sba.c
@@ -3,11 +3,12 @@
#define USE_DOUBLE
#endif
-#include <sba/sba.h>
#include <malloc.h>
+#include <sba/sba.h>
#include "poser.h"
#include <survive.h>
+#include <survive_imu.h>
#include "assert.h"
#include "linmath.h"
@@ -47,6 +48,9 @@ typedef struct SBAData {
int required_meas;
+ SurviveIMUTracker tracker;
+ bool useIMU;
+
SurviveObject *so;
} SBAData;
@@ -421,6 +425,7 @@ int PoserSBA(SurviveObject *so, PoserData *pd) {
FLT error = -1;
if (d->last_lh != lightData->lh || d->last_acode != lightData->acode) {
error = run_sba_find_3d_structure(d, lightData, scene, 100, .5);
+
d->last_lh = lightData->lh;
d->last_acode = lightData->acode;
}
@@ -429,6 +434,9 @@ int PoserSBA(SurviveObject *so, PoserData *pd) {
if (d->failures_to_reset_cntr > 0)
d->failures_to_reset_cntr--;
} else {
+ if (d->useIMU) {
+ survive_imu_tracker_set_pose(&d->tracker, lightData->timecode, &so->OutPose);
+ }
if (d->successes_to_reset_cntr > 0)
d->successes_to_reset_cntr--;
}
@@ -442,6 +450,15 @@ int PoserSBA(SurviveObject *so, PoserData *pd) {
// std::cerr << "Average reproj error: " << error << std::endl;
return 0;
}
+ case POSERDATA_IMU: {
+
+ PoserDataIMU * imu = (PoserDataIMU*)pd;
+ if (ctx->calptr && ctx->calptr->stage < 5) {
+ } else if(d->useIMU){
+ survive_imu_tracker_integrate(so, &d->tracker, imu);
+ PoserData_poser_raw_pose_func(pd, so, 1, &d->tracker.pose);
+ }
+ } // INTENTIONAL FALLTHROUGH
default: {
const char *subposer = config_read_str(so->ctx->global_config_values, "SBASeedPoser", "PoserEPNP");
PoserCB driver = (PoserCB)GetDriver(subposer);