gtsam/gtsam/navigation/tests/testScenarioRunner.cpp

87 lines
3.0 KiB
C++
Raw Normal View History

2015-12-22 06:49:52 +08:00
/* ----------------------------------------------------------------------------
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
* Atlanta, Georgia 30332-0415
* All Rights Reserved
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
* See LICENSE for the license information
* -------------------------------------------------------------------------- */
/**
2015-12-23 03:49:14 +08:00
* @file testScenarioRunner.cpp
2015-12-22 06:49:52 +08:00
* @brief test ImuFacor with ScenarioRunner class
* @author Frank Dellaert
*/
2015-12-23 03:49:14 +08:00
#include <gtsam/navigation/ScenarioRunner.h>
2015-12-22 06:49:52 +08:00
#include <CppUnitLite/TestHarness.h>
#include <cmath>
using namespace std;
using namespace gtsam;
2015-12-23 11:30:48 +08:00
static const double kDegree = M_PI / 180.0;
static const double kDeltaT = 1e-2;
static const double kGyroSigma = 0.02;
static const double kAccelerometerSigma = 0.1;
2015-12-22 06:49:52 +08:00
2015-12-23 03:37:04 +08:00
/* ************************************************************************* */
2015-12-22 07:11:48 +08:00
TEST(ScenarioRunner, Forward) {
const double v = 2; // m/s
2015-12-23 11:30:48 +08:00
Scenario forward(Vector3::Zero(), Vector3(v, 0, 0), kDeltaT, kGyroSigma,
kAccelerometerSigma);
2015-12-22 07:11:48 +08:00
ScenarioRunner runner(forward);
2015-12-23 11:30:48 +08:00
const double T = 0.1; // seconds
2015-12-23 10:45:38 +08:00
2015-12-23 06:01:16 +08:00
ImuFactor::PreintegratedMeasurements pim = runner.integrate(T);
EXPECT(assert_equal(forward.pose(T), runner.predict(pim).pose, 1e-9));
Matrix6 estimatedCov = runner.estimatePoseCovariance(T);
2015-12-23 11:30:48 +08:00
EXPECT(assert_equal(estimatedCov, runner.poseCovariance(pim), 1e-5));
2015-12-22 07:11:48 +08:00
}
2015-12-22 06:49:52 +08:00
/* ************************************************************************* */
TEST(ScenarioRunner, Circle) {
2015-12-23 11:30:48 +08:00
// Forward velocity 2m/s, angular velocity 6 kDegree/sec
const double v = 2, w = 6 * kDegree;
Scenario circle(Vector3(0, 0, w), Vector3(v, 0, 0), kDeltaT, kGyroSigma,
kAccelerometerSigma);
2015-12-22 06:49:52 +08:00
ScenarioRunner runner(circle);
2015-12-23 11:30:48 +08:00
const double T = 0.1; // seconds
2015-12-23 06:01:16 +08:00
ImuFactor::PreintegratedMeasurements pim = runner.integrate(T);
EXPECT(assert_equal(circle.pose(T), runner.predict(pim).pose, 0.1));
2015-12-23 11:30:48 +08:00
Matrix6 estimatedCov = runner.estimatePoseCovariance(T);
EXPECT(assert_equal(estimatedCov, runner.poseCovariance(pim), 1e-5));
2015-12-22 06:49:52 +08:00
}
2015-12-23 03:47:37 +08:00
/* ************************************************************************* */
TEST(ScenarioRunner, Loop) {
// Forward velocity 2m/s
2015-12-23 11:30:48 +08:00
// Pitch up with angular velocity 6 kDegree/sec (negative in FLU)
const double v = 2, w = 6 * kDegree;
Scenario loop(Vector3(0, -w, 0), Vector3(v, 0, 0), kDeltaT, kGyroSigma,
kAccelerometerSigma);
2015-12-23 03:47:37 +08:00
ScenarioRunner runner(loop);
2015-12-23 11:30:48 +08:00
const double T = 0.1; // seconds
2015-12-23 10:45:38 +08:00
2015-12-23 06:01:16 +08:00
ImuFactor::PreintegratedMeasurements pim = runner.integrate(T);
EXPECT(assert_equal(loop.pose(T), runner.predict(pim).pose, 0.1));
2015-12-23 11:30:48 +08:00
Matrix6 estimatedCov = runner.estimatePoseCovariance(T);
EXPECT(assert_equal(estimatedCov, runner.poseCovariance(pim), 1e-5));
2015-12-23 03:47:37 +08:00
}
2015-12-22 06:49:52 +08:00
/* ************************************************************************* */
int main() {
TestResult tr;
return TestRegistry::runAllTests(tr);
}
/* ************************************************************************* */