作者 | 菜鸡学slam 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/671208950
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【模型部署】技术交流群
本文只做学术分享,如有侵权,联系删文
BEVDet-TensorRT-ROS工程实现
本工程所有代码都是参考大佬们的开源项目,如发现代码有雷同,都是本人引用大佬们
感谢大佬们的开源工作
1 环境配置
基本环境依赖
ubuntu-20.04, cuda-11.3, cudnn-8.6, TensorRT-8.5
yaml-cpp、Eigen3、libjpeg
拉取源码
mkdir -p bev_ws/src
cd bev_ws/src
git clone https://github.com/linClubs/BEVDet-ROS-TensorRT.git
onnx2engine
The onnx folder can be downloaded from Baidu Netdisk
# 1 创建一个python环境,并安装相关python库
pip install onnx ruamel.yaml==0.17.32
# 2 进入工程目录
cd BEVDet-ROS-TensorRT
# 3 onnx2engine 运行时报错差什么库就安装该库即可
python tools/export_engine.py ./ckpts/lt_d.yaml ./ckpts/img_stage_lt_d.onnx ./ckpts/bev_stage_lt_d.onnx --postfix=_lt_d --fp16 true
2 ros编译运行
# 1. 编译
cd bev_ws
catkin make
# 2 工作空间生效
source devel/setup.bash
# 3 运行
roslaunch bevdet bevdet_node.launch
# 4 播放数据集
rosbag play nus.bag
测试数据建议直接下载Baidu Netdiskrosbag包, 经本人生成的包,稳的1p。
![65c30a5b31fc536bae096e594f29557d.png](https://i-blog.csdnimg.cn/blog_migrate/cbdf411d70a0c5f4a8c5b4776752f134.png)
3 传感器实时数据
一定要标定(相机内参, 雷达到相机的外参), 不然置信度极低
一定要训练模型 自己场景数据需要重新训练模型
传感器数据直接通过ros发布, 就能实时接本工程并上车
4 待提升
图像传输可以压缩
因为读了6张图,可以多线程读取
图像预处理可以用cuda加速,比如去畸, 仿射变换等操作
可以删掉可视化, 去掉雷达数据
后处理采用cuda加速
...待续
...待续 ...
5 普通编译
# 1 创建build目录并进入该目录
mkdir build && cd build
# 2 编译 # 第1次make报错如下,就再次make就能通过编译
cmake .. && make
Error copying file (if different) from "/home/lin/code/bevdet-tensorrt-cpp/build/CMakeFiles/bevdemo.dir/src/bevdemo_generated_postprocess.cu.o.depend.tmp" to "/home/lin/code/bevdet-tensorrt-cpp/build/CMakeFiles/bevdemo.dir/src/bevdemo_generated_postprocess.cu.o.depend".
CMake Error at bevdemo_generated_postprocess.cu.o.RELEASE.cmake:246 (message):
Error generating
/home/lin/code/bevdet-tensorrt-cpp/build/CMakeFiles/bevdemo.dir/src/./bevdemo_generated_postprocess.cu.o
# 错误2:
AttributeError:
"load()" has been removed, use
yaml = YAML(typ='rt')
yaml.load(...)
改正:
pip install ruamel.yaml==0.17.32
# 错误3
报libffi.so.7的错,禁用掉conda
# 1 运行 生成sample0/sample0_lidarbox.txt检测结果
cd build
./bevdemo ../configure.yaml
# 我的运行
./01test ../configure.yaml
# 可视化
cd ../tools
python viewer.py --config ../configure.yaml
本工程是基于bevdet-tensorrt-cpp魔改
为了快速实现ros版本,只修改了/test/demo_bevdet.cpp中的TestSample函数
仅将TestSample改成ros回调函数,导致代码很乱,可读性比较差, 比如读取参数实现方式不统一, 类只封装了推理函数等问题
有时间再整理更新代码风格, 代码和人一个能跑就行^_^。
再次声明,本工程所有代码都是参考大佬们的开源项目,如发现代码有雷同,都是本人引用大佬们的。
感谢大佬们的开源工作。
① 全网独家视频课程
BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习)
![f70fe0ba5946c04f3e6eec5abca858de.png](https://i-blog.csdnimg.cn/blog_migrate/8e944e21c7f12ae84b7d8c674c421f94.png)
② 国内首个自动驾驶学习社区
近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
![58e11e960beb19935ec9e55c53fdc608.png](https://i-blog.csdnimg.cn/blog_migrate/fde53c3d123782dbe7efabbfe6db135e.png)
③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)
④【自动驾驶之心】平台矩阵,欢迎联系我们!