3d激光雷达开发(生成RangeImage)

Posted 费晓行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3d激光雷达开发(生成RangeImage)相关的知识,希望对你有一定的参考价值。

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        RangeImage,这个英文单词不太好翻译,姑且称之为深度图。因为点云数据中,每一个点其实都是有深度信息的。想象一下,如果把点云数据转换成一幅图片的话,那么图片中每个像素的数值就是这个深度信息。那RangeImage就是根据这个生成的。不仅于此,用户可以自己调节距离、视场角,生成不同的深度图。文中代码的出处在这里,https://pcl.readthedocs.io/projects/tutorials/en/latest/range_image_creation.html#range-image-creation。

1、准备range_image_creation.cpp文件

#include <pcl/range_image/range_image.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/range_image_visualizer.h>


int main () 
  pcl::PointCloud<pcl::PointXYZ> pointCloud;
  
  // Generate the data
  for (float y=-0.5f; y<=0.5f; y+=0.01f) 
    for (float z=-0.5f; z<=0.5f; z+=0.01f) 
      pcl::PointXYZ point;
      point.x = 2.0f - y;
      point.y = y;
      point.z = z;
      pointCloud.push_back(point);
    
  
  pointCloud.width = pointCloud.size();
  pointCloud.height = 1;
  
  // We now want to create a range image from the above point cloud, with a 1deg angular resolution
  float angularResolution = (float) (  1.0f * (M_PI/180.0f));  //   1.0 degree in radians
  float maxAngleWidth     = (float) (360.0f * (M_PI/180.0f));  // 360.0 degree in radians
  float maxAngleHeight    = (float) (180.0f * (M_PI/180.0f));  // 180.0 degree in radians
  Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
  pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
  float noiseLevel=0.00;
  float minRange = 0.0f;
  int borderSize = 1;
  
  pcl::RangeImage rangeImage;
  rangeImage.createFromPointCloud(pointCloud, angularResolution, maxAngleWidth, maxAngleHeight,
                                  sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
  
  std::cout << rangeImage << "\\n";

  //pcl::RangeImage rangeImage;
  pcl::visualization::RangeImageVisualizer range_image_widget("Range image");
  range_image_widget.showRangeImage(rangeImage);

  while (!range_image_widget.wasStopped())
  
	  range_image_widget.spinOnce();

  

2、创建CMakeLists.txt

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

project(range_image_creation)

find_package(PCL 1.2 REQUIRED)

include_directories($PCL_INCLUDE_DIRS)
link_directories($PCL_LIBRARY_DIRS)
add_definitions($PCL_DEFINITIONS)

add_executable (range_image_creation range_image_creation.cpp)
target_link_libraries (range_image_creation $PCL_LIBRARIES)

3、创建sln工程,准备编译

4、执行range_image_creation.exe文件 

        和以前一样,有一串信息打印,

        除此之外,还有一个小型的彩色窗口,

 

        因为像素实在太少,所以只能有这么多的点显示。图形中的内容就是所谓的RangeImage。在这过程中,需要关注的主要是一些配置的参数,要弄清楚这些参数的意义,这是比较重要的。

以上是关于3d激光雷达开发(生成RangeImage)的主要内容,如果未能解决你的问题,请参考以下文章

3d激光雷达开发(入门)

3d激光雷达开发(平面映射)

3d激光雷达开发(法向量预测)

3d激光雷达开发(sift关键点)

3d激光雷达开发(绘制长方体)

3d激光雷达开发(lidar使用)