test_commander.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 #
00003 # Unit test for ART commander node
00004 #
00005 #   Copyright (C) 2010 Austin Robot Technology
00006 #   License: Modified BSD Software License Agreement
00007 #
00008 # This is essentially a scaffold version of the navigator.
00009 #
00010 # $Id: test_commander.py 620 2010-09-25 01:11:51Z jack.oquin $
00011 
00012 import roslib;
00013 roslib.load_manifest('art_nav')
00014 
00015 import rospy
00016 
00017 from art_msgs.msg import ArtHertz
00018 from art_msgs.msg import Behavior
00019 from art_msgs.msg import EstopState
00020 from art_msgs.msg import MapID
00021 from art_msgs.msg import NavigatorCommand
00022 from art_msgs.msg import NavigatorState
00023 from art_msgs.msg import RoadState
00024 
00025 last_order = None
00026 
00027 def log_cmd(cmd):
00028     global last_order
00029     if not last_order:
00030         rospy.loginfo("first navigator command received")
00031     last_order = cmd.order
00032     rospy.loginfo('order ' + str(cmd.order.behavior.value) + ' received')
00033 
00034 def log_state(state_msg):
00035     rospy.logdebug('publishing ' + str(state_msg.header.seq))
00036 
00037 def estop_state_changes(state_msg):
00038     "do some E-stop state transitions, returns updated state message"
00039     if last_order.behavior.value == Behavior.Run:
00040         if state_msg.estop.state != EstopState.Run:
00041             state_msg.estop.state = EstopState.Run
00042             rospy.loginfo('entering E-stop Run state')
00043     elif last_order.behavior.value == Behavior.Pause:
00044         if state_msg.estop.state != EstopState.Pause:
00045             state_msg.estop.state = EstopState.Pause
00046             rospy.loginfo('entering E-stop Pause state')
00047     elif (last_order.behavior.value == Behavior.Quit
00048           or last_order.behavior.value == Behavior.Abort):
00049         if state_msg.estop.state != EstopState.Done:
00050             state_msg.estop.state = EstopState.Done
00051             rospy.loginfo('entering E-stop Done state')
00052     return state_msg
00053 
00054 def road_state_changes(state_msg):
00055     """do some road state transitions when running
00056        returns updated state message"""
00057     rospy.loginfo('Running, checking behavior')
00058     if last_order.behavior.value == Behavior.Initialize:
00059         if state_msg.road.state == RoadState.Init:
00060             state_msg.road.state = RoadState.Follow
00061             # set initial way-point to 1.1.1
00062             state_msg.last_waypt.seg = 1
00063             state_msg.last_waypt.lane = 1
00064             state_msg.last_waypt.pt = 1
00065             rospy.loginfo('entering Road Follow state')
00066     return state_msg
00067 
00068 def test():
00069     topic = rospy.Publisher('navigator/state', NavigatorState)
00070     rospy.Subscriber('navigator/cmd', NavigatorCommand, log_cmd)
00071     rospy.init_node('test_commander')
00072 
00073     rospy.loginfo('starting commander test')
00074 
00075     state_msg = NavigatorState()     # navigator state msg with header
00076     state_msg.header.frame_id = '/map'
00077 
00078     while not rospy.is_shutdown():
00079 
00080         state_msg.header.stamp = rospy.Time.now()
00081 
00082         # echo last order, if any received yet
00083         if last_order:
00084             state_msg = estop_state_changes(state_msg)
00085             if state_msg.estop.state == EstopState.Run:
00086                 state_msg = road_state_changes(state_msg)
00087             state_msg.last_order = last_order
00088 
00089         log_state(state_msg)
00090         topic.publish(state_msg)
00091 
00092         rospy.sleep(1.0/ArtHertz.NAVIGATOR)
00093 
00094 if __name__ == '__main__':
00095     try:
00096         test()
00097     except rospy.ROSInterruptException: pass
00098 
00099     rospy.loginfo('commander test completed')


art_nav
Author(s): Austin Robot Technology, Jack O'Quin
autogenerated on Fri Jan 3 2014 11:08:43