jonnew / Oat

Real-time position tracker for behavioral research
GNU General Public License v3.0
49 stars 19 forks source link

[error] Invalid Bus Manager object #36

Open lengoanhcat opened 7 years ago

lengoanhcat commented 7 years ago

Hi,

I am trying to open 6 different oat_frameserve as follows

oat frameserve usb raw0 -i 0
oat frameserve usb raw1 -i 1
...

It successfully opens 5 streams and give an error "Invalid Bus Manager object" for one failed attempt. I notice that each of five running frameserve takes 20% of a CPU load. The error might be due to lack of CPU load resource. My workstation have multiple cores so my question is

Does lack of CPU load causes "Invalid Bus Manager object" error ? If it does, how can I instruct each oat_frameserve use different cores.

Thanks,

Cat Le

jonnew commented 7 years ago

I doubt its due to CPU load. It seems more likely that some internally specified maximum has been reached for the data bus, or you have actually reached some hardware limitation.

With respect to different cores: each oat-frameserve instance is a separate program. Each will use whatever cores are available. You don't have to do that manually.

In your script above, assuming its in the shell or a bash script, you would put and & after each command to send it to the background and start the next command.

lengoanhcat commented 7 years ago

In my script, I put & after each command to run each oat-frameserve in the background.

Yeah, I agree that it is probably not due to CPU loads. In my case, oat_frameserve is always successful in starting any 5 out of 6 streams. That implies some hardware / software internal constrains.

In terms of hardware, each camera has its own bus (80 MB/s) which theoretically allows me stream 640x480 RGB8 60 fps. Curiously, I could only stream up to 32.74 fps. I think I am missing something here.

06:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 06)                                       
07:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 06)                                       
24:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 06)                                       
25:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 06)                                       
2a:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 06)                                       
2b:00.0 FireWire (IEEE 1394): LSI Corporation FW643 [TrueFire] PCIe 1394b Controller (rev 06)

In terms of software, could you give me some hints /clues of how to check / monitor the internal bus with oat?

jonnew commented 7 years ago

With regard to frame rate: does the max frame rate depend on the number of cameras you are running? That would imply some bus bandwidth limitation. If not, then I've noticed that Point Grey can be very optimistic with their frame rate specifications. e.g. the camera will only achieve a maximal rate under a certain ROI constraint or shutter mode. For my GigE cameras which are specified at 30 Hz, they will only achieve this if I free run the shutter or use mode 14 r and even then some shutters triggers are ignored. Make sure this is not what is limiting you. You can try different shutter settings in oat-frameserve to see if that helps.

With respect to bus bandwidth/monitoring: I don't really have any specific ideas since i work mostly with GigE cameras. I would recommend just getting on the phone with Point Grey to ask it this is some hardwired limitation of the hardware or driver, or if there is some software work around that we could potentially patch into oat-frameserve

lengoanhcat commented 7 years ago

The max frame rate does not depends on how many cameras I run. Its maximum is 32.75 fps. Which oat command I should use to specify the mode 14 r / or any other modes ? I am trying to contact PointGrey to specifically ask about possible limitation in streaming videos from six different cameras. Hopefully, I could report any good news soon.

lengoanhcat commented 7 years ago

Hi,

I am now in contact with technical supporter from PointGrey and they suggest to following function and codes to start and sync across multiple cameras. Is there any good way to incorporate the code lines into oat. Noted that, I am able to open all six cameras with FlyCap2 GUI but still unable to create six different oat frameserver.


int grabStatus = StartSyncCaptureAndGrab(ppCameras, numCameras); if (grabStatus != 0) { // Cleanup if start sync capture fails intermittently for (unsigned int i = 0; i < numCameras; i++) { if (ppCameras[i] != NULL) { ppCameras[i]->StopCapture(); ppCameras[i]->Disconnect(); delete ppCameras[i]; } }

    cout << "Press Enter to exit..." << endl;
    cin.ignore();
    return -1;
}

Regards,

Cat Le