目前的orb slam加速器架构设计低效,性能较差。一些模块使用很少的资源但是使用了较低的并行度设计成为系统瓶颈,而另一些模块利用率极低。 模块使用了很多的资源但是却时常空闲利用率很低。当前orb slam加速器开源资料少,质量不高。
为了解决以上问题本项目基于FPGA平台,使用很少的资源实现了一个超高性能的orb slam加速器,加速器意在加速orb slam算法中最耗时的特征提取。
本项目使用 SpinalHDL 1.9.3,实现了特征提取和特征匹配中的算子,通过参数配置生成不同的加速器,满足不同的需求。 提供了一个每周期处理8个像素的超高并行度加速器。
提供了设备驱动,设备树文件和demo可在linux环境下直接使用。
本工程实现如下提供一个axi lite接口配置,启动加速器。两个axi接口分别用于传递图片和描述子。
doslam/
: 设备驱动,demoDOSLAM
: bit流和设备树问题存放位置example2
: 提供了一个demo,用于将img中的图像,进行特征提取处理driver_DOSLAMDT
: linux下doslam的设备驱动代码,用于在注册设备文件build.sh
: 加载bits,注册设备树,脚本文件img
: 提供了一个raw格式图片,存放数据文件,结果也会放到这里
src/
: 源代码文件main
: SpinalHDL源代码文件data
: 数据文件scala
: SpinalHDL源代码文件
test
: 仿真测试文件ip
: 用于仿真的ip文件scala
: 仿真代码
verilog/
: 源代码文件tcl
: 工程使用的tcl文件generateIP.tcl
: 用于生成代码中使用的ip核的脚本文件design_1.tcl
: 用于工程使用的bd脚本文件create_project.tcl
: 用于生成工程的脚本文件
配置好spinalHDL环境直接使用即可
运行仿真需要 vivado2021.2 并且配置环境变量 参考如下 SpinalHDL/SpinalHDL#664
本工程使用kr260板卡,vivado 2023.2。 ./verilog/tcl/create_project.tcl tcl脚本用于创建工程,修改如下变量的文件位置和目录。
- project_dir : 存放工程的位置
- src_file : 顶层代码路径
- ip_script :generateIP.tcl 路径
- design_block_script:design_1.tcl 路径
然后source此脚本,自动创建工程。手动生成bit流。
本demo运行4层图像金字塔,进行特征提取。
生成bin文件格式比特流,修改名称为DOSLAM.bit.bin,放置于./doslam/DOSLAM 目录下。 将整个doslam,复制到ubuntu下.
cd doslam
./build.sh
cd example2
make
./main
./doslam/example2/main.c文件中存在两个宏定义 OURPUT_FIRE:将结果输入到文件中 REPORT:打印报告
生成的结果放置于./doslam/img文件夹下
四层图像金字塔,480*640尺寸图像,运算时间如下(不同阈值下,不同的图像提取到的特征点不同,因此时间不同)
- 加入实现特征匹配
- 从软件层面优化orb slam算法,达到实时运行