【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
欢迎正在学习或者想学的CV的同学进群一起讨论与学习,v:Rex1586662742,q群:468713665

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文件可以启动对应的节点,并且可以给节点传递参数

<?xml version="1.0"?>
<launch>
	<arg name="nodelet_manager" default="yolov5_infer_manager" />
	<node pkg="nodelet" type="nodelet" name="$(arg nodelet_manager)" args="manager" output="screen" />
	//需要启动的节点
	<node pkg="nodelet" type="nodelet" name="yolov5_infer_nodelet" args="standalone yolov5_infer_nodelet/Yolov5InferNodelet" output="screen">
	 //下面为传参
	  <param name="gpu_id" value="0" type="str" />
	  //模型路径
	  <param name="engine_path" value="/home/rex/Desktop/cv_demo/yolov5-6.0-TensorRT/tensorrtx/yolov5s.engine" type="str" />
	  //图片路径
	  <param name="image_path" value="/home/rex/Desktop/tensorrt_learning/side_line_learn/yolo5-6.0-ros/src/yolov5-6.0/images/zidane.jpg" type="str" />
  	</node>
</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进行推理。

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rex久居

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值