示例#1
0
TEST(rosToEigen, pose) {
	Eigen::Isometry3d pose1 = toEigen(makePose(makePoint(0, 1.5, 2), makeQuaternion(1, 0, 0, 0)));
	Eigen::Isometry3d pose2 = toEigen(makePose(makePoint(-1.5, -2.6, -3.7), makeQuaternion(0, 0, 0, 1)));

	Eigen::Vector3d const & p1 = pose1.translation();
	Eigen::Vector3d const & p2 = pose2.translation();
	Eigen::Quaterniond const & q1 = Eigen::Quaterniond{pose1.rotation()};
	Eigen::Quaterniond const & q2 = Eigen::Quaterniond{pose2.rotation()};

	ASSERT_NEAR(0.0, p1.x(), 1e-5);
	ASSERT_NEAR(1.5, p1.y(), 1e-5);
	ASSERT_NEAR(2.0, p1.z(), 1e-5);
	ASSERT_NEAR(-1.5, p2.x(), 1e-5);
	ASSERT_NEAR(-2.6, p2.y(), 1e-5);
	ASSERT_NEAR(-3.7, p2.z(), 1e-5);

	ASSERT_NEAR(1, q1.x(), 1e-5);
	ASSERT_NEAR(0, q1.y(), 1e-5);
	ASSERT_NEAR(0, q1.z(), 1e-5);
	ASSERT_NEAR(0, q1.w(), 1e-5);
	ASSERT_NEAR(0, q2.x(), 1e-5);
	ASSERT_NEAR(0, q2.y(), 1e-5);
	ASSERT_NEAR(0, q2.z(), 1e-5);
	ASSERT_NEAR(1, q2.w(), 1e-5);
}
示例#2
0
TEST(rosToEigen, transform) {
	Eigen::Isometry3d transform1 = toEigen(makeTransform(makeVector3(0, 1.5, 2), makeQuaternion(1, 0, 0, 0)));
	Eigen::Isometry3d transform2 = toEigen(makeTransform(makeVector3(-1.5, -2.6, -3.7), makeQuaternion(0, 0, 0, 1)));

	Eigen::Vector3d const & p1 = transform1.translation();
	Eigen::Vector3d const & p2 = transform2.translation();
	Eigen::Quaterniond const & q1 = Eigen::Quaterniond{transform1.rotation()};
	Eigen::Quaterniond const & q2 = Eigen::Quaterniond{transform2.rotation()};

	ASSERT_NEAR(0.0, p1.x(), 1e-5);
	ASSERT_NEAR(1.5, p1.y(), 1e-5);
	ASSERT_NEAR(2.0, p1.z(), 1e-5);
	ASSERT_NEAR(-1.5, p2.x(), 1e-5);
	ASSERT_NEAR(-2.6, p2.y(), 1e-5);
	ASSERT_NEAR(-3.7, p2.z(), 1e-5);

	ASSERT_NEAR(1, q1.x(), 1e-5);
	ASSERT_NEAR(0, q1.y(), 1e-5);
	ASSERT_NEAR(0, q1.z(), 1e-5);
	ASSERT_NEAR(0, q1.w(), 1e-5);
	ASSERT_NEAR(0, q2.x(), 1e-5);
	ASSERT_NEAR(0, q2.y(), 1e-5);
	ASSERT_NEAR(0, q2.z(), 1e-5);
	ASSERT_NEAR(1, q2.w(), 1e-5);
}
示例#3
0
TEST(rosToEigen, quaternion) {
	Eigen::Quaterniond q1 = toEigen(makeQuaternion(0, 1.5, 2, 3.6));
	Eigen::Quaterniond q2 = toEigen(makeQuaternion(-1.5, -2.6, -3.7, 4.9));

	ASSERT_NEAR(0.0, q1.x(), 1e-5);
	ASSERT_NEAR(1.5, q1.y(), 1e-5);
	ASSERT_NEAR(2.0, q1.z(), 1e-5);
	ASSERT_NEAR(3.6, q1.w(), 1e-5);
	ASSERT_NEAR(-1.5, q2.x(), 1e-5);
	ASSERT_NEAR(-2.6, q2.y(), 1e-5);
	ASSERT_NEAR(-3.7, q2.z(), 1e-5);
	ASSERT_NEAR(4.9, q2.w(), 1e-5);
}
示例#4
0
Quaternion makeNormalizedQuaternion(double x, double y, double z, double w)
{
  auto q = makeQuaternion(x, y, z, w);
  if (!isNormalized(q, 1e-5f))
  {
    std::stringstream err;
    err << "Quaternion(" << x << ", " << y << ", " << z << ", " << w
        << ") is not normalized";
    throw std::runtime_error(err.str());
  }
  return q;
}