点云预处理——滤波、旋转和平移等处理

目录

一、环境配置

二、步骤


一、环境配置

安装好ubuntu系统和ROS环境

操作系统: Ubuntu 20.04

wget http://fishros.com/install -O fishros && . fishros 

二、步骤

打开终端,并在终端命令行输入以下指令:

git clone https://gitee.com/wccworld/read_pcd.git

cd read_pcd/catkin_ws
catkin_make

出现报错

  • 没有pcl-conversions
sudo apt-get install ros-noetic-pcl-conversions
  • 没有pcl-ros

pcl_ros

没有报错的话,继续

source devel/setup.bash
roslaunch read_pcd read_pcd.launch

找到所下载源码里的read_pcd.launch文件,只需对相应参数进行修改,便可实现PCL点云的滤波、体素降采样、移除离群点、旋转以及平移等操作,具体参数代表的内容如下所示:

<launch>
  <param name="output_frame_id" value = "map" />           
  <param name="pointCloud_pubTopic" value = "/handle_point" />
  <param name="pcd_doc_path" value = "/home/yang/read_pcd/catkin_ws/pcd/test.pcd" />
  <param name="output_pcd_path" value = "/home/yang/read_pcd/catkin_ws/pcd/output.pcd" />

  <param name="pass_x_min" value = "-100.0" />
  <param name="pass_x_max" value = "100.0" />
  <param name="pass_y_min" value = "-100.0" />
  <param name="pass_y_max" value = "100.0" />
  <param name="pass_z_min" value = "-1.0" />
  <param name="pass_z_max" value = "30.0" />
  <param name="voxel_size" value = "0.1" />
  <param name="sor_nearby_number" value = "10" />
  <param name="sor_thresh_value" value = "5.0" />
  <param name="x_rotate_value" value = "0.0" />
  <param name="y_rotate_value" value = "0.0" />
  <param name="z_rotate_value" value = "0.0" />
  <param name="x_trans_value" value = "0.0" />
  <param name="y_trans_value" value = "20.0" />
  <param name="z_trans_value" value = "0.0" />

  <node pkg="read_pcd" name="read_pcd" type="read_pcd" output="screen" />
  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find read_pcd)/rviz/read_pcd.rviz" />
</launch>

出现报错

网上找了各种办法没有解决,我直接重新开始安装一遍。

还可以运行自己的数据,修改lanch文件就行。

<launch>
  <param name="output_frame_id" value = "map" />           
  <param name="pointCloud_pubTopic" value = "/handle_point" />
  <param name="pcd_doc_path" value = "/home/yang/kitti/datasets/pcd/0000000002.pcd" />
  <param name="output_pcd_path" value = "/home/yang/readpcd/read_pcd/catkin_ws/outpcd/output.pcd" />

  <param name="pass_x_min" value = "-100.0" />
  <param name="pass_x_max" value = "100.0" />
  <param name="pass_y_min" value = "-100.0" />
  <param name="pass_y_max" value = "100.0" />
  <param name="pass_z_min" value = "-1.0" />
  <param name="pass_z_max" value = "30.0" />
  <param name="voxel_size" value = "0.1" />
  <param name="sor_nearby_number" value = "10" />
  <param name="sor_thresh_value" value = "5.0" />
  <param name="x_rotate_value" value = "0.0" />
  <param name="y_rotate_value" value = "0.0" />
  <param name="z_rotate_value" value = "0.0" />
  <param name="x_trans_value" value = "0.0" />
  <param name="y_trans_value" value = "20.0" />
  <param name="z_trans_value" value = "0.0" />

  <node pkg="read_pcd" name="read_pcd" type="read_pcd" output="screen" />
  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find read_pcd)/rviz/read_pcd.rviz" />
</launch>

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对音频数据进行预处理滤波等操作可以提高频率计算的准确性和稳定性。以下是一些常用的处理方法: 1. 预处理 预处理是对音频数据进行预处理,以减小噪声和干扰的影响。常用的预处理方法有: - 归一化:将音频数据的幅度范围缩放到[-1,1]之间,以避免幅度过大或过小的问题。 - 平滑处理:对音频数据进行平滑处理,以减小噪声和干扰的影响。常用的平滑方法有移动平均、中值滤波等。 - 去除直流分量:直流分量指信号中的常数部分,可以通过去除直流分量来减小噪声和干扰的影响。 2. 滤波 滤波是对音频数据进行滤波处理,以去除噪声和干扰。常用的滤波方法有: - 低通滤波:去除高频信号,保留低频信号。可以用于去除噪声和干扰。 - 高通滤波:去除低频信号,保留高频信号。可以用于去除直流分量和低频噪声。 - 带通滤波:只保留指定频率范围内的信号,可以用于去除特定频率的噪声和干扰。 以下是一个示例代码,演示如何使用NAudio库对音频数据进行预处理滤波: ```csharp using NAudio.Wave; using System.Numerics; //创建一个录音机对象 var recorder = new WaveInEvent(); //设置录音机的参数 recorder.WaveFormat = new WaveFormat(44100, 1); //开启录音机 recorder.StartRecording(); //定义一个缓冲区,用于存储音频数据 byte[] buffer = new byte[recorder.WaveFormat.BlockAlign]; while (true) { //读取录音机中的音频数据 recorder.Read(buffer, 0, buffer.Length); //将音频数据转换成WaveBuffer对象 var waveBuffer = new WaveBuffer(buffer); //归一化处理 for (int i = 0; i < waveBuffer.FloatBuffer.Length; i++) { waveBuffer.FloatBuffer[i] /= 32768.0f; } //移动平均滤波 for (int i = 1; i < waveBuffer.FloatBuffer.Length - 1; i++) { waveBuffer.FloatBuffer[i] = (waveBuffer.FloatBuffer[i - 1] + waveBuffer.FloatBuffer[i] + waveBuffer.FloatBuffer[i + 1]) / 3.0f; } //去除直流分量 float average = 0; for (int i = 0; i < waveBuffer.FloatBuffer.Length; i++) { average += waveBuffer.FloatBuffer[i]; } average /= waveBuffer.FloatBuffer.Length; for (int i = 0; i < waveBuffer.FloatBuffer.Length; i++) { waveBuffer.FloatBuffer[i] -= average; } //低通滤波 var lowPassFilter = new LowPassFilter(44100, 2000); lowPassFilter.Process(waveBuffer.FloatBuffer); //对音频数据进行FFT变换 var fft = new FFT(); Complex[] result = fft.Transform(waveBuffer.FloatBuffer); //获取音频数据的频谱信息 float[] spectrum = new float[result.Length]; for (int i = 0; i < result.Length; i++) { spectrum[i] = (float)(result[i].Magnitude); } //计算音频的频率 float maxFrequency = 0; float maxAmplitude = 0; for (int i = 0; i < spectrum.Length; i++) { float amplitude = spectrum[i]; if (amplitude > maxAmplitude) { maxFrequency = (float)i / (float)spectrum.Length * recorder.WaveFormat.SampleRate; maxAmplitude = amplitude; } } //输出音频的频率 Console.WriteLine("Frequency: " + maxFrequency); } ``` 以上代码示例中,我们对音频数据进行了归一化处理、移动平均滤波、去除直流分量、低通滤波预处理滤波操作,以提高频率计算的准确性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值