Concise version
parent
d45250a989
commit
a6c1ba19cc
|
@ -28,6 +28,23 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace gtsam;
|
using namespace gtsam;
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
// Functions that allow creating concise expressions
|
||||||
|
Expression<Point3> transform_to(const Expression<Pose3>& x,
|
||||||
|
const Expression<Point3>& p) {
|
||||||
|
return Expression<Point3>(x, &Pose3::transform_to, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
Expression<Point2> project(const Expression<Point3>& p_cam) {
|
||||||
|
return Expression<Point2>(PinholeCamera<Cal3_S2>::project_to_camera, p_cam);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class CAL>
|
||||||
|
Expression<Point2> uncalibrate(const Expression<CAL>& K,
|
||||||
|
const Expression<Point2>& xy_hat) {
|
||||||
|
return Expression<Point2>(K, &CAL::uncalibrate, xy_hat);
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
||||||
TEST(BADFactor, test) {
|
TEST(BADFactor, test) {
|
||||||
|
@ -55,15 +72,22 @@ TEST(BADFactor, test) {
|
||||||
|
|
||||||
// Create expression tree
|
// Create expression tree
|
||||||
Expression<Point3> p_cam(x, &Pose3::transform_to, p);
|
Expression<Point3> p_cam(x, &Pose3::transform_to, p);
|
||||||
Expression<Point2> projection(PinholeCamera<Cal3_S2>::project_to_camera, p_cam);
|
Expression<Point2> xy_hat(PinholeCamera<Cal3_S2>::project_to_camera, p_cam);
|
||||||
Expression<Point2> uv_hat(K, &Cal3_S2::uncalibrate, projection);
|
Expression<Point2> uv_hat(K, &Cal3_S2::uncalibrate, xy_hat);
|
||||||
|
|
||||||
// Create factor and check value, dimension, linearization
|
// Create factor and check value, dimension, linearization
|
||||||
BADFactor<Point2> f(measured, uv_hat);
|
BADFactor<Point2> f(measured, uv_hat);
|
||||||
EXPECT_DOUBLES_EQUAL(expected_error, f.error(values), 1e-9);
|
EXPECT_DOUBLES_EQUAL(expected_error, f.error(values), 1e-9);
|
||||||
EXPECT_LONGS_EQUAL(0, f.dim());
|
EXPECT_LONGS_EQUAL(2, f.dim());
|
||||||
boost::shared_ptr<GaussianFactor> gf = f.linearize(values);
|
boost::shared_ptr<GaussianFactor> gf = f.linearize(values);
|
||||||
EXPECT( assert_equal(*expected, *gf, 1e-9));
|
EXPECT( assert_equal(*expected, *gf, 1e-9));
|
||||||
|
|
||||||
|
// Try concise version
|
||||||
|
BADFactor<Point2> f2(measured, uncalibrate(K, project(transform_to(x, p))));
|
||||||
|
EXPECT_DOUBLES_EQUAL(expected_error, f2.error(values), 1e-9);
|
||||||
|
EXPECT_LONGS_EQUAL(2, f2.dim());
|
||||||
|
boost::shared_ptr<GaussianFactor> gf2 = f2.linearize(values);
|
||||||
|
EXPECT( assert_equal(*expected, *gf2, 1e-9));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
Loading…
Reference in New Issue