Skip to content

Commit 4cfc449

Browse files
Jonathan MarinojonyMarino
authored andcommitted
Fix Transform Tree to include tilted frame
1 parent 7800419 commit 4cfc449

File tree

4 files changed

+15
-41
lines changed

4 files changed

+15
-41
lines changed

core_sim/include/core_sim/actor/payload_actor.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ class PayloadActor : public Actor {
6666
const float GetMass() const;
6767
void SetMass(const float mass);
6868

69+
const Kinematics ComputeAttachedKinematics(
70+
const Kinematics& kinematics) const;
71+
6972
void BeginUpdate();
7073
void EndUpdate();
7174

core_sim/src/actor/payload_actor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class PayloadActor::Impl : public ActorImpl {
5959
const Kinematics& GetKinematics() const;
6060
void UpdateKinematics(const Kinematics& kinematics);
6161
void SetCallbackKinematicsUpdated(const KinematicsCallback& callback);
62-
const Kinematics& ComputeAttachedKinematics(
62+
const Kinematics ComputeAttachedKinematics(
6363
const Kinematics& kinematics) const;
6464

6565
const bool InAttachedState() const;
@@ -161,7 +161,7 @@ void PayloadActor::UpdateKinematics(const Kinematics& kinematics) {
161161
static_cast<PayloadActor::Impl*>(pimpl_.get())->UpdateKinematics(kinematics);
162162
}
163163

164-
const Kinematics& PayloadActor::ComputeAttachedKinematics(
164+
const Kinematics PayloadActor::ComputeAttachedKinematics(
165165
const Kinematics& kinematics) const {
166166
return static_cast<PayloadActor::Impl*>(pimpl_.get())
167167
->ComputeAttachedKinematics(kinematics);
@@ -311,7 +311,7 @@ void PayloadActor::Impl::UpdateKinematics(const Kinematics& kinematics) {
311311
topic_manager_.PublishTopic(payload_actor_pose_topic_, pose_msg);
312312
}
313313

314-
const Kinematics& PayloadActor::Impl::ComputeAttachedKinematics(
314+
const Kinematics PayloadActor::Impl::ComputeAttachedKinematics(
315315
const Kinematics& kinematics) const {
316316
Vector3 new_pos(kinematics.pose.position.x() + payload_offset_.position.x(),
317317
kinematics.pose.position.y() + payload_offset_.position.y(),

core_sim/src/transforms/transform_tree.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
#include "Eigen/Dense"
88
#include "Eigen/Geometry"
99

10+
#include "Eigen/Dense"
11+
#include "Eigen/Geometry"
12+
1013
#ifdef _WIN32
1114
extern "C" void OutputDebugStringA(const char*);
1215
#else
@@ -41,7 +44,7 @@ TransformTree::~TransformTree() {
4144
void TransformTree::CombinePose(Pose* ppose_inout, const Pose& pose2) {
4245
// Rotate the position vector by the orientation of the frame
4346
auto rotated_position = pose2.orientation * ppose_inout->position;
44-
// Translate the position to the position of frame to get the broader position
47+
// translate the position to the position of frame to get the broader position
4548
ppose_inout->position = pose2.position + rotated_position;
4649
ppose_inout->orientation = ppose_inout->orientation * pose2.orientation;
4750
}

core_sim/test/gtest_transform_tree.cpp

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <cmath>
44

5+
56
#include "core_sim/transforms/transform_tree.hpp"
67
#include "core_sim/transforms/transform_utils.hpp"
78
#include "gtest/gtest.h"
@@ -184,11 +185,11 @@ TEST(TransformTree, ConvertCross2) {
184185
projectairsim::Quaternion quatA =
185186
projectairsim::TransformUtils::ToQuaternion(0.0f, 0.0f, 0.0f);
186187
projectairsim::Quaternion quatB =
187-
projectairsim::TransformUtils::ToQuaternion(0.0f, M_PI, 0.0f);
188+
projectairsim::TransformUtils::ToQuaternion(M_PI, 0.0f, 0.0f);
188189
projectairsim::Quaternion quatA2 =
189190
projectairsim::TransformUtils::ToQuaternion(0.0f, 0.0f, 0.0f);
190191
projectairsim::Quaternion quatB2 =
191-
projectairsim::TransformUtils::ToQuaternion(0.0f, M_PI, 0.0f);
192+
projectairsim::TransformUtils::ToQuaternion(M_PI, 0.0f, 0.0f);
192193
projectairsim::Quaternion quatAToGlobal = quatA * quatA2;
193194
projectairsim::Quaternion quatGlobalToB = quatB2.inverse() * quatB.inverse();
194195
projectairsim::Quaternion quatAInB =
@@ -200,7 +201,7 @@ TEST(TransformTree, ConvertCross2) {
200201
projectairsim::TransformTree transformtree;
201202
projectairsim::Vector3 vec3A = projectairsim::Vector3(1.0f, 2.0f, 3.0f);
202203
projectairsim::Vector3 vec3A2 = projectairsim::Vector3(4.0f, 5.0f, 6.0f);
203-
projectairsim::Vector3 vec3B = projectairsim::Vector3(-10.0f, 20.0f, -30.0f);
204+
projectairsim::Vector3 vec3B = projectairsim::Vector3(10.0f, -20.0f, -30.0f);
204205
projectairsim::Vector3 vec3B2 = projectairsim::Vector3(40.0f, 50.0f, 60.0f);
205206
projectairsim::Vector3 vec3AToGlobal = vec3A + vec3A2;
206207
projectairsim::Vector3 vec3BToB2Global = quatB2 * vec3B;
@@ -309,37 +310,4 @@ TEST(TransformTree, ConvertSemiCross) {
309310
EXPECT_NEAR(poseA.orientation.y(), poseAStart.orientation.y(), 1.0e-6);
310311
EXPECT_NEAR(poseA.orientation.z(), poseAStart.orientation.z(), 1.0e-6);
311312
EXPECT_NEAR(poseA.orientation.w(), poseAStart.orientation.w(), 1.0e-6);
312-
}
313-
314-
TEST(TransformTree, NonzeroRelativePositionAndTiltedFrame) {
315-
constexpr float ap_x = 0.0f;
316-
constexpr float ap_y = 0.0f;
317-
constexpr float ap_z = 0.0f;
318-
projectairsim::Quaternion quatA =
319-
projectairsim::TransformUtils::ToQuaternion(M_PI / 4, 0.0f, 0.0f);
320-
projectairsim::TransformTree::StaticRefFrame staticrefframeA("A");
321-
projectairsim::TransformTree transformtree;
322-
projectairsim::Pose poseA ;
323-
poseA.position.z() = -1.0f;
324-
projectairsim::Pose poseGlobal;
325-
326-
staticrefframeA.SetLocalPose(
327-
projectairsim::Pose(projectairsim::Vector3(ap_x, ap_y, ap_z), quatA));
328-
329-
transformtree.Register(&staticrefframeA,
330-
projectairsim::TransformTree::kRefFrameGlobal);
331-
transformtree.Convert(poseA, staticrefframeA,
332-
projectairsim::TransformTree::kRefFrameGlobal,
333-
&poseGlobal);
334-
335-
// Verify the identity pose in A's reference frame is transformed into A's
336-
// pose in the global reference frame
337-
EXPECT_FLOAT_EQ(poseGlobal.position.x(), ap_x);
338-
EXPECT_NEAR(poseGlobal.position.y(), -(std::sin(M_PI / 4)), 1.0e-6);
339-
EXPECT_NEAR(poseGlobal.position.z(), -(std::cos(M_PI / 4)), 1.0e-6);
340-
341-
EXPECT_FLOAT_EQ(poseGlobal.orientation.x(), quatA.x());
342-
EXPECT_FLOAT_EQ(poseGlobal.orientation.y(), quatA.y());
343-
EXPECT_FLOAT_EQ(poseGlobal.orientation.z(), quatA.z());
344-
EXPECT_FLOAT_EQ(poseGlobal.orientation.w(), quatA.w());
345-
}
313+
}

0 commit comments

Comments
 (0)