当前位置: 首页 > news >正文

(25.08)Ubuntu20.04复现KISS-ICP

主页: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 调用)。

http://www.xdnf.cn/news/1281097.html

相关文章:

  • 【k8s】k8s中的几个概念性问题
  • Spring MVC 注解参数接收详解:@RequestBody、@PathVariable 等区别与使用场景
  • 亚马逊广告底层逻辑重构:从流量博弈到价值创造的战略升维
  • 爬虫与数据分析入门:从中国大学排名爬取到数据可视化全流程
  • Python网络爬虫(一) - 爬取静态网页
  • 爬虫与数据分析结和
  • 小白玩转 DINO-X MCP(1):如何接入 MCP Server
  • 赚钱有什么规律,怎么泛化?
  • 多人游戏中的帧同步策略
  • macOS 搭建 Gitea 私有 Git 服务器教程
  • 【linux】企业级WEB应用服务器tomcat
  • 教程 | Win11彻底关闭“推荐的项目“,解放开始菜单! (Windows11推荐项目设置器)
  • RabbitMQ 声明队列和交换机详解
  • 基于FPGA的热电偶测温数据采集系统,替代NI的产品(三)测试
  • 基于领域事件驱动的微服务架构设计与实践
  • 面试实战 问题二十三 如何判断索引是否生效,什么样的sql会导致索引失效
  • C++ 限制类对象数量的技巧与实践
  • CS钓鱼鱼饵制作的方式
  • RFID系统:物联网时代的数字化管理中枢
  • 网络性能优化:Go编程视角 - 从理论到实践的性能提升之路
  • PyTorch基础(使用Tensor及Antograd实现机器学习)
  • Unity大型场景性能优化全攻略:PC与安卓端深度实践 - 场景管理、渲染优化、资源调度 C#
  • 请求报文和响应报文(详细讲解)
  • Android16新特性速记
  • 查看 php 可用版本
  • Spring Boot文件上传功能实现详解
  • DNS(域名系统)
  • cesium/resium 修改子模型材质
  • 第5节 大模型分布式推理通信优化与硬件协同
  • typecho博客设置浏览器标签页图标icon