赞
踩
本文源于ROS下实现darknet_ros(YOLO V3)检测
上文转载于:ROS下实现darknet_ros(YOLO V3)检测 - 尚码园
本文主要:在ROS系统上实现目标检测(跑通YOLOV3的代码)
环境:Ubuntu16.04的虚拟机,已经安装ROS系统,之前的教程参考: [专栏],确保可以正常使用ROS
代码Github主页:GitHub - leggedrobotics/darknet_ros: YOLO ROS: Real-Time Object Detection for ROS
下载命令:
mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
cd ../
下载时间可能比较长,请耐心等待…github
如果不能用就先下载再使用xftp上传
在ROS工做空间目录下,执行命令:
catkin_make -DCMAKE_BUILD_TYPE=Release
此时会开始编译整个项目,编译完成后会检查{catkin\_ws}/darknet\_ros/darknet\_ros/yolo\_network\_config/weights
文件下有没有yolov2-tiny.weights
和yolov3.weights
两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。所以编译以后会自动开始下载模型文件,此时又是一段漫长的等待时间。
建议!:在该路径下面又有一个txt文档,里面说明了下载权重的地址,自己先去下载,放到该文件夹下,再去编译。
本次运动未调用机器人的摄像头或者仿真机器人的摄像头,而是使用本地摄像头进行测试运行,如果不想实验可以跳过,如果测试继续看,但是前提是你的本地摄像头虚拟机可以访问!如果不可以,在启动摄像头话题服务时会报错,参考下面的问题解决
3.1 图像话题发布
由于darknet_ros
会直接订阅指定的图像话题名,而后对图像进行检测,绘制检测框,并发布相应的检测话题,所以首先须要找一个可以发布图像话题的ROS包,这里推荐使用ROS官方提供的usb_cam驱动包,能够直接将电脑自带摄像头或链接电脑的USB摄像头采集的图像发布为ROS图像话题。
下载摄像头驱动:
sudo apt-get install ros-kinetic-usb-cam
而后发布摄像头图像话题:3d
roslaunch usb_cam usb_cam-test.launch
# 如果报错,往下看解决办法!
若是顺利的话应该能够看到实际的图像显示界面。
3.2 运行darknet_ros
而后执行darknet_ros
进行检测,在运行检测以前须要更改一下配置文件,使得darknet_ros订阅的话题与usb_cam
发布的图片话题对应。
打开darknet\_ros/config/ros.yam
l文件,修改:
subscribers:
camera_reading:
topic: /usb_cam/image_raw
queue_size: 1
回到darknet的工做空间根目录,执行:
source devel/setup.bash
roslaunch darknet_ros darknet_ros.launch
出现对摄像头采集图像的实时检测结果。
能够看到检测的结果仍是有很大问题的!!
咱们只须要把预训练集换成YOLO v3的来检测就能够了,更换以下:找到config文件能够看到以下的训练集
打开launch文件
修改 darknet_ros.launch
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"/
而后从新启动:
roslaunch darknet_ros darknet_ros.launch
检测结果以下:
之前已经完成仿真摄像头的机器人的搭建,参考机器人操作系统ROS(9)Gazebo物理仿真(摄像头仿真)
或者按照这位作者重新写一个也可以,
下面这些步骤都是在启动小车 打开gazebo之后进行
1运行gazboe【以之前的方法为例】
roslaunch mbot_description view_mbot_with_camera_gazebo1.launch
2用rqt工具查看摄像头当前画面
rqt_image_view
3小车摄像头与yolo对接方法
有个地方需要注意,rqt工具中,我们可以看到
上图有个camera/image_raw
,这个就是小车身上摄像头的topic,在接下来的darknet_ros中,我们就要将darknet\_ros/config/ros.yaml
中的:
改为:
subscribers:
camera_reading:
topic: /camera/image_raw # 订阅的话题 更改为小车的摄像头话题服务
queue_size: 1
4加载YOLO,让小车通过darknet_ros识别检测标记物体
启动yolo:[如果这个命令不生效,可能需要返回工作空间执行source devel/setup.bash]
roslaunch darknet_ros darknet_ros.launch
检测小车摄像头看到的物体是什么
检测结果:
5 键盘控制小车的移动
小车模型中已经加入了`libgazebo\_ros\_diff\_drive.so`插件,可以使用差速控制器实现机器人运动。查看系统当前的话题列表
可以看到,Gazebo仿真中已经开始订阅cmd_vel话题了。接下来可以运行键盘控制节点,发布该话题的速度控制消息,小车就会在Gazebo中开始运动了。
roslaunch mrobot_teleop mrobot_teleop.launch
第一次执行一般会遇到这样的问题:
ROS_MASTER_URI=http://localhost:11311
ERROR: cannot launch node of type [mrobot_teleop/mrobot_teleop.py]: can’t locate node [mrobot_teleop.py] in package [mrobot_teleop]
No processes to monitor
shutting down processing monitor…
… shutting down processing monitor complete
问题原因
mrobot_teleop/mrobot_teleop.py文件没有执行权限
解决方法:
chmod +x mrobot_teleop.py
重新运行:
roslaunch mrobot_teleop mrobot_teleop.launch
ERROR: cannot launch node of type [image_view/image_view]: image_view
解决办法:sudo apt-get install ros-kinetic-image-view
注意:kinetic那个地方为ROS版本号,需要替换为自己的。后面的image-view来源于自己的报错信息,注意查看,如果出现无法定位软件包,改连接符"-“为”_"试试。
1 ROS下实现darknet_ros(YOLO V3)检测
2 虚拟机调用摄像头设备显示 select timeout
3 小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。