Towards Autonomy Perception Library (TAPL)
Towards Autonomy Perception Library (TAPL)

Goal of this library is to provide an easy and quick way of implementing perception pipelines.


Find on GitHub

Examples of Perception Task

Visual Odometry for a sequence of Monocular camera images

This example is provided at examples/src/monoVO.cpp. It uses a sequence of monocular images to perform visual odometry and build sparse point-cloud. This functionality is provided as an API and can be accessed using the function: tapl::cve::computeRelativePose().


  • Read images and push into a ring buffer.
  • If more than one image is available in the buffer then:
    • Perform keypoint detection and matching.
    • Compute essential matrix.
    • Compute relative pose (R, t)
    • Triangulate good keypoints for which a match is found.
  • Compute global pose from this relative pose.

LiDAR Object Detection

This example is provided at examples/src/lidarObjectDetection.cpp. It reads in PCD point-cloud files, performs downsampling, ground-plane segmentation, and clustering, and then some post-processing filtering to get 3D Bounding-Box of objects.


  • Load point-cloud data.
  • Downsample point-cloud (voxelization).
  • Crop the point-cloud based on a region of interest.
  • Segment out ground-plane using RANSAC.
    • For n iterations:
      • Choose 3 random points.
      • Fit a plane using least-squares.
      • Count number of inliers within a certain distance threshold between each point and plane.
    • Choose the plane that resulted in maximum number of inliers.
    • Implemented as part of class tapl::pte::Plane().
  • Perform Euclidian Clustering within the segmented point-cloud.
  • Filter and Extract the bounding-boxes.

Panaromic Image Stitching

This example is provided at examples/src/panoramicStitching.cpp and this functionality is implemented as tapl::cve::stitchPanaromic().


Image Feature Detection and Tracking

This example is provided at examples/src/kptsDetectionAndTracking.cpp and this functionality is implemented as tapl::cve::detectAndMatchKpts().


RANSAC for line and plane fitting

  • C++ implementation of RANSAC for line and plane fitting using both SVD and least-square methods are provided as part of class tapl::pte::Line() and class tapl::pte::Plane().
Line Fitting using RANSAC Plane Fitting using RANSAC


  • CMake >= 3.5
  • OpenCV >= 4.1
  • PCL >= 1.2
  • Eigen >= 3.2

Installation Instructions

  • Download the library.
1 git clone
  • Build and install the library as follows.
1 mkdir build
2 cd build
3 cmake ..
4 make
5 sudo make install
  • Build the examples as follows.
1 cd examples
2 mkdir build
3 cd build
4 cmake ..
5 make


TAPL is a free open source platform. Any contribution to this platform is welcome and appreciated.