Automotive · RoboticsROS 2 HumbleOpenCVFail-safe

视觉循迹必须先知道什么时候应该停车。

项目将原 ROS 1 单文件原型重构为 ROS 2 Humble 软件包,集成红蓝锥桶感知、非阻塞 PID、底盘命令适配、任务状态机、相机看门狗、急停和显式故障复位。

Overview & context

循迹准确之外,控制链路还必须对失效负责。

室外红蓝锥桶赛道会出现光照变化、阴影、遮挡、单边界、相机断流和底盘协议差异。原型中旧检测结果可能被重复使用,视觉命令也可能被直行命令覆盖。

Problem

当目标丢失或相机超时时继续输出前进命令,会把感知问题升级为安全问题;把感知、控制、任务和 ROS 通信写在单个循环里,也难以测试与标定。

Requirements

感知、控制、任务和安全需要明确边界。

稳健边界估计

支持红色双 HSV 区间、蓝色区间、亮度归一化、形态学去噪与单/双边界中心估计。

平滑且受限的控制

非阻塞 PID、EMA 时间滤波、转角变化率限制,以及随置信度和弯道变化的限速。

明确的失效安全

启动与运行看门狗、连续丢失停车、独立急停、故障保持和人工复位。

Architecture

从图像到安全输出的单点控制链路。

每层只承担一种核心职责,参数集中在 YAML 中。

01 · IMAGECamera Topic

接收图像并监控启动与运行超时。

02 · PERCEPTIONCone Boundaries

颜色分割、轮廓过滤、中心与置信度。

03 · CONTROLPID & Limits

计算转向、限速并处理目标丢失。

04 · MISSIONState Machine

建图圈、红灯、导航圈、停车与安全状态。

05 · OUTPUTTwist / PWM

单点发布底盘命令与调试话题。

Technical decisions

先消除旧状态和多点写命令,再讨论速度。

01

感知结果带置信度

双边界和单边界采用不同估计,并对连续帧做 EMA,控制层不盲目信任单帧。

02

单点控制输出

转向、速度、安全状态和任务状态在同一输出位置汇总,避免命令互相覆盖。

03

兼容而不混淆语义

同时提供标准 Twist 和旧底盘 PWM 模式,并明确旧模式并非标准 Twist 语义。

04

上升沿任务事件

红灯、圈次、停车和急停事件采用明确话题与边沿触发,减少重复事件。

Challenges & solutions

室外视觉与车辆控制需要保守的失败策略。

挑战解决方式验收方式
光照和红色色相跨界双红色 HSV、CLAHE、形态学去噪和按图像比例过滤轮廓晴天、阴天、逆光和阴影样本
单边界或短时遮挡单边界中心估计、置信度、EMA 与连续丢失计数单弯、S 弯与遮挡测试
相机或处理链路失效启动/运行看门狗、异常捕获、safe_stop 与人工复位相机断开、软件急停、硬件急停
底盘命令差异标准 Twist 与 PWM 适配模式,参数化中值和极限架空车轮后低速落地标定
Results

仓库已经形成模块化 ROS 2 软件栈与安全测试入口。

4 个核心模块感知、控制、任务与 ROS 集成职责分离
2 种输出标准 Twist 与旧底盘 PWM 兼容模式
Fail-safe看门狗、目标丢失、急停与显式故障复位
验证边界:公开仓库明确说明项目尚未在作者的实际底盘、摄像头和驱动板上验证。网站不会把软件测试或接口完成描述为实车比赛成绩。
Screenshots & evidence

为感知、控制与车辆验证准备多图展示位。

建议优先补充真实调试图、控制曲线和实车/仿真环境;占位图不代表已经完成实车验收。

OPEN SOURCE

查看参数、节点和安全状态机。

公开仓库包含 ROS 2 软件包、YAML 参数、启动文件、纯 Python 测试与 GitHub Actions。

访问 GitHub