Skip to content

Commit

Permalink
feat(tier4_autoware_utils): add point to tfvector function (autowaref…
Browse files Browse the repository at this point in the history
…oundation#1726)

Signed-off-by: yutaka <[email protected]>

Signed-off-by: yutaka <[email protected]>
  • Loading branch information
purewater0901 authored and TakaHoribe committed Sep 5, 2022
1 parent f767a9d commit d5000af
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,18 @@ inline geometry_msgs::msg::TransformStamped pose2transform(
return transform;
}

template <class Point1, class Point2>
tf2::Vector3 point2tfVector(const Point1 & src, const Point2 & dst)
{
const auto src_p = getPoint(src);
const auto dst_p = getPoint(dst);

double dx = dst_p.x - src_p.x;
double dy = dst_p.y - src_p.y;
double dz = dst_p.z - src_p.z;
return tf2::Vector3(dx, dy, dz);
}

inline Point3d transformPoint(
const Point3d & point, const geometry_msgs::msg::Transform & transform)
{
Expand Down
67 changes: 67 additions & 0 deletions common/tier4_autoware_utils/test/src/geometry/test_geometry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,73 @@ TEST(geometry, pose2transform)
}
}

TEST(geometry, point2tfVector)
{
using tier4_autoware_utils::createQuaternionFromRPY;
using tier4_autoware_utils::deg2rad;
using tier4_autoware_utils::point2tfVector;

// Point
{
geometry_msgs::msg::Point src;
src.x = 1.0;
src.y = 2.0;
src.z = 3.0;

geometry_msgs::msg::Point dst;
dst.x = 10.0;
dst.y = 5.0;
dst.z = -5.0;

const auto vec = point2tfVector(src, dst);

EXPECT_DOUBLE_EQ(vec.x(), 9.0);
EXPECT_DOUBLE_EQ(vec.y(), 3.0);
EXPECT_DOUBLE_EQ(vec.z(), -8.0);
}

// Pose
{
geometry_msgs::msg::Pose src;
src.position.x = 1.0;
src.position.y = 2.0;
src.position.z = 3.0;
src.orientation = createQuaternionFromRPY(deg2rad(30), deg2rad(30), deg2rad(30));

geometry_msgs::msg::Pose dst;
dst.position.x = 10.0;
dst.position.y = 5.0;
dst.position.z = -5.0;
dst.orientation = createQuaternionFromRPY(deg2rad(10), deg2rad(10), deg2rad(10));

const auto vec = point2tfVector(src, dst);

EXPECT_DOUBLE_EQ(vec.x(), 9.0);
EXPECT_DOUBLE_EQ(vec.y(), 3.0);
EXPECT_DOUBLE_EQ(vec.z(), -8.0);
}

// Point and Pose
{
geometry_msgs::msg::Point src;
src.x = 1.0;
src.y = 2.0;
src.z = 3.0;

geometry_msgs::msg::Pose dst;
dst.position.x = 10.0;
dst.position.y = 5.0;
dst.position.z = -5.0;
dst.orientation = createQuaternionFromRPY(deg2rad(10), deg2rad(10), deg2rad(10));

const auto vec = point2tfVector(src, dst);

EXPECT_DOUBLE_EQ(vec.x(), 9.0);
EXPECT_DOUBLE_EQ(vec.y(), 3.0);
EXPECT_DOUBLE_EQ(vec.z(), -8.0);
}
}

TEST(geometry, transformPoint)
{
using tier4_autoware_utils::createQuaternionFromRPY;
Expand Down

0 comments on commit d5000af

Please sign in to comment.