transform_global_plan.cpp
Go to the documentation of this file.
1 
19 
20 namespace ftc_local_planner
21 {
23  const std::vector<geometry_msgs::PoseStamped>& global_plan,
24  const std::string& global_frame, tf::Stamped<tf::Pose>& goal_pose, int plan_point)
25  {
26  if (global_plan.empty())
27  {
28  ROS_ERROR("Received plan with zero length");
29  return false;
30  }
31  if(plan_point >= (int)global_plan.size())
32  {
33  ROS_ERROR("Goal_functions: Plan_point %d to big. Plan size: %lu",plan_point, global_plan.size());
34  return false;
35  }
36 
37  const geometry_msgs::PoseStamped& plan_goal_pose = global_plan.at(plan_point);
38  try
39  {
40  tf.canTransform(global_frame, ros::Time::now(),
41  plan_goal_pose.header.frame_id, plan_goal_pose.header.stamp,
42  plan_goal_pose.header.frame_id, ros::Duration(0.5));
43 
44  geometry_msgs::TransformStamped tmp = tf.lookupTransform(global_frame, ros::Time(),
45  plan_goal_pose.header.frame_id, plan_goal_pose.header.stamp,
46  plan_goal_pose.header.frame_id, ros::Duration(0.5));
47  tf::StampedTransform transform;
48  transformStampedMsgToTF(tmp, transform);
49 
50  poseStampedMsgToTF(plan_goal_pose, goal_pose);
51  goal_pose.setData(transform * goal_pose);
52  goal_pose.stamp_ = transform.stamp_;
53  goal_pose.frame_id_ = global_frame;
54  }
55  catch(tf::LookupException& ex)
56  {
57  ROS_ERROR("No Transform available Error: %s\n", ex.what());
58  return false;
59  }
60  catch(tf::ConnectivityException& ex)
61  {
62  ROS_ERROR("Connectivity Error: %s\n", ex.what());
63  return false;
64  }
66  {
67  ROS_ERROR("Extrapolation Error: %s\n", ex.what());
68  if (global_plan.size() > 0)
69  ROS_ERROR("Global Frame: %s Plan Frame size %d: %s\n", global_frame.c_str(), (unsigned int)global_plan.size(), global_plan[0].header.frame_id.c_str());
70 
71  return false;
72  }
73  return true;
74  }
75 }
void setData(const T &input)
virtual bool canTransform(const std::string &target_frame, const std::string &source_frame, const ros::Time &target_time, const ros::Duration timeout, std::string *errstr=NULL) const
virtual geometry_msgs::TransformStamped lookupTransform(const std::string &target_frame, const std::string &source_frame, const ros::Time &time, const ros::Duration timeout) const
static Time now()
#define ROS_ERROR(...)
bool getXPose(const tf2_ros::Buffer &tf, const std::vector< geometry_msgs::PoseStamped > &global_plan, const std::string &global_frame, tf::Stamped< tf::Pose > &goal_pose, int plan_point)
Returns X pose in plan.


asr_ftc_local_planner
Author(s): Marek Felix
autogenerated on Mon Feb 28 2022 21:45:41