Robot Game  v1.0
Research Track part 1 - Assignment
rg_services_py.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 
23 
24 
25 
26 import rospy
27 
28 import math
29 import random
30 import datetime
31 from geometry_msgs.msg import Point
32 from geometry_msgs.msg import Twist
33 from robot_game.srv import rg_get_target_srv, rg_get_target_srvResponse
34 from robot_game.srv import rg_check_srv, rg_check_srvRequest, rg_check_srvResponse
35 from robot_game.srv import rg_get_vel_srv, rg_get_vel_srvRequest, rg_get_vel_srvResponse
36 from robot_game import rg_data
37 
38 srv_get_target = None
39 srv_check_target = None
40 srv_get_vel = None
41 
42 
43 
49 def rg_get_target_callback( limits ):
50  ret = rg_get_target_srvResponse()
51 
52  ret.xt.x = limits.xmin + random.random() * (limits.xmax - limits.xmin)
53  ret.xt.y = limits.ymin + random.random() * (limits.ymax - limits.ymin)
54 
55  return ret
56 
57 
66  x = data.x.x - data.xt.x
67  y = data.x.y - data.xt.y
68 
69  return rg_check_srvResponse( reached=( math.sqrt(x*x + y*y) < rg_data.tolerance ) )
70 
71 
79 def rg_get_vel_callback( data ):
80  ret = rg_get_vel_srvResponse()
81  k = rg_data.twist_gain
82 
83  ret.vel.linear.x = k * ( data.xt.x - data.x.x )
84  ret.vel.linear.y = k * ( data.xt.y - data.x.y )
85  ret.vel.linear.z = 0.0
86 
87  ret.vel.angular.x = 0.0
88  ret.vel.angular.y = 0.0
89  ret.vel.angular.z = 0.0
90 
91  return ret
92 
93 
97  rospy.loginfo( "(Robot Game) Services node closed." )
98 
99 if __name__ == "__main__":
100  random.seed( datetime.datetime.now() )
101 
102  # Initialization of the node
103  rospy.init_node( "rg_services_py" )
104 
105  # Get services
106  srv_get_target = rospy.Service( rg_data.srv_name_get_target, rg_get_target_srv, rg_get_target_callback )
107  srv_check_target = rospy.Service( rg_data.srv_name_check_target, rg_check_srv, rg_check_target_callback )
108  srv_get_vel = rospy.Service( rg_data.srv_name_get_velocity, rg_get_vel_srv, rg_get_vel_callback )
109 
110  # spin forever
111  rospy.on_shutdown( services_on_shutdown )
112  rospy.loginfo( "(Robot Game) Services started! Spinning..." )
113  rospy.spin( )
def rg_check_target_callback(data)
Check if the distance between two points is less than a given tolerance.
def rg_get_vel_callback(data)
Check if the distance between two points is less than a given tolerance.
def rg_get_target_callback(limits)
Generate a new random target.
def services_on_shutdown()
Called when shutdown signal is raised.