General Documentation of the Large Maps Framework
The aim of Large Maps Framework (LaMa) is to allow robots or group of robots to navigate over large areas, i.e. areas where metric bitmap maps are not practical anymore. The map is a topological map saved as directed graph in a database. Labels describing the environment are attributed to vertices and edges. Such labels can be e.g. a local metric map of a room, a descriptor such as corridor length, or raw sensor data such as a laser scan. These labels are used for later localization (place recognition) and navigation (how to travel until next vertex).
Different sensors and algorithms can be used to build such a topological map and navigate in it. A common environment representation is then needed. The LaMa Framework provides such a unified approach to handle these algorithms by starting/stopping them and providing them with the required data.
The framework is a modular system divided into three parts, as described in the following figure.
The first part, which is the pure framework part, is the interface between the database and ROS nodes using the framework. It can be considered as a black box by the framework users. map_node is the interface to the graph and interface_factory is the interface to the graph labels, i.e. it is used to save ROS messages of any type as descriptors into the map.
The second part are base classes that facilitate the implementation of so called jockeys. There are three types of jockeys: learning jockeys, localizing jockeys and navigating jockeys. Jockeys implement actionlib servers, and the base classes provide the mechanisms for goal managements, so that jockey can be implemented by solely defining a few functions. The implementation requires very little knowledge about the LaMa framework and about actionlib servers.
The third part of the framework is the high-level control. It has the responsibility of managing the map, e.g. adding vertices, assigning labels to edges, and querying jockeys by sending them goals.
This work has been supported by the Czech Science Foundation under research project No. 13-30155P and by the Technology Agency of the Czech Republic under the project no. TE01020197 ”Centre for Applied Cybernetics”.
Packages
Pure Framework packages
Core packages can be installed with the lama metapackage.
lama_msgs provides messages such as LamaObject representing a graph vertex or edge.
lama_common provides functionalities to convert lama_msgs to other ROS messages and to visualize lama_msgs in rviz.
lama_interfaces provides the interfaces to the database as ROS services.
Jockeys
lama_jockeys provides base class for jockeys.
featurenav_base provides base class for feature-based navigation.
anj_featurenav implements a feature-based learning and navigating jockey based on free OpenCV feature descriptor and matcher.
lj_costmap implements a localizing jockey that computes place dissimilarities based on a local cost map.
lj_laser implements a localizing jockey that computes place dissimilarities based on a LaserScan.
lj_laser_heading implements a localizing jockey that computes place dissimilarities based on a LaserScan and absolute heading.
nj_costmap implements a navigating jockey that drives the robot until the next crossing, based on a local cost map.
nj_escape_crossing implements a navigating jockey that escapes from the current crossing.
nj_laser implements a navigating jockey that drives the robot until the next crossing, based on a sensor_msgs/LaserScan.
nj_oa_costmap implements a navigating jockey that drives forward while avoiding obstacles, based on a local cost map (nav_msgs/OccupancyGrid).
nj_oa_laser implements a navigating jockey that drives forward while avoiding obstacles, based on a sensor_msgs/LaserScan.
nlj_dummy implements a navigating jockey and a localizing jockey that does nothing but showing how to implement a jockey and interfere with the database.
High-level control
dfs_explorer implements a depth-first search algorithm to explore the environment.
Other packaces
crossing_detector implements a method to recognize a crossing, i.e. a place from where the robot can take clearly distinctive paths.
local_map provides a simple local cost map for several jockeys.
goto_crossing provides a Go-To-Goal behavior to reach a crossing given a topic.
map_ray_caster provides a cached ray casting on a map, such as those provided by local_map.
polygon_matcher provides messages and a simple implementation for polygon matching.
pm_fourier implements a place matching based on FTT.
pm_mcc implements a place matching based on Multi-scale Convexity Concavity method.