Cartographer is a (Simultaneous Localization And Mapping) SLAM system from Google, capable of 2D or 3D SLAM. The Isaac SDK incorporates Cartographer to provide mapping capability.

Cartographer and other third-party SLAM systems may require tuning (independent of the Isaac SDK) to achieve useful results in certain applications.

Cartographer requires computational resources that may exceed those of edge devices. Thus the sample presented takes in recorded log data rather than running on edge devices directly. The sample application performs 2D mapping, assuming Carter robot hardware.

Data Requirement

  • Flat Lidar Scan as FlatRangeScanProto messages.
  • Lidar Pose in Odometry Frame. On the Carter robot it is provided by DifferentialBaseOdometry codelet from StateProto messages of type DifferentialBaseDynamics.

Please refer to Record and Replay for recording and replaying the log.


See IsaacSDK/apps/carter/log_cartographer/ for configuration of the Cartographer sample application.

"tick_dt": 0.25,
"num_visible_submaps": 100
"lua_configuration_basename": "carter.lua",
  • num_visible_submaps is the number of submaps to render during mapping. Reduce this number to save CPU cycles if needed.
  • tick_dt is the number of seconds between feeding Lidar data into Cartographer. Feeding data more frequently may increase the quality of the resulting map, with a corresponding increase in resource cost.
  • lua_configuration_basename points to the LUA script containing Cartographer parameters. For detailed information about the parameters please refer to Cartographer Configuration and Cartographer Tuning Guide. Check and modify the parameters in IsaacSDK/apps/carter/log_cartographer/carter.lua if necessary.

Starting the Cartographer Sample Application

Start the sample application with the following command:

bazel run apps/carter/log_cartographer

Monitoring and Visualization

Open the following URL in a web browser:


Fig. 3 Cartographer Application Sample Output

  • The application allows you to specify a path for log input as described in Replay Widget.
  • Results might degrade when the ticking time for the Cartographer codelet is longer than the pre-set ticking interval tick_dt. Decreasing num_visible_submaps or disabling visualization of submaps might help in this case.


On exit, the sample application writes the final map as /tmp/submap_merged.png. Specify the output path with the following configuration parameter for the Cartographer codelet:

"output_path": "PATH/TO/WRITE"