yolov5使用tensorrt部署c++ros
时间: 2025-06-27 14:14:53 浏览: 13
### 如何在ROS中使用C++和TensorRT部署YOLOv5
#### 创建ROS工作空间并安装依赖项
为了能够在ROS环境中成功部署YOLOv5模型,首先需要创建一个新的Catkin工作空间,并确保已安装必要的依赖项。这包括但不限于TensorRT库以及CUDA工具链。
```bash
mkdir -p ~/ros_tensorrt_ws/src && cd ~/ros_tensorrt_ws/
catkin_init_workspace src
cd src/
git clone https://github.com/NVIDIA/TensorRT.git
sudo apt-get install nvidia-cuda-toolkit
```
#### 构建自定义消息类型和服务接口
对于计算机视觉应用程序来说,通常会涉及到图像数据和其他传感器信息的传输。因此,在此之前应该先定义好相应的ROS消息文件[^1]。
```cpp
// msg/BoundingBox.msg
float64 x_min
float64 y_min
float64 x_max
float64 y_max
string label
int32 confidence_level
```
#### 编写加载预训练YOLOv5模型的代码片段
下面是一个简单的例子,展示如何利用TensorRT API读取ONNX格式导出后的YOLOv5权重参数,并初始化推理引擎实例:
```cpp
#include <NvInfer.h>
...
std::shared_ptr<nvinfer1::ICudaEngine> load_engine(const std::string& plan_file){
...
}
```
#### 实现检测逻辑并将结果发布到话题上
一旦完成了上述准备工作之后,则可以在回调函数内部调用`infer()`方法执行前向传播操作获取预测边界框坐标值;随后将它们封装成标准的消息结构体并通过Publisher广播出去供其他节点订阅处理[^2]。
```cpp
void image_callback(const sensor_msgs::ImageConstPtr& img_msg){
auto detections = infer(img_msg);
vision_msgs::Detection2DArray det_array;
for(auto &det : detections){
vision_msgs::BoundingBox bbox;
bbox.center.x = (det.xmin + det.xmax)/2.;
bbox.center.y = (det.ymin + det.ymax)/2.;
bbox.size_x = abs(det.xmax-det.xmin);
bbox.size_y = abs(det.ymax-det.ymin);
vision_msgs::ObjectHypothesisWithPose obj_hyp;
obj_hyp.id = class_names[det.class_id];
obj_hyp.score = det.confidence;
vision_msgs::Detection2D detection;
detection.results.push_back(obj_hyp);
detection.bbox = bbox;
det_array.detections.push_back(detection);
}
pub_.publish(det_array);
}
```
#### 配置CMakeLists.txt以支持编译过程中的链接选项
最后一步是在项目的根目录下编辑`CMakeLists.txt`文件,添加对所需第三方库的支持声明以便顺利完成整个工程的构建流程[^3]。
```cmake
find_package(TensorRT REQUIRED)
include_directories(${TENSORRT_INCLUDE_DIRS})
target_link_libraries(your_node_name ${catkin_LIBRARIES} ${TENSORRT_LIBRARY})
```
阅读全文
相关推荐


















