ucar 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
..
config 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
launch 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
models 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
scripts 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
tools 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
.gitignore 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
CMakeLists.txt 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
README.md 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten
package.xml 84e7bb3908 feat: add visual line-following task 1 kuukausi sitten

README.md

LED 指示牌识别(RK3588 NPU)

这个包只订阅共享的 /usb_cam/image_raw 图像,不打开 /dev/video0,也不会改变相机的曝光、增益或白平衡。二维码和指示牌节点可以同时订阅同一原始图像话题,各自进行独立的软件预处理。

USB 相机驱动应保持自动曝光、自动白平衡的正常原始画面。config/traffic_sign.yaml 中的 brightnesscontrastsaturationgammalab_clahe 只作用于本包的采集器和识别节点,不会影响二维码或其他相机订阅者。物理相机曝光是全局硬件设置,不能仅对某一个 ROS 节点生效。

当前赛道流程在到达指示牌点时只使用指示牌识别,所以识别节点启动后会按同一配置文件中的 led_* 参数暂时切换相机到手动曝光 50;节点退出时会自动恢复自动曝光和默认色彩。恢复操作由节点外层启动脚本执行,不依赖 ROS/Python 的退出回调。不要在二维码或巡线仍依赖相机画面时启动该节点。

config/head_camera.yaml 是复制到本包的 USB 相机 640×480 标定文件。每帧先按该文件去畸变,再水平翻转和执行 LED 彩色预处理;若相机话题分辨率不是 640×480,节点会跳过该帧,避免错误套用标定参数。

模型

将最终验证通过的 YOLOv5 RKNN 模型保存为:

models/traffic_sign_direction.rknn

类别顺序必须为:leftrightstraightstop。模型输入固定为 640×640;节点兼容 YOLOv5 ONNX 导出的单一已解码输出,以及三尺度原始检测头输出。

启动

source /opt/ros/noetic/setup.bash
source ~/ucar_ws/devel/setup.bash
roslaunch traffic_sign_recognition traffic_sign_recognition.launch

节点启动包装器会固定使用 /home/ucar/venv3.9/bin/python3,无需手动激活 venv。

ROS 接口

话题 类型 含义
/traffic_sign/direction std_msgs/String LEFTRIGHTSTRAIGHTSTOPNONE
/traffic_sign/confidence std_msgs/Float32 当前稳定结果的置信度;NONE 时为 0.0
/traffic_sign/debug_image sensor_msgs/Image 标注检测框和稳定结果的调试图
/traffic_sign_recognition/set_enabled std_srvs/SetBool 启用识别与LED曝光,或停用识别并恢复自动曝光

默认需在最近 5 帧中至少 4 帧识别为同一类别,且单帧置信度不低于 0.25,才会发布有效方向。可在启动时临时调整,例如 object_threshold:=0.35

采集训练数据

先启动唯一的 USB 相机驱动,再启动采集器:

roslaunch traffic_sign_recognition led_dataset_collector.launch

采集器左侧显示原始帧,右侧显示去畸变、翻转和 LED 彩色预处理后的帧。当前实物测试已关闭 LAB-CLAHE,以免增强地面反光;训练采集与 NPU 推理会共用该设置。按 1234 选择 leftrightstraightstop,按 0 选择 negative(无有效方向牌或干扰图),按 s 仅保存处理后的训练图到 /home/ucar/traffic_sign_data/processed/<label>/negative 只用于创建空 YOLO 标注文件,不是模型的第五个类别;全红仍使用 stop。新采集的元数据保存到 /home/ucar/traffic_sign_data/processed_metadata.csv;此前已保存的原图与旧元数据保持不变。