Read operation on device '2676:ba02:2:4:44' failed: 'The requested operation timed out.' : TimeoutException thrown (file 'PylonUsbDevice.cpp')

55 views Asked by At

I am using two basler acA1920-25uc camera and run it on Jetson Orin NX 16Gb and . In two days time, Consistently I am getting the following error. Read operation on device '2676:ba02:2:4:44' failed: 'The requested operation timed out.' : TimeoutException thrown (file 'PylonUsbDevice.cpp', line 778) in one of the two basler cameras The frequency of errors is not frequent. Do anyone know what is root cause to this error and how to fix it? PC : Jetson Orin NX 16GB (Seeed Studio) Connect Camera through USB3.0 Camera : Aca1920-25uc Cables : 2200000621 (basler cables) I measured the Jetson's parameters. However, almost all parameters are stable in voltage and current during camera errors. (VDD > 5V)

class Camera :
    # Config Camera
    def __init__(self,serial_number,nodeFile = None):
        self.nodeFile = nodeFile
        self.camera = self.connect_camera(serial_number)
        self.camera.Open()
        
        print("Using device ", self.camera.GetDeviceInfo().GetModelName())
        print("Reading file back to camera's node map...")
        # Load settings from node file
        self.loadSettings(self.nodeFile)
        # Start Grab Image
        self.camera.TriggerMode.SetValue('On')
        # self.camera.TriggerDelay.SetValue(0)
        # self.camera.TriggerSelector.SetValue('FrameStart')
        self.camera.TriggerSource.SetValue('Software')        # 
        self.startGrab()
        
    def loadSettings(self,nodeFile):
        # load settings from Node file
        if nodeFile :
            pylon.FeaturePersistence.Load(nodeFile, self.camera.GetNodeMap(), True)
    
    def startGrab(self):
        # Start Grab Image
        self.camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)

    def stopGrab(self):
        # Stop Grab Image
        self.camera.StopGrabbing()

    def connect_camera(self,serial_number):
        # Connect and check Camera
        devices = pylon.TlFactory.GetInstance().EnumerateDevices()
        for device in devices:
            try :
                camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateDevice(devices[1]))
                # CHECK IF CAMERA 1 IS CORRECT SERIAL NUMBER
                

                if camera.GetDeviceInfo().GetSerialNumber() == serial_number :
                    print("CAM1-info: ",camera.GetDeviceInfo().GetSerialNumber())
                    return camera
            except Exception as error :
                print("CAMERA",error)
    
    def triggerCamera(self):
        # Capture camera
        # if self.camera.WaitForFrameTriggerReady(10000):
        time.sleep(0.005)
        try :
            if self.camera.WaitForFrameTriggerReady(5000, pylon.TimeoutHandling_ThrowException) :
                self.camera.ExecuteSoftwareTrigger()
                grabResult = self.camera.RetrieveResult(1000, pylon.TimeoutHandling_ThrowException) 
                if grabResult.GrabSucceeded():
                    img = grabResult.Array
                    return img
        except Exception as error:
            print("Trigger Error: ",error)
        return None

    def saveImage(self,grabResult,typeImage,quality = 100 ):
        # Save image into folder
        now = datetime.now()
        dateTime = now.strftime("%d-%m-%Y_%H-%M-%S")
        img = pylon.PylonImage()
        img.AttachGrabResultBuffer(grabResult)
        if typeImage == "jpg" :
            ipo = pylon.ImagePersistenceOptions()
            ipo.SetQuality(quality)
            filename = f"{dateTime}.jpg"
            img.Save(pylon.ImageFileFormat_Jpeg, filename, ipo)
        else :
            filename = f"{dateTime}.png"
            img.Save(pylon.ImageFileFormat_Png, filename)```

0

There are 0 answers