上位机图像处理和嵌入式模块部署(树莓派4b使用pcl点云库)

发布于:2024-04-23 ⋅ 阅读:(38) ⋅ 点赞:(0)

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

        图像处理,大家都知道它有显著的优点和缺点。优点就是分辨率高,信息丰富。缺点就是,整个图像本身没有深度信息。过去在深度信息这部分,大家一般都倚重于激光雷达,但是激光雷达价格比较高,所以一般用的比较少。但是,现在随着3d camera、多线激光雷达的普及,特别是价格的大幅度下降,这样的话,我们不仅可以使用图像来作为数据输入的来源,还可以使用多线雷达的点云,这一点相比较以前就很方便了。

1、pcl点云库的安装

        在树莓派4b上面安装点云库,还是很方便的,直接用sudo安装即可,

sudo apt-get install libpcl-dev

2、准备CMakeLists.txt

        为了验证pcl点云库是不是真的安装好了,我们有必要编写一个程序验证一下。在这之前,先准备一个cmake的编译脚本CMakeLists.txt,

 cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
 
 project(pcd_write)
 
 find_package(PCL 1.2 REQUIRED)
 
 include_directories(${PCL_INCLUDE_DIRS})
 link_directories(${PCL_LIBRARY_DIRS})
 add_definitions(${PCL_DEFINITIONS})
 
add_executable (pcd_write pcd_write.cpp)
target_link_libraries (pcd_write ${PCL_LIBRARIES})

3、准备pcd_write.cpp

        准备好了编译脚本之后,接下来就是源代码文件,这部分可以复用我们之前写过的一个代码,命名为pcd_write.cpp。

 #include <iostream>
 #include <pcl/io/pcd_io.h>
 #include <pcl/point_types.h>
 
 int
   main ()
 {
   pcl::PointCloud<pcl::PointXYZ> cloud;
 
  // Fill in the cloud data
  cloud.width    = 5;
  cloud.height   = 1;
  cloud.is_dense = false;
  cloud.resize (cloud.width * cloud.height);
 
  for (auto& point: cloud)
  {
    point.x = 1024 * rand () / (RAND_MAX + 1.0f);
    point.y = 1024 * rand () / (RAND_MAX + 1.0f);
    point.z = 1024 * rand () / (RAND_MAX + 1.0f);
  }
 
  pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);
  std::cerr << "Saved " << cloud.size () << " data points to test_pcd.pcd." << std::endl;
 
  for (const auto& point: cloud)
    std::cerr << "    " << point.x << " " << point.y << " " << point.z << std::endl;
 
  return (0);
}

4、生成makefile并编译

        有了CMakeLists.txt和cpp文件,下面就可以开始编译了。编译的方法有两步,即cmake . && make。如果在这过程中没有出现错误的话,就代表我们的编译时ok的。

5、执行

        编译好了,只是第一步,第二步还需要跑起来看一下。如果跑起来也没问题,才能说明pcl安装是正确的。

feixiaoxing@raspberrypi:~/Desktop/pcl $ ./pcd_write
Saved 5 data points to test_pcd.pcd.
    0.352222 -0.151883 -0.106395
    -0.397406 -0.473106 0.292602
    -0.731898 0.667105 0.441304
    -0.734766 0.854581 -0.0361733
    -0.4607 -0.277468 -0.916762

        有兴趣的同学可以通过ldd看看pcd_write依赖于哪些动态库,这也是蛮有意思的,

feixiaoxing@raspberrypi:~/Desktop/pcl $ ldd pcd_write
        linux-vdso.so.1 (0x0000007f8ea8f000)
        libpcl_io.so.1.13 => /lib/aarch64-linux-gnu/libpcl_io.so.1.13 (0x0000007f8e760000)
        libpcl_common.so.1.13 => /lib/aarch64-linux-gnu/libpcl_common.so.1.13 (0x0000007f8e690000)
        libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f8e470000)
        libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f8e430000)
        libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f8e280000)
        libboost_filesystem.so.1.74.0 => /lib/aarch64-linux-gnu/libboost_filesystem.so.1.74.0 (0x0000007f8e240000)
        libboost_iostreams.so.1.74.0 => /lib/aarch64-linux-gnu/libboost_iostreams.so.1.74.0 (0x0000007f8e200000)
        libpcl_io_ply.so.1.13 => /lib/aarch64-linux-gnu/libpcl_io_ply.so.1.13 (0x0000007f8e190000)
        libvtkIOGeometry-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkIOGeometry-9.1.so.1 (0x0000007f8e010000)
        libvtkIOPLY-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkIOPLY-9.1.so.1 (0x0000007f8dfd0000)
        libpng16.so.16 => /lib/aarch64-linux-gnu/libpng16.so.16 (0x0000007f8df70000)
        libusb-1.0.so.0 => /lib/aarch64-linux-gnu/libusb-1.0.so.0 (0x0000007f8df40000)
        libOpenNI2.so.0 => /lib/aarch64-linux-gnu/libOpenNI2.so.0 (0x0000007f8dec0000)
        libOpenNI.so.0 => /lib/libOpenNI.so.0 (0x0000007f8de20000)
        libpcap.so.0.8 => /lib/aarch64-linux-gnu/libpcap.so.0.8 (0x0000007f8ddb0000)
        libgomp.so.1 => /lib/aarch64-linux-gnu/libgomp.so.1 (0x0000007f8dd40000)
        libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f8dca0000)
        libvtkIOImage-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkIOImage-9.1.so.1 (0x0000007f8db30000)
        libvtkIOLegacy-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkIOLegacy-9.1.so.1 (0x0000007f8da80000)
        libvtkImagingCore-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkImagingCore-9.1.so.1 (0x0000007f8d8c0000)
        libvtkIOCore-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkIOCore-9.1.so.1 (0x0000007f8d840000)
        libvtkCommonExecutionModel-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonExecutionModel-9.1.so.1 (0x0000007f8d700000)
        libvtkCommonDataModel-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonDataModel-9.1.so.1 (0x0000007f8d290000)
        libvtkCommonCore-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonCore-9.1.so.1 (0x0000007f8c940000)
        /lib/ld-linux-aarch64.so.1 (0x0000007f8ea52000)
        libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000007f8c900000)
        libbz2.so.1.0 => /lib/aarch64-linux-gnu/libbz2.so.1.0 (0x0000007f8c8d0000)
        liblzma.so.5 => /lib/aarch64-linux-gnu/liblzma.so.5 (0x0000007f8c880000)
        libzstd.so.1 => /lib/aarch64-linux-gnu/libzstd.so.1 (0x0000007f8c7c0000)
        libvtkFiltersHybrid-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkFiltersHybrid-9.1.so.1 (0x0000007f8c6e0000)
        libvtkRenderingCore-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkRenderingCore-9.1.so.1 (0x0000007f8c4e0000)
        libjsoncpp.so.25 => /lib/aarch64-linux-gnu/libjsoncpp.so.25 (0x0000007f8c490000)
        libvtkFiltersGeneral-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkFiltersGeneral-9.1.so.1 (0x0000007f8c090000)
        libvtkFiltersCore-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkFiltersCore-9.1.so.1 (0x0000007f8b990000)
        libvtkCommonSystem-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonSystem-9.1.so.1 (0x0000007f8b930000)
        libvtkCommonTransforms-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonTransforms-9.1.so.1 (0x0000007f8b8d0000)
        libvtkCommonMath-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonMath-9.1.so.1 (0x0000007f8b890000)
        libvtksys-9.1.so.1 => /lib/aarch64-linux-gnu/libvtksys-9.1.so.1 (0x0000007f8b820000)
        libvtkCommonMisc-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonMisc-9.1.so.1 (0x0000007f8b440000)
        libudev.so.1 => /lib/aarch64-linux-gnu/libudev.so.1 (0x0000007f8b3f0000)
        libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007f8b3c0000)
        libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f8b340000)
        libtinyxml.so.2.6.2 => /lib/aarch64-linux-gnu/libtinyxml.so.2.6.2 (0x0000007f8b300000)
        libdbus-1.so.3 => /lib/aarch64-linux-gnu/libdbus-1.so.3 (0x0000007f8b280000)
        libvtkDICOMParser-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkDICOMParser-9.1.so.1 (0x0000007f8b240000)
        libvtkmetaio-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkmetaio-9.1.so.1 (0x0000007f8b190000)
        libvtkpugixml-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkpugixml-9.1.so.1 (0x0000007f8b130000)
        libtiff.so.6 => /lib/aarch64-linux-gnu/libtiff.so.6 (0x0000007f8b090000)
        libtbb.so.12 => /lib/aarch64-linux-gnu/libtbb.so.12 (0x0000007f8b030000)
        libdouble-conversion.so.3 => /lib/aarch64-linux-gnu/libdouble-conversion.so.3 (0x0000007f8aff0000)
        liblz4.so.1 => /lib/aarch64-linux-gnu/liblz4.so.1 (0x0000007f8afa0000)
        libvtkloguru-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkloguru-9.1.so.1 (0x0000007f8af50000)
        libvtkImagingSources-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkImagingSources-9.1.so.1 (0x0000007f8af00000)
        libvtkFiltersGeometry-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkFiltersGeometry-9.1.so.1 (0x0000007f8ae20000)
        libvtkCommonColor-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonColor-9.1.so.1 (0x0000007f8ade0000)
        libvtkFiltersSources-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkFiltersSources-9.1.so.1 (0x0000007f8ad20000)
        libvtkCommonComputationalGeometry-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkCommonComputationalGeometry-9.1.so.1 (0x0000007f8acd0000)
        libvtkfmt-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkfmt-9.1.so.1 (0x0000007f8ac90000)
        libvtkkissfft-9.1.so.1 => /lib/aarch64-linux-gnu/libvtkkissfft-9.1.so.1 (0x0000007f8ac60000)
        libsystemd.so.0 => /lib/aarch64-linux-gnu/libsystemd.so.0 (0x0000007f8ab70000)
        libwebp.so.7 => /lib/aarch64-linux-gnu/libwebp.so.7 (0x0000007f8aaf0000)
        libLerc.so.4 => /lib/aarch64-linux-gnu/libLerc.so.4 (0x0000007f8aa40000)
        libjbig.so.0 => /lib/aarch64-linux-gnu/libjbig.so.0 (0x0000007f8aa10000)
        libdeflate.so.0 => /lib/aarch64-linux-gnu/libdeflate.so.0 (0x0000007f8a9d0000)
        libcap.so.2 => /lib/aarch64-linux-gnu/libcap.so.2 (0x0000007f8a9a0000)
        libgcrypt.so.20 => /lib/aarch64-linux-gnu/libgcrypt.so.20 (0x0000007f8a890000)
        libgpg-error.so.0 => /lib/aarch64-linux-gnu/libgpg-error.so.0 (0x0000007f8a840000)


网站公告

今日签到

点亮在社区的每一天
去签到