darknet_ros配置安装记录

1.下载:

darknet_ros
直接下载zip就行,解压到ros环境下,会有三个文件夹,darknet是yolo作者写的框架,如果里面是空的,点击此处下载,然后进行编译。
darknet_ros配置安装记录_第1张图片

2.安装过程遇到的问题

2.1 库文件找不到。
darknet_ros 在编译过程中会提示找不到有关的头文件。
报错文件为 /home/faris/learn_ros/src/darknet_ros-master/darknet_ros下面的:
img2
提示找不到下列的头文件:

extern "C" {
#include 
#include "box.h"
#include "cost_layer.h"
#include "darknet_ros/image_interface.h"
#include "detection_layer.h"
#include "network.h"
#include "parser.h"
#include "region_layer.h"
#include "utils.h"
}

这些是在darnet库里面,而编译的时候没有声明,自然就找不到。
解决方法1:
直接include绝对路径,对于这种比较大的项目,不太现实,很麻烦,但是以后自己写的小程序可以使用这种方法找到头文件。

#include "/home/faris/learn_ros/src/darknet_ros-master/darknet/src/box.h"

解决方法2:
在给terminal添加环境变量:
gedit ~/.bashrc打开文件,添加下列的命令:路径改成自己darnet的路径就可以了

CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/faris/learn_ros/src/darknet_ros-master/darknet/src
export CPLUS_INCLUDE_PATH 

CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/faris/learn_ros/src/darknet_ros-master/darknet/include
export CPLUS_INCLUDE_PATH 

上面意思是告诉g++编译器,在查找include文件是,将上面两个文件路径也包含进去。
添加编译环境变量参考
2.2cuda编译报错
基本上一上午时间就是在解决这个问题:(,太坑了,写cuda的人脑子有坑。
报错代码:
这个是复制别人的。报错内容是一样的。

/usr/local/cuda-10.0/include/cuda_runtime_api.h:1775:101: error: use of enum ‘cudaDeviceP2PAttr’ without previous declaration
     extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetP2PAttribute(int *value, enum cudaDeviceP2PAttr attr, int srcDevice, int dstDevice);
                                                                                                         ^
    /usr/local/cuda-10.0/include/cuda_runtime_api.h:2232:25: error: expected ‘)’ before ‘*’ token
     typedef void (CUDART_CB *cudaStreamCallback_t)(cudaStream_t stream, cudaError_t status, void *userData);
                             ^
    /usr/local/cuda-10.0/include/cuda_runtime_api.h:2300:9: error: ‘cudaStreamCallback_t’ has not been declared
             cudaStreamCallback_t callback, void *userData, unsigned int flags);
             ^
    /usr/local/cuda-10.0/include/cuda_runtime_api.h:2484:81: error: ‘cudaGraph_t’ has not been declared
     extern __host__ cudaError_t CUDARTAPI cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t *pGraph);
                                                                                     ^
    /usr/local/cuda-10.0/include/cuda_runtime_api.h:2523:87: error: use of enum ‘cudaStreamCaptureStatus’ without previous declaration
     extern __host__ cudaError_t CUDARTAPI cudaStreamIsCapturing(cudaStream_t stream, enum cudaStreamCaptureStatus *pCaptureStatus);
     
    .
    .
    .
    .
    .
    .

    /usr/local/cuda-10.0/include/cuda_runtime_api.h:9135:101: error: expression list treated as compound expression in initializer [-fpermissive]
     extern __host__ cudaError_t CUDARTAPI cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream);
                                                                                                         ^
    /usr/local/cuda-10.0/include/cuda_runtime_api.h:9156:60: error: ‘cudaGraphExec_t’ was not declared in this scope
     extern __host__ cudaError_t CUDARTAPI cudaGraphExecDestroy(cudaGraphExec_t graphExec);
                                                                ^
    /usr/local/cuda-10.0/include/cuda_runtime_api.h:9176:56: error: ‘cudaGraph_t’ was not declared in this scope
     extern __host__ cudaError_t CUDARTAPI cudaGraphDestroy(cudaGraph_t graph);
                                                            ^
    make[2]: *** [CMakeFiles/nvonnxparser_plugin.dir/InstanceNormalization.cpp.o] Error 1
    make[1]: *** [CMakeFiles/nvonnxparser_plugin.dir/all] Error 2
    make: *** [all] Error 2`

解决方案:
暂时还不清楚错误的原因
参考1
darknet_ros配置安装记录_第2张图片include路径下没有找到cudnn.h,在cuda安装路径下面有,修改了没有用别人给的解决方案自己一定要看一下,不要盲目的就拿来用。

参考2
darknet_ros配置安装记录_第3张图片
同样的,在…/src/darknet_ros-master/darknet_ros/include/darknet_ros下面YoloObjectDetector.hpp中添加上面的头文件。

// Darknet.
#ifdef GPU
#include 
#include "cublas_v2.h"
#include "cuda_runtime.h"
#include "curand.h"
#endif

修改完之后重新catkin_make。成功编译!

2.3. caktin_make之后,没有对应的包。
不知道什么原因,上午编译一直都有问题,刚刚自己就好了。应该是ros系统的bug。

后续创建自己的训练集:
参考1

你可能感兴趣的:(默认)