No version for distro humble showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
kilted

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
lyrical

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
rolling

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro ardent showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro bouncy showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro crystal showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro eloquent showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro dashing showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro galactic showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro foxy showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro iron showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro lunar showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro jade showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro indigo showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro hydro showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro kinetic showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro melodic showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange

No version for distro noetic showing jazzy. Known supported distros are highlighted in the buttons above.
Package symbol

rko_slam package from rko_slam repo

rko_slam

ROS Distro
jazzy

Package Summary

Version 0.0.7
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PRBonn/rko_slam.git
VCS Type git
VCS Version master
Last Updated 2026-10-15
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS2 LiDAR-inertial SLAM and multi-session alignment

Additional Links

Maintainers

  • Meher Malladi

Authors

No additional authors.

rko_slam

ROS2 LiDAR-inertial SLAM and multi-session alignment

[![Jazzy](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_jazzy.yaml) [![Kilted](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_kilted.yaml) [![Lyrical](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_lyrical.yaml) [![Rolling](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml/badge.svg)](https://github.com/PRBonn/rko_slam/actions/workflows/ros_rolling.yaml) [![Docs](https://img.shields.io/badge/docs-prbonn.github.io-blue)](https://prbonn.github.io/rko_slam/) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_slam)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_slam)](/)

Sub-maps of a drive placed by the odometry, doubling the road where the drive returns, then snapping into one road with rko_slam running on top
A drive that returns to where it started, with rko_lio, and with rko_slam running on top of it

Three closed maps: a vehicle run, a backpack run on Oxford Spires, and a backpack run in a DigiForests forest

Quick start

rko_slam runs on rko_lio, my LiDAR-inertial odometry, or on your own odometry. Build it with rko_lio:

cd <ws>/src
git clone https://github.com/PRBonn/rko_lio
git clone https://github.com/PRBonn/rko_slam
cd <ws> && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select rko_lio rko_slam

What it needs

  • A LiDAR (sensor_msgs/PointCloud2 with per-point timestamps) and an IMU (sensor_msgs/Imu).
  • The LiDAR and IMU frames linked to your base frame on TF, e.g. by your URDF.

The TF tree: rko_slam publishes map from odom, your odometry odom from base_link, your URDF base_link from the LiDAR and, dashed as optional, the IMU frame

Run

odometry_and_slam.launch.py starts rko_lio and rko_slam together and finds the LiDAR and IMU topics and your base frame by itself. Start your robot, then:

ros2 launch rko_slam odometry_and_slam.launch.py rviz:=true

From a bag, in two terminals, bag first:

ros2 bag play <bag> --clock
ros2 launch rko_slam odometry_and_slam.launch.py use_sim_time:=true rviz:=true

If your setup differs:

Your setup Do this
Base frame named other than base_link, base_footprint or base base_frame:=<yours>
Several LiDAR or IMU topics, e.g. the LiDAR driver’s own IMU an rko_lio config file naming yours and your base frame, below
LiDAR and IMU messages share one frame_id and no TF links it to a base frame, e.g. a Livox with its built-in IMU an rko_lio config file with identity extrinsics, below
Topics or TF take over 10 s to appear autodetect_timeout:=<seconds>
Something else already publishes odom <- <your base frame>, e.g. robot_localization or the bag’s /tf turn it off, or run with your own odometry, below

An rko_lio config file, passed with rko_lio_config_file:=<file>, replaces the autodetection (all keys):

lidar_topic: /livox/lidar
imu_topic: /livox/imu
# LiDAR and IMU in one frame, no TF
base_frame: livox_frame
extrinsic_lidar2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]
extrinsic_imu2base_quat_xyzw_xyz: [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]

With your own odometry

slam.launch.py starts rko_slam alone, on any locally consistent odometry that publishes odom <- base_link on TF:

```bash

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_slam

0.0.7 (2026-10-15)

  • support compressed cloud input (#8)
  • build cleanup: rosdep everything, profiling behind a flag (#7)
  • reimplement closure detection, drop map closures from the package (#6)
  • solve the pose graph ourselves, drop g2o from the package (#5)
  • use the imu to level the map, gravity edges in the pose graph, correct height (z) drift (#4)
  • launch cleanup, no more autodetect in slam, docs cleaned up (#3)
  • always work in the base frame, drop the lidar extrinsic parameter (#2)
  • require rko_lio 0.4.2
  • odom launch file, further autodetect and launch cleanup, ux cleanup of the launch files and base node
  • change default submap split distance to 50m
  • docs: overhaul (#1) and again, published and subscribed topics cleanup, readme and index edits
  • Contributors: Meher Malladi

0.0.1 (2026-09-11)

  • map closures can return a degenerate pose, need the quaternion form to normalize
  • cleanup workflows a bit
  • clarify rko_lio's dependency situation in the readme
  • cleanup readme slightly
  • initial commit, port over the entire codebase
  • Contributors: Meher Malladi

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_slam at Robotics Stack Exchange