GGSVic/Autonomous-Navigation-Via-Traffic-Sign-Detection

GitHub: GGSVic/Autonomous-Navigation-Via-Traffic-Sign-Detection

基于ROS 2和YOLOv8的Puzzlebot自主导航系统,实现交通标志检测、车道跟随和交叉路口决策功能。

Stars: 0 | Forks: 0

# 通过交通标志检测实现自主导航 ## 概述 本仓库展示了一个为缩放道路环境设计的自主移动机器人堆栈的实现与演进。该项目最初是在我第六学期的机器人课程作业中构思的,这一版本在算法鲁棒性、软件架构和技术文档方面都有重大飞跃。 该项目使用 Puzzlebot 平台在包含车道/标线、交叉口和交通标志的赛道上进行导航。通过将传统计算机视觉技术与深度学习(YOLOv8)相结合,机器人能够实现实时语义场景理解——使其能够跟随标线、识别交通信号灯,并在无需人工干预的情况下在交叉口执行智能操作。 ## 项目的演进

Legacy Implementation Demo

Early implementation of reactive line-following and basic computer vision on the Puzzlebot platform - 6th Semester Prototype (July 2024).

本仓库代表了我在第六学期(2024年7月)开发的自主导航系统的架构演进。虽然核心概念流程保持一致,但这一版本在模块化和算法鲁棒性方面实现了重大范式转变。一个关键亮点是计算机视觉堆栈的显著改进——已从基本的线跟随器转变为高度弹性的感知引擎,能够以更高的精度处理复杂的道路场景。 ## 前提条件与环境 虽然原始项目已成功部署在物理硬件(Puzzlebot 移动平台)上,但本仓库已完全集成到高保真仿真环境中。 ### 系统要求 - **操作系统:** Ubuntu 22.04 LTS(推荐) - **中间件:** ROS 2 Humble - **仿真器:** Gazebo Fortress ### 硬件加速 - **GPU(推荐):** 支持 CUDA 的 NVIDIA GPU,用于实时 `YOLOv8` 推理 ### 注意事项 - 系统专为 ROS 2 Humble 和 Gazebo Fortress 设计 - 架构是模块化的,只需少量调整即可适配其他 ROS 2 或 Gazebo 发行版 ## 部署指南:Puzzlebot 自主堆栈 本指南提供使用 Docker 设置 Puzzlebot 仿真和导航环境的必要步骤。它确保了一个确定性的环境,避免了本地依赖冲突。 ### 1. 克隆仓库 为确保包含所有组件(包括控制器和仿真资源),请使用子模块克隆仓库: ``` git clone --recurse-submodules https://github.com/GGSVic/Autonomous-Navigation-Via-Traffic-Sign-Detection.git puzzlebot_nav_stack cd puzzlebot_nav_stack ``` ### 2. 容器配置(Docker) #### a. GPU 支持(可选) 如果您有 NVIDIA 硬件,强烈建议使用 NVIDIA Container Toolkit。这可以加速 `YOLOv8` 推理和 Ignition Gazebo 渲染。 有关安装说明,请参阅官方 NVIDIA 指南: - [NVIDIA Container Toolkit 安装指南](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) #### 验证 GPU 支持 您可以通过运行以下命令来验证 Docker 是否可以访问您的 GPU: ``` docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi ``` **预期结果:** 如果配置正确,您应该看到一个显示 GPU 信息(名称、驱动程序版本、CUDA 版本、内存使用情况等)的表格。 - 如果看到 GPU 详细信息 → **CUDA 配置正确** - 如果命令失败或显示无设备 → GPU 支持未正确设置 #### b. 构建镜像 从项目根目录,使用开发容器配置构建自定义镜像: ``` docker build -t puzzlebot_nav_stack:latest -f .devcontainer/Dockerfile .devcontainer/ ``` #### c. 运行容器 启动具有 GUI 支持和卷挂载的容器。 **带 GPU 支持:** ``` docker run -it --rm --name puzzlebot_instance \ --gpus all --net=host --privileged \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="$PWD:/home/ubuntu/project" \ puzzlebot_nav_stack:latest ``` **无 GPU(标准模式):** ``` docker run -it --rm --name puzzlebot_instance \ --net=host --privileged \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="$PWD:/home/ubuntu/project" \ puzzlebot_nav_stack:latest ``` ### 3. 构建工作空间 在容器内(或在本地运行而不使用 Docker),导航到项目根目录以编译 ROS 2 工作空间。 #### 仿真工作空间(Ignition Gazebo) 在继续编译之前,请确保更新系统仓库,以便 rosdep 可以正常工作: ``` sudo apt update ``` 包含 Puzzlebot 模型和自主导航赛道。 ``` cd /home/ubuntu/project/simulation_ws rosdep install -i --from-path src --rosdistro humble -y colcon build source install/setup.bash cd .. ``` #### 导航工作空间(ROS 2) 包含 FSM、PID 控制器和视觉节点。 ``` cd ros2_ws rosdep install -i --from-path src --rosdistro humble -y colcon build source install/setup.bash ``` ### 4. 运行系统 启动前,您必须设置环境变量以指定正确的机器人模型。然后,启动主脚本以启动仿真和控制节点。 ``` export PUZZLEBOT_MODEL=vision ros2 launch puzzlebot_controller master.launch.py ``` ### 可用参数 - `debug:=true` 启用 YOLOv8 和线检测结果的可视化窗口。 - `device_type:=cuda` 强制视觉算法在 CUDA 核心上运行。 - `world:='puzzletrack_v2.sdf'` 您可以选择不同的世界来测试项目。 ## 预期结果 以下是自主导航堆栈运行的演示。GIF 展示了机器人在复杂交叉口导航、遵守交通规则的能力,以及其新的基于感知的恢复逻辑,以便在操作后恢复线跟随。

Autonomous Navigation Demo

具有基于感知的恢复和交通感知决策的自主导航。

如需深入了解系统性能和架构,您可以查看以下资源: - **[完整系统概述](https://youtu.be/CI7L01OlaB0):** 简要说明视频,涵盖系统架构、道路形态逻辑和实现细节。 - **[自主导航演示](https://youtu.be/39QUw0jZBZ0):** 机器人在仿真环境中性能的详细演示。 ## 项目结构 仓库分为两个主要工作空间,以将仿真环境与核心自主逻辑分离。这种解耦确保了模块化,并简化了跨不同硬件配置的部署。 ### 仿真工作空间(`simulation_ws`) 此工作空间处理道路环境的数字孪生和机器人平台的物理建模。 - **`ros_gz_plugins/traffic_light_plugin`** _(Git Submodule)_ 用于模拟真实交通灯行为和状态的专用 Gazebo 插件。 - **`ros_gz_puzzlebot/ros_gz_puzzlebot_description`** _(Git Submodule)_ 包含 Puzzlebot 的 URDF/Xacro 文件、网格和物理参数。 - **`ros_gz_puzzlebot/ros_gz_puzzlebot_bringup`** _(Git Submodule)_ 用于在 Gazebo 环境中生成机器人和加载道路世界的启动文件。 ### 自主逻辑工作空间(`ros2_ws`) 这是项目的核心,包含智能、感知和控制节点。 - **`puzzlebot_controller`** 决策核心。它使用多线程 FSM 管理高级行为,并使用 PID 控制器进行精确运动。现在已优化为基于路径恢复事件退出操作。 - **`puzzlebot_interfaces`** 用于节点间语义通信的自定义 ROS 2 消息和服务定义。 - **`road_perception`** 使用颜色过滤和横向梯度分析处理车道分割和语义场景解析。 - **`traffic_sign_tracker`** 基于 YOLOv8 的节点,用于识别和跟踪交通标志和信号灯,以更新机器人的内部世界模型。
标签:Docker容器化, PID控制, Puzzlebot, ROS2, Vectored Exception Handling, YOLOv8, 交通标志识别, 仿真环境, 传感器融合, 机器人感知, 机器人操作系统, 深度学习, 目标检测, 移动机器人, 自主导航, 自动驾驶, 视觉导航, 计算机视觉, 请求拦截, 车道保持, 轨迹跟踪, 逆向工具