Main Content

Navigation and Mapping

Point cloud registration and map building, 2-D and 3-D SLAM, and 2-D obstacle detection

To understand an unknown environment and navigate to a desired destination, a robot must have a clear picture of its surroundings. Especially in the absence of GPS data, a simultaneous localization and mapping (SLAM) algorithm can help a robot make effective decisions and plan a path through its environment.

SLAM consists of these two processes:

  • Localization — Estimating the pose of the robot in a known environment.

  • Mapping — Building a map of an unknown environment by using a known robot pose and sensor data.

Localization requires the robot to have a map of the environment, and mapping requires a good pose estimate. In the SLAM process, a robot creates a map of an environment while localizing itself. For more information, see Implement Point Cloud SLAM in MATLAB.

To perform SLAM, you must preprocess point clouds. Lidar Toolbox™ provides functions to extract features from point clouds and use them to register point clouds to one another. For an example of how to use fast point feature histogram (FPFH) feature extraction in a 3-D SLAM workflow for aerial data, see Aerial Lidar SLAM Using FPFH Descriptors.

You can also perform SLAM by using 2-D lidar scans. By storing the data for a 2-D lidar scan in a lidarScan object, you can perform scan matching to estimate pose. For more information, see Build Map from 2-D Lidar Scans Using SLAM.

Lidar Toolbox supports various graph-based SLAM workflows, including 2-D SLAM, 3-D SLAM, online SLAM and offline SLAM.

Simultaneous localization and mapping


Lidar Registration AnalyzerAnalyze results of lidar point cloud registration (Since R2024a)


expand all

detectLOAMFeaturesDetect LOAM feature points from 3-D lidar data (Since R2022a)
detectISSFeaturesDetect ISS feature points in point cloud (Since R2022a)
extractEigenFeaturesExtract eigenvalue-based features from point cloud segments (Since R2021a)
extractFPFHFeaturesExtract fast point feature histogram (FPFH) descriptors from point cloud (Since R2020b)
pcmatchfeaturesFind matching features between point clouds (Since R2020b)
pcregisterloamRegister two point clouds using LOAM algorithm (Since R2022a)
pcregisterfgrRegister two point clouds using FGR algorithm (Since R2022b)
pcregistericpRegister two point clouds using ICP algorithm
pcregistercpdRegister two point clouds using CPD algorithm
pcregistercorrRegister two point clouds using phase correlation (Since R2020b)
pcregisterndtRegister two point clouds using NDT algorithm
matchScansEstimate pose between two laser scans (Since R2020b)
matchScansGridEstimate pose between two lidar scans using grid-based search (Since R2020b)
matchScansLineEstimate pose between two laser scans using line features (Since R2020b)
transformScanTransform laser scan based on relative pose (Since R2021a)
pcmaploamCreate map of LOAM feature points for map building (Since R2022b)
pcmapsegmatchMap of segments and features for localization and loop closure detection (Since R2021a)
lidarscanmapSimultaneous localization and mapping using 2-D lidar scans (Since R2022b)
addScanAdd 2-D lidar scan to map (Since R2022b)
detectLoopClosureDetect loop closure in 2-D lidar scan map (Since R2022b)
addLoopClosureAdd loop closure to the map (Since R2022b)
deleteLoopClosureDelete loop closure between 2-D lidar scans (Since R2022b)
poseGraphCreate 2-D pose graph from lidar scan map (Since R2022b)
updateScanPosesUpdate absolute poses of 2-D lidar scans (Since R2022b)
findPoseFind absolute pose of 2-D lidar scan in the map (Since R2022b)
copyCreate a copy of lidarscanmap object (Since R2022b)
showDisplay 2-D lidar scans and lidar sensor trajectory (Since R2022b)
pcshowpairVisualize difference between two point clouds
pcplayerVisualize streaming 3-D point cloud data
pcshowMatchedFeaturesDisplay point clouds with matched feature points (Since R2020b)
rangeSensorSimulate range-bearing sensor readings (Since R2020b)
lidarSensorSimulate lidar sensor readings (Since R2022a)
lidarScanCreate object for storing 2-D lidar scan (Since R2020b)
eigenFeatureObject for storing eigenvalue-based features (Since R2021a)
LOAMPointsObject for storing LOAM feature points (Since R2022a)