接到师兄的任务,把yolov2移植到ros上。
环境为ubuntu16.04+ros+cuda9.0+NVDIA GTX1050
刚开始想的解决方法是,先把yolov2的检测图片的代码一点点的黏贴到ros的程序包中然后进行编译,可是黏贴一点,编译一点,当编译到
struct network;
typed struct network network;
struct layer;
typed struct layer layer;
typed struct layer{
……(struct network);
}
typed struct network{
……(struct layer);
}
这里编译的时候报错,因为ros是基于c++的编译方式,而yolov2则是用c写的,虽然c++和c大部分是兼容的,但是ros用的是c++ 11的版本,貌似从c++ 9之后,c与c++的编译差异就越来越大了,所以,在这里出现了c的前置声明问题,所以不太懂怎么弄,也找不到人问。
于是没办法,只能在github上找有没有关于yolo 移植到 ros上的已经写好的代码。
结果一找还真有,但是编译起来,真的,好多坑啊!!!!!!!!!!!!!!!!!!!!!!!
好在有男票大神带着,才能一天之中搞出来,不然我自己可能一个星期都搞不定吧。
首先,遇到的第一个坑。
main函数是yolo_object_detector_node.cpp,里面定义并初始化了两个线程。两个线程在YoloObjectDetector.cpp里面。
然后先catkin_make一下,然后 rosrun darknet_ros darknet_ros,编译通过了,也可以运行,但是一直打印“waiting for image”然后我就去程序里找,哪里打印的。找到是在