ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Consolde output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a base in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

currentPose=moveGroup.getCurrentPose(); // always returns in the base_link frame
// Remove the leading '/' for tf2
if ( currentPose.header.frame_id.at(0)== '/' )
  currentPose.header.frame_id.erase(0,1);

transform it to "leap_motion_on_robot"... too lengthy to paste the code
send the robot to that new pose... too lengthy to paste the code

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose. I don't see any Github issue... I guess I should make one.

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Consolde output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a base pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

currentPose=moveGroup.getCurrentPose(); // always returns in the base_link frame
// Remove the leading '/' for tf2
if ( currentPose.header.frame_id.at(0)== '/' )
  currentPose.header.frame_id.erase(0,1);

transform it to "leap_motion_on_robot"... too lengthy to paste the code
send the robot to that new pose... too lengthy to paste the code

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose. I don't see any Github issue... I guess I should make one.

Not an answer but I can confirm that moveGroup.setEndEffectorLink() moveGroup.setEndEffectorLink() is probably not working right.

Consolde output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() moveGroup.getCurrentPose() always returns a pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

currentPose=moveGroup.getCurrentPose(); // always returns in the base_link frame
// Remove the leading '/' for tf2
if ( currentPose.header.frame_id.at(0)== '/' )
  currentPose.header.frame_id.erase(0,1);

transform it to "leap_motion_on_robot"... too lengthy to paste the code
send the robot to that new pose... too lengthy to paste the code

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose. I don't see any Github issue... I guess I should make one.

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Consolde Console output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

currentPose=moveGroup.getCurrentPose(); // always returns in the base_link frame
// Remove the leading '/' for tf2
if ( currentPose.header.frame_id.at(0)== '/' )
  currentPose.header.frame_id.erase(0,1);

transform it to "leap_motion_on_robot"... too lengthy to paste the code
send the robot to that new pose... too lengthy to paste the code

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose. I don't see any Github issue... I guess I should make one.

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Console output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

currentPose=moveGroup.getCurrentPose(); // always returns in the base_link frame
// Remove the leading '/' for tf2
if ( currentPose.header.frame_id.at(0)== '/' )
  currentPose.header.frame_id.erase(0,1);

transform it to "leap_motion_on_robot"... too lengthy to paste the code
send the robot to that new pose... too lengthy to paste the code

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose. I don't see any pose.

Github issue... I guess I should make one.

issue: https://github.com/ros-planning/moveit/issues/522

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Console output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

currentPose=moveGroup.getCurrentPose(); // always   // Current pose in base_link
  currentPose = moveGroup.getCurrentPose();  // Always returns in the base_link frame
base_link
  ROS_INFO_STREAM( "Current pose from moveGroup:  " << currentPose );

  // Current pose in camera_ee_link
  // Remove the leading '/' "/" for tf2
 if ( currentPose.header.frame_id.at(0)== currentPose.header.frame_id.at(0) == '/' )
   currentPose.header.frame_id.erase(0,1);

transform   listener.waitForTransform( "camera_ee_link", currentPose.header.frame_id, ros::Time(0), ros::Duration(10.0) );
  try{
    geometry_msgs::TransformStamped tf_to_camera_ee_link_frame = tfBuffer.lookupTransform("camera_ee_link", currentPose.header.frame_id, ros::Time(0), ros::Duration(1.0) );
    tf2::doTransform(currentPose, currentPose, tf_to_camera_ee_link_frame);
  }
  catch(tf2::TransformException ex){
    ROS_ERROR("%s",ex.what());
    return false;
  }
  ROS_INFO_STREAM( "Current pose in camera_ee_link:  " << currentPose );

  // Current pose in leap_motion_on_robot
  // Remove the leading "/" for tf2
  if ( currentPose.header.frame_id.at(0) == '/' )
    currentPose.header.frame_id.erase(0,1);

  listener.waitForTransform( "leap_motion_on_robot", currentPose.header.frame_id, ros::Time(0), ros::Duration(10.0) );
  try{
    geometry_msgs::TransformStamped tf_to_leap_motion_frame = tfBuffer.lookupTransform("leap_motion_on_robot", currentPose.header.frame_id, ros::Time(0), ros::Duration(1.0) );
    tf2::doTransform(currentPose, currentPose, tf_to_leap_motion_frame);
  }
  catch(tf2::TransformException ex){
    ROS_ERROR("%s",ex.what());
    return false;
  }
  ROS_INFO_STREAM( "Current pose in leap_motion_on_robot:  " << currentPose );

  // Test with currentPose:
  waypoints.clear();
  waypoints.push_back(currentPose.pose); // Sending it to "leap_motion_on_robot"... too lengthy to paste the code
send the robot to that new pose... too lengthy to paste the code
in base_link. leap_motion_on_robot, and camera_ee_link both fail.
  fraction = move_base_to_manip::cartesian_motion(waypoints, trajectory, moveGroup, nh);
  ROS_INFO("Cartesian path: %.2f%% achieved", fraction * 100.);
  moveGroup.move();

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose.

Github issue: https://github.com/ros-planning/moveit/issues/522

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Console output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

  // Current pose in base_link
  currentPose = moveGroup.getCurrentPose();  // Always returns in base_link
  ROS_INFO_STREAM( "Current pose from moveGroup:  " << currentPose );

  // Current pose in camera_ee_link
  // Remove the leading "/" for tf2
  if ( currentPose.header.frame_id.at(0) == '/' )
    currentPose.header.frame_id.erase(0,1);

  listener.waitForTransform( "camera_ee_link", currentPose.header.frame_id, ros::Time(0), ros::Duration(10.0) );
  try{
    geometry_msgs::TransformStamped tf_to_camera_ee_link_frame = tfBuffer.lookupTransform("camera_ee_link", currentPose.header.frame_id, ros::Time(0), ros::Duration(1.0) );
    tf2::doTransform(currentPose, currentPose, tf_to_camera_ee_link_frame);
  }
  catch(tf2::TransformException ex){
    ROS_ERROR("%s",ex.what());
    return false;
  }
  ROS_INFO_STREAM( "Current pose in camera_ee_link:  " << currentPose );

  // Current pose in leap_motion_on_robot
  // Remove the leading "/" for tf2
  if ( currentPose.header.frame_id.at(0) == '/' )
    currentPose.header.frame_id.erase(0,1);

  listener.waitForTransform( "leap_motion_on_robot", currentPose.header.frame_id, ros::Time(0), ros::Duration(10.0) );
  try{
    geometry_msgs::TransformStamped tf_to_leap_motion_frame = tfBuffer.lookupTransform("leap_motion_on_robot", currentPose.header.frame_id, ros::Time(0), ros::Duration(1.0) );
    tf2::doTransform(currentPose, currentPose, tf_to_leap_motion_frame);
  }
  catch(tf2::TransformException ex){
    ROS_ERROR("%s",ex.what());
    return false;
  }
  ROS_INFO_STREAM( "Current pose in leap_motion_on_robot:  " << currentPose );

  // Test with currentPose:
  waypoints.clear();
  waypoints.push_back(currentPose.pose); // Sending it in base_link. leap_motion_on_robot, and camera_ee_link both fail.
  fraction = move_base_to_manip::cartesian_motion(waypoints, trajectory, moveGroup, nh);
  ROS_INFO("Cartesian path: %.2f%% achieved", fraction * 100.);
  moveGroup.move();

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose.

Github issue: https://github.com/ros-planning/moveit/issues/522

Not an answer but I can confirm that moveGroup.setEndEffectorLink() is probably not working right.

Console output from moveGroup says it is using frame 'leap_motion_on_robot':

Attempting to follow 1 waypoints for link 'leap_motion_on_robot'...

moveGroup.getCurrentPose() always returns a pose in the /base_link frame.

I set it to use a different EE frame:

moveGroup.setEndEffectorLink("camera_ee_link");

Similar to what you did, I get the current pose. I've then tried converting the current pose to different frames and commanding them as the new EE pose. I expect it to report back that it's already at that pose within specified tolerances. Instead, it moves to a completely new pose. For example,

  // Current pose in base_link
  currentPose = moveGroup.getCurrentPose();  // Always returns in base_link
  ROS_INFO_STREAM( "Current pose from moveGroup:  " << currentPose );

  // Current pose in camera_ee_link
  // Remove the leading "/" for tf2
  if ( currentPose.header.frame_id.at(0) == '/' )
    currentPose.header.frame_id.erase(0,1);

  listener.waitForTransform( "camera_ee_link", currentPose.header.frame_id, ros::Time(0), ros::Duration(10.0) );
  try{
    geometry_msgs::TransformStamped tf_to_camera_ee_link_frame = tfBuffer.lookupTransform("camera_ee_link", currentPose.header.frame_id, ros::Time(0), ros::Duration(1.0) );
    tf2::doTransform(currentPose, currentPose, tf_to_camera_ee_link_frame);
  }
  catch(tf2::TransformException ex){
    ROS_ERROR("%s",ex.what());
    return false;
  }
  ROS_INFO_STREAM( "Current pose in camera_ee_link:  " << currentPose );

  // Test with currentPose:
  waypoints.clear();
  waypoints.push_back(currentPose.pose); // Sending it in base_link. leap_motion_on_robot, and camera_ee_link both all fail.
  fraction = move_base_to_manip::cartesian_motion(waypoints, trajectory, moveGroup, nh);
  ROS_INFO("Cartesian path: %.2f%% achieved", fraction * 100.);
  moveGroup.move();

The 3 frames I have tried are base_link, leap_motion_on_robot, and camera_ee_link. Basically, any frame that makes any sense whatsoever. It moves to 3 different poses, but none of them is the current pose.

Github issue: https://github.com/ros-planning/moveit/issues/522