Ubuntu18.04系统。
博客记录的相关项目:livox_detection_simu项目和livox_detection_v1.1项目。这两个项目的文件内容除了与训练模型不同,其他基本相同。所以本记录对以上2个项目均适用。
Rviz中只有点云没有检测框?或许是因为你在Pycharm中运行的py脚本!
复现关键点:
1、pybind11不要用最新版,手动指定版本。
2、不用在pycharm中运行目标检测脚本,否则rviz只能看到点云,没有检测结果。
3、如果需要tensorflow-GPU计算,则需要安装CUDA10.0。
一、下载/克隆项目源码
1、livox_detection_simu项目链接
2、livox_detection项目链接(本文指的是分支中的v1.1版本)
二、配置虚拟环境
1、README给的依赖环境:
python3.6+
tensorflow1.13+
(tested on 1.13.0) # 先不着急安装,且看下面第2点。pybind11
ros
运行过程中netifaces相关报错,可以在安装一个netifaces包 ,命令如下:
pip install netifaces
2、tensorflow安装什么版本?
2.1 选择CPU/GPU版?
首先,众所周知tensorflow1.x的版本,CPU版和GPU版是分开的,其中GPU版本包含CPU的所有内容。所以如果想要在GPU上运行,可以直接选择GPU版本,运行过程中检测到用不了GPU设备会自动放到CPU上运行的。安装tensorflow-gpu1.15版本命令示例(如果选GPU版,先别着急安装,且看下面2.2):
pip install tensorflow-gpu==1.15
问题1:为什么安装了gpu版,还是在cpu上运行?
其次,如果同时安装了tensorflow和tensorflow-gpu,按照后安装那个来执行。也就是如果后安装tensorflow,就只能在CPU上运行。
2.2 安装GPU版本最好和CUDA版本兼容!
没有选择GPU版本的可以跳过这一步,看2.3。
问题2:为什么我复现出来,但是检测速度很慢,两三百毫秒?
为了使项目运行在GPU上,tensorflow版本需要和CUDA版本对应。项目要求1.13+,所以确保自己CUDA是10.0。
在终端使用nvcc -V命令,查看本机安装的是CUDA11.4。所以采用1.13和1.15只能在CPU上运行。
2.3 选择tensorflow
1.X?
根据测试tensorflow1.13和1.15版本都可以成功允许脚本。由于是在CPU上运行,检测速度达不到项目说明中写的“25ms"。
如下图所示,左边使用tensorflow1.13,检测速度在310+ms;右边是tensorflow1.15,检测速度在240+ms。所以CPU运行的话,选1.15似乎更好。
安装tensorflow 1.15命令示例:
pip install tensorflow==1.15
3、ROS 安装和导入
3.1 ROS安装教程:自行搜索如“Ubuntu18.04 安装ROS教程”。
3.2 问:本机安装ROS后Pycharm中的虚拟环境如何导入rospy等相关的包?
答:解释器设置-Python解释器右边的下拉小箭头-全部显示-选择自己的环境-上面第五个的图标(显示解释器路径)-添加类似如下的ROS路径。
三、根据README安装——Installation
1、手动确定pybind11 版本
官方使用git克隆pybind11库,但是由于项目更新,新版的可能会出现问题。我这里使用了pybind11 2.6.1 版本能够正常运行。在下载链接里找到对应版本,下载zip压缩包后解压到utils/lib_cpp文件夹,并重命名为pybind11。
pybind11 2.6.1 版本下载链接https://github.com/pybind/pybind11/releases?page=3


2、按照README在utils/lib_cpp路径下编译。并将so文件复制到项目根目录。
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
成功编译输出:
3、 下载预训练模型。
两个项目的预训练模型不同,所以在对应的README链接中下载。解压到项目根目录/model路径下。文件夹名字不要写错。
四、README——Run
1、下载demo点云包
下载官方准备的点云包并放到项目根目录,分别是demo1.bag和demo2.bag。
2、执行检测程序
$ roscore
$ rviz -d ./config/show.rviz
$ python livox_detection_simu.py
$ rosbag play *.bag -r 0.1
终端启动ROS,rviz,回放demo包,执行检测程序。分别在四个终端执行以上四句命令。
其中第四句在需要回放的bag的目录,按照上面就是在项目根目录。
第三句,也是一样的道理,在终端中进入对应路径运行脚本。
3、Rviz怎么显示结果?
在Rviz中将最上面<Fixed Frame>中内容改称/livox_frame(手动输入,不可以下拉)。
点击左下角ADD添加话题,添加点云/livox/lidar、目标检测框/detect_box3d、文本/text_det。
正确运行的结果如下:
习惯用Pycharm的同学注意!不要在Pycharm中右键运行,或者点击右上角运行图标,否则在rviz中看不到3D检测框(/detect_box3d 话题没有信息输出)。必须要在终端中运行脚本。
我也不知道为什么,有知道的可以说说。因为我一直在pycharm中而非终端里运行,导致我在这个项目上浪费的很多时间。换了个种方法,查看代码,更换环境。
未解决的问题:一段时间后,3D检测框明显跟不上目标移动速度。猜测是未使用GPU计算,计算速度过慢导致的。