def main(port): """Start listening for input.""" # Set up the pipes init_pipes() # Set up listener listener = ServiceSocket(port) # Finally, wait for input before quitting try: while True: text = raw_input("").strip() if text == "q": break except (KeyboardInterrupt, EOFError): pass except: raise finally: # Only shutdown the pipeline if we actually were taking language input print "Shutting down NL pipeline..." close_pipes() listener.shutdown()
def main(): """Get input and process it in a loop.""" # Set up the pipes init_pipes() # Get input from user interactively signal.signal(signal.SIGWINCH, sigwinch_handler) try: curses.wrapper(interactive_mode) except WindowTooSmallError as exc: print >> sys.stderr, exc sys.exit(1) close_pipes()
def __init__(self): init_pipes()
def __init__(self, port, local=False): # Set up callback CallbackSocket.__init__(self, port, MSG_SEP, local) self.register_callback(self.parse_text) # Start up the pipeline init_pipes()
def run(self, aut_path=None): """Intialize all NL components.""" # pylint: disable=W0603 global WORLD_KNOWLEDGE # Start the NL pipeline if not aut_path: print "Starting NL pipeline..." init_pipes() else: print "Skipping loading nlpipeline because an automaton was loaded" # Start the ROS node print "Initializing ROS node..." rospy.init_node('nlproxy') # Set up the state mgr and its callbacks print "Starting state manager..." self.state_mgr = StateManager(self) self.state_mgr.set_basedir(LTLGEN_BASE_DIR) # Load the automaton if needed if aut_path: self.state_mgr.load_test_automaton(aut_path, False) # Create world knowledge print "Starting knowledge..." WORLD_KNOWLEDGE = Knowledge(self) self.state_mgr.world_knowledge = WORLD_KNOWLEDGE # Wait a little for ROS to avoid timing startup issues. print "Waiting for ROS node to settle..." time.sleep(1) # Set up ROS listening print "Subscribing to notifications..." # Set up state manager's sending and listening pub = add_ltl_publisher() self.state_mgr.set_publisher(pub) add_subscriber(LTL_ENVIRONMENT_TOPIC, self.state_mgr.process_sensor_data) add_subscriber(LTL_ENVIRONMENT_TOPIC, WORLD_KNOWLEDGE.process_sensor_data) # Create the input comm_proxy and iPad connections print "Starting comm_proxy..." self.comm_proxy = CallbackSocket(self.text_port) self.comm_proxy.register_callback(self.process_text) self.ipad_conn = iPadConnection(self.map_port) self.ipad_conn.register_rename_callback(rename_entity) self.ipad_conn.register_text_callback(self.process_text) # TODO Add highlight callback self.map_proxy = MapProxy(self.ipad_conn) add_subscriber(LTL_ENVIRONMENT_TOPIC, self.ipad_conn.add_icons) WORLD_KNOWLEDGE.map_proxy = self.map_proxy # Set up odometry forwarding to the ipad tf = TransformListener() while not tf.frameExists("/map"): rospy.logwarn("Not ready for transforms yet") rospy.sleep(1.0) position_proxy = RobotPositionProxy(self.ipad_conn, tf) rospy.Subscriber(ODOM_TOPIC, Odometry, position_proxy.forward_position) # Set up getting directions direction_proxy = DirectionProxy() rospy.Subscriber(LOCATION_TOPIC, String, direction_proxy.set_location) WORLD_KNOWLEDGE.direction_proxy = direction_proxy print "NLMaster startup complete!" print "*" * 80 # Finally, wait for input before quitting try: while True: text = raw_input("").strip() if text == "q": break except (KeyboardInterrupt, EOFError): pass except: raise finally: # Only shutdown the pipeline if we actually were taking language input if not aut_path: print "Shutting down NL pipeline..." close_pipes() self.comm_proxy.shutdown() self.ipad_conn.shutdown() sys.exit()
def run(self, aut_path=None): """Intialize all NL components.""" # pylint: disable=W0603 global WORLD_KNOWLEDGE # Start the NL pipeline if not aut_path: print "Starting NL pipeline..." init_pipes() else: print "Skipping loading nlpipeline because an automaton was loaded" # Start the ROS node print "Initializing ROS node..." rospy.init_node('nlproxy') # Set up the state mgr and its callbacks print "Starting state manager..." self.state_mgr = StateManager(self) self.state_mgr.set_basedir(LTLGEN_BASE_DIR) # Load the automaton if needed if aut_path: self.state_mgr.load_test_automaton(aut_path, False) # Create world knowledge print "Starting knowledge..." WORLD_KNOWLEDGE = Knowledge(self) self.state_mgr.world_knowledge = WORLD_KNOWLEDGE # Wait a little for ROS to avoid timing startup issues. print "Waiting for ROS node to settle..." time.sleep(1) # Set up ROS listening print "Subscribing to notifications..." # Set up state manager's sending and listening pub = add_ltl_publisher() self.state_mgr.set_publisher(pub) add_subscriber(LTL_ENVIRONMENT_TOPIC, self.state_mgr.process_sensor_data) add_subscriber(LTL_ENVIRONMENT_TOPIC, WORLD_KNOWLEDGE.process_sensor_data) # Create the input comm_proxy and iPad connections print "Starting comm_proxy..." self.comm_proxy = CallbackSocket(self.text_port) self.comm_proxy.register_callback(self.process_text) self.ipad_conn = iPadConnection(self.map_port) self.ipad_conn.register_rename_callback(rename_entity) self.ipad_conn.register_text_callback(self.process_text) # TODO Add highlight callback self.map_proxy = MapProxy(self.ipad_conn) add_subscriber(LTL_ENVIRONMENT_TOPIC, self.ipad_conn.add_icons) WORLD_KNOWLEDGE.map_proxy = self.map_proxy # Set up odometry forwarding to the ipad tf = TransformListener() while not tf.frameExists("/map"): rospy.logwarn("Not ready for transforms yet") rospy.sleep(1.0) position_proxy = RobotPositionProxy(self.ipad_conn,tf) rospy.Subscriber(ODOM_TOPIC, Odometry, position_proxy.forward_position) # Set up getting directions direction_proxy = DirectionProxy() rospy.Subscriber(LOCATION_TOPIC, String, direction_proxy.set_location) WORLD_KNOWLEDGE.direction_proxy = direction_proxy print "NLMaster startup complete!" print "*" * 80 # Finally, wait for input before quitting try: while True: text = raw_input("").strip() if text == "q": break except (KeyboardInterrupt, EOFError): pass except: raise finally: # Only shutdown the pipeline if we actually were taking language input if not aut_path: print "Shutting down NL pipeline..." close_pipes() self.comm_proxy.shutdown() self.ipad_conn.shutdown() sys.exit()