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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

Package symbol

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

Package symbol

rko_lio package from rko_lio repo

rko_lio

ROS Distro
kilted

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

Package symbol

rko_lio package from rko_lio repo

rko_lio

ROS Distro
rolling

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange

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

rko_lio package from rko_lio repo

rko_lio

ROS Distro
jazzy

Package Summary

Version 0.1.2
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modelling

Maintainers

  • Meher Malladi

Authors

No additional authors.

RKO LIO - LiDAR-Inertial Odometry
Without Sensor-Specific Modelling

ROS Distros:
Humble Jazzy Kilted Rolling

Python Bindings:
Ubuntu 22.04 Ubuntu 22.04 ARM Ubuntu 24.04 Ubuntu 24.04 ARM
macOS 14 macOS 15
Windows 2022 Windows 11 ARM

Visualization of odometry system running on data from four different platforms in four different environments
Four different platforms, four different environments, one odometry system

Quick Start

Python

In case you already have a rosbag (ROS1 or ROS2) which contains a TF tree, you can inspect the results of our odometry system with the following two steps

pip install rko_lio rosbags rerun-sdk

rko_lio is our odometry package, rosbags is required for using our rosbag dataloader, and rerun-sdk is what we use for our optional visualizer. Next, run

rko_lio -v /path/to/rosbag_folder # <- has to be a directory! with either *.bag files or metadata.yaml from ROS2

and you should be good to go!

Click here for some more details on how the above works and how to use RKO LIO!
The `-v` flag enables visualization. You can specify a dataloader to use with `-d`, but if you don't, we try to guess the format based on the layout of the data. Our rosbag dataloader works with either ROS1 or ROS2 bags. Place split ROS1 bags in a single folder and pass the folder as the data path. Note that we don't support running RKO LIO on partial or incomplete bags, though you can try (and maybe raise an issue if you think we should support this). ROS2 especially will need a `metadata.yaml` file. By default, we assume there is just one IMU topic and one LiDAR topic in the bag, in which case we automatically pick up the topic names and proceed further. If there are multiple topics per sensor, you will be prompted to select one via the `--imu` or `--lidar` flags, which you can pass to `rko_lio`. Next, we assume there is a (static) TF tree in the bag. If so, we take the frame ids from the message topics we just picked up, build a static TF tree, and then query it for the extrinsic from IMU to LiDAR. Our odometry estimates the robot pose with respect to a base frame, and by default, we assume the LiDAR frame to be the base frame. If you would like to use a different frame, you can pass the frame id with `--base_frame` (note the other options available with `--help`). The TF tree will be queried for the appropriate transformations (if they exist in the bag!). In case there is no TF tree in the bag, then you will have to manually specify the extrinsics for IMU to base frame and LiDAR to base frame, as these two are **required** parameters. Set one of the extrinsics to identity if you want that one to be the base frame (you will still have to specify both parameters). You can specify the extrinsics via a config YAML file with the keys `extrinsic_imu2base_quat_xyzw_xyz` and `extrinsic_lidar2base_quat_xyzw_xyz`. You can dump a config with all the options set to default values by running `rko_lio --dump_config`. Modify as you require, and pass this file to `rko_lio` using the `-c` flag. Please check `python/config` in the GitHub repository for example configurations. An example invocation would then be ```bash # the config should have the sensor extrinsics if the rosbag doesn't rko_lio -v -c config.yaml --imu imu_topic --lidar lidar_topic /path/to/rosbag_folder ``` For all possible CLI flags, please check `rko_lio --help`.

For more install and usage instructions of our python interface, please refer to the python readme, config.md, and data.md.

The python interface to our system can be convenient to investigate recorded data offline as you don’t need to setup a ROS environment first.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rko_lio

0.1.2 (2025-09-26)

  • Drop irregular lidar frames (#35)
    • if incoming lidar scan has a stamp with too big of a delta to the previous, we treat it as an error
  • fix component registration so online node component shows up in ros2 component types (#34)
  • Contributors: Meher Malladi

0.1.1 (2025-09-17)

  • Fix logic error in offline node (ros) and interval imu stats compute (core) (#29)
    • cleaner error messages and log parsed imu and lidar frames for ros
    • patch rviz config to change the global frame if a different odom frame is used
    • revert offline node bag and buffer completion handling logic
    • cannot compute accel mag variance if imu count is 1. modify the check preventing divide by 0 errors
    • remove python/config/default.yaml since --dump_config does the same job
    • bump version to v0.1.1 and update python readme slightly
  • fix: ros launch - correctly overload config file params with cli params (#28)
    • fix: ros launch - correctly overload config file params with cli params
    • clarify that the default.yaml config file is not automatically picked up by the ros launch file
    • add a check to make sure 0 or both extrinsics are specified
  • Update docs to specify more details on data format (#25)
    • print the extrinsics to console after guessing them, so that its easier for the user to respecify in a config if required
    • add a data.md that specifies the minimal requirements on data we have.
    • add a readme section for all the configurations rko lio has been tested on
  • Update defaults to provide an easier entry into using the system (#24)
    • set initialization_phase to false by default, as a false start can break odometry. the user can opt-in to initializing if they know their system starts from rest.
    • remove Ninja as the default generator for ROS builds, as it breaks ros build farm builds
  • Contributors: Meher Malladi

0.1.0 (2025-09-11)

  • Bump version 0.1.0 (#22)
    • Update pyproject.toml to v0.1.0
    • Update package.xml to version 0.1.0
  • Ros API improvements (#20)
    • append quat_xyzw_xyz to extrinsic parameter names to make the order clearer
    • rename bag_filename to bag_path to be more intuitive on the offline node
    • ros refactoring: more parameter definitions, better parameter defaults, better variable names, offline node simplifications, and readme and launfile updates to reflect the new parameter names.
    • update the rviz config file
    • launchfile is improved. cli params override config files. final config is printed to console
    • update the documentation to reflect the changes
  • Contributors: Meher Malladi

0.0.4 (2025-09-09)

  • C++ simplifications, py-rosbag reader improvements (#14)
    • print the names of the bag files being added if there are multiple
    • add a --dump_config option to get a default config out
    • improve the --help messages a bit
    • print a more helpful message in case the bag doesnt contain a tf
    • simplifications on the cpp side to how we compute interval stats for imu

    * better handle the case when there are no timestamps in the point cloud for a rosbag

    • change the names of a few variables
    • add some more details to the main readme
    • bump version
  • Contributors: Meher Malladi

0.0.3 (2025-09-07 16:17)

  • Fix/improve rerun visualization, remove matplotlib as an undocumented dep, bump version (#10)
    • remove unnecessary dependency on matplotlib. also prevents a break
    • use the rerun blueprint from the visualization we have now

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rko_lio at Robotics Stack Exchange