CSF库的安装使用

1、下载CSF源码、CMake编译

下载CSF

先在CSF-master中新建build文件夹

设置 CMake路径,然后步骤1,2,3
在这里插入图片描述

(好像要用VS打开CSF,在Release下运行生成CSF.lib库)

2、新建项目,在VS中配置

在VS中的项目属性中配置依赖项

在这里插入图片描述

添加CSF.lib很关键

在这里插入图片描述

3、代码中导入

导入CSF.lib

#include "E:\1_My_Reserch\CSF001\CSF-master\src\CSF.h"
#include "E:\1_My_Reserch\CSF001\CSF-master\src\point_cloud.h"

4、利用CSF分离地面和非地面点

#include <vector>
#include "Cfg.h"
#include "E:\1_My_Reserch\CSF001\CSF-master\src\CSF.h"
#include "E:\1_My_Reserch\CSF001\CSF-master\src\point_cloud.h"
#include <locale.h>
#include <time.h>
#include <cstdlib>
#include <cstring>

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int main(int argc, char* argv[])
{

	//加载点云数据
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (pcl::io::loadPCDFile<pcl::PointXYZ>("0404.pcd", *cloud) == -1) {
		PCL_ERROR("Could not read the file input cloud\n");
		return -1;
	}

	//将pcl点云转换成CSF输入格式
	std::vector<csf::Point> points;
	for (const auto& pt : cloud->points) {
		points.emplace_back(pt.x, pt.y, pt.z);
	}

	//创建CSF对象,并设置参数
	CSF csf;
	csf.setPointCloud(points);
	csf.params.bSloopSmooth = true;
	csf.params.cloth_resolution = 1.0;
	csf.params.rigidness = 3;
	csf.params.time_step = 0.65;
	csf.params.class_threshold = 0.5; //设置阈值分割地面与非地面点

	//运行CSF算法
	std::vector<int> groundIndexes, offGroundIndexes;
	csf.do_filtering(groundIndexes, offGroundIndexes);

	//创建地面、非地面点云
	pcl::PointCloud<pcl::PointXYZ>::Ptr groundCloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr offGroundCloud(new pcl::PointCloud<pcl::PointXYZ>);

	for (const auto& index : groundIndexes) {
		groundCloud->points.push_back(cloud->points[index]);
	}
	for (const auto& index : offGroundIndexes) {
		offGroundCloud->points.push_back(cloud->points[index]);
	}

	//保存地面、非地面点云
	pcl::io::savePCDFileBinary("ground.pcd", *groundCloud);
	pcl::io::savePCDFileBinary("offGround.pcd", *offGroundCloud);

	return 0;
}

5、CSF算法参数设置

  1. cloth_resolution

    • 说明:布料的分辨率,控制模拟的细致程度。
    • 影响:较高的值会导致更精细的结果,但计算量增加。
  2. rigidness

    • 说明:模拟布料的刚性。
    • 影响:较高的值会使得布料更难变形,适用于更平坦的地面。
  3. time_step

    • 说明:每次模拟迭代的时间步长。
    • 影响:较小的值可以增加模拟的稳定性,但会增加计算时间。
  4. bSloopSmooth

    • 说明:布料是否使用平滑处理。
    • 影响:开启后可以减少噪声,但可能会导致地面细节丢失。
  5. class_threshold

    • 说明:分类阈值,用于区分地面和非地面点。
    • 影响:较高的值会将更多点归类为地面,较低的值则相反。
  6. max_iterations(可选):

    • 说明:最大迭代次数。
    • 影响:限制模拟的次数,避免计算过长时间。
  7. damping(可选):

    • 说明:阻尼系数,控制布料运动的阻力。
    • 影响:增加阻尼会使布料运动更平稳,适合处理震动。

调整建议

  • 实验:不同应用场景可能需要不同的参数设置,建议多次实验调整。
  • 性能考虑:在计算资源有限的情况下,可以适当降低cloth_resolution和增加time_step
  • 结果验证:在实际应用中对比不同参数设置的结果,以找到最佳配置。

6、报错

  1. 运行一半报错,卡住不动
    解决:
    原保存pcd代码为
//保存地面、非地面点云
pcl::io::savePCDFileASCII("ground.pcd", *groundCloud);
pcl::io::savePCDFileASCII("offGround.pcd", *offGroundCloud);

后改为

//保存地面、非地面点云
pcl::io::savePCDFileBinary("ground.pcd", *groundCloud);
pcl::io::savePCDFileBinary("offGround.pcd", *offGroundCloud);

参考链接: PCL点云处理之CSF布料模拟滤波(五十九)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值