The catkinized KnowRob version is used by the IAI group in Bremen for more then 6 months. For this summer, we plan the next KnowRob release based on the catkinized version that proved to be stable in the last months.
The development was done in the 'indigo-devel' branch at GitHub while the 'master' branch contained the rosws-based KnowRob version. In order to avoid confusion, we decided to restructure the GitHub repository so that the code is actively developed in the master branch again with different branches for different supported ROS versions. The old 'master' branch has moved to a new branch 'groovy'. Note that this KnowRob version is not actively developed anymore. The old 'indigo-devel' branch has moved to the 'master' branch. Additionally, we mirrored the new 'master' branch to new branches 'hydro' and 'indigo' which contain the latest stable snapshot for the corresponding ROS version.
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>
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.
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.
In a recent demonstration, the bachelor project SUTURO of the Institute for Artificial Intelligence at the University of Bremen presented its results. The project, partly self-organized by 14 Bachelor students, aims at teaching a PR2 robot to tidy up a kitchen. This involves very challenging tasks in robot perception, manipulation and grasping, task-level coordination and knowledge representation to recognize objects, infer where they shall be put, and interact with them in the appropriate way. The PR2 is able to recognize objects of different kinds and sort them into a box (for non-edible items) or bring them to the opposite counter (in case they are edible). If an object is unknown, it tries to scan the barcode and retrieve semantic information about this object from the Web. More information can be found in the video on the right and on the SUTURO homepage.
KnowRob has been used as a semantic layer for integrating information from perception (such as the object's position and attributes) with background knowledge about typical attributes of object classes and their storage locations. It was also used to interface the barcode scanning module and the module for retrieving product information from the Web.