主頁: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(去畸變)處理。如果你想修改這一行為,可以:
生成默認配置文件:
kiss_icp_dump_config > my_config.yaml
編輯
my_config.yaml
,將deskew
參數設為false
(或根據需求調整)。使用定制配置運行:
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 調用)。