<launch> <!-- 定义设备参数 --> <arg name="device" default="gpu" doc="device type [cpu/gpu]"/> <!-- 视频发布节点 --> <node pkg="image_publisher" type="image_publisher" name="video_publisher"> <param name="filename" value="/home/catkin_ws/src/yolo_ros/data/test.mp4"/> <param name="loop" value="true"/> <param name="rate" value="30"/> <param name="resize" value="640x640"/> </node> <!-- YOLOv5检测节点 --> <node pkg="yolo_ros" type="yolo_detector.py" name="yolo_detector" output="screen"> <!-- 参数配置 --> <param name="model_path" value="$(find yolo_ros)/weights/best.pt"/> <param name="confidence" value="0.6"/> <param name="iou_threshold" value="0.45"/> <!-- 动态GPU配置 --> <param name="use_gpu" value="true" if="$(eval device == 'gpu')"/> <param name="use_gpu" value="false" unless="$(eval device == 'gpu')"/> <!-- 话题重映射 --> <remap from="/camera/image_raw" to="/video_publisher/image_raw"/> </node> <!-- 可视化结果节点 --> <node pkg="image_view" type="image_view" name="result_view"> <remap from="image" to="/yolo_detector/detections_image"/> </node> </launch>
时间: 2025-05-28 13:41:56 浏览: 25
### ROS Launch 文件配置详解
在 ROS 中,`launch` 文件用于启动多个节点并配置它们之间的通信关系。针对包含 `image_publisher` 节点、YOLOv5 检测节点(支持 GPU 动态配置)、以及 `image_view` 可视化节点的任务需求,以下是对各部分功能及其配置的详细介绍。
#### 一、`image_publisher` 节点配置
`image_publisher` 是一个简单的工具节点,负责将指定图像文件作为 ROS 图像消息发布到某个主题上。其核心参数包括:
- `_filename`: 发布的目标图像文件路径。
- `camera_info_url`: 提供相机校准信息的 URL 地址(可选)[^1]。
示例配置片段如下:
```xml
<node pkg="image_transport" type="image_publisher" name="image_pub_node">
<param name="_filename" value="$(find my_package)/images/sample_image.jpg"/>
</node>
```
#### 二、YOLOv5 检测节点 (含 GPU 动态配置)
YOLOv5 的 ROS 实现通常基于 Python 或 C++ 编写而成,这里假设使用的是社区维护较好的 `yolo_ros` 包。为了使该节点具备 GPU 加速能力,需引入额外的环境变量控制逻辑,并允许用户通过参数调整硬件偏好设置。
##### 关键参数说明
- `model_path`: 存储预训练权重文件的位置。
- `device`: 明确指明推理运算执行所在设备,默认为 CPU;可通过字符串 `"cuda"` 启用 NVIDIA CUDA 支持[^2]。
- `confidence_threshold`: 置信度阈值过滤掉低概率预测框的结果展示。
完整的 XML 描述形式如下所示:
```xml
<node pkg="yolo_ros" type="detector.py" name="object_detector">
<!-- Model Configuration -->
<param name="model_path" value="/path/to/best.pt"/>
<!-- Device Selection Logic -->
<env name="CUDA_VISIBLE_DEVICES" value="${gpu_id}"/> <!-- Dynamically set by parameter server -->
<param unless="$(arg use_gpu)" name="device" value="cpu"/>
<param if="$(arg use_gpu)" name="device" value="cuda"/>
<!-- Confidence Threshold Setting -->
<param name="confidence_threshold" value="0.6"/>
<!-- Topic Remapping -->
<remap from="input/image_raw" to="/camera/image_raw"/>
<remap from="output/detections" to="/detected_objects"/>
</node>
```
其中 `${gpu_id}` 应替换为具体数值或者从外部传入的实际 ID 值。
#### 三、`image_view` 可视化节点
此模块主要用于实时显示订阅的主题内容至图形界面窗口中。它接受的标准输入类型有多种格式可供选择,比如未经压缩原始流数据或是编码后的 JPEG 流等。
重要属性列举如下:
- `image`: 输入源话题名称。
- `autosize`: 自动调整窗口大小适应图片尺寸[^3]。
实例化的 launch 配置代码段如下:
```xml
<node pkg="image_view" type="image_view" name="result_viewer">
<param name="image" value="/detected_objects/annotated"/>
<param name="autosize" value="true"/>
</node>
```
#### 四、话题重映射机制
为了增强灵活性与扩展性,在设计过程中充分运用了 ROS 内建的话题重映射特性。这样做的好处是可以让不同组件之间更加松散耦合,同时也方便后续修改而无需改动太多地方。
例如上面提到的例子当中就有两处涉及到了这种技术的应用场景——分别是从摄像头驱动程序获取原始帧序列(`from="input/image_raw"`)以及向下游消费者广播带标注的信息(`to="/detected_objects/"`)。
---
### 总结
综上所述,我们已经详细探讨了一个典型的包含三个主要组成部分(分别是:静态图像供应者、物体识别处理器还有最终成果呈现器)在内的完整 ROS 系统架构设计方案。每一个环节都经过精心挑选和定制来满足项目特殊需求的同时还保留足够的通用性和易用程度以便未来进一步改进升级之便。
阅读全文
相关推荐


















