diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index 717661f..e2d768e 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -96,6 +96,7 @@ Joint toKdl(boost::shared_ptr jnt) RigidBodyInertia toKdl(boost::shared_ptr i) { Frame origin = toKdl(i->origin); + // kdl specifies the inertia in the reference frame of the link, the urdf specifies the inertia in the inertia reference frame return origin.M * RigidBodyInertia(i->mass, origin.p, RotationalInertia(i->ixx, i->iyy, i->izz, i->ixy, i->ixz, i->iyz)); } diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 1a51da7..7d6c99e 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -77,6 +77,8 @@ TEST_F(TestParser, test) ASSERT_TRUE(my_tree.getSegment("world") == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); + ASSERT_EQ(my_tree.getSegment("base_link")->second.segment.getInertia().getMass(), 116.0); + ASSERT_NEAR(my_tree.getSegment("base_link")->second.segment.getInertia().getRotationalInertia().data[0], 15.6107, 0.001); SUCCEED(); }