RosAGV - 企業級 AGV 車隊管理系統

基於 ROS 2 Jazzy 的現代化自動導引車控制系統

RosAGV - 企業級 AGV 車隊管理系統

專案簡介

RosAGV 是一套企業級自動導引車(AGV)車隊管理系統,採用 ROS 2 Jazzy 和 Zenoh RMW 打造。這個系統的特別之處在於採用雙環境容器化架構,將車載控制與中央管理功能分離,為工業自動化提供完整的車隊管理、任務調度和設備控制解決方案。

專案背景:


🎯 核心特色

1. 雙環境架構設計

設計理念: 分離關注點,將即時控制與管理功能分離,提高系統穩定性和可維護性

🚗 AGV 車載系統 (On-board)          🖥️ AGVC 管理系統 (Control Center)
├─ 即時控制和狀態管理                ├─ 車隊管理和任務調度
├─ PLC 設備直接通訊                 ├─ 資料庫管理和資料持久化
├─ 感測器資料處理                   ├─ Web 管理介面
├─ 手動控制(搖桿)支援             ├─ 外部系統整合(KUKA Fleet)
└─ 路徑規劃和導航                   └─ 系統監控和日誌管理
         ↕️ Zenoh RMW 通訊 ↕️

為什麼要分離環境?


2. 現代技術棧

核心技術:

前端技術:

資料庫:


3. 多車型支援

系統支援三種不同的 AGV 車型,每種車型都有專門的控制模組:

Cargo Mover(貨物搬運車)

Loader(上料車)

Unloader(下料車)


🏗️ 系統架構詳解

AGV 車載系統

部署特性:

容器名稱: rosagv
網路模式: host
部署位置: AGV 車輛上的邊緣計算設備
Docker Compose: docker-compose.yml

為什麼使用 Host 網路?

工作空間配置(7 個):

agv_ws/                    # 核心 AGV 控制
├── agv_base              # 基礎狀態機架構
├── cargo_mover_agv       # Cargo 車型實作
├── loader_agv            # Loader 車型實作
└── unloader_agv          # Unloader 車型實作

agv_cmd_service_ws/       # 手動指令服務
joystick_ws/              # 搖桿控制整合
sensorpart_ws/            # 工業相機整合(OCR 物料辨識)
keyence_plc_ws/           # Keyence PLC 通訊
plc_proxy_ws/             # PLC 代理服務
shared_constants_ws/      # 共享常數定義
path_algorithm/           # 路徑規劃演算法

AGVC 管理系統

部署特性:

容器名稱: agvc_server, postgres, nginx
網路模式: bridge (192.168.100.0/24)
部署位置: 中央管理伺服器
Docker Compose: docker-compose.agvc.yml

為什麼使用 Bridge 網路?

容器服務架構(4 個容器):

AGVC 系統
├── nginx (192.168.100.252)
│   ├── 反向代理服務
│   ├── 靜態文檔托管
│   └── WebSocket 支援
├── agvc_server (192.168.100.100)
│   ├── ROS 2 核心服務
│   ├── Web API (8000)
│   ├── AGVCUI (8001)
│   └── OPUI (8002)
├── postgres (192.168.100.254)
│   └── PostgreSQL 資料庫
└── pgadmin (192.168.100.101)
    └── 資料庫管理介面

工作空間配置(10 個):

web_api_ws/               # Web API 和 Socket.IO
├── web_api              # 核心 API 服務
├── agvcui               # 車隊管理介面
├── opui                 # 操作員介面
└── agvui                # AGV 車載監控介面

db_proxy_ws/              # 資料庫代理服務
ecs_ws/                   # 設備控制系統(Equipment Control System)
rcs_ws/                   # 機器人控制系統(Robot Control System)
kuka_wcs_ws/              # KUKA WCS 倉儲控制系統
kuka_fleet_ws/            # KUKA Fleet 整合
keyence_plc_ws/           # PLC 通訊 (共用)
plc_proxy_ws/             # PLC 代理 (共用)
path_algorithm/           # 路徑規劃 (共用)

# ⚠️ 已棄用 (2025)
# tafl_ws/                # TAFL 解析器(已改用 KUKA WCS)
# tafl_wcs_ws/            # TAFL WCS(已改用 kuka_wcs_ws)

⚡ Zenoh RMW:跨網路高效通訊

為什麼選擇 Zenoh RMW?

傳統 ROS 2 的 DDS 通訊協定在跨網路環境下有明顯限制:

Zenoh RMW 的優勢:

架構:

AGV 車載系統 (192.168.1.x)
    ↕️ Zenoh Router
AGVC 管理系統 (192.168.100.x)

🔧 核心功能模組

1. AGV 狀態機

三種 AGV 車型共享基礎狀態機架構(agv_base):

2. 路徑規劃與導航

基於 ROS 2 Navigation Stack:

3. PLC 整合

Keyence PLC 通訊:

4. KUKA Fleet 整合

與 KUKA 機器人系統協同:

5. 工業相機 OCR 整合(Sensorpart)

物料辨識與門禁控制:

AGV 車載配備工業相機,與車上的 KUKA 協作手臂協同工作:

系統架構:

工業相機 (Sensorpart)
    ├─ 直接通訊 → KUKA 協作手臂
    └─ TCP 連接 → 車載 ROS2 系統

核心功能:

應用場景:


6. Rack 管理系統

貨架管理功能(Cargo Mover 專用):

7. WCS 倉儲控制系統

KUKA WCS(Warehouse Control System):

採用純 Python 實作的現代化倉儲控制系統:

⚠️ 歷史資訊:TAFL WCS(基於 TAFL v1.1.2 語言)已於 2025 年棄用,現已改用 KUKA WCS 進行倉儲控制。


💻 Web 管理介面系統

RosAGV 提供完整的 Web 介面體系,從管理員到現場操作人員,從中央控制到車載監控,全面覆蓋各種使用場景。

1. AGVCUI - 車隊管理介面(Port 8001)

定位: 管理員級別的企業級車隊管理系統

核心功能:

技術架構:

存取方式: http://agvc.ui/ 或 http://localhost:8001/


2. OPUI - 操作員介面(Port 8002)

定位: 現場操作員的工作站介面

核心功能:

技術特色:

技術架構:

存取方式: http://localhost:8002/


3. HMI Station - 人機介面終端(Port 8002)

定位: 觸控操作的現場終端介面(基於 OPUI 的擴展功能)

核心特色:

雙層路由機制:

核心功能:

視覺設計:

技術架構:

存取方式: http://localhost:8002/?deviceId=hmi0000000000001


4. AGVUI - AGV 車載監控界面(Port 8003)

定位: 輕量級 AGV 車載設備監控界面

核心特色:

雙模式支援:

身份識別機制:

  1. 讀取 /app/.device_identity 確認容器類型
  2. 如果是 AGV 容器,讀取 /app/.agv_identity
  3. 備用:從環境變數 AGV_ID 讀取
  4. 無法識別時顯示所有 AGV 狀態

狀態資料結構:

技術架構:

存取方式:


UI 系統技術對比

特性 AGVCUI OPUI HMI Station AGVUI
Port 8001 8002 8002 8003
目標用戶 系統管理員 現場操作員 現場操作人員 車載設備
介面複雜度 高(完整功能) 中(簡化操作) 低(大按鈕) 低(單頁監控)
狀態管理 無(DOM 直接操作) miniStore 無 miniStore
資料庫 PostgreSQL PostgreSQL PostgreSQL 檔案系統
即時通訊 Socket.IO Socket.IO Socket.IO Socket.IO
地圖功能 ✅ Leaflet.js ❌ ❌ ❌
權限控制 ✅ 多用戶 ✅ 設備授權 ✅ 設備授權 ❌
部署位置 AGVC 伺服器 AGVC 伺服器 AGVC 伺服器 AGV 車載

🛠️ 統一工具系統

RosAGV 提供強大的統一工具系統,只需一個字母 r 即可存取所有管理功能。

系統診斷工具

命令 功能
r agvc-check AGVC 管理系統健康檢查
r agv-check AGV 車載系統健康檢查
r system-health 完整系統健康檢查
r quick-diag 快速綜合診斷

容器管理工具

命令 功能
r containers-status 檢查所有容器狀態
r agv-start / r agv-stop AGV 容器啟停
r agvc-start / r agvc-stop AGVC 系統啟停

網路診斷工具

命令 功能
r network-check 系統連接埠檢查
r zenoh-check Zenoh 連接檢查

日常運維範例:

# 每日系統檢查
r agvc-check && r containers-status && r network-check

# 系統啟動
r agvc-start

# 故障排除
r quick-diag

📋 應用場景

1. 智慧工廠

物料搬運自動化:

OCR 門禁控制:

2. 倉儲管理

倉庫自動化:

3. 製造業產線

產線物流自動化:


🎯 技術亮點

1. 完整容器化部署

所有服務容器化:

2. ROS 2 現代架構

採用最新 ROS 2 Jazzy:

3. 跨平台 Web 管理

不需要專用軟體:

4. 模組化設計

17 個專用工作空間:

5. 多層級 Web 介面系統

4 個不同層級的 Web 介面:

6. 完整的開發文件系統

超過 50 份技術文件:


💡 開發體會

這個專案讓我深刻體會到:

雙環境架構的必要性:

Zenoh RMW 的強大:

容器化的價值:

模組化的重要性:

UI 分層設計的智慧:

文檔架構的前瞻性:


🚀 未來發展

目前系統持續優化中,未來計畫:


專案資訊


Happy Coding! 🤖