|
|
1 сар өмнө | |
|---|---|---|
| .. | ||
| config | 1 сар өмнө | |
| launch | 1 сар өмнө | |
| models | 1 сар өмнө | |
| scripts | 1 сар өмнө | |
| tools | 1 сар өмнө | |
| .gitignore | 1 сар өмнө | |
| CMakeLists.txt | 1 сар өмнө | |
| README.md | 1 сар өмнө | |
| package.xml | 1 сар өмнө | |
这个包只订阅共享的 /usb_cam/image_raw 图像,不打开 /dev/video0,也不会改变相机的曝光、增益或白平衡。二维码和指示牌节点可以同时订阅同一原始图像话题,各自进行独立的软件预处理。
USB 相机驱动应保持自动曝光、自动白平衡的正常原始画面。config/traffic_sign.yaml 中的 brightness、contrast、saturation、gamma 和 lab_clahe 只作用于本包的采集器和识别节点,不会影响二维码或其他相机订阅者。物理相机曝光是全局硬件设置,不能仅对某一个 ROS 节点生效。
当前赛道流程在到达指示牌点时只使用指示牌识别,所以识别节点启动后会按同一配置文件中的 led_* 参数暂时切换相机到手动曝光 50;节点退出时会自动恢复自动曝光和默认色彩。恢复操作由节点外层启动脚本执行,不依赖 ROS/Python 的退出回调。不要在二维码或巡线仍依赖相机画面时启动该节点。
config/head_camera.yaml 是复制到本包的 USB 相机 640×480 标定文件。每帧先按该文件去畸变,再水平翻转和执行 LED 彩色预处理;若相机话题分辨率不是 640×480,节点会跳过该帧,避免错误套用标定参数。
将最终验证通过的 YOLOv5 RKNN 模型保存为:
models/traffic_sign_direction.rknn
类别顺序必须为:left、right、straight、stop。模型输入固定为 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。
| 话题 | 类型 | 含义 |
|---|---|---|
/traffic_sign/direction |
std_msgs/String |
LEFT、RIGHT、STRAIGHT、STOP 或 NONE |
/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 推理会共用该设置。按 1、2、3、4 选择 left、right、straight、stop,按 0 选择 negative(无有效方向牌或干扰图),按 s 仅保存处理后的训练图到 /home/ucar/traffic_sign_data/processed/<label>/。negative 只用于创建空 YOLO 标注文件,不是模型的第五个类别;全红仍使用 stop。新采集的元数据保存到 /home/ucar/traffic_sign_data/processed_metadata.csv;此前已保存的原图与旧元数据保持不变。