TOOLBOX

0 Introduction

基本架构继承于Autodrive_Toolchain。但是在开发过程中,我们发现了原本架构耦合性太高,重复性过高的问题。我们希望我的架构能够很简单的把某一部分单独拿出来使用,更加符合我们工具箱的本意。

并且,这部分代码不应该重复造轮子,更不应该为了特殊功能进行复杂的堆叠。比如,我们不必重新写一个PCL库,而是应该做一个PCL库的补充和扩展,聚焦于地面分割等PCL没有或者实现不好的功能。

基于上述原因,这个版本的工具箱应运而生。目前该工具箱仍然正在开发中,还有一些已经写好的库需要进行合并。由于工作原因,所以可能会更新较慢,请谅解。

1 Dependency

gcc >= 5, recommend gcc >= 9.4
cmake >= 3.15.0
Eigen >= 3.2.7
boost >= 1.58.0
OpenCV 3.x.x
yaml-cpp 0.7.0
proj4
glog

2 How to Use

TODO

3 System Structure

  • common:通用处理模块,依赖最少的库,目前库中包括:日志系统、时间系统、文件系统;
  • config:放置配置相关文件和参数表,其中config.h配合第三方库easy_config做c++反射使用;
  • example:一些常用的案例库;
  • gtest:作为gtest单元测试使用,合并分支前需要通过所有的单元测试;
  • math_utils:常见的数学计算库,包括多项式拟合、卡尔曼滤波器等,作为eigen的补充和封装使用;
  • modules:算法的核心代码;
  • scripts:提供常用的脚本工具;
  • output:放置数据运行结果数据;
  • third_party:存放第三方库,目前支持backward-cpp(内存追踪库)、easy_config(c++参数反射库)等;

4 API

Tips:请善用全局搜索相关函数。该章节介绍是以功能为导向而非函数为导向的,因此详细使用可以参考example模块;

  1. python脚本:
    • 根据文本绘制目标检测框scripts/tools/深度学习相关/根据文本绘制目标检测框/plot.py
    • 将图像和标签按照相同顺序打乱scripts/tools/深度学习相关/将图像和标签按照相同顺序打乱/shuffle.py
    • 遍历文件KITTI格式转换单文件TUM格式scripts/tools/数据处理相关/遍历文件KITTI格式转换单文件TUM格式/convert.py
    • 标签和图像对齐生成txt文件scripts/tools/数据处理相关/标签和图像对齐生成txt文件/alignment.py
    • 读取TXT文件并绘图scripts/tools/数据处理相关/读取TXT文件并绘图/plot.py
    • 将图片序列生成视频scripts/tools/数据处理相关/将图片序列生成视频/convert.py
    • TUM格式数据集深度和彩色图像关联:scripts/tools/数据处理相关/TUM格式数据集深度和彩色图像关联
  2. 其他:TODO

5 Todo List

非常欢迎各位一起完善该项目!

以下是项目原则

  1. 如非必要,请不要增加太多依赖库,保证现有的库与待添加的库功能不冲突。如有了ceres就不需要增加g2o。如果库比较小众,请以第三方库的形式添加;
  2. 代码贡献者根据个人需要提交分支,完成所有需求后需要添加单元测试。保证所有单元测试通过后,才进行分支合并,并删除无用的已有分支
  3. 请保证代码风格一致性,代码标准以c++17标准为基准,目前不支持更高版本的标准以保证代码的兼容性;
  4. 保证每次提交时有明确的使用说明,小功能可以commit形式(如修复一些bugs),较大功能的开发需要新增readme文档。
  5. 注意代码合法性要求:在借鉴代码中表明代码来源,如使用Apollo代码需要在相关头文件中指出。不使用严禁开源的代码。

以下是开发计划

  • 内存对齐检查,使其兼容c17以下内存对齐方案;
  • 在math_utils增加qr、lqr、svd分解,随机数生成器;
  • 在modules中增加特征提取(点、直线、面);
  • 在modules中增加点云处理相关操作,如:去畸变、聚类、滤波等;
  • 在example中增加简单优化库的使用,如用最小二乘写一个由3D点拟合平面参数的函数;
  • 在example中对空间栅格进行hash及存储空间栅格的hash容器(简易voxel);