velodyne的数据结构以及如何自定义一个点云库

2024-01-07 00:50

本文主要是介绍velodyne的数据结构以及如何自定义一个点云库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

velodyne的数据结构以及如何自定义一个点云库

velodyne数据结构

对于数据结构/velodyne_points,有三个返回值:

  1. point: 坐标(x,y,z)
  2. intensity: 反射值强度(0~255)
  3. ring: 第几线激光束(0~15)

· point就是雷达返回的点的坐标;
· 激光雷达除了返回距离之外,还返回反射值强度(Intensity),不同的障碍物材质反射的激光束的强度(Intensity)不同。Velodyne 测量 1m - 100m 物体的反射率(距离小于一米的点应该被忽略),其反射率的标定文件存储在VLP-16内置的FPGA中。当反射为漫反射(Diffuse Reflector)时,反射率的数值为0~100;当反射为逆反射(Retro-Reflector)时,数值为101~255。在Velodyne的配置页面中可以选择反射模型: Strongest, Last 或 Dual。在这里插入图片描述

自定义一个点云库

先看一下代码 :

namespace plane_ground_filter
struct PointXYZIRL
{PCL_ADD_POINT4D;           //这将添加成员x,y,z,他们可以用point访问float intensity;           //反射值强度uint16_t ring;             //激光的环数(说明是第几根线)uint16_t label;            EIGEN_MAKE_ALIGNED_OPERATOR_NEW  //确保new操作符对齐操作
} EIGEN_ALIGN16;                 //强制SSE对齐

EIGEN_MAKE_ALIGNED_OPERATOR_NEW 是Eigen库的一个涉及字节对齐的问题,这个是对于固定维数的矩阵(雷达数据)会出现的错误,动态维数的矩阵不存在这样的问题。

下面是关于将PCL类型的点云数据转换为我们自定义的数据类型的代码:

SLRPointXYZIRL point;   //Plane_ground_filter::PointXYZIRL point
for (size_t i = 0; i < laserCloudIn.points.size(); i++)
{point.x = laserCloudIn.points[i].x;point.y = laserCloudIn.points[i].y;point.z = laserCloudIn.points[i].z;point.intensity = laserCloudIn.points[i].intensity;  point.ring = laserCloudIn.points[i].ring;  point.label = 0u; // 0 means unclusterg_all_pc->points.push_back(point);
}

这篇关于velodyne的数据结构以及如何自定义一个点云库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578192

相关文章

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d