darknet_ros(yolo移植到ros系统)代码分析

    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css">
            <div id="content_views" class="htmledit_views">
                <p><img alt="" class="has" src="https://img-blog.csdnimg.cn/20190124112919452.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L214ZHNkbzA5,size_16,color_FFFFFF,t_70" width="343" height="670"></p> 

     darknet_ros就是darknet在ros操作系统下的版本,即在ros下使用yolo进行目标检测。

首先对其文件分类:.launch文件是ros格式的roslaunch文件;src文件夹下的就是它的主要代码,把ros和darknet结合起来的部分;cfg文件是放各种yolo网络的配置,weights文件夹是放置网络权重。

这些yaml文件是设置ros参数以及决定在ros下调用darknet的哪些配置文件和权重。ros.yaml如下

定义了接受图片的订阅者话题名称/avt_camera,和发送出去的发布者话题名称,包括物体类别和物体框(中心坐标和长宽)两个话题。

在ros中是以节点为单位进行基本功能的,这个代码相当于把整个darknet定义为一个节点,然后给这个节点输入图片,节点能输出相应的检测出的目标类别和位置信息,现在看到源码yolo_object_detector_node.cpp


 
 
  1. /*
  2. * yolo_obstacle_detector_node.cpp
  3. *
  4. * Created on: Dec 19, 2016
  5. * Author: Marko Bjelonic
  6. * Institute: ETH Zurich, Robotic Systems Lab
  7. */
  8. #include <darknet_ros/YoloObjectDetector.hpp>
  9. #include <ros/ros.h>
  10. int main(int argc, char** argv) {
  11. ros::init(argc, argv, "darknet_ros"); //初始化
  12. ros::NodeHandle nodeHandle("~"); //创建节点类
  13. darknet_ros::YoloObjectDetector yoloObjectDetector(nodeHandle); //创建yoloObjectDetector类
  14. ros::spin(); //ROS消息回调处理函数,相当于一个循环进入后就不会继续往下执行主函数了,而是一直将回调函数队列里的回调函数输出
  15. return 0;
  16. }

代码很短,主要就是定义了一个ros节点,并在这个节点中创建一个YoloObjectDetector的类,所以关键就是这个类是干什么的。

而这个类的创建在YoloObjectDetector.cpp中,代码很长,是把darknet移植到ros的核心部分,大概600行,里面基本都是函数,比较乱,花了一两天时间才理清楚直接的关系并画了一个流程图来梳理其结构。

其中主要功能在YoloObjectDetector::yolo中。

 

转载:https://blog.csdn.net/mxdsdo09/article/details/86623642
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值