Skip to content

Latest commit

 

History

History
111 lines (68 loc) · 3.6 KB

README.md

File metadata and controls

111 lines (68 loc) · 3.6 KB

NanoMap

Fast, Uncertainty-Aware Proximity Queries with Lazy Search of Local 3D Data

NanoMap is an algorithm and data structure that enables uncertainty-aware proximity queries for planning.


NanoMap

Features

Key features of NanoMap include:

  • Incorporates frame-specific uncertainty (due to modeled local pose uncertainty) returned along with query point
  • Query algorithm returns k-nearest-neighbors from most recent view of query point
  • Updates pose history information 2-4 orders of magnitude faster than fusion-based voxel packages
  • Particularly fast for low amounts of queries (<10,000)

Quickstart

	git clone https://github.com/peteflorence/nanomap_ros.git
	catkin_make  ## catkin build for catkin_tools, or catkin_make for catkin

Reccomend first testing your installation:

	catkin_make run_tests_nanomap_ros

Then there are two examples of minimal nodes, one is for benchmarking and performs queries:

	rosrun nanomap_ros benchmarking_node

The other shows how to use the nanomap_visualizer:

	rosrun nanomap_ros visualization_node

Support

This ros node has been tested on:

  • ROS Kinetic on Ubuntu 16.04
  • ROS Indigo on Ubuntu 14.04

Benchmarking

NanoMap is particularly fast for low amounts of motion planning queries (< ~10,000), due to its low data structure build time. Fusion-based voxel structures take longer to build but have faster query times, causing them to be faster for > ~10,000 queries.

Nanomap is two to four orders of magnitude faster than these other benchmarked packages at rebuilding its data structure upon receiving updated pose history information.

(On single-core of an Intel Skylake i7. Error bars are shown as standard error of the mean. Docker image with all packages buildable inside provided: https://hub.docker.com/r/flamitdraper/mapping/ )

Required Dependencies

  • Nanoflann (included as nanoflann_two.hpp)
  • Eigen
  • PCL

The PCL dependency is minimal. It only uses the pcl::PointCloud<pcl::PointXYZ>; does not use any algorithms. It would not be hard to replicate this type and remove the PCL dependency. Would gladly merge that PR, PCL is a fantastic library, but is not really used here.

Without ROS

The core of the code has no depdency on ROS. The only parts that have ROS dependencies are the visualization components, and the example node:

  • nanomap_visualizer.h / .cc
  • frustum_visualization.h
  • benchmarking_node.cpp

I have provided this as a ros package since that is how it has been used and tested. If you would like to use this without ros, it would just need a ros-independent CMakeLists.txt / incorporate into other build system.

Testing

    catkin_make run_tests_nanomap_ros 

Debugging NanoMap

The top of nanomap_types.h has #define NANOMAP_DEBUG_PRINT false. Changing this to true turns on potentially useful debug prints.

A particularly useful debug print is in NanoMapDebugPrintState() in nanomap.cc. Often I will turn the first line of this function to if (1) in order to print regular status.

Contributors

Contact

Contact [email protected] / peteflorence.com for more information.