Entrepreneur, Researcher, 3D Geek, Coder
Sep 20 2011

PCL Toyota Code Sprint 2011

It is our immense pleasure to announce the beginning of a new PCL Code Sprint sponsored by Toyota: PCL-TOCS!

PCL Code Sprints are intended to rapidly advance the capabilities of the Point Cloud Library in a certain area/subject by offering stipends to talented student developers and pairing them with knowledgeable mentors for several months of accelerated software development. These sprints have been inspired by the Google Summer Of Code (GSOC) initiative, and we will be following the same basic model. Projects will run for an initial period of 3 months with the same structure and performance evaluations as the GSOC program, and all of the code produced will be open source.

For this fall’s PCL-Toyota Code Sprint, we have identified the following important areas for further development in PCL, and we are therefore searching for outstanding candidates (and mentors) to work on the following projects:

  1. Surface reconstruction and point cloud smoothing

    Accurate surface reconstruction and point cloud smoothing have been demonstrated in specific test environments with minimal clutter and when the object of interest fills most of the field of view. However, additional algorithms are needed when performing surface reconstruction and/or point cloud smoothing in a cluttered space. In this project, students will work to develop algorithms capable of smoothing noisy point clouds and reconstructing surfaces of objects so that they can be compared against a collection of known 3D objected models. The algorithms developed must be able to operate in a cluttered home or health-care environment, and they must be tolerant of noisy point cloud data (such as those acquired by sensors like the Microsoft Kinect). This project will also investigate the reliability and accuracy of different surface reconstruction techniques when data is acquired from a moving sensor.

  2. CPU and GPU optimizations
    • CPU and GPU optimizations for real-time global point cloud localization
      In this project, students will work to develop CPU and GPU optimizations to enable real-time 3D place recognition. Existing algorithms are able to process a point cloud containing a partial view of an environment and subsequently localize it within a previously captured 3D map of the complete environment. However, this task is very computationally expensive, and many improvements are needed to make these approaches practical for real world uses. The goal of this project is to develop highly optimized implementations of a number of general purpose search and feature extraction algorithms that can be used in a variety of applications.
    • CPU and GPU optimizations for real-time 3D segmentation and boundary extraction
      With image segmentation, being able to perform multiple levels of segmentation on a single image is becoming more common to aid in recognition tasks. For instance, it is common to use coarse segmentation initially to identify regions of interest and then use a finer segmentation for boundary detection of individual objects in the scene. In this project, the student will develop real-time algorithms for segmenting 3D images, using CPU and GPU optimizations so that multiple levels of segmentation be computed quickly.

The above projects will run for a period of 3 months divided into two terms. Each student developer will receive a stipend of $5000 for their contributions, subject to satisfactory mid-term and final evaluations.

Potential candidates should submit the following information to pcl-tocs@pointclouds.org:

  • a brief resume
  • a list of existing PCL contributions (if any)
  • a list of projects (emphasis on open source projects please) that they contributed to in the past

Advanced C++ programming skills are required for all projects. Please remember that this is a unique opportunity to work with some of the world’s best 3D perception researchers!

Interested mentors should send a brief e-mail to the address mentioned above pointing out their time commitments and expertise in the field.


Jun 14 2011

/usr/bin/ld: cannot find -lgcc_s

Note to self: when you see

/usr/bin/ld: cannot find -lgcc_s

again, do:

sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so


May 16 2011

PCL 1.0 released

Earlier last week we released PCL 1.0. We’ve been working on this project for some time now, but the past few weeks have been nothing but bug hunting, adding documentation and making sure we are able to cross-compile on Windows, MacOS, and Linux.

One thing that sets us apart from other initiatives is our openness to change, and to the whole management process of the library in general. We’re really happy to be part of a very exciting community, which seems to be continuously growing by the minute. So, check PCL out, and please let us know what’s wrong with it, so we can fix it!


Jul 8 2010

PR2 + Beer

Done!!! Willow Garage proudly presents the first open source “beer fetching app” for robots! :)

Part of a 1-week project, together with a few of my colleagues, we programmed the PR2 robot to:

  • navigate and find a refrigerator
  • open its door by locating the fridge handle
  • position the robot’s manipulators so that the door doesn’t close while grasping things inside the fridge
  • automatically identify the types of beer available in the fridge (we trained models on about 9 beers - training involves simply storing a picture of the beer bottle you want to identify in a directory)
  • determine the types of beer the user selected from a web page, compute grasping points, move the arms and grasp them, and then move the beers onto a storing rack that we installed on the robot
  • close the fridge door
  • navigate the the delivery point selected by the user on the web page
  • identify people faces and perform delivery/hand-off beer + bottle opener
  • wait for bottle opener and resume!

Optionally, the robot can open the beer too! :)

The entire source code is available at:
https://code.ros.org/svn/wg-ros-pkg/stacks/pr2_drinks/trunk/ .

If you find it useful, PLEASE let us know! Obviously this app is “powered by PCL;-)

You can read our entire blog entry here: http://www.willowgarage.com/blog/2010/07/06/beer-me-robot. Cheers!

Edit: I just noticed that we got picked by Slashdot. Some of the comments posted are pretty funny.


Apr 1 2009

Change your desktop wallpaper

I got bored of my desktop wallpaper a few days ago, and wanted something different for a change. Here’s what I did:

My Desktop Wallpaper

My Desktop Wallpaper

If you like what you see ;) keep on reading.

The above is generated using Xplanet. However, to get everything to work perfectly you need to tweak a few things. If you wanna duplicate this, here’s what you need to do:

  • download and install xplanet from http://xplanet.sourceforge.net or use apt-get install xplanet on Debian/Ubuntu systems;
  • get the script from http://xplanet.sourceforge.net/FAQ.php#gnome2 (or use my modified copy here) if you have Gnome like I do. There’s also a KDE version available there if you still use _that_ (rolleyes). My changes account for a different projection type and some other small changes. Use their instructions to add it to your list of startup programs (Gnome2 menu -> System -> Preferences -> Sessions);
  • get the script from http://xplanet.sourceforge.net/Extras/download_clouds.py (or use my modified copy here). My changes account for higher quality cloud maps (4096 instead of 2048);
  • create a directory called .xplanet in your home directory;
  • go to the NASA Blue Marble collection and download the monthly pictures from January - December and save them into $HOME/.xplanet/world/ (or change my modifications from the gnome2 script). You have two options there: 1) download the simpler maps showing only the topography of the continents (page 2 and 3) with the oceans in a single color; or 2) download the maps which show both the topography of the continents together with the bathymetry of the oceans. My choice was 2). Downsample and rename the maps as you wish to best fit your screen. I saved my copies as world.topo.bathy.2004{01-12}.1050.jpg. You need to save yours under the same name or change the gnome2 script;
  • from the same page, download the BMNG Raw Topography picture and the BMNG Raw Bathymetry picture. You need to edit the second one to make it binary (black and white) with all continents black and all oceans (or other water spots) white. This can be easily done if you open it up in GIMP, do a select color on the continents, then invert selection, and cut. Save them under $HOME/.xplanet/bump.jpg and $HOME/.xplanet/specular.jpg respectively;
  • get a night shot Earth scene from flatplanet (my favorite is night-electric.jpg) and save it under $HOME/.xplanet/night.jpg
  • finally download my configuration script from here and place it into $HOME/.xplanet/config.

Let’s revise. You now should have the following files in your $HOME/.xplanet/ directory: bump.jpg, config, night.jpg, and specular.jpg. You should also have a subdirectory $HOME/.xplanet/world/, containing 12 files: from world.topo.bathy.200401.1050.jpg to world.topo.bathy.200412.1050.jpg. Now, you need to do one more thing, and you’re done: cloud maps. By default, the xplanet-download_clouds.py will download a high quality (4096) cloud map which you can use. However, I didn’t like the default too much because the clouds towards the poles are just mirrored from the data below them, due to the fact that there is no satellite data for the clouds around the poles. This mirroring artifact looked too weird for me, so I decided to crop the map instead (and then resize it). This results in a minor stretching artifact, but in my opinion it definitely provides a better visual aspect.

Final thoughts. The xplanet-gnome2.sh script will start Xplanet whenever you start your Gnome2 session, and will use all the images together with the current system time above to generate a new screenshot every 2 minutes for your desktop. I consider this an _extremely minor_ penalty performance. If you don’t want your changes that often on the desktop, simply change the sleep time in the script to something else.

The cloud maps are a bit trickier if you want to use _real satellite_ data. The Xplanet folks recommend using the xplanet-download_clouds.py script every 3 hours, because that’s the frequency they generate the new cloud maps with. So, together with my cropping/resizing changes, I made the following script (let’s call it xplanet_clouds.sh — note: my xplanet scripts are in $HOME/bin):

#!/bin/bash
$HOME/bin/xplanet-download_clouds.py /tmp/clouds_4096.jpg
/usr/bin/convert -crop 4096×1700+0+174 /tmp/clouds_4096.jpg /tmp/clouds_custom.jpg
/usr/bin/convert -resize 1680 /tmp/clouds_custom.jpg $HOME/.xplanet/clouds.jpg
rm -f /tmp/clouds_4096.jpg /tmp/clouds_custom.jpg

and then used crontab -e to add the following entry:

0 */3 * * *  path-to-your-xplanet_clouds.sh-script

Have fun.