20 #include "gtest/gtest.h" 23 namespace kalman_filter {
26 Eigen::Matrix<double, 1, 1> Scalar(
double value) {
27 return value * Eigen::Matrix<double, 1, 1>::Identity();
31 Eigen::Matrix<double, 2, 1> g(
const Eigen::Matrix<double, 2, 1>& state) {
32 Eigen::Matrix<double, 2, 1> new_state;
33 new_state << state[0], state[0];
38 Eigen::Matrix<double, 1, 1> h(
const Eigen::Matrix<double, 2, 1>& state) {
39 return Scalar(state[0]) - Scalar(5.);
42 TEST(KalmanFilterTest, testConstructor) {
43 UnscentedKalmanFilter<double, 2> filter(GaussianDistribution<double, 2>(
44 Eigen::Vector2d(0., 42.), 10. * Eigen::Matrix2d::Identity()));
45 EXPECT_NEAR(42., filter.GetBelief().GetMean()[1], 1e-9);
48 TEST(KalmanFilterTest, testPredict) {
49 UnscentedKalmanFilter<double, 2> filter(GaussianDistribution<double, 2>(
50 Eigen::Vector2d(42., 0.), 10. * Eigen::Matrix2d::Identity()));
52 g, GaussianDistribution<double, 2>(Eigen::Vector2d(0., 0.),
53 Eigen::Matrix2d::Identity() * 1e-9));
54 EXPECT_NEAR(filter.GetBelief().GetMean()[0], 42., 1e-2);
55 EXPECT_NEAR(filter.GetBelief().GetMean()[1], 42., 1e-2);
58 TEST(KalmanFilterTest, testObserve) {
59 UnscentedKalmanFilter<double, 2> filter(GaussianDistribution<double, 2>(
60 Eigen::Vector2d(0., 42.), 10. * Eigen::Matrix2d::Identity()));
61 for (
int i = 0; i < 500; ++i) {
63 g, GaussianDistribution<double, 2>(Eigen::Vector2d(0., 0.),
64 Eigen::Matrix2d::Identity() * 1e-9));
66 h, GaussianDistribution<double, 1>(Scalar(0.), Scalar(1e-2)));
68 EXPECT_NEAR(filter.GetBelief().GetMean()[0], 5, 1e-2);
69 EXPECT_NEAR(filter.GetBelief().GetMean()[1], 5, 1e-2);