Example #1
0
def main():
    #receive to this IP + port
    tx_port = 7167 #TX on this port, RX on 7178 (port+1)
    rx_port = tx_port+1
    self_ip = whoAmI() #This needs to be THIS device's IP on the 192.168 subnet

    vehicle_id = 1

    #turn network messages into tokens that get sent to the right function
    interface_manager = ProcessManager.TokenInterfaceManager(rx_ip=self_ip, rx_port=tx_port)

    with open('routing.json') as json_file:
        data = json.load(json_file)

        print ( data['routing']['CAV1'] )

        interface_manager.add_route('CAV1', data['routing']['CAV1']+':'+str(rx_port)) # use the RX port
        interface_manager.add_route('CAV2', data['routing']['CAV2']+':'+str(rx_port)) # use the RX port
        interface_manager.add_route('CAM', data['routing']['CAM']+':'+str(rx_port)) # use the RX port
        interface_manager.add_route('RSU', data['routing']['RSU']+':'+str(rx_port)) # use the RX port

    r_queue = multiprocessing.Queue()

    #receive network interface
    rx_network = Network.TTNetwork(ip=self_ip, port=rx_port, msg_receiver=interface_manager.receiver_function)

    #wrapped function that needs to be synchronized
    local_fusion_fp = Fusion(interface_manager.send_token_queue, vehicle_id, r_queue)
    fusion_sync = WaitingMatching.InputSynchronizedFunction(Fusion.local_fusion, local_fusion_fp.input_queue)

    #wrapped function that needs to be synchronized
    actuation_fp = Actuation(interface_manager.send_token_queue, vehicle_id, r_queue)
    actuation_sync = WaitingMatching.InputSynchronizedFunction(Actuation.actuate, actuation_fp.input_queue, use_deadline=True)

    #register synchronization section with process/interface manager
    interface_manager.add_sync_process(fusion_sync.function_name, fusion_sync)
    interface_manager.add_sync_process(actuation_sync.function_name, actuation_sync)

    # Init the camera
    # Setup our various settings
    settings = camera_recognition.Settings()
    settings.darknetPath = '../darknet/'
    camSpecs = camera_recognition.CameraSpecifications()
    camSpecs.cameraHeight = .2
    camSpecs.cameraAdjustmentAngle = 0.0

    # Lidar settings
    pipeFromC= "/home/jetson/Projects/slamware/fifo_queues/fifopipefromc"
    pipeToC= "/home/jetson/Projects/slamware/fifo_queues/fifopipetoc"

    # Set the time to start 10 seconds from now and let it rip!
    start_time = time.time() + 10
    interval = .125
    
    cameraThread = multiprocessing.Process(target=sourceImagesThread, args=(settings, camSpecs, interface_manager.send_token_queue, start_time, interval))
    cameraThread.start()
    lidarThread = multiprocessing.Process(target=sourceLIDARThread, args=(pipeFromC, pipeToC, interface_manager.send_token_queue, start_time, interval))
    lidarThread.start()

    #need this to make sure the main process doesn't finish and carry everything into the abyss
    fusion_sync.proc.join()
    actuation_sync.proc.join()