Added a test for PoseVelocityBias
parent
69c0d68891
commit
b01eb4e960
|
|
@ -0,0 +1,64 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
|
||||
* 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
|
||||
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* @file testPoseVelocityBias.cpp
|
||||
* @brief Unit test for PoseVelocityBias
|
||||
* @author Frank Dellaert
|
||||
*/
|
||||
|
||||
#include <gtsam/navigation/PreintegrationBase.h>
|
||||
#include <gtsam/nonlinear/Values.h>
|
||||
#include <gtsam/nonlinear/factorTesting.h>
|
||||
#include <gtsam/inference/Symbol.h>
|
||||
#include <gtsam/base/numericalDerivative.h>
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
// Should be seen as between(pvb1,pvb2), i.e., written as pvb2 \omin pvb1
|
||||
Vector9 error(const PoseVelocityBias& pvb1, const PoseVelocityBias& pvb2) {
|
||||
Matrix3 R1 = pvb1.pose.rotation().matrix();
|
||||
// Ri.transpose() translate the error from the global frame into pose1's frame
|
||||
const Vector3 fp = R1.transpose() * (pvb2.pose.translation() - pvb1.pose.translation()).vector();
|
||||
const Vector3 fv = R1.transpose() * (pvb2.velocity - pvb1.velocity);
|
||||
const Rot3 R1BetweenR2 = pvb1.pose.rotation().between(pvb2.pose.rotation());
|
||||
const Vector3 fR = Rot3::Logmap(R1BetweenR2);
|
||||
Vector9 r;
|
||||
r << fp, fv, fR;
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ************************************************************************************************/
|
||||
TEST(PoseVelocityBias, error) {
|
||||
Point3 i1(0, 1, 0), j1(-1, 0, 0), k1(0, 0, 1);
|
||||
Pose3 x1(Rot3(i1, j1, k1), Point3(5.0, 1.0, 0.0));
|
||||
Vector3 v1(Vector3(0.5, 0.0, 0.0));
|
||||
imuBias::ConstantBias bias1(Vector3(0.2, 0, 0), Vector3(0.1, 0, 0.3));
|
||||
|
||||
Pose3 x2(Rot3(i1, j1, k1).expmap(Vector3(0.1, 0.2, 0.3)), Point3(5.5, 1.0, 6.0));
|
||||
Vector3 v2(Vector3(0.5, 4.0, 3.0));
|
||||
imuBias::ConstantBias bias2(Vector3(0.1, 0.2, -0.3), Vector3(0.2, 0.3, 0.1));
|
||||
|
||||
PoseVelocityBias pvb1(x1, v1, bias1), pvb2(x2, v2, bias2);
|
||||
|
||||
Vector9 expected, actual = error(pvb1, pvb2);
|
||||
expected << 0.0, -0.5, 6.0, 4.0, 0.0, 3.0, 0.1, 0.2, 0.3;
|
||||
EXPECT(assert_equal(expected, actual, 1e-9));
|
||||
}
|
||||
|
||||
/* ************************************************************************************************/
|
||||
int main() {
|
||||
TestResult tr;
|
||||
return TestRegistry::runAllTests(tr);
|
||||
}
|
||||
/* ************************************************************************************************/
|
||||
Loading…
Reference in New Issue