15 #include <gtest/gtest.h>
36 const std::vector kDummyMeasurement = {
37 std::make_pair(0.0, 0.0),
38 std::make_pair(0.0, 0.0),
39 std::make_pair(0.0, 0.0),
43 constexpr
double kResolution = 1.0;
46 false,
false,
false,
false, false ,
47 false,
false,
false, false ,
false,
48 false,
false, true ,
false,
false,
49 false, false ,
false,
false,
false,
50 false ,
false,
false,
false,
false},
55 auto random_state_maker = []() {
return Sophus::SE2d{}; };
62 std::move(random_state_maker),
73 TEST(TestAmclCore, InitializeWithNoParticles) {
74 auto amcl = make_amcl();
75 ASSERT_EQ(amcl.particles().size(), 0);
77 TEST(TestAmclCore, Update) {
78 auto amcl = make_amcl();
79 amcl.update(kDummyControl, kDummyMeasurement);
82 TEST(TestAmclCore, InitializeFromPose) {
83 auto amcl = make_amcl();
84 amcl.initialize(
Sophus::SE2d{}, Eigen::Vector3d::Ones().asDiagonal());
88 TEST(TestAmclCore, UpdateWithNoParticles) {
89 auto amcl = make_amcl();
90 ASSERT_EQ(amcl.particles().size(), 0);
91 auto estimate = amcl.update(kDummyControl, kDummyMeasurement);
95 TEST(TestAmclCore, UpdateWithParticles) {
96 auto amcl = make_amcl();
97 ASSERT_EQ(amcl.particles().size(), 0);
98 amcl.initialize(
Sophus::SE2d{}, Eigen::Vector3d::Ones().asDiagonal());
100 auto estimate = amcl.update(kDummyControl, kDummyMeasurement);
104 TEST(TestAmclCore, UpdateWithParticlesNoMotion) {
105 auto amcl = make_amcl();
106 ASSERT_EQ(amcl.particles().size(), 0);
107 amcl.initialize(
Sophus::SE2d{}, Eigen::Vector3d::Ones().asDiagonal());
109 auto estimate = amcl.update(kDummyControl, kDummyMeasurement);
111 estimate = amcl.update(kDummyControl, kDummyMeasurement);
115 TEST(TestAmclCore, UpdateWithParticlesForced) {
116 auto amcl = make_amcl();
117 ASSERT_EQ(amcl.particles().size(), 0);
118 amcl.initialize(
Sophus::SE2d{}, Eigen::Vector3d::Ones().asDiagonal());
120 auto estimate = amcl.update(kDummyControl, kDummyMeasurement);
123 estimate = amcl.update(kDummyControl, kDummyMeasurement);
127 TEST(TestAmclCore, ParticlesDependentRandomStateGenerator) {
131 constexpr
double kResolution = 0.5;
134 false,
false,
false,
false, false ,
135 false,
false,
false, false ,
false,
136 false,
false, false ,
false,
false,
137 false, false ,
false,
false,
false,
138 false ,
false,
false,
false,
false},
143 auto random_state_maker = [](
const auto& particles) {
145 return [last_particle_state]() {
return last_particle_state; };
153 std::move(random_state_maker),
158 amcl.initialize(
Sophus::SE2d{}, Eigen::Vector3d::Ones().asDiagonal());
160 auto estimate = amcl.update(kDummyControl, kDummyMeasurement);
164 TEST(TestAmclCore, SelectiveResampleCanBeConstructed) {
167 auto amcl = make_amcl(params);
168 amcl.initialize(
Sophus::SE2d{}, Eigen::Vector3d::Ones().asDiagonal());
170 auto estimate = amcl.update(kDummyControl, kDummyMeasurement);
174 TEST(TestAmclCore, TestRandomParticlesInserting) {
177 params.max_particles = 100;
178 params.alpha_slow = 0.0;
179 params.alpha_fast = 100.0;
180 auto amcl = make_amcl(params);
182 for (
int i = 0; i < 30; ++i) {
184 amcl.update(kDummyControl, kDummyMeasurement);