一,要具備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 COMPONENTSstd_msgsmessage_generationmessage_runtimerospystd_msgs
)add_message_files(DIRECTORY msgFILESBoundingBox.msgBoundingBoxes.msg
)generate_messages(DEPENDENCIESstd_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顯示👇
?
?
運行結果👇
?