/mesh_navigation

ROS Mesh Navigation Bundle

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Mesh Navigation

The Mesh Navigation bundle provides software to perform efficient robot navigation on 3D meshes in ROS.

Installation from Repository

If you want to install the mesh navigation stack from source please follow the instructions from the pluto_robot repository, since we use the robot Pluto as exemplary robot to perform mesh navigation in simulation but also in the real world.

Otherwise use sudo apt install ros-melodic-mesh-navigation

Pluto in Simulation

You can use Pluto in an outdoor simulation environment. We provides several datasets and the corresponding environments for the Gazebo simulation. For navigation purposes the corresponding navigation launch file should be started, too. The following simulation environments are currently available:

  • Botanical Garden at Osnabrück University: roslaunch pluto_gazebo pluto_botanical_garden.launch
  • Stone Quarry in the Forest in Brockum: roslaunch pluto_gazebo pluto_stone_quarry.launch
  • Physics building at Osnabrück University: roslaunch pluto_gazebo pluto_physics.launch

Mesh Navigation Stack

This mesh_navigation stack provides a navigation server for Move Base Flex (MBF). It provides a couple of configuration files and launch files to start the navigation server with the configured layer plugins for the layered mesh map, and the configured planners and controller to perform path planning and motion control in 3D (or more specifically on 2D-manifold).

The package structure is as follows:

  • mesh_navigation The corresponding ROS meta package.

  • mbf_mesh_core contains the plugin interfaces derived from the abstract MBF plugin interfaces to initialize planner and controller plugins with one mesh_map instance. It provides the following three interfaces:

    • MeshPlanner - mbf_mesh_core/mesh_planner.h
    • MeshController - mbf_mesh_core/mesh_controller.h
    • MeshRecovery - mbf_mesh_core/mesh_recovery.h
  • mbf_mesh_nav contains the mesh navigation server which build on top of the abstract MBF navigation server. It uses the plugin interfaces in mbf_mesh_core to load and initialize plugins of the types described above.

  • mesh_map contains an implementation of a mesh map representation building on top of the mesh data structures in LVR2. This package provides a layered mesh map implementation. Layers can be loaded as plugins to allow a highly configurable 3D navigation stack for robots traversing on the ground in outdoor and rough terrain.

  • mesh_layers The package provides a couple of mesh layers to compute the trafficability of the terrain. Furthermore, these plugins have access to the HDF5 map file and can load and store layer information. The mesh layers can be configured for the robots abilities and needs. Currently we provide the following layer plugins:

    • HeightDiffLayer - mesh_layers/height_diff_layer.h
    • RoughnessLayer - mesh_layers/roughness_layer.h
    • InflationLayer - mesh_layers/inflation_layer.h
    • SteepnessLayer - mesh_layers/steepness_layer.h
  • dijkstra_mesh_planner contains a mesh planner plugin providing a path planning method based on Dijkstra's algorithm. It plans by using the edges of the mesh map. The propagation start a the goal pose, thus a path from every accessed vertex to the goal pose can be computed. This leads in a sub-optimal potential field, which highly depends on the mesh structure.

  • wave_front_planner contains a Fast Marching Method (FMM) wave front path planner to take the 2D-manifold into account. This planner is able to plan over the surface, due to that it results in shorter paths than the dijkstra_mesh_planner, since it is not restricted to the edges or topology of the mesh. A comparison is shown below.

  • mesh_client Is an experimental package to load navigation meshes only from a mesh server.

Mesh Navigation Demo

Botanical Garden at Osnabrück University

Demo Video Botanical Garden

Mesh Navigation with Pluto

Stone Pit

Colored Point Cloud

StonePitPointCLoud

Height Diff Layer

StonePitHeightDiff

Mesh RGB Vertex Colors

StonePitVertexColors

Run Mesh Navigation in Simulation

If you want to test the mesh navigation stack with Pluto please use the simulation setup and the corresponding launch files below for the respective outdoor or rough terrain environment. The mesh tools have to be installed. We developed the Mesh Tools as a package consisting of message definitions, RViz plugins and tools, as well as a persistence layer to store such maps. These tools make the benefits of annotated triangle maps available in ROS and allow to publish, edit and inspect such maps within the existing ROS software stack.

RVIZ

Run RViz with the preconfigured display panels for mesh navigation.

roscd pluto_navigation
rviz -d rviz/mesh_navigation.rviz

Outdoor Environments

  • Botanical Garden at Osnabrück University:
rosocre
roslaunch pluto_gazebo pluto_botanical_garden.launch
roslaunch pluto_navigation pluto_botanical_garden.launch
  • Stone Pit in the Forest in Brockum:
roscore
roslaunch pluto_gazebo pluto_stone_quarry.launch
roslaunch pluto_navigation pluto_stone_quarry.launch
  • Physics Building at Osnabrück University:
roscore
roslaunch pluto_gazebo pluto_physics.launch
roslaunch pluto_navigation pluto_physics.launch
roslaunch pluto_navigation navigation_goals.launch goal:=physics1

Path Planning and Motion Control

Use the MeshGoal tool to select a goal pose on the shown mesh in RViz.

The planners are compared to each other.

Wave Front Planner

WaveFrontPlanner

Dijkstra Mesh Planner

DijkstraMeshPlanner

2D Planner on 2.5 Digital Elevation Map (DEM)

2D-DEM-Planner