Skip to content

Draft for python API #79

@rschilli-dev

Description

@rschilli-dev

First off all thanks for your great work on another quite simple but accurate algorithm, I already worked with KISS(-slam) and its always a pleasure to work with those algorithms.

I am currently evaluating several approaches with an Ouster Os1 128 Lidar and a high-precision GNSS/INS-system and I loved the speedup factor off your offline approach in ROS. So I started to use your python API more intense for my setup and created a fork with some features/refactoring stuff I wanted to share. Since I also have experience with your other algorithms, I tried to orientate a bit on them, so here's a short overview:

  • I've refactored the configuration part by using pydantic to simplify handling and validating the parameters through the pipeline. I know it brings a further dependency, but it really keeps the code simpler to handle and its orientated on KISS
  • added an option to also define a TF-tree as yaml file (e.g. the result of a typical ros2 topic echo /tf_static ). The intention for me was, since I often work with "snipped sub-records" I often lose the tf_static topic and by increased complexity of the tree the current extrinsic_params could be painful to grab the correct values
  • expand the logic for dumping deskewed scans by allow to define the desired file format (ply/pcd) as also added an option to dump the local_map. Therefore I track the accumulated local trajectory and dump the map every X meters (currently max_range / 2)
  • the largest change: added native ouster support to process their raw UDP packets. I know this would not be an option for you, since I depend on the ouster-SDK therefore which brings kiss-icp with it in the latest version, but maybe its worth to take a look into it. Since my records are ros2 mcap that includes the osuter udp packets, its more an extension of the existing rosbag dataloader. But by using the SDK I can replay them as fast as possible which means in my case I have a 2-3x faster replay time in python, which comes close to the offline ROS node. It also supports using an external IMU topic instead of the internal one from ouster.
  • last one is a minor improvement: start the visualization of rerun first AFTER everything was valid. Before rerun opened and then the algorithm crashed e.g. because of invalid TF ;-).

So, I just wanted to provide you some input for further enhancements. :) Since some of them are major changes, I didnt directly create a PR, moreover I do not have all supported datasets to ensure correct functionality for all of them.
Feel free to checkout my fork or give me feedback if you want to grab some of my changes as an PR :-)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions