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