36 from final_assignment.srv
import switch_service, switch_serviceRequest, switch_serviceResponse
37 from final_assignment.srv
import check_position, check_positionRequest, check_positionResponse
38 from final_assignment.srv
import get_point, get_pointRequest, get_pointResponse
39 from final_assignment.srv
import reach_random_pos_status, reach_random_pos_statusRequest, reach_random_pos_statusResponse
40 from move_base_msgs.msg
import MoveBaseActionGoal
41 from geometry_msgs.msg
import Point
48 node_name =
"reach_random_pos_service"
52 name_reach_random_pos_status =
"/reach_random_pos_status"
56 name_reach_random_pos_switch =
"/reach_random_pos_switch"
60 name_check_position =
"/check_position"
64 name_get_point =
"/get_point"
68 name_move_base =
"/move_base/goal"
71 topic_move_base =
None
75 service_active =
False
81 signal_last_pos =
False
85 actual_position = Point( )
88 target_position =
None
92 last_response_check_pos = check_positionResponse( )
96 min_distance_from_the_target = 0.5
99 cycle_time = rospy.Duration( 0, 500 )
113 global is_moving, min_distance_from_the_target, target_position, last_response_check_pos, actual_position
114 global srv_check_position
118 req = check_positionRequest( )
120 req.check_only =
False
121 req.tol = min_distance_from_the_target
122 req.target = target_position
127 last_response_check_pos = res
130 actual_position = res.actual_position
141 global is_moving, signal_last_pos, target_position
144 signal_last_pos =
False
145 target_position =
None
155 global name_get_point, srv_get_point
156 global name_move_base, srv_move_base
157 global target_position
163 msg = MoveBaseActionGoal( )
164 msg.goal.target_pose.header.frame_id =
'map'
165 msg.goal.target_pose.pose.position.x = target_position.x
166 msg.goal.target_pose.pose.position.y = target_position.y
167 msg.goal.target_pose.pose.orientation.w = 1.0
169 topic_move_base.publish(msg)
176 srv_check_position =
None
197 global service_active, signal_last_pos, is_moving
199 response = switch_serviceResponse()
205 signal_last_pos =
False
208 service_active =
True
211 response.success =
True
212 response.in_progress =
False
219 signal_last_pos =
True
222 response.in_progress =
True
223 response.success =
False
227 response.success =
True
228 response.in_progress =
False
232 response.success =
True
233 response.in_progress =
False
241 global service_active, actual_position, target_position, last_response_check_pos, signal_last_pos
243 msg = reach_random_pos_statusResponse( )
245 msg.is_active = service_active
247 if target_position
is not None:
248 msg.target = target_position
252 msg.distance = last_response_check_pos.distance
253 msg.actual_position = actual_position
254 msg.last_pos_signal = signal_last_pos
274 global service_active, cycle_time, target_position, is_moving
275 global name_get_point, srv_get_point
276 global last_response_check_pos, signal_last_pos
279 while not rospy.is_shutdown( ):
284 if not service_active:
286 rospy.sleep( cycle_time )
296 service_active =
False
306 if last_response_check_pos.reached:
313 rospy.sleep( cycle_time )
321 rospy.loginfo(
" [%s] is OFFLINE", node_name )
326 if __name__ ==
"__main__":
327 rospy.init_node( node_name )
328 rospy.on_shutdown( cbk_on_shutdown )
331 rospy.loginfo(
" [%s] advertising service %s ...", node_name, name_reach_random_pos_status )
332 rospy.Service( name_reach_random_pos_status, reach_random_pos_status, srv_reach_random_pos_status )
333 rospy.loginfo(
" [%s] service %s ... OK", node_name, name_reach_random_pos_status )
336 rospy.loginfo(
" [%s] getting service %s ...", node_name, name_check_position )
337 rospy.wait_for_service( name_check_position )
338 srv_check_position = rospy.ServiceProxy( name_check_position, check_position )
339 rospy.loginfo(
" [%s] service %s ... OK", node_name, name_check_position )
342 rospy.loginfo(
" [%s] getting service %s ...", node_name, name_get_point )
343 rospy.wait_for_service( name_get_point )
344 srv_get_point = rospy.ServiceProxy( name_get_point, get_point )
345 rospy.loginfo(
" [%s] service %s ... OK", node_name, name_get_point )
348 rospy.loginfo(
" [%s] topic (out) %s ...", node_name, name_move_base )
349 topic_move_base = rospy.Publisher( name_move_base, MoveBaseActionGoal, queue_size=1 )
350 rospy.loginfo(
" [%s] topic (out) %s ... OK", node_name, name_move_base )
353 rospy.loginfo(
" [%s] getting service %s ...", node_name, name_reach_random_pos_switch )
354 rospy.Service( name_reach_random_pos_switch, switch_service, srv_reach_random_pos_switch )
355 rospy.loginfo(
" [%s] service %s ... OK", node_name, name_reach_random_pos_switch )
358 rospy.loginfo(
" [%s] is ONLINE", node_name )
360 except rospy.ROSException:
361 rospy.loginfo(
" [%s] Raised an Exception ... ", node_name )
def cbk_on_shutdown()
This is called on the shutdown of the node.
def srv_reach_random_pos_status(data)
return the status of the service.
def clear_status()
clear the status of the node.
def main()
The algorithm of the node.
srv_get_point
call-point of the service 'get_point'
def update_current_position()
Update the informations about the position from check_position service.
def new_target_to_move_base()
ask a new randomly-choosen target to the server points_manager, then send to MoveBase the target to r...
def srv_reach_random_pos_switch(data)
Turn on and off the service.
srv_check_position
call-point of the service 'check_position'