It sounds like our goals are fairly similar, so I would definitely be interested in combining efforts towards a common driver.  I have only looked at Oliver Kreylos's driver briefly so far, but I agree that it looks very nice.  Perhaps we should consider setting up another email list for working on this, so we don't spam ros-users too hard with Kinect related discussion?<br>
<br><div class="gmail_quote">On Mon, Nov 15, 2010 at 1:37 PM, Ivan Dryanovski <span dir="ltr"><<a href="mailto:ivan.dryanovski@gmail.com">ivan.dryanovski@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Stéphane,<br>
<br>
We had a discussion at the lab about where we are headed with the ROS<br>
driver. As you pointed out, having different versions of the driver is<br>
not harmful, but not particularly practical either. Would you (as well<br>
as Alex Trevor, Stefan Kohlbrecher, and anyone else) be interested in<br>
moving towards a common ROS driver?<br>
<br>
We are mostly interested in developing the following features:<br>
<br>
* speed and stability - we'd like to see this run on less powerful<br>
computers in the future<br>
* clean, object-orient API<br>
* geared towards easy, accurate calibration between the depth and RGB<br>
data, so we can produce color-coded clouds<br>
* accurate range calibration, preferably with variance values and/or a<br>
confidence map<br>
* PCL compatible<br>
* documented, ideally follow the ROS style guide<br>
<br>
Anything else (accelerometers, motors, microphones) is less important<br>
to us, but of course it would be nice if the driver handles it.<br>
<br>
If we move towards a common driver for ROS, what is the community's<br>
opinion on the underlying hardware driver? There are three different<br>
options available right now: Hector Martin's libfreenect and Oliver<br>
Kreylos' driver [1]. There currently appears to be some speed and<br>
stability issues with libfreenect. Oliver's driver seems to be more<br>
object-oriented and better documented, but it has a lot of system<br>
dependencies to deal with. The third option would be rewrite a driver<br>
from scratch, under a BSD license.<br>
<br>
Ideally, we can host this as a separate repo on github, with major<br>
contributors given write access,l so we don't have to deal with<br>
patches.<br>
<br>
Let us know what you think<br>
<br>
Ivan Dryanovski<br>
William Morris<br>
<br>
[1] <a href="http://idav.ucdavis.edu/%7Eokreylos/ResDev/Kinect/" target="_blank">http://idav.ucdavis.edu/~okreylos/ResDev/Kinect/</a><br>
<div><div></div><div class="h5"><br>
<br>
<br>
On Mon, Nov 15, 2010 at 12:21 PM, Ivan Dryanovski<br>
<<a href="mailto:ivan.dryanovski@gmail.com">ivan.dryanovski@gmail.com</a>> wrote:<br>
> Hi Stéphane,<br>
><br>
> I will take a look at your depth function and see how it works for us.<br>
> Thank you for sharing it!<br>
><br>
> As for the naming conventions, we are currently using two different<br>
> frames for the two cameras - kinect_rgb and kinect_depth.<br>
><br>
> Ivan<br>
><br>
> 2010/11/15 Stéphane Magnenat <<a href="mailto:stephane@magnenat.net">stephane@magnenat.net</a>>:<br>
>> Hello,<br>
>><br>
>> I have integrated the accelerometer and tilt support from adafruit [1]<br>
>> into my kinect node. To do so, I have added them to libfreenect, for<br>
>> which I now provide a git with my changes instead of patches in my<br>
>> kinect node [3].<br>
>><br>
>> Here at ASL, Deon Sabatta and Davide Scaramuzza have found a more<br>
>> precise depth function than 1/x. It is the following:<br>
>><br>
>>        depth = k3 * tan(pixVal/k2 + k1)<br>
>><br>
>> where<br>
>><br>
>>        k1 = 1.1863<br>
>>        k2 = 2842.5<br>
>>        k3 = 0.1236<br>
>><br>
>> "The k2 value is very sensitive and may require more/better<br>
>> measurements; however, this is a pretty good approximation for the moment."<br>
>><br>
>> I would like to raise two questions:<br>
>><br>
>> 1. Having multiple implementations of Kinect ROS nodes is not harmful as<br>
>> we happily share code. However, to ease the end-user's life I think that<br>
>> we should agree on a naming convention for node and topic naming. Here<br>
>> is a first suggestion:<br>
>>   node name: "kinect"<br>
>>   point cloud frame: "/kinect"<br>
>>   point could topic: "/kinect/cloud" (PointCloud + color in "rgb")<br>
>>   rgb image topic: "/kinect/image" (Image, rgb)<br>
>>   depth (raw in 8bpp) image topic: "/kinect/depth_image" (Image, mono8)<br>
>>   accelerometer topic: "/kinect/acc" (Vector3)<br>
>>   tilt input: "/kinect/tilt" (Int16)<br>
>> Feel free to discuss it and propose more conventions, for instance for<br>
>> the params/etc.<br>
>><br>
>> 2. I have branched libfreenect to provide updates more easily to the ROS<br>
>> community, but I do not want to fork it. Hector, your input is warmly<br>
>> welcome on my changes. Currently, libfreenect is not reentrant and does<br>
>> not have clean naming prefixes. The reentrance might require a bit of<br>
>> thinking, but the naming is straightforward; do you agree if I put a<br>
>> heading kinect_ before all public functions?<br>
>><br>
>> I'm looking forward to hearing your comments, dear kinect hackers.<br>
>><br>
>> Kind regards,<br>
>><br>
>> Stéphane<br>
>><br>
>> [1] <a href="https://github.com/adafruit/Kinect" target="_blank">https://github.com/adafruit/Kinect</a><br>
>> [2] <a href="https://github.com/ethz-asl/ros-drivers/tree/master/microsoft_kinect/" target="_blank">https://github.com/ethz-asl/ros-drivers/tree/master/microsoft_kinect/</a><br>
>> [3] <a href="https://github.com/stephanemagnenat/libfreenect" target="_blank">https://github.com/stephanemagnenat/libfreenect</a><br>
>><br>
>> --<br>
>> Dr Stéphane Magnenat<br>
>> <a href="http://stephane.magnenat.net" target="_blank">http://stephane.magnenat.net</a><br>
>> _______________________________________________<br>
>> ros-users mailing list<br>
>> <a href="mailto:ros-users@code.ros.org">ros-users@code.ros.org</a><br>
>> <a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
>><br>
><br>
_______________________________________________<br>
ros-users mailing list<br>
<a href="mailto:ros-users@code.ros.org">ros-users@code.ros.org</a><br>
<a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
</div></div></blockquote></div><br>