Auto-generated API documentation
As part of a recent effort to update the KnowRob documentation, we have included auto-generated API documentation into the KnowRob wiki and increased the documentation coverage to all exported predicates of all modules in the core KnowRob stack and several packages in knowrob_addons and knowrob_dev.
The documentation is generated automatically from structured comments in the source code using the pldoc system, similar to the well-known javadoc or doxygen systems. It is re-generated at every commit by our Jenkins server.
By the way, KnowRob includes a wrapper for pldoc that facilitates the generation of API documentation for KnowRob packages. You can call it for the existing packages or your own packages using
rosrun rosprolog rosprolog-doc <pkgname>
Catkinized version of KnowRob available
After a lot of refactoring during the summer, we are proud to announce the beta version of the catkinized KnowRob that has further been updated in many aspects. Some highlights:
- Fully catkinized (including additional repositories such as knowrob_addons)
- Converted all Java code from the deprecated 'rosjava_jni' to the newer 'rosjava'
- A web-based visualization module instead of the slow Java-based mod_vis
- Removed code that is now available as Ubuntu system package (e.g. the Java-Prolog interface JPL)
- Tidied up the package structure
With these changes, we adapt the system to the state of the art in the ROS community and base it as much as possible on developed third-party libraries. From my point of view, not everything has become better with the switch to catkin and rosjava, which is based on 'gradle', yet another buildsystem. However, both rosbuild and rosjava_jni are deprecated, so we decided to do the transition even if the newer tools have their shortcomings.
The source code can be found in the 'indigo-devel' branch at GitHub. It is feature-complete with respect to the old version and actively in use by the IAI group in Bremen. Despite the name, the code also works in ROS Hydro. The documentation in the wiki is being adapted, but not all pages have already been updated. We have documented the changes made in Github issues and have created a migration guide to help to adapt existing packages.
We'd be glad if you could try the new version and give us feedback! We will also further test the system and work on updating the documentation.
Improved segmentation methods for 3D CAD models
A part of KnowRob that is gaining increasing importance are methods for reasoning about 3D object models. A few months ago, we have presented a method for the automatic semantic analysis of object components based on common surface meshes that can easily be downloaded from the Internet. Using an initial geometric analysis, followed by the identification of relevant object parts, this module is able to segment a common CAD model into a set of functional object parts. These parts are very important for robots that interact with these objects because they bridge the gap between symbols (e.g. words such as 'handle') and geometry (the coordinates of the handle w.r.t. the object).
During his Summer of Code project, Andrei Stoica worked on improvements of the algorithms for segmenting the surface meshes. He implemented a method proposed by Lavou'e et al. that detects sharp edges in the models and uses them for improving the segmentation. This helped to greatly reduce the number of erroneous annotations and to come up with a much better summarization of the models by their main components as needed by our robots. The pictures on the right side show the segmentation obtained using the old method on the left and the results of the new method on the right. The code is available in the knowrob_dev repository at GitHub.