PCL Notes 1
来源:互联网 发布:和前任做朋友 知乎 编辑:程序博客网 时间:2024/06/06 03:58
Just start to learn PCL in C++. Previously I was justing using the PCL python bindings to do a little bit of calculations. However, encountered with the ray tracing problem, I did’t think Python PCL has it implemented.
Basic Structures
A point cloud is a C++ class which contains the following data fields:
- width
- height(set to 1 for unorganized datasets)
However, there is a helper function: isOrganized to check whether the point cloud is organized rather than checking heigh equals to 1 or not. - points(std::vector < PointT >)
- is_dense: specifies if all the data in points is finite(true) or whether the XYZ values of certain points might contain Inf/NaN values(false)
- sensor_origin: specifies the sensor acquisition pose(origin/translation). This member is usually optional.
- sensor_orientation:specifies the sensor acquisition pose(orientation). This member is usually optional.
Compiling the codes:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)project(MY_GRAND_PROJECT)find_package(PCL 1.3 REQUIRED COMPONENTS common io)include_directories(${PCL_INCLUDE_DIRS})link_directories(${PCL_LIBRARY_DIRS})add_definitions(${PCL_DEFINITIONS})add_executable(pcd_write_test pcd_write.cpp)target_link_libraries(pcd_write_test ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})
cmake_minimum_required
is mandatory for cmake project(MY_GRAND_PROJECT)
names your project and sets some useful make variables such as those to refer to the source directory(MY_GRAND_PROJECT_SOURCE_DIR) and the directory from which you are invoking cmake (MY_GRAND_PROJECT_BINARY_DIR).
`find_package(PCL 1.3 REQUIRED COMPONENTS common io): We are requesting to find the PCL package at minimum vision 1.3. We also say that it is REQUIRED meaning that cmake will fail gracefully if it can’t be found. As PCL is modular one can request:
- only one component find_package(PCL 1.3 REQUIRED COMPONENTS io)
- several: find_package(PCL 1.3 REQUIRED COMPONENTS io common)
- all existing: find_package(PCL 1.3 REQUIRED)
include_directories
, link_directories
, add_definitions
: When PCL is found, several related variables are set:
- PCL_FOUND: set to 1 if PCL is found, otherwise unset
- PCL_INCLUDE_DIRS: set to the paths to PCL installed headers and the dependency headers
- PCL_LIBRARIES: set to the file names of the built and installed PCL libraries
- PCL_LIBRARY_DIRS: set to the paths to where PCL libraries and 3rd party dependencies reside
- PCL_VERSION: the version of the found PCL
- PCL_COMPONENTS: lists all available components
- PCL_DEFINITIONS: lists the needed preprocess definition and compiler flags
To let cmake know about external headers you include in your project, one needs to useinclude_directories()
macro. In our case PCL_INCLUDE_DIRS, contains exactly what we need, thus we ask cmake to search the path it contains for a header potentially included.
add_executable
: Here, we tell cmake that we are trying to make an executable file named pcd_write\ _test from one single source file pcd_write.cpp. CMake will take care of the suffix and the permissions. target_link_libraries()
: The executable we are building makes call to PCL functions. So far, we have only included the PCL headers so the compilers knows about the methods we are calling. We need also to make the linker know about the libraries we are linking against. As said before, PCL found libraries referred to using PCL_LIBRARIES variables, all that remains is to trigger the link operation which we do calling target_link_libraries()
macro.
#include <iostream>#include <pcl/io/pcd_io.h> #include <pcl/point_types.h>int main (int argc, char** argv){ pcl::PointCloud<pcl::PointXYZ> cloud; // Fill in the cloud data cloud.width = 5; cloud.height = 1; cloud.is_dense = false; cloud.points.resize (cloud.width * cloud.height); for (size_t i = 0; i < cloud.points.size (); ++i) { cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f); cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f); cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f); } pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud); std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl; for (size_t i = 0; i < cloud.points.size (); ++i) std::cerr << " " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl; return (0);}
We wrote the above codes in pcd_write.cpp
.
- PCL Notes 1
- PCL配置(1)
- PCL学习日记1
- PCL滤波介绍(1)
- PCL深度图像(1)
- PCL点云配准(1)
- 编译PCL 1.7.1成功经验
- 编译PCL 1.7.1成功经验
- PCL点云库学习(1)
- 点云库PCL学习笔记1
- PCL关键点(1)
- MySql study notes [1]
- JVM Notes - 1
- Portlet Study Notes (1)
- TCAP Notes(1)
- C++ notes 1
- Tcl/Tk Notes (1)
- NCE 3-1 Notes
- 黑客们很喜欢骇客交锋,虽然本片不被影评人认可
- 使用GPG对文件进行加密解密批处理
- [复习]jQuery知识点
- Start as a fresh.....
- sizeof()用法汇总
- PCL Notes 1
- Python环境搭建
- 生活中如何说服别人
- python 读写本地数据
- [git] git Process
- [git] Basic Git Command Line Reference for Windows Users
- [Getting and Cleaning data] Project
- shader入门--PixelShader运用实例
- mean value coordinates