kiss_icp保存点云
时间: 2025-06-04 09:10:22 浏览: 21
### KISS-ICP 中点云数据的保存
KISS-ICP 是一种高效的 LiDAR-Inertial Odometry 方法,其核心功能之一是对点云进行配准并估计位姿。为了保存点云数据,在实际应用中可以利用 ROS 的消息传递机制以及 PCL 库来完成这一操作。
#### 使用 KISS-ICP 保存点云的方法
在 Ubuntu 20.04 和 ROS Noetic 下安装和配置 KISS-ICP 后,可以通过订阅 `/kiss_icp/odometry` 或其他相关话题获取点云数据,并将其保存到文件中。以下是具体实现方式:
1. **创建自定义节点**
编写一个 ROS 节点用于监听来自 KISS-ICP 处理后的点云数据,并通过 `pcl::io::savePCDFileASCII()` 函数将点云保存为 `.pcd` 文件[^3]。
```cpp
#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl/io/pcd_io.h>
#include <pcl_conversions/pcl_conversions.h>
void cloudCallback(const sensor_msgs::PointCloud2ConstPtr& input_cloud)
{
pcl::PointCloud<pcl::PointXYZ> cloud;
pcl::fromROSMsg(*input_cloud, cloud);
std::string filename = "/path/to/save/cloud_" + ros::Time::now().toString() + ".pcd";
pcl::io::savePCDFileASCII(filename, cloud);
ROS_INFO("Saved point cloud to %s", filename.c_str());
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "pointcloud_saver");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("/kiss_icp/output/cloud", 1, cloudCallback);
ros::spin();
return 0;
}
```
上述代码片段展示了如何编写一个简单的 ROS 节点,该节点会订阅由 KISS-ICP 发布的主题 `/kiss_icp/output/cloud` 并将接收到的数据保存至指定路径下的 `.pcd` 文件中[^3]。
2. **修改 CMakeLists.txt**
将新编写的节点加入到当前的工作空间中以便于构建。打开 `CMakeLists.txt` 添加如下内容:
```cmake
add_executable(pointcloud_saver src/pointcloud_saver.cpp)
target_link_libraries(pointcloud_saver ${catkin_LIBRARIES})
```
执行命令重新编译项目:
```bash
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
```
3. **运行节点**
启动 KISS-ICP 及新建的点云保存节点即可开始记录数据流中的点云信息。
```bash
roslaunch kiss_icp demo.launch
rosrun your_package_name pointcloud_saver
```
#### 数据处理与存储注意事项
当采用体素下采样技术预处理原始点云时,通常会选择保留每个 voxel 内的第一个插入点而非中心位置,因为这样能够更好地保持原有几何特征[^1]。此策略有助于减少冗余的同时维持较高的精度水平。
---
阅读全文
相关推荐

















