基本架构继承于Autodrive_Toolchain。但是在开发过程中,我们发现了原本架构耦合性太高,重复性过高的问题。我们希望我的架构能够很简单的把某一部分单独拿出来使用,更加符合我们工具箱的本意。
并且,这部分代码不应该重复造轮子,更不应该为了特殊功能进行复杂的堆叠。比如,我们不必重新写一个PCL库,而是应该做一个PCL库的补充和扩展,聚焦于地面分割等PCL没有或者实现不好的功能。
基于上述原因,这个版本的工具箱应运而生。目前该工具箱仍然正在开发中,还有一些已经写好的库需要进行合并。由于工作原因,所以可能会更新较慢,请谅解。
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
TODO
- common:通用处理模块,依赖最少的库,目前库中包括:日志系统、时间系统、文件系统;
- config:放置配置相关文件和参数表,其中config.h配合第三方库easy_config做c++反射使用;
- example:一些常用的案例库;
- gtest:作为gtest单元测试使用,合并分支前需要通过所有的单元测试;
- math_utils:常见的数学计算库,包括多项式拟合、卡尔曼滤波器等,作为eigen的补充和封装使用;
- modules:算法的核心代码;
- scripts:提供常用的脚本工具;
- output:放置数据运行结果数据;
- third_party:存放第三方库,目前支持backward-cpp(内存追踪库)、easy_config(c++参数反射库)等;
Tips:请善用全局搜索相关函数。该章节介绍是以功能为导向而非函数为导向的,因此详细使用可以参考example模块;
- 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格式数据集深度和彩色图像关联
;
- 根据文本绘制目标检测框:
- 其他:TODO
非常欢迎各位一起完善该项目!
以下是项目原则:
- 如非必要,请不要增加太多依赖库,保证现有的库与待添加的库功能不冲突。如有了ceres就不需要增加g2o。如果库比较小众,请以第三方库的形式添加;
- 代码贡献者根据个人需要提交分支,完成所有需求后需要添加单元测试。保证所有单元测试通过后,才进行分支合并,并删除无用的已有分支。
- 请保证代码风格一致性,代码标准以c++17标准为基准,目前不支持更高版本的标准以保证代码的兼容性;
- 保证每次提交时有明确的使用说明,小功能可以
commit
形式(如修复一些bugs),较大功能的开发需要新增readme文档。 - 注意代码合法性要求:在借鉴代码中表明代码来源,如使用Apollo代码需要在相关头文件中指出。不使用严禁开源的代码。
以下是开发计划:
- 内存对齐检查,使其兼容c17以下内存对齐方案;
- 在math_utils增加qr、lqr、svd分解,随机数生成器;
- 在modules中增加特征提取(点、直线、面);
- 在modules中增加点云处理相关操作,如:去畸变、聚类、滤波等;
- 在example中增加简单优化库的使用,如用最小二乘写一个由3D点拟合平面参数的函数;
- 在example中对空间栅格进行hash及存储空间栅格的hash容器(简易voxel);