赞
踩
小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体
小车yolo机械臂(二)机械臂仿真 ros下从xacro模型文件搭建Moveit!+Gazebo仿真系统
小车yolo机械臂(三)ROS消息订阅监听 rospy.Subscriber 订阅监听yolo python实现订阅/darknet_ros/bounding_boxes topic
小车yolo机械臂(四)python ros 和darknet_ros 使用launch文件启动脚本
小车yolo机械臂(五)让小车在命令下运动起来 rostopic pub /cmd_vel geometry_msgs/Twist
小车yolo机械臂(六)ros gazebo 小车摄像头根据darknet_ros中yolo目标检测的信息进行自主运动
小车yolo机械臂(七)小车与机械臂融合,并控制机械臂运动 gazebo control
小车yolo机械臂(八)ros小车和机械臂gazebo仿真,机械臂根据darknet_ros中yolo检测结果来自动运动 python实现
最近在做一个项目,要在小车上安装摄像头,摄像头的图像的topic(话题)传递给darknet_ros里的yolo进行检测,现在要做的就是,单独写个python。
项目基础:
ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体
在上面项目的基础上,在mrobot_gazebo下新建scripts,再在scripts下新建一个python文件:listener_yolo.py,作用就是用于订阅/darknet_ros/bounding_boxes话题的信息,这个话题含有yolo识别检测出的信息。
首先,我们先看看,怎么使用终端查看darnet_ros下yolo识别出来的信息。
1,把上面说的项目运行起来
运行小车及摄像头的gazebo仿真
roslaunch mrobot_gazebo my_gazebo3.launch
运行darknet_ros
roslaunch darknet_ros darknet_ros.launch
2,查看当前所有的topic
rostopic list
可以看到很多以darknet_ros开头的
我们将/darknet_ros/bounding_boxes这个话题输出,执行指令
rostopic echo /darknet_ros/bounding_boxes
yolo的检测出的信息就输出在了终端里
下一步我们就要使用python来订阅这一话题,然后讲订阅后的信息打印在终端上。
在mrobot_gazebo下新建scripts,再在scripts下新建一个python文件:listener_yolo.py
我们先要给listener_yolo.py权限,不然无法执行。
在listener_yolo所在目录执行:
chmod +x listener_yolo.py
在写里面的内容之前,我先把我查阅的比较有用的资料先罗列出来:
ROS自定义msg类型及使用 这篇的评价里的内容激发了我:
Python 使用自定义 msg 导入方式:
from 功能包名.msg import 消息文件名
我们这里需要实现对yolo检测信息话题的订阅(即:/darknet_ros/bounding_boxes),所以我们不需要写话题的发布,直接写订阅。
listener_yolo.py的代码:
#!/usr/bin/env python import rospy from darknet_ros_msgs.msg import BoundingBoxes def callback(data): print data def listener(): rospy.init_node('topic_subscriber') sub = rospy.Subscriber('/darknet_ros/bounding_boxes', BoundingBoxes, callback) print sub print type(sub) rospy.spin() if __name__ == '__main__': listener()
直接划重点:
导入darknet_ros_msgs中的BoundingBoxes消息类型
这个导入我在网上查了很多,饶了很多弯路,网上的资料几乎都是导入:from std_msgs.msg import String,在一个博客中看到的一个评论,让我知道了如何修改。
首先,在终端运行:
rosmsg list
可以看到很多msg,我们找到我们需要的
可以看到有:
darknet_ros_msgs/BoundingBox
根据这条信息,我们写出:
from darknet_ros_msgs.msg import BoundingBoxes
在订阅话题命令中,这样写:
sub = rospy.Subscriber('/darknet_ros/bounding_boxes', BoundingBoxes, callback)
最后在终端执行命令:
rosrun mrobot_gazebo listener_yolo.py
可以看到结果的输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。