iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
Rust

30 天玩轉 Zenoh:Rust 助力物聯網、機器人與自駕的高速通訊系列 第 27

Day 27: Zenoh 在機器人系統的應用全景 Part 3 - CARLA x Autoware x Zenoh 自駕車隊管理展示

  • 分享至 

  • xImage
  •  

Zenoh 在機器人系統的應用全景 Part 3 - CARLA x Autoware x Zenoh 自駕車隊管理展示

自駕車系統其實跟機器人系統的發展密不可分。而自駕車的未來,不僅取決於單一車輛的智慧,更在於能否進行大規模、協同的車隊運行,透過同時模擬、測試並部署多輛自駕車來實現。
今天,我們來探索一個結合三項強大技術的開源專案 CARLA 模擬器Autoware 自駕平台,以及 基於 Zenoh 的 Fleet Management System (FMS): autoware_carla_launch


打下基石:CARLA 模擬器

CARLA (Car Learning to Act) 是開源自駕車模擬的黃金標準。它完全建立在 Unreal Engine 之上,提供擬真城市環境,如今已成為全球自駕車研發不可或缺的工具。

CARLA 的優勢

CARLA 不只是另一個模擬器,它是一個完整的平台,讓自駕車研發真正普及化。它的架構圍繞幾項核心原則,專為嚴肅的自駕研發所打造:

  • 擬真環境:基於 Unreal Engine 5.5,提供與現實接近的視覺真實度,這對於需要可靠感知的系統至關重要。
  • 完整感測器套件:支援 LIDAR、各類相機、深度感測器、RADAR、GPS 等,能驗證複雜的感測器融合演算法。
  • 動態交通管理:內建交通管理器可生成逼真的人車互動,模擬緊急狀況與真實難以重現的場景。
  • 靈活 API 架構:提供 Python 與 C++ API,可全面控制模擬參數、交通情境、天氣與環境,便於建立可重現的實驗與邊界測試。

Autoware:自駕平台的革命

Autoware 是目前最完整的開源自駕軟體堆疊。基於 ROS 2,它提供將普通車輛轉化為自駕車所需的一切功能,從感測器整合到 AI 驅動的決策。

全堆疊自駕架構

Autoware 的模組化設計,建立在四大核心之上:

  • 定位與地圖:透過 3D SLAM 技術結合 GNSS、IMU 與 LiDAR,實現公分級精度。
  • 先進感知:支援物件偵測、追蹤、號誌辨識、車道檢測,整合相機、雷達、LiDAR。
  • 智慧規劃與控制:涵蓋從任務規劃到軌跡生成,應對都市交叉口、環形道路、高速匯入等複雜場景。
  • 車輛介面與控制:精準控制油門、煞車與轉向,確保穩定與安全。

平台優勢與產業採用

Autoware 的最大優勢之一,是它對硬體的高度相容性。不像封閉式方案將使用者綁定於特定硬體,Autoware 幾乎能在任何 ECU、感測器組合與車輛上運行。加上全球最大的自駕開源社群,推動了共享與加速創新。


Zenoh 的革命性力量

當 CARLA 提供模擬環境、Autoware 管理單車智慧時,Zenoh 負責將一切串連,為車隊提供高效、可擴展的通訊與協調能力,從根本上改變自駕車隊的運作模式。

Zenoh 的技術創新

與 DDS、MQTT 等傳統協定相比,Zenoh 帶來了顛覆性的突破:

  • 零額外負擔的通訊:超低延遲、高效能,確保即時安全決策。
  • 跨地域架構:能橫跨區域網路與廣域網路,實現雲端到邊緣的部署。
  • 優異效能:吞吐量、延遲與資源利用率全面勝出,適合大規模車隊。
  • 統一數據模型:將 pub/sub、儲存與查詢整合於單一協定。

車隊管理的新形態

zenoh_autoware_fms 專案展現了 Zenoh 如何改造車隊管理:

  • 即時監控:全面掌握每輛車的狀態、健康度與效能。
  • 智慧任務協調:分配路線、任務,並可動態調整。
  • 遠端人工介入:遇到特殊情境時,操作員可透過網頁控制台即時接管。

Fleet Management Demo
(點擊預覽觀看影片)


深入探討:Rust 驅動的 zenoh_carla_bridge

在這個整合的核心中,存在著 zenoh_carla_bridge —— 一個以 Rust 編寫的高階應用程式,作為 CARLA 模擬環境與 Autoware 自動駕駛堆疊之間的關鍵通訊層。這個橋接器展現了現代系統程式設計的實踐方式,也體現了 Rust 在建構可靠且高效能基礎設施方面的強大能力。

Rust 架構亮點

此橋接器的架構展示了多種重要的 Rust 程式設計模式以及針對汽車應用的特定優化:

#[derive(Debug, Clone, PartialEq, ValueEnum)]
enum Mode {
    /// 使用 zenoh-bridge-dds
    DDS,
    /// 使用 zenoh-bridge-ros2dds
    ROS2,
    /// 使用 rmw_zenoh
    RmwZenoh,
}

系統支援多種通訊模式,能與不同的 ROS 2 中介軟體實作無縫整合。這種彈性對於支援多樣化的部署場景與遷移路徑至關重要。

Actor Bridge 模式:該橋接器實作了一種進階的 actor 模式,用於處理不同類型的 CARLA 實體:

pub enum BridgeType {
    Vehicle(String),
    Sensor(String, SensorType, String),
    TrafficLight,
    TrafficSign,
    Other,
}

pub trait ActorBridge {
    fn step(&mut self, timestamp: f64) -> Result<()>;
}

這種設計讓系統能透過統一介面處理多樣的模擬實體,同時保持型別安全與高效能。

記憶體安全的並行處理:該橋接器善用 Rust 的所有權系統與進階並行原語:

use arc_swap::ArcSwap;
use atomic_float::AtomicF32;

pub struct VehicleBridge<'a> {
    vehicle_name: String,
    actor: Vehicle,
    publisher_actuation: Publisher<'a>,
    velocity: Arc<AtomicF32>,
    current_actuation_cmd: Arc<ArcSwap<ActuationCommandStamped>>,
    // ... 其他欄位
}

透過 Arc<ArcSwap<>> 與原子型別的使用,能在沒有傳統鎖機制的情況下,安全地跨執行緒共享資料,這對即時效能至關重要。

進階感測器處理:感測器橋接器展現了對不同感測器類型的進階處理能力:

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum SensorType {
    CameraRgb,
    LidarRayCast,
    LidarRayCastSemantic,
    Imu,
    Gnss,
    Collision,
    NotSupport,
}

每種感測器類型都具備專屬的處理邏輯,將 CARLA 的模擬資料轉換為對應的 ROS 2 訊息格式,從點雲資料到相機影像都能以最佳效能進行處理。

時鐘同步:橋接器實作了精確的模擬時間同步:

pub struct SimulatorClock<'a> {
    publisher_clock: Publisher<'a>,
    attachment: Vec<u8>,
    mode: Mode,
}

impl<'a> SimulatorClock<'a> {
    pub fn publish_clock(&self, timestamp: Option<f64>) -> Result<()> {
        let time = if let Some(sec) = timestamp {
            builtin_interfaces::Time {
                sec: sec.floor() as i32,
                nanosec: (sec.fract() * 1_000_000_000_f64) as u32,
            }
        } else {
            // 回退至系統時間
            let now = SystemTime::now()
                .duration_since(UNIX_EPOCH)
                .expect("Unable to get current time");
            builtin_interfaces::Time {
                sec: now.as_secs() as i32,
                nanosec: now.subsec_nanos(),
            }
        };
        // ... 發布時鐘訊息
    }
}

這確保了系統中的所有組件都能以同步時間運作,這對於協調多車輛模擬至關重要。


整合方案:autoware_carla_launch

autoware_carla_launch 專案代表了將這三項強大技術整合成一個統一的開發與測試平台的成果。這套完整的解決方案針對多車輛自駕模擬與車隊管理中的複雜挑戰,提供了實用的工具與架構。

多車輛模擬能力

Multi-Vehicle Demo
(點擊預覽觀看影片)

該系統能在 CARLA 的真實感環境中,同時測試多輛自駕車輛,每輛車皆運行其完整的 Autoware 堆疊。此功能對於測試車輛間互動、交通流量最佳化以及車隊協作演算法至關重要。

可擴展架構:系統架構支援從單車測試擴展到包含數十輛自駕車的複雜多車場景。每輛車皆維持自身的命名空間與通訊通道,同時參與車隊層級的協作。

真實互動建模:模擬中的車輛彼此互動,並與模擬交通、行人以及環境條件進行交互,提供了完整的測試環境,以驗證真實世界的部署情境。

技術整合架構

整合採用了進階的多層式架構:

  1. CARLA 模擬層:提供擬真環境與物理模擬
  2. Zenoh 通訊層:以最小的開銷處理所有組件間的通訊
  3. Autoware 處理層:為每輛車執行自駕演算法
  4. 車隊管理層:協調多輛車輛並提供操作介面

Architecture

這種分層式設計確保了模組化、可維護性,以及隨著技術演進替換組件的能力。

真實應用與影響

這套整合方案解決了自駕車開發中的多項關鍵挑戰:

加速開發週期:開發者能在模擬中快速測試複雜場景,遠快於真實世界測試,大幅縮短開發時間與成本。

安全驗證:可在模擬中反覆測試關鍵安全場景,無需冒著人員或設備的風險,實現完整的安全系統驗證。

車隊演算法開發:能在模擬環境中開發與優化多車協作演算法,並在部署到真實車隊之前完成驗證。

邊界情境探索:系統可系統性地探索邊界案例與不尋常場景,這些情境在現實測試中可能困難或危險重現。


結語:邁向協作式自駕的未來

CARLA、Autoware 與 Zenoh 的整合,不僅是技術成就,憑藉開源精神,這些先進功能將持續向研究者、新創與產業開放,成為推動自駕革新的共同基礎,
讓我們一起更快、更安全地走向智慧交通的未來!


上一篇
Day 26: 深入解析 Rust 與 CycloneDDS 的橋接利器 —— Cyclors
下一篇
Day 28: Zenoh 在機器人系統的應用全景 Part 4 - 深入探討 rmw_zenoh,新一代的ROS 2 Middleware
系列文
30 天玩轉 Zenoh:Rust 助力物聯網、機器人與自駕的高速通訊30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言