(25.08)Ubuntu20.04复现KISS-ICP

发布于:2025-08-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

主页:https://github.com/PRBonn/kiss-icp?tab=readme-ov-file

仓库:https://github.com/PRBonn/kiss-icp.git

非 ROS 使用流程

1. 克隆仓库
git clone https://github.com/PRBonn/kiss-icp.git cd kiss-icp
2. 使用 micromamba 创建 Python 虚拟环境
micromamba create -n kissicp python=3.10 
micromamba activate kissicp
3. 安装 Python 依赖与安装包
pip install -U pip 
pip install kiss-icp

或者如果希望基于本地代码开发:

cd python 
pip install -e .

这样即可使用 kiss_icp_pipeline 或者对应的 Python API 接口。

4. 准备点云数据与运行

官方示例建议,是通过命令行调用 kiss_icp_pipeline,并将点云路径作为参数传入,例如:

kiss_icp_pipeline /path/to/your/pointclouds

(如果是自定义数据集,建议检查 config/ 中是否有需要调整的配置文件,然后通过参数或环境变量进行指定。)

kiss_icp_pipeline /home/huang/Data/dynslam/mini-seq-06/velodyne

已经成功运行了 kiss_icp_pipeline,它很流畅地处理了Velodyne 数据:

100% (...) 100 frames · average frequency 118 Hz · runtime ~9 ms

这表明处理速度非常稳定,性能也相当高效!如果你还想进一步定制运行行为或参数,这里有几点建议可以参考:


配置 scan deskew 行为

如提示所述,KISS‑ICP 默认会 对扫描数据进行 deskew(去畸变)处理。如果你想修改这一行为,可以:

  1. 生成默认配置文件:

    kiss_icp_dump_config > my_config.yaml
  2. 编辑 my_config.yaml,将 deskew 参数设为 false (或根据需求调整)。

  3. 使用定制配置运行:

    kiss_icp_pipeline /home/huang/Data/dynslam/mini-seq-06/velodyne --config my_config.yaml

    这会让处理过程关闭 deskew 或启用其他你修改的配置选项,行为更可控。


配置与版本动态
  • 配置文件提供灵活性kiss_icp_dump_config 会输出一个当前版本默认的 YAML 格式配置,便于修改诸如 deskew、voxel size、range thresholds 等。

  • 软件已正式支持 deskew 默认开启:从 v1.2.2 版本开始,项目默认启用 deskew 功能,以提高精度 。


总结建议表
目标 操作建议
保持默认行为快速运行 直接运行 kiss_icp_pipeline <path>,已验证可行
关闭 deskew 或调整配置 使用 kiss_icp_dump_config → 编辑 YAML → 加 --config 运行
确认版本与默认行为 当前版本默认启用 deskew,了解版本升级带来的行为变化可参见发行说明
5.可视化(目前 kiss_icp_pipeline CLI 工具 默认并不弹出可视化窗口,即便已经安装了 Open3D)

使用 Python 脚本 调用管道并可视化(但结果有点奇怪....

import numpy as np
import open3d as o3d
from pathlib import Path
from kiss_icp.datasets.generic import GenericDataset
from kiss_icp.pipeline import OdometryPipeline

# 数据路径
data_dir = Path("/home/huang/Data/dynslam/mini-seq-06/velodyne")
bin_paths = sorted(data_dir.glob("*.bin"))

# 加载所有点云帧
def load_kitti_bin(p):
    pts = np.fromfile(str(p), dtype=np.float32).reshape(-1, 4)[:, :3]
    return o3d.geometry.PointCloud(o3d.utility.Vector3dVector(pts))

pcd_frames = [load_kitti_bin(p) for p in bin_paths]

# 运行 KISS‑ICP pipeline 获取位姿
dataset = GenericDataset(data_dir=data_dir)
pipeline = OdometryPipeline(dataset=dataset)
pipeline._run_pipeline()
pipeline._run_evaluation()
poses = pipeline._calibrate_poses(pipeline.poses)

# 构建地图与轨迹点云
map_pcd = o3d.geometry.PointCloud()
for pcd in pcd_frames:
    map_pcd += pcd
map_pcd = map_pcd.voxel_down_sample(voxel_size=0.2)
map_pcd.paint_uniform_color([0.1, 0.1, 0.7])

trajectory = [pose[:3, 3] for pose in poses]
traj_pcd = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(trajectory))
traj_pcd.paint_uniform_color([1, 0, 0])

# 可视化展示
vis = o3d.visualization.Visualizer()
vis.create_window("KISS‑ICP Map & Trajectory")
vis.add_geometry(map_pcd)
vis.add_geometry(traj_pcd)
vis.run()
vis.destroy_window()

6.(未试)编译 C++ 模块加速

如果希望提升性能,可以进入 cpp/ 目录,使用 CMake 编译项目:

mkdir build && cd build 
cmake .. 
make -j$(nproc)

然后确保编译产物与 Python 环境兼容(比如通过 pybind 接口可供 Python 调用)。