Carla 交通标志识别 ROS 封装
carla_tsr_ros 是 carla_traffic_sign_recognition 的 ROS 封装,将 YOLOv8 神经网络感知和车辆控制逻辑接入 ROS Noetic,实现从图像输入到控制指令输出的完整话题链路。
功能
- image_publisher:从本地图片目录循环发布图像到
/camera/image_raw - perception_node:订阅图像,用 YOLOv8n 神经网络推理,发布检测结果和标注图像
- control_node:订阅检测结果,当 stop sign 检测框面积超过阈值时发布刹车指令
- roslaunch 启动:一条命令启动所有节点
话题
| 话题 | 类型 | 方向 | 说明 |
|---|---|---|---|
/camera/image_raw |
sensor_msgs/Image |
发布 | 图像源 |
/perception/traffic_signs |
std_msgs/String |
发布 | JSON 格式检测结果 |
/perception/annotated_image |
sensor_msgs/Image |
发布 | 带检测框的标注图像 |
/vehicle/control_cmd |
geometry_msgs/Twist |
发布 | 控制指令(linear.x=0 刹车,=1 前进) |
运行环境
- Ubuntu 20.04 + ROS Noetic
- Python 3.8(conda 环境
carla38) - PyTorch 2.0.1+cpu
- Ultralytics 8.0.196
- OpenCV 5.0.0
- NumPy 1.24.3
依赖安装
conda activate carla38
pip install rospkg catkin_pkg empy pyyaml -i https://mirrors.aliyun.com/pypi/simple/
pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cpu --no-deps
pip install ultralytics==8.0.196 --no-deps -i https://mirrors.aliyun.com/pypi/simple/
模型权重
本模块已包含 yolov8n.pt(约 6.3MB),无需额外下载。如需重新获取,可从官方发布页下载:
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt -P ~/ros2/src/ground/carla_tsr_ros/
或手动下载后放到 ~/ros2/src/ground/carla_tsr_ros/yolov8n.pt。
编译与运行
1. 编译 catkin 工作空间
mkdir -p ~/carla_tsr_ws/src
cd ~/carla_tsr_ws/src
ln -sfn ~/ros2/src/ground/carla_tsr_ros carla_tsr_ros
cd ~/carla_tsr_ws
source /opt/ros/noetic/setup.bash
catkin_make
2. 启动
conda activate carla38
source /opt/ros/noetic/setup.bash
source ~/carla_tsr_ws/devel/setup.bash
roslaunch carla_tsr_ros main.launch
或使用入口脚本:
bash main.sh
3. 查看检测结果
另开一个终端(不激活 conda):
source /opt/ros/noetic/setup.bash
source ~/carla_tsr_ws/devel/setup.bash
rostopic echo /perception/traffic_signs
查看标注图像:
rosrun image_view image_view image:=/perception/annotated_image
神经网络原理
YOLOv8 是单阶段目标检测网络,将检测问题转化为回归问题。损失函数:
- :边界框回归损失(Complete IoU)
- :分类损失(二元交叉熵)
- :分布焦点损失
推理输出:对输入图像 I,网络输出 N 个检测结果,每个包含 (cx, cy, w, h, confidence, class_prob)。
算法流程
image_publisher从assets/目录循环读取图片,按指定频率发布到/camera/image_rawperception_node订阅图像,每 2 帧执行一次 YOLOv8 推理,只检测 COCO 类别 11(stop sign)- 检测结果序列化为 JSON,发布到
/perception/traffic_signs;同时把可视化图发布到/perception/annotated_image control_node订阅检测结果,当 stop sign 检测框面积占图像面积比例超过 0.3 时,发布 linear.x=0(刹车),否则 linear.x=1(前进)
演示

注意事项
cv_bridge与 conda 环境的 OpenCV 5.0.0 不兼容(CvType 编码冲突),本模块使用手动构造/解析sensor_msgs/Image消息,绕过cv_bridge- 图像源为本地图片,若需接入真实 Carla 相机流,将
image_publisher替换为 Carla ROS bridge 的相机节点即可
相关模块
carla_traffic_sign_recognition:Windows 端 Carla 实时感知与控制(无 ROS)