24 #include "ros/console.h"
25 #include "geometry_msgs/PoseWithCovariance.h"
26 #include "geometry_msgs/Point.h"
27 #include "geometry_msgs/Vector3.h"
28 #include "geometry_msgs/Twist.h"
29 #include "nav_msgs/Odometry.h"
31 #include "robot_game/rg_get_target_srv.h"
32 #include "robot_game/rg_check_srv.h"
33 #include "robot_game/rg_get_vel_srv.h"
73 geometry_msgs::Point
rg_get_new_target( ros::ServiceClient srv,
double xmin,
double xmax,
double ymin,
double ymax )
76 robot_game::rg_get_target_srv newtrg_msg;
77 newtrg_msg.request.xmin = xmin;
78 newtrg_msg.request.xmax = xmax;
79 newtrg_msg.request.ymin = ymin;
80 newtrg_msg.request.ymax = ymax;
83 srv.call( newtrg_msg );
85 return newtrg_msg.response.xt;
108 robot_game::rg_check_srv checkmsg;
109 checkmsg.request.x.x = posemsg->pose.pose.position.x;
110 checkmsg.request.x.y = posemsg->pose.pose.position.y;
111 checkmsg.request.x.z = posemsg->pose.pose.position.z;
112 checkmsg.request.xt =
target;
119 robot_game::rg_get_vel_srv vel_msg;
120 vel_msg.request.x = checkmsg.request.x;
121 vel_msg.request.xt =
target;
125 out.publish( vel_msg.response.vel );
133 int main(
int argc,
char** argv )
135 ros::init( argc, argv,
"rg_controller" );
138 check_tg_srv = h.serviceClient<robot_game::rg_check_srv>(
"rg_check_target");
139 newtg_srv = h.serviceClient<robot_game::rg_get_target_srv>(
"rg_get_target");
140 get_vel_srv = h.serviceClient<robot_game::rg_get_vel_srv>(
"rg_get_velocity");
145 out = h.advertise<geometry_msgs::Twist>(
"cmd_vel", 1000 );
ros::ServiceClient newtg_srv
int main(int argc, char **argv)
Ask for services, topics, and initialise the node.
ros::ServiceClient get_vel_srv
geometry_msgs::Point target
ros::ServiceClient check_tg_srv
void rg_controller_task(const nav_msgs::Odometry::ConstPtr &posemsg)
The main function of the controller.
geometry_msgs::Point rg_get_new_target(ros::ServiceClient srv, double xmin, double xmax, double ymin, double ymax)
require a new target to reach to the server.