【Ubuntu系统18.04虚拟机ros下实现darknet_ros(YOLO V3)检测问题解析最全】

原本打算在搭载Ubuntu18.04的智能小车上面运行使用darknet_ros

包来进行yolov3的检测,但是运行过程中遇到了不少问题,从头到尾部的运行包括遇到的解决方法以及对应的文章一并列出,免得到处查找。

首先是在ROS下实现darknet_ros(YOLO V3)检测

参考文章

bash 复制代码
https://blog.csdn.net/qq_42145185/article/details/105730256

一. 代码下载

代码Github主页:https://github.com/leggedrobotics/darknet_ros

下载命令:

bash 复制代码
mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
cd ../

下载时间可能比较长,请耐心等待...

如果下载的Ubuntu系统不支持从gitthub上面直接爬取代码,可以转换下载方式来进行下载。点击GitHub里的clone,下拉可以选择ssh以及https两种模式加载。这个时候只需要转换git clone代码即可。

通过ssh

bash 复制代码
git clone --recursive git@gitcode.net:mirrors/leggedrobotics/darknet_ros.git

通过https

bash 复制代码
git clone --recursive https://gitcode.net/mirrors/leggedrobotics/darknet_ros.git

下载可能遇到的其他问题可以参考这篇文章中下载darknet_ros包的章节

bash 复制代码
http://t.csdn.cn/hPQyd

其中,因为是移动到搭载Ubuntu的小车上面,所以直接通过win11下载,然后通过u盘移动到小车内部Ubuntu系统,这种移动过程中文件可能会有缺少损坏导致后期运行报错,所以不建议。最好是直接通过上述方法直接下载,不能通过下载GitHub的zip等各种压缩包来使用。

比如说

启动yolo3检测摄像头看到的物体

bash 复制代码
roslaunch darknet_ros darknet_ros.launch

报错

这个错误大概率是因为将这个包从windows移动到ubuntu上过后,有些cfg文件识别不到。

回到/home/xx/catkin_ws/src/darknet_ros目录下,打开终端,执行
git stash

再重新运行一次即可。

二. 编译

在ROS工作空间目录下,执行命令:

bash 复制代码
catkin_make -DCMAKE_BUILD_TYPE=Release

此时会开始编译整个项目,编译完成后会检查{catkin_ws}/darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。

如果刚好你之前已经下载好了模型文件,那就好了,在开始编译之前就把模型文件拷贝到上述文件夹下,就不会再次下载了。

下载链接:

bash 复制代码
https://pjreddie.com/media/files/yolov2.weights
https://pjreddie.com/media/files/yolov2-tiny.weights
https://pjreddie.com/media/files/yolov3.weights
https://pjreddie.com/media/files/yolov3-tiny.weights

将下载文件放入/darknet_ros/darknet_ros/yolo_network_config/weights文件中

继续

bash 复制代码
catkin_make -DCMAKE_BUILD_TYPE=Release

3.图像话题发布

因为darknet_ros会直接订阅指定的图像话题名,然后对图像进行检测,绘制检测框,并发布相应的检测话题,因此首先需要找一个能够发布图像话题的ROS包,这里推荐使用ROS官方提供的usb_cam驱动包,可以直接将电脑自带摄像头或连接电脑的USB摄像头采集的图像发布为ROS图像话题。

下载摄像头驱动:

bash 复制代码
sudo apt-get install ros-kinetic-usb-cam

下载摄像头驱动,有的时候自己的操作系统未必是kinetic的版本,所以需要通过终端命令查询自己的ros版本。

bash 复制代码
 rosversion -d

如果是melodic版本就使用:

bash 复制代码
sudo apt-get install ros-kinetic-usb-cam

然后发布摄像头图像话题:

bash 复制代码
roslaunch usb_cam usb_cam-test.launch

如果顺利的话应该可以看到实际的图像显示界面。

3.启动摄像头测试节点

报错1

在输入以下测试启动命令后,出现了报错。

解决方法

1.摄像头接口插入USB3.0试试。

USB3.0,USB3.0又称为SuperSpeed USB总线,与高速(High Speed)USB2.0总线相比,其传输速度更快。

2.其次如下图所示一定要有勾选上才行,不然说明未连接相机。

报错2

解决办法:

bash 复制代码
sudo apt-get install ros-melodic-image-view

报错3

设置usb设备勾选上ubs3即可

然后就是运行darknet_ros

然后执行darknet_ros进行检测,在运行检测之前需要更改一下配置文件,使得darknet_ros订阅的话题与usb_cam发布的图片话题对应。

打开darknet_ros/config/ros.yaml文件,找到:

将camera_reading中的topic修改为上图所示,即:

bash 复制代码
subscribers:
  camera_reading:
    topic: /usb_cam/image_raw
    queue_size: 1

然后回到darknet的工作空间根目录,执行:

bash 复制代码
source devel/setup.bash
roslaunch darknet_ros darknet_ros.launch

我们只需要把预训练集换成YOLO v3的来检测就可以了,更换如下:找到config文件可以看到如下的训练集

打开launch文件

修改 darknet_ros.launch

bash 复制代码
arg name="network_param_file"         default="$(find darknet_ros)/config/yolov2-tiny.yaml"/
 
改为
 
arg name="network_param_file"         default="$(find darknet_ros)/config/yolov3.yaml"/
如下:

然后重新启动:

bash 复制代码
roslaunch darknet_ros darknet_ros.launch

差不多就可以实现了,然后基本上上述错误都是从以下这些参考文章找到的解决办法。

ROS下实现darknet_ros(YOLO V3)检测

bash 复制代码
https://blog.csdn.net/qq_42145185/article/details/105730256

小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体

bash 复制代码
https://blog.csdn.net/WhiffeYF/article/details/109187804

ROS学习(三)调用笔记本和usb外接摄像头

bash 复制代码
https://blog.csdn.net/m0_56451176/article/details/126174060?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169020102516800227494294%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169020102516800227494294&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-126174060-null-null.142^v91^insert_down1,239^v3^control&utm_term=sudo%20apt-get%20install%20ros-melodic-usb-cam&spm=1018.2226.3001.4187

ROS下使用摄像头

bash 复制代码
https://blog.csdn.net/wilylcyu/article/details/51732710

在ROS中开启摄像头_详细步骤

bash 复制代码
https://blog.csdn.net/weixin_41074793/article/details/83474501?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242

ROS学习笔记-在ROS中连接USB摄像头

bash 复制代码
https://blog.csdn.net/weixin_51244852/article/details/116169460?ops_request_misc=&request_id=&biz_id=102&utm_term=sudo%20apt-get%20install%20ros-melod&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-116169460.142^v91^insert_down1,239^v3^control&spm=1018.2226.3001.4187

ROS下使用usb_cam驱动读取摄像头数据

bash 复制代码
https://blog.csdn.net/Yangxiaoaijiejie/article/details/127061479?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169020121616800227474354%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169020121616800227474354&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-127061479-null-null.142^v91^insert_down1,239^v3^control&utm_term=%E5%AE%89%E8%A3%85ROS_USB%E9%A9%B1%E5%8A%A8%E6%8A%A5%E9%94%99&spm=1018.2226.3001.4187

这里给一个使用yolov3的报错解释,因为darknet_ros.launch文件里面有不同的launch文件,如果使用以下命令。

bash 复制代码
roslaunch darknet_ros yolov3.launch

可能会报错缺少yolov3-tiny.cfg文件,找不到这个文件,就需要手动新建一个.cfg的文件粘贴。

这个文件连接有中文注释可能报错,以下是整理好的代码,自行参考。

bash 复制代码
https://blog.csdn.net/weixin_44152895/article/details/106570976?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169027884416800222821030%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169027884416800222821030&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-26-106570976-null-null.142^v91^insert_down1,239^v3^control&utm_term=yolov3-tiny.cfg%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187
bash 复制代码
[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=2
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1

[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=1

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

###########

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear



[yolo]
mask = 3,4,5
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=80
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

[route]
layers = -4

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[upsample]
stride=2

[route]
layers = -1, 8

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear

[yolo]
mask = 0,1,2
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=80
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
相关推荐
多多*5 分钟前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
wx74085132626 分钟前
小琳AI课堂:机器学习
人工智能·机器学习
霍夫曼vx_helloworld735226 分钟前
yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】
yolo
FL162386312934 分钟前
[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别
人工智能·yolo·目标检测
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
cliffordl1 小时前
vscode 环境搭建
ide·vscode·编辑器
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
JANGHIGH1 小时前
VSCode引用Eigen库无法识别问题解决
ide·vscode·编辑器
OkeyProxy1 小时前
怎麼在Ubuntu上設置全局代理
ubuntu·代理模式·proxy模式·ip代理·海外ip代理
gopher95111 小时前
linux驱动开发-中断子系统
linux·运维·驱动开发