• Stars
    star
    199
  • Rank 196,105 (Top 4 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created over 5 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Mesh Navigation Stack

Mesh Navigation

The Mesh Navigation bundle provides software to perform efficient robot navigation on 2D-manifolds in 3D represented as triangular meshes. It allows to safely navigate in various complex outdoor environments by using a modular extendable layerd mesh map. Layers can be loaded as plugins and represent certain geometric or semantic metrics of the terrain. The layered mesh map is integrated with Move Base Flex (MBF) which provides a universal ROS action interface for path planning and motion control, as well as for recovery behaviours. Thus, additional planner and controller plugins running on the layered mesh map are provided.

Maintainer: Sebastian Pütz
Author: Sebastian Pütz

Demo Gif

Publications

Please reference the following papers when using the navigation stack in your scientific work.

Continuous Shortest Path Vector Field Navigation on 3D Triangular Meshes for Mobile Robots

@inproceedings{puetz21cvp,
    author = {Pütz, Sebastian and Wiemann, Thomas and Kleine Piening, Malte and Hertzberg, Joachim},
    title = {Continuous Shortest Path Vector Field Navigation on 3D Triangular Meshes for Mobile Robots},
    booktitle = {2021 IEEE International Conference on Robotics and Automation (ICRA)},
    year = 2021,
    url = {https://github.com/uos/mesh_navigation},
    note = {Software available at \url{https://github.com/uos/mesh_navigation}}
}

Move Base Flex: A Highly Flexible Navigation Framework for Mobile Robots

@inproceedings{puetz18mbf,
    author = {Sebastian Pütz and Jorge Santos Simón and Joachim Hertzberg},
    title = {{Move Base Flex}: A Highly Flexible Navigation Framework for Mobile Robots},
    booktitle = {2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
    year = 2018,
    month = {October},
    url = {https://github.com/magazino/move_base_flex},
    note = {Software available at \url{https://github.com/magazino/move_base_flex}}
}

Installation

Please use the official released ros package or install more recent versions from source.

sudo apt install ros-melodic-mesh-navigation

Installation from source
All dependencies can be installed using rosdep
rosdep install mesh_navigation

As explicit dependencies we refer to the following ROS packages, which are also developed by us:

Use the pluto_robot package for example HDF5 map datasets, Gazebo simulations, and example configurations.

Software 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/HeightDiffLayer
    • RoughnessLayer - mesh_layers/RoughnessLayer
    • SteepnessLayer - mesh_layers/SteepnessLayer
    • RidgeLayer - mesh_layer/RidgeLayer
    • InflationLayer - mesh_layers/InflationLayer
  • 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.

  • cvp_mesh_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. Please refer to the paper Continuous Shortest Path Vector Field Navigation on 3D Triangular Meshes for Mobile Robots which is stated above.

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

Path Planning and Motion Control

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

Mesh Map

Mesh Layers

The following table gives an overview of all currently implemented layer plugins available in the stack and the corresponding types tp specify for usage in the mesh map configuration. An example mesh map configuration is shown below.

Overview of all layers

Layer Plugin Type Specifier Description of Cost Computation Example Image
HeightDiffLayer mesh_layers/HeightDiffLayer local radius based height differences HeightDiffLayer
RoughnessLayer mesh_layers/RoughnessLayer local radius based normal fluctuation RoughnessLayer
SteepnessLayer mesh_layers/SteepnessLayer arccos of the normal's z coordinate SteepnessLayer
RidgeLayer mesh_layer/RidgeLayer local radius based distance along normal RidgeLayer
InflationLayer mesh_layers/InflationLayer by distance to a lethal vertex InflationLayer

Planners

Usage with Move Base Flex

Currently the following planners are available:

Dijkstra Mesh Planner

  - name: 'dijkstra_mesh_planner'
    type: 'dijkstra_mesh_planner/DijkstraMeshPlanner'

Continuous Vector Field Planner

  - name: 'cvp_mesh_planner'
    type: 'cvp_mesh_planner/CVPMeshPlanner'

MMP Planner

  - name: 'mmp_planner'
    type: 'mmp_planner/MMPPlanner'

The planners are compared to each other.

Vector Field Planner Dijkstra Mesh Planner ROS Global Planner on 2.5D DEM
VectorFieldPlanner DijkstraMeshPlanner 2D-DEM-Planner

Controllers

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.

Demos

In the following demo videos we used the developed VFP, i.e., the wavefront_propagatn_planner. It will be renamed soon to vector_field_planner.

Dataset and Description Demo Video
Botanical Garden of Osnabrück University Mesh Navigation with Pluto
Stone Quarry in the Forest Brockum Mesh Navigation with acron19

Stone Quarry in the Forest in Brockum

Colored Point Cloud Height Diff Layer RGB Vertex Colors
StoneQuarryPointCLoud StoneQuarryHeightDiff StoneQuarryVertexColors

Build Status

ROS Distro GitHub CI Develop Documentation Source Deb Binary Deb
Melodic Melodic CI Build Dev Status Build Doc Status Build Src Status Build Bin Status
Noetic Noetic CI Build Dev Status Build Doc Status Build Src Status Build Bin Status

More Repositories

1

rospy_message_converter

Converts between Python dictionaries and JSON to ROS messages.
Python
161
star
2

rmcl

Mobile Robot Localization in 3D Triangle Meshes
C++
141
star
3

lvr2

Las Vegas Reconstruction 2.0
C++
101
star
4

mesh_tools

C++
90
star
5

ros2_tutorial

Tutorials for the KBS robotics labs
C++
56
star
6

ceres_robot

ceres robot ros driver and tools
Python
47
star
7

sick_tim

A ROS driver for the SICK TiM series of laser scanners.
C++
47
star
8

rmagine

A robot wants to simulate too
C++
44
star
9

pluto_robot

ROS driver for the Pluto robot
Python
39
star
10

rviz_fps_plugin

ViewController and a Tool Plugin to navigate RViz like an FPS-Shooter
C++
32
star
11

tsdf_localization

6D Monte Carlo Localization in 3D TSDF maps
C++
30
star
12

katana_driver

This stack contains hardware drivers, Gazebo plugins and other basic functionalities for the Neuronics Katana family of robot arms.
C++
21
star
13

rmagine_gazebo_plugins

Raycasting based Range Sensor Simulation in Gazebo using Rmagine
C++
19
star
14

radarays_ros

Rotating FMCW radar simulation based on ray tracing
C++
16
star
15

hatsdf_slam

C++
15
star
16

uos_tools

C++
12
star
17

radarays_gazebo_plugins

Rotating FMCW Radar Simulation in Gazebo
C++
11
star
18

basler_tof

ROS driver for the Basler ToF ES camera
C++
11
star
19

transparent_object_reconstruction

Detect and reconstruct transparent objects from scan shadows
C++
9
star
20

mbf_tutorials

Robot Navigation Tutorials for Move Base Flex (MBF)
Python
8
star
21

diffdrive_gazebo_plugin

C++
7
star
22

mbf_recovery_behaviors

Recovery behaviors for the mbf_costmap_nav server of Move Base Flex (MBF)
C++
7
star
23

epos2_motor_controller

Fork of https://devel.iri.upc.edu/pub/labrobotica/drivers/epos2_motor_controller/trunk
C++
6
star
24

calvin_robot

C++
5
star
25

tsdf_localization_demo

demo / examples for tsdf_localization package
CMake
5
star
26

uos_active_perception

FLAP for CAOS: Forward-Looking Active Perception for Clutter-Aware Object Search
C++
4
star
27

open3d_scripts

Python
4
star
28

volksbot_driver

ROS driver for the Volksbot
C++
3
star
29

ReconfROS

C++
2
star
30

radarays

2
star
31

kurt3d

A ROS driver Kurt3D, including the Pololu servo interface.
C++
2
star
32

rmagine_ros

Rmagine-Library usage in ROS
C++
2
star
33

mbf_tools

Tools for Move Base Flex
C++
1
star
34

organized_fast_mesh

C++
1
star
35

infer_hidden_params

Prolog
1
star
36

perception_ar_kinect

C++
1
star
37

ccny_vision

fork of deleted http://robotics.ccny.cuny.edu/git/ccny-ros-pkg/ccny_vision.git
C++
1
star
38

rmcl_msgs

Messages used by RMCL
CMake
1
star
39

kurt_navigation

CMake
1
star
40

lvr_ros

C++
1
star
41

hatsdf_base_design

Tcl
1
star
42

pluto_apps

Applications for the Pluto robot
C++
1
star
43

lucia_turtlebot

ROS stack for the Lucia Winter School 2016.
C++
1
star