zoukankan      html  css  js  c++  java
  • ROS_Kinetic_x ROS栅格地图庫 Grid Map Library

    源自:https://github.com/ethz-asl/grid_map

    Grid Map

    Overview

    This is a C++ library with ROS interface to manage two-dimensional grid maps with multiple data layers. It is designed for mobile robotic mapping to store data such as elevation, variance, color, friction coefficient, foothold quality, surface normal, traversability etc. It is used in theRobot-Centric Elevation Mapping package designed for rough terrain navigation.

    Features:

    • Multi-layered: Developed for universal 2.5-dimensional grid mapping with support for any number of layers.
    • Efficient map re-positioning: Data storage is implemented as two-dimensional circular buffer. This allows for non-destructive shifting of the map's position (e.g. to follow the robot) without copying data in memory.
    • Based on Eigen: Grid map data is stored as Eigen data types. Users can apply available Eigen algorithms directly to the map data for versatile and efficient data manipulation.
    • Convenience functions: Several helper methods allow for convenient and memory safe cell data access. For example, iterator functions for rectangular, circular, polygonal regions and lines are implemented.
    • ROS interface: Grid maps can be directly converted to and from ROS message types such as PointCloud2, OccupancyGrid, GridCells, and our custom GridMap message.
    • OpenCV interface: Grid maps can be seamlessly converted from and toOpenCV image types to make use of the tools provided byOpenCV.
    • Visualizations: The grid_map_rviz_plugin renders grid maps as 3d surface plots (height maps) inRViz. Additionally, the grid_map_visualization package helps to visualize grid maps as point clouds, occupancy grids, grid cells etc.

    The grid map package has been tested with ROS Indigo, Jade (under Ubuntu 14.04) and Kinetic (under Ubuntu 16.04). This is research code, expect that it changes often and any fitness for a particular purpose is disclaimed.

    The source code is released under a BSD 3-Clause license.

    Author: Péter Fankhauser
    Maintainer: Péter Fankhauser, pfankhauser@ethz.ch
    With contributions by: Martin Wermelinger, Philipp Krüsi, Remo Diethelm, Ralph Kaestner, Elena Stumm, Dominic Jud, Daniel Stonier, Christos Zalidis
    Affiliation: Autonomous Systems Lab, ETH Zurich

    Grid map example in RViz

    Publications

    If you use this work in an academic context, please cite the following publication(s):

    • P. Fankhauser and M. Hutter,"A Universal Grid Map Library: Implementation and Use Case for Rough Terrain Navigation",in Robot Operating System (ROS) – The Complete Reference (Volume 1), A. Koubaa (Ed.), Springer, 2016. (PDF)

      @incollection{Fankhauser2016GridMapLibrary,
          author = {Fankhauser, Péter and Hutter, Marco},
          booktitle = {Robot Operating System (ROS) – The Complete Reference (Volume 1)},
          title = {{A Universal Grid Map Library: Implementation and Use Case for Rough Terrain Navigation}},
          chapter = {5},
          editor = {Koubaa, Anis},
          publisher = {Springer},
          year = {2016},
          isbn = {978-3-319-26052-5},
          doi = {10.1007/978-3-319-26054-9{\_}5},
          url = {http://www.springer.com/de/book/9783319260525}
      }
      

    Documentation

    An introduction to the grid map library including a tutorial is given in this book chapter.

    The C++ API is documented here:

    Installation

    Installation from Packages

    To install all packages from the grid map library as Debian packages use

    sudo apt-get install ros-indigo-grid-map
    

    Building from Source

    Dependencies

    The grid_map_core package depends only on the linear algebra library Eigen.

    sudo apt-get install libeigen3-dev
    

    The grid_map_cv package depends additionally on OpenCV.

    The other packages depend additionally on the ROS standard installation (roscpp, tf, filters, sensor_msgs, nav_msgs, and cv_bridge).

    Building

    To build from source, clone the latest version from this repository into your catkin workspace and compile the package using

    cd catkin_ws/src
    git clone https://github.com/ethz-asl/grid_map.git
    cd ../
    catkin_make
    

    To maximize performance, make sure to build in Release mode. You can specify the build type by setting

    catkin_make -DCMAKE_BUILD_TYPE=Release
    

    Packages Overview

    This repository consists of following packages:

    • grid_map is the meta-package for the grid map library.
    • grid_map_core implements the algorithms of the grid map library. It provides theGridMap class and several helper classes such as the iterators. This package is implemented withoutROS dependencies.
    • grid_map_ros is the main package for ROS dependent projects using the grid map library. It provides the interfaces to convert grid maps from and to severalROS message types.
    • grid_map_cv provides conversions of grid maps from and toOpenCV image types.
    • grid_map_msgs holds the ROS message and service definitions around the [grid_map_msg/GridMap] message type.
    • grid_map_rviz_plugin is an RViz plugin to visualize grid maps as 3d surface plots (height maps).
    • grid_map_visualization contains a node written to convert GridMap messages to otherROS message types for example for visualization inRViz.
    • grid_map_filters builds on the ROS filters package to process grid maps as a sequence of filters.
    • grid_map_demos contains several nodes for demonstration purposes.

    Unit Tests

    Run the unit tests with

    catkin_make run_tests_grid_map_core run_tests_grid_map_ros
    

    or

    catkin build grid_map --no-deps --verbose --catkin-make-args run_tests
    

    if you are using catkin tools.

    Usage

    Demonstrations

    The grid_map_demos package contains several demonstration nodes. Use this code to verify your installation of the grid map packages and to get you started with your own usage of the library.

    • simple_demo demonstrates a simple example for using the grid map library. This ROS node creates a grid map, adds data to it, and publishes it. To see the result in RViz, execute the command

      roslaunch grid_map_demos simple_demo.launch
      
    • tutorial_demo is an extended demonstration of the library's functionalities. Launch thetutorial_demo with

      roslaunch grid_map_demos tutorial_demo.launch
      
    • iterators_demo showcases the usage of the grid map iterators. Launch it with

      roslaunch grid_map_demos iterators_demo.launch
      
    • image_to_gridmap_demo demonstrates how to convert data from animage to a grid map. Start the demonstration with

      roslaunch grid_map_demos image_to_gridmap_demo.launch
      

      Image to grid map demo result

    • opencv_demo demonstrates map manipulations with help ofOpenCV functions. Start the demonstration with

      roslaunch grid_map_demos opencv_demo.launch
      

      OpenCV demo result

    • resolution_change_demo shows how the resolution of a grid map can be changed with help of theOpenCV image scaling methods. The see the results, use

      roslaunch grid_map_demos resolution_change_demo.launch
      

    Conventions & Definitions

    Grid map layers

    Grid map conventions

    Iterators

    The grid map library contains various iterators for convenience.

    Grid mapSubmapCircleLinePolygon
    Grid map iteratorSubmap iteratorCircle iteratorLine iteratorPolygon iterator
    EllipseSpiral   
    Ellipse iteratorSpiral iterator   

    Using the iterator in a for loop is common. For example, iterate over the entire grid map with theGridMapIterator with

    for (grid_map::GridMapIterator iterator(map); !iterator.isPastEnd(); ++iterator) {
        cout << "The value at index " << (*iterator).transpose() << " is " << map.at("layer", *iterator) << endl;
    }
    

    The other grid map iterators follow the same form. You can find more examples on how to use the different iterators in theiterators_demo node.

    Note: For maximum efficiency when using iterators, it is recommended to locally store direct access to the data layers of the grid map withgrid_map::Matrix& data = map["layer"] outside the for loop:

    grid_map::Matrix& data = map["layer"];
    for (GridMapIterator iterator(map); !iterator.isPastEnd(); ++iterator) {
        const Index index(*iterator);
        cout << "The value at index " << index.transpose() << " is " << data(index(0), index(1)) << endl;
    }
    

    You can find a benchmarking of the performance of the iterators in the iterator_benchmark node of thegrid_map_demos package which can be run with

    rosrun grid_map_demos iterator_benchmark
    

    Beware that while iterators are convenient, it is often the cleanest and most efficient to make use of the built-inEigen methods. Here are some examples:

    • Setting a constant value to all cells of a layer:

      map["layer"].setConstant(3.0);
      
    • Adding two layers:

      map["sum"] = map["layer_1"] + map["layer_2"];
      
    • Scaling a layer:

      map["layer"] = 2.0 * map["layer"];
      
    • Max. values between two layers:

      map["max"] = map["layer_1"].cwiseMax(map["layer_2"]);
      
    • Compute the root mean squared error:

      map.add("error", (map.get("layer_1") - map.get("layer_2")).cwiseAbs());
      unsigned int nCells = map.getSize().prod();
      double rootMeanSquaredError = sqrt((map["error"].array().pow(2).sum()) / nCells);
      

    Changing the Position of the Map

    There are two different methods to change the position of the map:

    • setPosition(...): Changes the position of the map without changing data stored in the map. This changes the corresponce between the data and the map frame.
    • move(...): Relocates the grid map such that the corresponce between data and the map frame does not change. Data in the overlapping region before and after the position change remains stored. Data that falls outside of the map at its new position is discarded. Cells that cover previously unknown regions are emptied (set to nan). The data storage is implemented as two-dimensional circular buffer to minimize computational effort.
    setPosition(...)move(...)
    Grid map iteratorSubmap iterator

    Packages

    grid_map_rviz_plugin

    This RViz plugin visualizes a grid map layer as 3d surface plot (height map). A separate layer can be chosen as layer for the color information.

    Grid map visualization in RViz

    grid_map_visualization

    This node subscribes to a topic of type grid_map_msgs/GridMap and publishes messages that can be visualized in RViz. The published topics of the visualizer can be fully configure with a YAML parameter file. Any number of visualizations with different parameters can be added. An example ishere for the configuration file of the tutorial_demo.

    Point cloudVectorsOccupancy gridGrid cells
    Point cloudVectorsOccupancy gridGrid cells

    Parameters

    • grid_map_topic (string, default: "/grid_map")

      The name of the grid map topic to be visualized. See below for the description of the visualizers.

    Subscribed Topics

    Published Topics

    The published topics are configured with the YAML parameter file. Possible topics are:

    • point_cloud (sensor_msgs/PointCloud2)

      Shows the grid map as a point cloud. Select which layer to transform as points with thelayer parameter.

      name: elevation
      type: point_cloud
      params:
       layer: elevation
       flat: false # optional
      
    • flat_point_cloud (sensor_msgs/PointCloud2)

      Shows the grid map as a "flat" point cloud, i.e. with all points at the same heightz. This is convenient to visualize 2d maps or images (or even video streams) inRViz with help of its Color Transformer. The parameter height determines the desiredz-position of the flat point cloud.

      name: flat_grid
      type: flat_point_cloud
      params:
       height: 0.0
      

      Note: In order to omit points in the flat point cloud from empty/invalid cells, specify the layers which should be checked for validity withsetBasicLayers(...).

    • vectors (visualization_msgs/Marker)

      Visualizes vector data of the grid map as visual markers. Specify the layers which hold thex-, y-, and z-components of the vectors with the layer_prefix parameter. The parameter position_layer defines the layer to be used as start point of the vectors.

      name: surface_normals
      type: vectors
      params:
       layer_prefix: normal_
       position_layer: elevation
       scale: 0.06
       line_ 0.005
       color: 15600153 # red
      
    • occupancy_grid (nav_msgs/OccupancyGrid)

      Visualizes a layer of the grid map as occupancy grid. Specify the layer to be visualized with thelayer parameter, and the upper and lower bound with data_min anddata_max.

      name: traversability_grid
      type: occupancy_grid
      params:
       layer: traversability
       data_min: -0.15
       data_max: 0.15
      
    • grid_cells (nav_msgs/GridCells)

      Visualizes a layer of the grid map as grid cells. Specify the layer to be visualized with thelayer parameter, and the upper and lower bounds with lower_threshold andupper_threshold.

      name: elevation_cells
      type: grid_cells
      params:
       layer: elevation
       lower_threshold: -0.08 # optional, default: -inf
       upper_threshold: 0.08 # optional, default: inf
      
    • region (visualization_msgs/Marker)

      Shows the boundary of the grid map.

      name: map_region
      type: map_region
      params:
       color: 3289650
       line_ 0.003
      

    Note: Color values are in RGB form as concatenated integers (for each channel value 0-255). The values can be generated likethis as an example for the color green (red: 0, green: 255, blue: 0).

    Build Status

    Devel Job Status

     IndigoJadeKinetic
    grid_mapBuild StatusBuild StatusBuild Status
    docBuild StatusBuild StatusBuild Status

    Release Job Status

     IndigoJadeKinetic
    grid_mapBuild StatusBuild StatusBuild Status
    grid_map_coreBuild StatusBuild StatusBuild Status
    grid_map_rosBuild StatusBuild StatusBuild Status
    grid_map_msgsBuild StatusBuild StatusBuild Status
    grid_map_rviz_pluginBuild StatusBuild StatusBuild Status
    grid_map_visualizationBuild StatusBuild StatusBuild Status
    grid_map_filtersBuild StatusBuild StatusBuild Status
    grid_map_loaderBuild StatusBuild StatusBuild Status
    grid_map_demosBuild StatusBuild StatusBuild Status

    Bugs & Feature Requests

    Please report bugs and request features using the Issue Tracker.

  • 相关阅读:
    swf上传地址
    Nape 获取碰撞点加特效
    vbs打包exe工具
    Air打包exe
    JDK12的安装搭建
    Dubble 入门
    FastDFS 集群
    PAT Advanced 1077 Kuchiguse (20 分)
    高可用4层lvs——keepalived
    PAT Advanced 1035 Password (20 分)
  • 原文地址:https://www.cnblogs.com/liang123/p/6324869.html
Copyright © 2011-2022 走看看