def initialize(self): """ Initializes HLA (connection to RTIg, FOM file, publish robots...) """ logger.info("Initializing HLA node.") if os.getenv("CERTI_HTTP_PROXY") == None: os.environ["CERTI_HTTP_PROXY"] = "" os.environ["CERTI_HOST"] = str(self.host) os.environ["CERTI_TCP_PORT"] = str(self.port) logger.debug("CERTI_HTTP_PROXY= %s", os.environ["CERTI_HTTP_PROXY"]) logger.debug("CERTI_HOST= %s", os.environ["CERTI_HOST"]) logger.debug("CERTI_TCP_PORT= %s", os.environ["CERTI_TCP_PORT"]) try: logger.debug("Creating RTIA...") self.rtia = rti.RTIAmbassador() logger.debug("RTIA created!") try: self.rtia.createFederationExecution(self.federation, self.fom) logger.info("%s federation created", self.federation) except rti.FederationExecutionAlreadyExists: logger.debug("%s federation already exists", self.federation) except rti.CouldNotOpenFED: logger.error("FED file not found! " + \ "Please check that the '.fed' file is in the CERTI " + \ "search path of RTIg.") return False except rti.ErrorReadingFED: logger.error("Error when reading FED file! " + \ "Please check the '.fed' file syntax.") return False logger.debug("Creating MorseAmbassador...") self.morse_ambassador = MorseAmbassador(self.rtia, self.federation, self.time_sync, 0, self.gl) try: self.rtia.joinFederationExecution(self.node_name, self.federation, self.morse_ambassador) except rti.FederateAlreadyExecutionMember: logger.error("A Federate with name %s has already registered."+\ " Change the name of your federate or " + \ "check your federation architecture.", self.node_name) return False except rti.CouldNotOpenFED: logger.error("FED file not found! Please check that the " + \ "'.fed' file is in the CERTI search path.") return False except rti.ErrorReadingFED: logger.error("Error when reading FED file! "+ \ "Please check the '.fed' file syntax.") return False if self.morse_ambassador.initialize() == False: return False logger.info("HLA middleware initialized.") except Exception as error: logger.error("Error when connecting to the RTIg: %s." + \ "Please check your HLA network configuration.", error) raise
def __init__(self, klass, fom, node_name, federation, sync_point, sync_register, time_sync, timestep, lookahead): """ Initializes HLA (connection to RTIg, FOM file, publish robots...) """ logger.info("Initializing HLA node.") self._federation = federation self._sync_point = sync_point self._sync_register = sync_register self._time_sync = time_sync try: logger.debug("Creating RTIA...") self.rtia = rti.RTIAmbassador() logger.debug("RTIA created!") try: self.rtia.createFederationExecution(federation, fom) logger.info("%s federation created", federation) except rti.FederationExecutionAlreadyExists: logger.debug("%s federation already exists", federation) except rti.CouldNotOpenFED: logger.error("FED file not found! " + \ "Please check that the '.fed' file is in the CERTI " + \ "search path of RTIg.") raise except rti.ErrorReadingFED: logger.error("Error when reading FED file! " + \ "Please check the '.fed' file syntax.") raise logger.debug("Creating MorseAmbassador...") self.morse_ambassador = klass(self.rtia, federation, time_sync, timestep, lookahead) try: self.rtia.joinFederationExecution(node_name, federation, self.morse_ambassador) except rti.FederateAlreadyExecutionMember: logger.error("A Federate with name %s has already registered."+\ " Change the name of your federate or " + \ "check your federation architecture.", self.node_name) raise except rti.CouldNotOpenFED: logger.error("FED file not found! Please check that the " + \ "'.fed' file is in the CERTI search path.") raise except rti.ErrorReadingFED: logger.error("Error when reading FED file! "+ \ "Please check the '.fed' file syntax.") raise logger.info("HLA middleware initialized.") except Exception as error: logger.error("Error when connecting to the RTIg: %s." + \ "Please check your HLA network configuration.", error) raise
def __init__(self, federateName): ''' Constructor ''' self.synchState = SynchState.NotInit self.granted = False self.time = 0.0 self.timeState = TimeState.NotInit # these are set but not used in the code # object registration self.regObjects = [ ] # stores handles to registered message object instances (for sending) self.otherObjects = [ ] # stores handles on message objects registered by other federates (for receiving) self.opObjectNames = [ ] # stores names of registered object instances (one to one mapping with previous) the names are not used for anything self.nameReserved = False # not used # class declaration self.opClassHandles = [ ] # contains handles on class declarations that are set during publish and used during registerObjectInstance self.ipClassHandle = None # used locally in subscribe and thus shown here only for symmetry sake (not really needed as a class property) # class declaration # and message passing self.ipHandles = { } # contains handles on attribute declarations and is used for subscribe and reflectAttributeValues self.opHandles = { } # contains handles on attribute declarations and is used for publish and updateAttributes # self.quantizers = {} self.subscriptions = {} self.publications = {} print("Create ambassador") self.rtiaReference = rti.RTIAmbassador() print(self.rtiaReference) self.federateName = federateName self.federationName = None # needed to start/destroy federation self.creator = False # needed to synchronize the start of co-simulation execution self.lookAhead = 0 # ??? self.pendingUpdates = [] # message buffer for incoming messages self.TsoMsgReceived = False # true if time stamped message is received (not used) self.test = False
#!/usr/bin/env python import hla.rti as rti class MyAmbassador(rti.FederateAmbassador): pass rtia = rti.RTIAmbassador() try: rtia.createFederationExecution("VirtualAir", "AviationSimNet-v3.1.fed") except rti.FederationExecutionAlreadyExists: pass mya = MyAmbassador() rtia.joinFederationExecution("python-01", "VirtualAir", mya) spaceHandle = rtia.getRoutingSpaceHandle("Geo") dimensionHandle = rtia.getDimensionHandle("X", spaceHandle) region = rtia.createRegion(spaceHandle, [(dimensionHandle, (1, 5))]) rtia.notifyAboutRegionModification(region) rtia.deleteRegion(region) # $Id: region_creation.py,v 1.1 2009/06/07 15:12:48 gotthardp Exp $
def __init__(self, robot_name, host="localhost", port=60400): self.fom = "morse.fed" self.federation = "MORSE" self.robot = None # Setup environment if os.getenv("CERTI_HTTP_PROXY") == None: os.environ["CERTI_HTTP_PROXY"] = "" os.environ["CERTI_HOST"] = str(host) os.environ["CERTI_TCP_PORT"] = str(port) # Create Ambassador try: self.rtia = rti.RTIAmbassador() print("Creating MORSE Federation...") try: self.rtia.createFederationExecution(self.federation, self.fom) except rti.FederationExecutionAlreadyExists: print("%s federation already exists", self.federation) except rti.CouldNotOpenFED: print("FED file not found! " + \ "Please check that the '.fed' file is in the CERTI " + \ "search path of RTIg.") return None except rti.ErrorReadingFED: print("Error when reading FED file! " + \ "Please check the '.fed' file syntax.") return None print("Joining MORSE Federation...") try: self.morse_ambassador = rti.FederateAmbassador() self.rtia.joinFederationExecution("client-hla", self.federation, self.morse_ambassador) except rti.FederateAlreadyExecutionMember: print("A Federate with name %s has already registered."+\ " Change the name of your federate or " + \ "check your federation architecture.", self.node_name) return None except rti.CouldNotOpenFED: print("FED file not found! Please check that the " + \ "'.fed' file is in the CERTI search path.") return None except rti.ErrorReadingFED: print("Error when reading FED file! "+ \ "Please check the '.fed' file syntax.") return None # Get class/attribute handlers try: self.robot_t = self.rtia.getObjectClassHandle("Robot") self.position_t = self.rtia.getAttributeHandle( "position", self.robot_t) self.orientation_t = self.rtia.getAttributeHandle( "orientation", self.robot_t) except rti.NameNotFound: print("'Robot' (or attributes) not declared in FOM." + \ "Your '.fed' file may not be up-to-date.") return None # Declare a robot self.rtia.publishObjectClass(self.robot_t, [self.position_t, self.orientation_t]) self.robot = self.rtia.registerObjectInstance( self.robot_t, robot_name) print("Pose of robot %s will be published on the %s federation.", robot_name, self.federation) print("MorseAmbassador initialized") except Exception as error: print("Error when connecting to the RTIg: %s." + \ "Please check your HLA network configuration.", error) return None