ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
1

Two cameras (uEye + Kinect)

asked 2014-09-18 11:39:55 -0600

Nikolaus Mayer gravatar image

Hey everyone,

I'd like to record image streams from two cameras at the same time. One is a uEye (using the uEye driver) and the other is a Asus Xtion Pro Kinect-like (using the ROS openni_camera package).

Starting data retrieval nodes for both cameras is not a problem. Displaying one of them with image_view also works. However, I cannot display or record (with rosbag) them both at the same time. The OpenNi will display just fine, but the uEye stops sending data.

I've dug into the code, and the problem seems to be that whenever the OpenNi is active (i.e., being recorded or displayed), the is_GetImageMem method within the libueye_api shared object changes behaviour: It receives a pointer and will change it to the new frame's address. The faulty behaviour results in the pointer not being changed, and indeed the image data at that address does not change either.

Has anyone seen similar behaviour? Or used a uEye camera together with a different camera?

Thanks for any help!

TL;DR: When OpenNi camera is being used, the uEye camera stops generating new frames.

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
2

answered 2014-09-18 18:10:53 -0600

kmhallen gravatar image

updated 2014-09-18 18:48:25 -0600

Try increasing initMemoryPool(4). This will allocate more frame buffers.

The call to is_WaitEvent() is set to timeout after 2*frame_rate. Either decrease your frame rate or increase the timeout.

Play around with the pixel_clock parameter. This affects how the uEye camera interacts with the USB bus.

Have you tried visualizing the uEye camera with the manufacture's demo program while also visualizing the OpenNi camera in ROS? This would eliminate either the ueye ROS driver or the manufacture's driver as the problem.

Edit: Also, run ueyecameramanager in a separate tab. It will give 'camera removed' and 'camera connected' notifications.

edit flag offensive delete link more

Comments

That works, thanks!

Increasing initMemoryPool(4) didn't change anything, but once I decreased pixel_clock to <20 the uEye immediately started sending data again.

Follow-up question: Decreasing pixel_clock automatically decreased the frame rate, but I could just reset to 30. That a problem?

Nikolaus Mayer gravatar image Nikolaus Mayer  ( 2014-09-19 02:31:07 -0600 )edit

Yes. Pixel clock limits the maximum frame rate. Select a pixel clock first, then select a frame rate.

kmhallen gravatar image kmhallen  ( 2014-09-19 10:20:11 -0600 )edit
2

answered 2014-09-18 14:40:38 -0600

paulbovbel gravatar image

updated 2014-09-18 14:41:42 -0600

Assuming the uEye camera is USB, many people have had trouble attempting to run multiple Xtions off of one USB bus, due to bandwidth issues. If your computer has multiple USB buses, try plugging the cameras into both separately.

You might also find it helpful to look at (and post here) the dmesg kernel buffer, as any low level hardware-related error messages are likely to show up there.

edit flag offensive delete link more

Comments

Unfortunately it's a limited-capability notebook, so multiple buses isn't an option. I might try that on a bigger machine though, thanks!

Nikolaus Mayer gravatar image Nikolaus Mayer  ( 2014-09-19 02:32:28 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2014-09-18 11:39:55 -0600

Seen: 483 times

Last updated: Sep 18 '14