ros-drivers / openni_camera

A ROS driver for OpenNI depth (+ RGB) cameras.
49 stars 60 forks source link

Bug in registration - NaN in PointCloud #13

Open joaoc opened 11 years ago

joaoc commented 11 years ago

On some PCs the registration show a bug.

If you enable it, your PointCloud will only have NaN, and some reports that the depth image gets all gray(no real image).

Ros answers have allot of this issues, and a possible solution is to install the OpenNi + Nite binaries (http://answers.ros.org/question/53706/registered-depth-image-is-black/#53832) and (http://answers.ros.org/question/54951/kinect-depth-registration-not-working-on-fuerte-and-groovy/), but that don't work all the time.

That is my problem, i installed the ros-fuerte-openni-camera and ros-fuerte-openni-launch, and if i enable the depth_registration all i get is NaN's. Running the samples from OpenNi binaries everything works fine!

Also i say this is hardware dependent, because on diferent machines with the same software (linux version+ ros version) it presents diferent results on some it works and others don't (but the OpenNi binaries allways work)

jonbinney commented 11 years ago

Are there any errors in the output of openni_camera when you run it? Are you using a kinect or an xtion?

joaoc commented 11 years ago

There are no errors running openni_camera except for those related with the advertise of topics already advertised:

[ERROR] [1351028964.484342461]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressedDepth/set_parameters] [ERROR] [1351028964.489915028]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressed/set_parameters] [ERROR] [1351028964.495383139]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/theora/set_parameters]

This is running through openni_lauch I'm using a Kinect.

jkammerl commented 11 years ago

Are you using the patched libopenni drivers or did you directly install the unpatched openni sources?

joaoc commented 11 years ago

I'v just install the ros-groovy-openni-camera and ros-groovy-openni-launch and got this problem (NaN's on the depth_registered pointclound). Tried to remove the openni-camera and openni-launch, install the OpenNi, sensor (avin2), and NITE binaries (as stated in one of the links i passed) and it works ok (the samples provided with them). when i reinstall the openni-camera and openni-launch the problem remains (but the samples from OpenNi binaries run fine)

jkammerl commented 11 years ago

As far as I know, the Kinect does not provide hardware depth-color registration. You should definitely use the ros debians of libopenni that can be found on the ROS PPA as they are patched to simulation hardware synchronization for the Kinect. Is it possible that you are mixing up different versions of openni? The openni_camera package doesn't work with the Kinect if you directly install the unpatched openni sources from Primesense.

joaoc commented 11 years ago

as i said on the OP i only install OpenNi binaries as possible fix to this problem (that didn't solve noting). On a fresh ubuntu 12.04, ros groovy and ros-groovy-openni-camera /ros-groovy-openni-launch install i get this problem, so its not related to the user mixing up versions. it didn't work from the start.

what i did after (when i saw that the depth_registration didn't work) was to follow the instructions where: http://answers.ros.org/question/53706/registered-depth-image-is-black/?answer=53834#post-id-53834

Today i have this (with the ros-openni and openni Binaries):

$ dpkg -l libopenni* Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Description +++-=============================-=============================-========================================================================== ii libopenni-dev 1.5.4.0-3+precise1 headers for OpenNI 'Natural Interaction' frameworks ii libopenni-nite-dev 1.3.1.5~precise Nite development package ii libopenni-sensor-primesense-dev 5.1.0.41-2+precise1 Microsoft Kinect sensor modules for the OpenNI framework ii libopenni-sensor-primesense0 5.1.0.41-2+precise1 Microsoft Kinect sensor modules for the OpenNI framework ii libopenni0 1.5.4.0-3+precise1 framework for sensor-based 'Natural Interaction'

jkammerl commented 11 years ago

These instructions tell you how to generate a openni debian from source. Since you didn't compile the patched version of openni that enables depth registration with the Kinect, it doesn't work for you.

joaoc commented 11 years ago

maybe i didn't understand your answer.

The OpenNi program i compile works fine by itself on a kinect. But the openni-camera that i install with ros doesn't work ( on the depth registration aspect) from the beginning.

where is that patched version? do i need to uninstall the version i have and compile that instead?

jkammerl commented 11 years ago

The easiest way would be to remove all openni installations from your system and reinstall openni_camera. This should pull in the correct and patched version of openni directly from the ROS PPA.

joaoc commented 11 years ago

But that would put me in the begginig with the same problem because i started with only the openni stuff from ROS PPA.

Honestly i don't think this is a user problem, but a a program bug.

Why it works fine with openni source code (from OpenNi.org) compiled on my pc and your version doesn't work?

joaoc commented 11 years ago

new information.

I've install on a dual-boot configuration ubuntu 12.04 64 bits (the other is ubuntu 12.04 32bits). It happens that in the 64 bits version i don't have any problems, every thing works fine just installing the ros-groovy-openni-camera and launch, and i can enable the depth_registration flag. With the 32bits, doing the same thing with the same commands it has this bug.

It makes me think if the 32bits packeged were compiled fine?

advaitjain commented 11 years ago

confirming that I see the problem with on a 32 bit machine but not on 64 bit machines. with Groovy and openni_camera on both the 32 and 64 bit machines.

jkammerl commented 11 years ago

@joaoc Does this issue exist if you compile and run the openni_camera package from source (on 32bit)?

joaoc commented 11 years ago

Yes, i tried to clone the git and compile, and i had the same problem

kai-chen-ustc commented 11 years ago

I also encountered this problem today, after updating to the latest libopenni-dev (replaced openni-dev) and all the depth_registered/points are filled with NaN. I am running openni_launch/openni.launch from ubuntu 12.04 32bit.

Anyone knows why 64-bit version is OK while the 32-bit one is not?

jonbinney commented 11 years ago

I've still not seen this problem, but that could be because I'm only using 64-bit. Anyone have an idea how to fix this?

kai-chen-ustc commented 11 years ago

Yes, this problem was reported only to appear on 32-bit systems. Still don't know why.