Add Unittest for transform::RigidX. (#497)
parent
4829ffee46
commit
c2d9424342
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2017 The Cartographer Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#include "cartographer/transform/rigid_transform.h"
|
||||||
|
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
#include "cartographer/transform/rigid_transform_test_helpers.h"
|
||||||
|
#include "cartographer/transform/transform.h"
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
namespace cartographer {
|
||||||
|
namespace transform {
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class RigidTransformTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
T eps() {
|
||||||
|
return std::numeric_limits<T>::epsilon();
|
||||||
|
}
|
||||||
|
|
||||||
|
Rigid2<T> GetRandomRigid2() {
|
||||||
|
const T x = T(0.7) * distribution_(prng_);
|
||||||
|
const T y = T(0.7) * distribution_(prng_);
|
||||||
|
const T theta = T(0.2) * distribution_(prng_);
|
||||||
|
return transform::Rigid2<T>(typename Rigid2<T>::Vector(x, y), theta);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rigid3<T> GetRandomRigid3() {
|
||||||
|
const T x = T(0.7) * distribution_(prng_);
|
||||||
|
const T y = T(0.7) * distribution_(prng_);
|
||||||
|
const T z = T(0.7) * distribution_(prng_);
|
||||||
|
const T ax = T(0.7) * distribution_(prng_);
|
||||||
|
const T ay = T(0.7) * distribution_(prng_);
|
||||||
|
const T az = T(0.7) * distribution_(prng_);
|
||||||
|
return transform::Rigid3<T>(typename Rigid3<T>::Vector(x, y, z),
|
||||||
|
AngleAxisVectorToRotationQuaternion(
|
||||||
|
typename Rigid3<T>::Vector(ax, ay, az)));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::mt19937 prng_ = std::mt19937(42);
|
||||||
|
std::uniform_real_distribution<T> distribution_ =
|
||||||
|
std::uniform_real_distribution<T>(-1., 1.);
|
||||||
|
};
|
||||||
|
|
||||||
|
using ScalarTypes = ::testing::Types<float, double>;
|
||||||
|
TYPED_TEST_CASE(RigidTransformTest, ScalarTypes);
|
||||||
|
|
||||||
|
TYPED_TEST(RigidTransformTest, Identity2DTest) {
|
||||||
|
const auto pose = this->GetRandomRigid2();
|
||||||
|
EXPECT_THAT(pose * Rigid2<TypeParam>(), IsNearly(pose, this->eps()));
|
||||||
|
EXPECT_THAT(Rigid2<TypeParam>() * pose, IsNearly(pose, this->eps()));
|
||||||
|
EXPECT_THAT(pose * Rigid2<TypeParam>::Identity(),
|
||||||
|
IsNearly(pose, this->eps()));
|
||||||
|
EXPECT_THAT(Rigid2<TypeParam>::Identity() * pose,
|
||||||
|
IsNearly(pose, this->eps()));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST(RigidTransformTest, Inverse2DTest) {
|
||||||
|
const auto pose = this->GetRandomRigid2();
|
||||||
|
EXPECT_THAT(pose.inverse() * pose,
|
||||||
|
IsNearly(Rigid2<TypeParam>::Identity(), this->eps()));
|
||||||
|
EXPECT_THAT(pose * pose.inverse(),
|
||||||
|
IsNearly(Rigid2<TypeParam>::Identity(), this->eps()));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST(RigidTransformTest, Identity3DTest) {
|
||||||
|
const auto pose = this->GetRandomRigid3();
|
||||||
|
EXPECT_THAT(pose * Rigid3<TypeParam>(), IsNearly(pose, this->eps()));
|
||||||
|
EXPECT_THAT(Rigid3<TypeParam>() * pose, IsNearly(pose, this->eps()));
|
||||||
|
EXPECT_THAT(pose * Rigid3<TypeParam>::Identity(),
|
||||||
|
IsNearly(pose, this->eps()));
|
||||||
|
EXPECT_THAT(Rigid3<TypeParam>::Identity() * pose,
|
||||||
|
IsNearly(pose, this->eps()));
|
||||||
|
}
|
||||||
|
|
||||||
|
TYPED_TEST(RigidTransformTest, Inverse3DTest) {
|
||||||
|
const auto pose = this->GetRandomRigid3();
|
||||||
|
EXPECT_THAT(pose.inverse() * pose,
|
||||||
|
IsNearly(Rigid3<TypeParam>::Identity(), this->eps()));
|
||||||
|
EXPECT_THAT(pose * pose.inverse(),
|
||||||
|
IsNearly(Rigid3<TypeParam>::Identity(), this->eps()));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
} // namespace transform
|
||||||
|
} // namespace cartographer
|
Loading…
Reference in New Issue