一,要具备ROS环境
ROS环境搭建可以参考我之前的文章
ROS参考文章1
ROS参考文章2
建立ROS工作空间
ROS系统由自己的编译空间规则。
cd 你自己想要的文件夹(我一般是home目录)
- mkdir -p (你自己的文件夹名字,比如我是yolov5_ws)/src(src不能更换名字)(举例:mkdir -p yolov5/src)
- 建立工具包,catkin create_pkg yolov5_ros roscpp rospy std_msgs message_generation message_runtime
- 在yolov5_ros 文件下建立如下几个文件夹:
- launch 文件夹(launch文件)
- media 文件夹(测试视频文件,可以不要)
- scripts文件夹(存放py的脚本文件)
- weights文件(存放yolov5的权重文件,自己可以设置,改完之后,在launch文件夹里面记得同步更改)
- yolov5文件夹(存放yolov5源码,版本不限制)
- 新建消息文件夹yolo5_ros_msgs ,limian 里面新建msg文件夹,存放我们的自定义消息包类型
- msg里面新建我们需要自定义的消息类型xxx.msg ,如下所示👇
float64 probability
int64 xmin
int64 ymin
int64 xmax
int64 ymax
int16 num
string Class
- msg里面新建我们需要自定义的消息类型xxx.msg ,如下所示👇
备注:自己定义的消息包类型,不要忘记了CMakelist.txt文件里面修改编译规则。👇
cmake_minimum_required(VERSION 3.0.2)
project(yolov5_ros_msgs)
find_package(catkin REQUIRED COMPONENTS
std_msgs
message_generation
message_runtime
rospy
std_msgs
)
add_message_files(
DIRECTORY msg
FILES
BoundingBox.msg
BoundingBoxes.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
CATKIN_DEPENDS message_generation message_runtime rospy std_msgs
)
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
具体每一项的意义可以参考我如下博客,写的非常详细
编译依赖项意义的参考博客
编写脚本封装yolo算法
这个根据自己的YOLO版本类型进行封装。我把该代码上传至我的个人github。
#启动脚本编写(根据个人节点情况编写)
<?xml version="1.0" encoding="utf-8"?>
<launch>
<!-- Load Parameter -->
<param name="yolov5_path" value="$(find yolov5_ros)/yolov5"/>
<param name="use_cpu" value="True" />
<!-- Start yolov5 and ros wrapper -->
<node pkg="yolov5_ros" type="yolo_v5.py" name="yolov5_ros" output="screen" >
<param name="weight_path" value="$(find yolov5_ros)/weights/yolov5s.pt"/>
<param name="image_topic" value="/usb_cam/image_raw" />
<param name="pub_topic" value="/yolov5/BoundingBoxes" />
<param name="camera_frame" value="camera_color_frame"/>
<param name="conf" value="0.3" />
</node>
</launch>
编译和添加环境变量
这个地方搞过ROS的都知道,不做详细说明。
编译完毕之后,运行脚本
roslaunch yolov5_ros 脚本名称
运行结果
运行的主题名称👇
riz显示👇
运行结果👇