【CV学习笔记】ros之yolov5、tensorRT封装调用

1、前言

在yolov5&tensorRT在ros框架下使用时,遇到了一些问题,经过一步一步的排错之后,最终在ros中实现,因此在这里实现了一个简单的demo,便于以后进行回顾,同时给有需要的同学提供一个例子。

yolov5&tensorRT封装以及加速见:yolov5&tensorRT

代码仓库:https://github.com/Rex-LK/tensorrt_learning/tree/main/side_line_learn/yolo5-6.0-ros

2、编译

2.1、升级cmake

安装ros后,ros中自带某个低版本的cmake,编译会报错,因此需要升级cmake,可以到官网下载cmake-××.sh文件,按照下面的操作步骤更新cmake

sudo sh cmake-××.sh
#PATH=/home/rex/cmake-3.22.0-linux-x86_64/bin 为上一步cmake的安装路径
sudo sed -i '$a export PATH=/home/rex/cmake-3.22.0-linux-x86_64/bin:$PATH' ~/.bashrc 
source ~/.bashrc

2.2、修改cmakelists

yolo5-6.0-ros/src/yolov5-server/CMakeLists.txt

yolo5-6.0-ros/src/yolov5-infer/CMakeLists.txt

#cuda
include_directories(/usr/local/cuda/include)
link_directories(/usr/local/cuda/lib64)

#tensorRT
include_directories(/home/rex/TensorRT-8.2.0.6/include)
link_directories(/home/rex/TensorRT-8.2.0.6/lib)

# 设置yolov5 项目路径
set(yolov5_dir /home/rex/Desktop/tensorrt_learning/side_line_learn/yolo5-6.0-ros/src/yolov5-6.0)

2.3、编译命令

在yolo5-6.0-ros文件夹中

catkin_make_isolated -DPYTHON_EXECUTABLE=/usr/bin/python3
source devel_isolated/setup.bash

3、使用单个节点进行推理

roslaunch yolov5_infer_nodelet yolov5_infer_nodelet.launch

其中launch/yolov5_infer_nodelet.launch文件可以启动对应的节点,并且可以给节点传递参数



	
	
	//需要启动的节点
	
	 //下面为传参
	  
	  //模型路径
	  
	  //图片路径
	  
  	

4、 使用client/server的方式进行推理

启动server端,server端会等待client端发送请求,并进行推理,返回一个string类型的结果,可以将推理结果转为string后并返回

roslaunch yolov5_server_nodelet yolov5_server_nodelet.launch

启动client端,client端使用opencv读取一张图片,并转化为ros_images的格式发送给server,得到string类型的结果

roslaunch client_nodelet client_nodelet.launch

自定义消息格式

#client
sensor_msgs/Image image
---
#server
string result

5、测试

6、总结

通过本次demo的实现,学习了在ros中使用nodelet的方式构建并启动一个节点,实现了cliet/server的调用方式,自定义srv消息,并调用yolov5&tensorRT进行推理。

你可能感兴趣的:(学习,自动驾驶,人工智能)