31 #define DEG2RAD 0.01745 
   40   double distance_from_target = 2.0;
 
   41   double orientation = tf::getYaw(msg->pose.pose.orientation) + 1.57;
 
   42   double x_position = -msg->pose.pose.position.y - cos(orientation)*distance_from_target;
 
   43   double y_position = msg->pose.pose.position.x - sin(orientation)*distance_from_target;
 
   45   ROS_INFO(
"x pos:%f, y pos:%f",x_position,y_position);
 
   47   goal.target_pose.header.frame_id = 
"/map";
 
   48   goal.target_pose.header.stamp = ros::Time::now();
 
   50   goal.target_pose.pose.position.x = x_position;
 
   51   goal.target_pose.pose.position.y = y_position;
 
   52   goal.target_pose.pose.orientation = tf::createQuaternionMsgFromYaw(orientation);
 
   68     tnow = ros::Time::now().toSec();
 
   75       leader_pose.pose.orientation = tf::createQuaternionMsgFromYaw(dyn_objects->pose.theta + 1.57);
 
   85     leader_pose.pose.orientation = tf::createQuaternionMsgFromYaw(dyn_objects->pose.theta + 1.57);
 
  172   int temp_id = msg->pose.position.z;
 
  191 int main(
int argc, 
char **argv)
 
  193   ros::init(argc, argv, 
"leader_follower");
 
  197   tf::TransformListener _listener;
 
  216   pathPublisher = n.advertise<nav_msgs::Path>(
"leader_path", 1);
 
  217   robot_cmd_vel = n.advertise<geometry_msgs::Twist>(
"/robot_0/cmd_vel",1);
 
  218   next_posePublisher = n.advertise<geometry_msgs::PoseStamped>(
"/robot_0/leader_next_pose", 1);
 
  226   for(
int i = 0; i < 4; i++){
 
  231   ros::Rate loop_rate(10);
 
  252     for(
int i = 0; i < 4; i++){
 
  266           ROS_INFO(
"found new leader, id:%d",
leader_id);
 
  278           ROS_INFO(
"leader %d is closer, start to follow",
leader_id);
 
  311             goal.target_pose.header.frame_id = 
"/map";
 
  312             goal.target_pose.header.stamp = ros::Time::now();   
 
  313             goal.target_pose.pose.position.x = 
leader_path.poses[0].pose.position.x;
 
  314             goal.target_pose.pose.position.y = 
leader_path.poses[0].pose.position.y;
 
  315             goal.target_pose.pose.orientation = 
leader_path.poses[0].pose.orientation;
 
  319             next_pose.header.stamp = ros::Time::now();
 
  323             ROS_INFO(
"Sending goal");
 
  335             goal.target_pose.pose.position.x, 
goal.target_pose.pose.position.y);
 
  340           if(distance_to_pose < 2.0){
 
geometry_msgs::PoseStamped next_pose
geometry_msgs::PoseStamped robot_goal
move_base_msgs::MoveBaseGoal goal
void dyn_objects_callback(const trajectory_simulator::TrajectoryObservation::ConstPtr &dyn_objects)
void target_pose_callback(const nav_msgs::Odometry::ConstPtr &msg)
geometry_msgs::PoseWithCovarianceStamped robot_pose
ros::Subscriber dyn_objects_subscriber
void robot_pose_callback(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr &msg)
void robot_goal_callback(const geometry_msgs::PoseStamped::ConstPtr &msg)
nav_msgs::Path leader_path
ros::Subscriber robot_goal_subscriber
ros::Subscriber leader_goal_subscriber
double euclidean_dist(double x1, double y1, double x2, double y2)
double leader2goal_distance
tf::TransformListener * listener
geometry_msgs::PoseStamped leader_pose
int main(int argc, char **argv)
ros::Publisher robot_cmd_vel
boost::shared_ptr< ::trajectory_simulator::TrajectoryObservation_< ContainerAllocator > const  > ConstPtr
double robot2goal_distance
geometry_msgs::PoseStamped leader_goal[4]
ros::Subscriber robot_pose_subscriber
void leader_goal_callback(const geometry_msgs::PoseStamped::ConstPtr &msg)
ros::Publisher pathPublisher
ros::Publisher next_posePublisher