rdiankov / openrave

Open Robotics Automation Virtual Environment: An environment for testing, developing, and deploying robotics motion planning algorithms.
http://www.openrave.org
Other
700 stars 342 forks source link

Cannot grab camera/sensor/video from qtcoin viewer in quantal #238

Open cdellin opened 11 years ago

cdellin commented 11 years ago

I'm working on getting OpenRAVE working on Ubuntu Quantal 12.10. My most immediate outstanding issue is that I cannot grab camera, sensor, or video output from the qtcoin viewer. When I try, I get the following message printed continuously, and OpenRAVE hangs:

Coin warning in cc_glglue_instance(): Error when setting up the GL context. This can happen if there is no current context, or if the context has been set up incorrectly.

This happens no matter how I try to grab frame(s). I've tried the following so far:

im = e.GetViewer().GetCameraImage(1280,720, tx, [800,800,640,360])

or

e.Load('data/camera.sensor.xml')
cam = e.GetSensor('camera')
cam.Configure(cam.ConfigureCommand.PowerOn)
time.sleep(5)
cam.GetSensorData()

or recording a video (from the GUI interface).

Quantal links against libcoin60 libsoqt4-20. My package is located in my ppa here: https://launchpad.net/~robotics/+archive/ppa (in case you want to see the build log).

rdiankov commented 11 years ago

sounds like a problem with your graphics driver, i don't think there's anything we can do on the openrave side to fix it

cdellin commented 11 years ago

Here's a quick update on this. It does appear to be a very deep coin problem with SoOffscreenRenderer. I'm running the most vanilla Linux configuration on my hardware (2011 Macbook Air, Ubuntu 12.10, Linux 3.5.0-18-generic with open-source Intel i915 driver, Xorg driver package xserver-xorg-video-intel). This stopped working on the upgrade from Ubuntu 12.04 to Ubuntu 12.10.

Here's the backtrace: 0 cc_glglue_instance at gl.cpp:2397 1 glxglue_has_pbuffer_support at gl_glx.cpp:457 2 glxglue_has_pbuffer_support at gl_glx.cpp:886 3 glxglue_context_create_offscreen at gl_glx.cpp:918 4 cc_glglue_context_max_dimensions at gl.cpp:4631 5 CoinOffscreenGLCanvas::getMaxTileSize at CoinOffscreenGLCanvas.cpp:414 6 CoinOffscreenGLCanvas::clampSize at CoinOffscreenGLCanvas.cpp:63 7 CoinOffscreenGLCanvas::setWantedSize at CoinOffscreenGLCanvas.cpp:93 8 SoOffscreenRendererP::renderFromBase at SoOffscreenRenderer.cpp:671 9 QtCoinViewer::_GetCameraImage

The immediate problem is that the call to glGetError() inside cc_glglue_instance is returning a bogus value (10092659). I can't see why it should ever do that, even if there is no OpenGL context allocated. Here are the return values I'd expect to see on my system:

GL_NO_ERROR: 0 GL_INVALID_ENUM: 1280 GL_INVALID_VALUE: 1281 GL_INVALID_OPERATION: 1282 GL_STACK_OVERFLOW: 1283 GL_STACK_UNDERFLOW: 1284 GL_OUT_OF_MEMORY: 1285 GL_INVALID_FRAMEBUFFER_OPERATION: 1286 GL_TABLE_TOO_LARGE: 32817 (deprecated)

In summary, the SoOffscreenRenderer from coin appears to be newly broken with the latest stable Intel graphics drivers (used at least in Macbook products). If anyone has success getting the offscreen renderer to work with these newer drivers, let me know!