PCL(1)搭建与工业测量应用 总结

PCL搭建与工业测量应用
PCL(Point Cloud Learning)
0 摘要
windows和ROS下安装配置PCL开发环境、利用CMake等编程模式建立实例应用程序。掌握PCL开发环境搭建流程、注意事项和关键配置选项,开发自己的PCL应用程序。Linux系统和ROS平台需要掌握的基础知识包括:CMake、Git、Make和C++编译链接等工具。

1安装
VS2017版本
1.1准备工作
(1)PCL为Windows用户提供预编译的安装文件,只限于用户的Visual Studio编译器,长期使用PCL作为开发平台,可从源码安装。建议使用安装包安装,步骤简单。若Linux用户,采用Linux下配置安装PCL;若为ROS用户,则采用ROS下配置安装PCL开发环境。
**安装步骤:**请结合《点云库PCL从入门到精通》和CSDN。
准备工作:
(1)获取All in one 安装包,PCL提供了配置为Visual Studio 的32位和64位下的该安装包,该包包含了PCL中所使用全部第三方编译包,除了Qt编译包。
(2)获取All in one包对应的PDB文件包,该包用于后期单步调试时使用。
(3)获取PCL源码包。
(4)安装开发工具Visual Studio 编译器和CMake开发工具,需要CMake版本大于2.8.3,主要考虑到PCL中用到了高版本的一些宏定义,低版本不兼容。

2编程
2.1 PCL编程规范
架构师为了确保在PCL中所有代码风格的一致性,使得其他开发者及用户容易理解源代码,PCL开发者制定并遵循着一套严格的编写规范,PCL的开发者都默认遵循,除非有充足的理由才可以不遵循这些规范。当然这些规范也并不是一成不变的,但提出和更改规则的人需要考虑兼容性,那就是让新加的规则与现有的所有代码相适应。
2.1.1PCL推荐的命名规范
文件命名
所有的文件名单词之间应该用下划线隔开,例如unordered_map.hpp。
头文件的扩展名为.h
模板类实现文件的扩展名是.hpp
源文件的扩展名是.cpp
目录命名
所有的目录及其子目录命名时,如果由多个单词组成,其之间用下划线隔开,PCL中各个目录遵循以下规则。
头文件都应放在源码目录树中的include/下。
模板类实现文件都应放在目录树中的include/impl/下。
源文件都应放在目录树中的src/下。
include 语句
当文件在同一目录下时include指示语句用双引号,在其他情况下则用尖括号,例如:
#include
#include
#include"file_name.cpp"//在同一目录下

宏定义命名
宏定义中字母都采用大写格式,为头文件所定义的宏最后面还需要加上下划线,并且名称从include下目录开始,例如pcl/filters/bilateral.h对应:PCL_FILTERS_BILATERAL_H_。#ifndef和#define定义放在BSD协议后面,代码前面。#endif定义一直在文件结尾,并且加上一句注释掉的宏对应头文件的宏定义,例如:

//the BSD license
#ifndef PCL_MODULE_NAME_IMPL_FILE_NAME_HPP_//为避免重复包含头文件而定义的宏
#define PCL_MODULE_NAME_IMPL_FILE_NAME_HPP_
//the code
#endif//PCL_MODULE_NAME_IMPL_FILE_NAME_HPP_

命名空间的命名
命名空间多于一个单词的,单词之间应该用下划线连接,例如:

namespace pcl_io
{
   
...
}

类/结构命名
类名(和其他自定义类型的名称)应该是CamelCased**(驼峰命名)**命名规范,也就是连写单词组成命名,每个单词首字母大写。但是有例外:如果类名包含一个缩写,这个缩写应该全部大写,类名和结构名最好是名词组成的名字。例如:PFHEstimation代替了EstimatePFH,下面是正确的命名代码的例子。

class ExampleClass;
class PFHEstimation;

函数/成员函数命名
函数和类的成员函数的命名应该采用CamelCased,也就是连写单词组成命名,除了首个单词首字母小写,其他单词首字母大写,它们的参数命名单词之间用下划线隔开,函数和类的成员函数命名最好采用动词,应该确保这些名字能清楚地表达函数和类成员函数的功能,例如:checkForErrors()而不是errorCheck(),dumpDataToFile()而不是dataFiledump()。下面是正确的用法。

int
applyExample(int example_arg);

变量命名
命名变量时,单词之间应该用下划线隔开,例如:

int my_variable;

a.迭代子变量命名
迭代子变量应该反映出它们迭代的对象,例如:

std::list<int> pid_list;
std::list<int>::iterator pid_it;//指示迭代的对象为点的索引

你可能感兴趣的:(自动驾驶,c++,人工智能)