Skip to content

Commit

Permalink
Fix getTransform() (moveit#2113)
Browse files Browse the repository at this point in the history
Replace:
- PlanningScene::getTransforms().getTransform() -> PlanningScene::getFrameTransform()
- PlanningScene::getTransforms().canTransform() -> PlanningScene::knowsFrameTransform()

getTransforms() essentially yields the SceneTransforms instance of the parent scene only.
Accessing the corresponding frame transforms obviously yields the wrong results.
  • Loading branch information
rhaschke committed May 28, 2020
1 parent 09727a4 commit a5891df
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1032,7 +1032,7 @@ class PlanningScene : private boost::noncopyable, public std::enable_shared_from
robot_state::AttachedBodyCallback current_state_attached_body_callback_;

// This variable is not necessarily used by child planning scenes
// This Transforms class is actually a SceneTransform class
// This Transforms class is actually a SceneTransforms class
robot_state::TransformsPtr scene_transforms_; // if NULL use parent's

collision_detection::WorldPtr world_; // never NULL, never shared with parent/child
Expand Down
14 changes: 7 additions & 7 deletions moveit_core/planning_scene/src/planning_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1360,7 +1360,7 @@ void PlanningScene::processOctomapMsg(const octomap_msgs::Octomap& map)
std::shared_ptr<octomap::OcTree> om(static_cast<octomap::OcTree*>(octomap_msgs::msgToMap(map)));
if (!map.header.frame_id.empty())
{
const Eigen::Isometry3d& t = getTransforms().getTransform(map.header.frame_id);
const Eigen::Isometry3d& t = getFrameTransform(map.header.frame_id);
world_->addToObject(OCTOMAP_NS, shapes::ShapeConstPtr(new shapes::OcTree(om)), t);
}
else
Expand Down Expand Up @@ -1396,7 +1396,7 @@ void PlanningScene::processOctomapMsg(const octomap_msgs::OctomapWithPose& map)
}

std::shared_ptr<octomap::OcTree> om(static_cast<octomap::OcTree*>(octomap_msgs::msgToMap(map.octomap)));
const Eigen::Isometry3d& t = getTransforms().getTransform(map.header.frame_id);
const Eigen::Isometry3d& t = getFrameTransform(map.header.frame_id);
Eigen::Isometry3d p;
tf2::fromMsg(map.origin, p);
p = t * p;
Expand Down Expand Up @@ -1568,8 +1568,8 @@ bool PlanningScene::processAttachedCollisionObjectMsg(const moveit_msgs::Attache
// transform poses to link frame
if (object.object.header.frame_id != object.link_name)
{
const Eigen::Isometry3d& t = robot_state_->getGlobalLinkTransform(lm).inverse() *
getTransforms().getTransform(object.object.header.frame_id);
const Eigen::Isometry3d& t =
robot_state_->getGlobalLinkTransform(lm).inverse() * getFrameTransform(object.object.header.frame_id);
for (std::size_t i = 0; i < poses.size(); ++i)
poses[i] = t * poses[i];
}
Expand Down Expand Up @@ -1757,7 +1757,7 @@ bool PlanningScene::processCollisionObjectAdd(const moveit_msgs::CollisionObject
return false;
}

if (!getTransforms().canTransform(object.header.frame_id))
if (!knowsFrameTransform(object.header.frame_id))
{
ROS_ERROR_STREAM_NAMED(LOGNAME, "Unknown frame: " << object.header.frame_id);
return false;
Expand All @@ -1767,7 +1767,7 @@ bool PlanningScene::processCollisionObjectAdd(const moveit_msgs::CollisionObject
if (object.operation == moveit_msgs::CollisionObject::ADD && world_->hasObject(object.id))
world_->removeObject(object.id);

const Eigen::Isometry3d& object_frame_transform = getTransforms().getTransform(object.header.frame_id);
const Eigen::Isometry3d& object_frame_transform = getFrameTransform(object.header.frame_id);

for (std::size_t i = 0; i < object.primitives.size(); ++i)
{
Expand Down Expand Up @@ -1827,7 +1827,7 @@ bool PlanningScene::processCollisionObjectMove(const moveit_msgs::CollisionObjec
ROS_WARN_NAMED(LOGNAME, "Move operation for object '%s' ignores the geometry specified in the message.",
object.id.c_str());

const Eigen::Isometry3d& t = getTransforms().getTransform(object.header.frame_id);
const Eigen::Isometry3d& t = getFrameTransform(object.header.frame_id);
EigenSTL::vector_Isometry3d new_poses;
for (const geometry_msgs::Pose& primitive_pose : object.primitive_poses)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ void SemanticWorld::transformTableArray(object_recognition_msgs::TableArray& tab
<< table_array.tables[i].pose.position.y << ","
<< table_array.tables[i].pose.position.z);
std::string error_text;
const Eigen::Isometry3d& original_transform = planning_scene_->getTransforms().getTransform(original_frame);
const Eigen::Isometry3d& original_transform = planning_scene_->getFrameTransform(original_frame);
Eigen::Isometry3d original_pose;
tf2::fromMsg(table_array.tables[i].pose, original_pose);
original_pose = original_transform * original_pose;
Expand Down

0 comments on commit a5891df

Please sign in to comment.