dev01 30565c87cc fix: persist gimbal PID config on POST, separate laser to /laser/command topic, add chassis HTTP API endpoints
- web_node: call _save_gimbal_pid_config() after POST /api/gimbal/pidconfig
- web_node: publish laser commands to /laser/command (was /gimbal/mode)
- web_node: add POST /api/chassis/mode/switch, GET/POST /api/chassis/pidconfig
- web_node: add chassis PID config file management (data/chassis_pid_config.json)
- gimbal_node: subscribe to /laser/command separately from /gimbal/mode
2026-06-07 13:30:57 +08:00

Vision Pipeline

基于 ROS2 Humble 的机器视觉识别与云台追踪系统。

整体架构

┌─────────────────────────────────────────────────────────────┐
│                        硬件层                                │
│  ┌──────────┐    ┌──────────┐    ┌────────────────────┐     │
│  │ 工业相机  │    │  Jeston  │    │  云台(UART)       │     │
│  │ (Hikrobot)│    │  (aarch64)│   │  Yaw + Pitch + 激光  │    │
│  └────┬─────┘    └────┬─────┘    └─────────┬──────────┘     │
│       │               │                    │                │
├───────┼───────────────┼────────────────────┼────────────────┤
│       ▼               ▼                    ▼                │
│  ┌─────────┐   ┌──────────┐   ┌───────────────────┐        │
│  │driver_pkg│  │algorithm_pkg│ │gimbal_control_pkg │        │
│  │         │   │           │   │                   │        │
│  │ 相机驱动  │──▶│ 视觉处理   │──▶│ 云台串口通信       │        │
│  │ MvCamera │   │ Otsu+轮廓  │   │ 0xA5/A6/A7/A8    │        │
│  └────┬─────┘   └─────┬─────┘   └───────────────────┘        │
│       │               │                                      │
│       ▼               ▼                                      │
│  ┌─────────────────────────────────────┐                     │
│  │          application_pkg            │                     │
│  │  ┌───────────────────────────────┐  │                     │
│  │  │ web_node (:8080)              │  │                     │
│  │  │  - POST /api/mode/switch      │──┼──▶ /gimbal/mode     │
│  │  │  - POST /api/laser            │  │                     │
│  │  └───────────────────────────────┘  │                     │
│  └─────────────────────────────────────┘                     │
│                                                              │
│  ┌─────────────┐  ┌──────────────┐  ┌──────────────────┐    │
│  │ rosbridge   │  │web_video     │  │     Nginx :80    │    │
│  │ ws://:9090  │  │server :8081  │  │  / → 前端静态文件  │    │
│  └──────┬──────┘  └──────┬───────┘  │  /stream → :8081  │    │
│         │                │          │  /api → :8080     │    │
├─────────┼────────────────┼──────────└──────────────────┘────┤
│         ▼                ▼                                   │
│  ┌─────────────────────────────────────┐                     │
│  │          浏览器 (Vue3 前端)          │                     │
│  │  - 视频预览 / 键盘遥控 / PID 调参    │                     │
│  └─────────────────────────────────────┘                     │
└─────────────────────────────────────────────────────────────┘

数据流

阶段 话题 方向 消息类型 说明
图像采集 /camera/image_raw camera_node → vision_node sensor_msgs/Image 原始相机图像
目标追踪 /vision/target vision_node → gimbal_node geometry_msgs/Point 归一化目标偏移 (x,y)
模式切换 /gimbal/mode web_node → gimbal_node std_msgs/String auto/manual/debug
手动控制 /cmd_gimbal 前端 → gimbal_node geometry_msgs/Twist yaw/pitch 角度
PID 参数 /pid_config 前端 → gimbal_node std_msgs/String PID 参数 JSON

目录结构

Vision/
├── README.md
├── vision_example.py          # 独立参考脚本(非 ROS2)
├── config/
│   └── nginx-aimbot.conf       # Nginx 配置
├── docs/
│   ├── 云台通信协议指南.md       # 云台 UART 串口协议
│   ├── 与前端对接文档.md         # 前后端对接规范
│   └── 使用指南.md              # 使用说明
└── workspace/                   # ROS2 workspace
    └── src/
        ├── driver_pkg/          # 工业相机驱动
        ├── algorithm_pkg/       # 视觉处理算法
        ├── application_pkg/     # HTTP 服务
        ├── gimbal_control_pkg/  # 云台串口通信
        └── bringup_pkg/         # 启动文件

快速开始

# 构建
cd workspace
colcon build --symlink-install
source install/setup.bash

# 启动全流程
ros2 launch bringup_pkg vision_pipeline.launch.py

详细使用方法见 使用指南。

S
Description
视觉仓库(主控为Jetson orin nano super)
Readme 158 KiB
Languages
Python 100%