2025年4月10日 星期四

Raspberry Pi 4 4G + Hailo-8 + IMU + webcam 雙輪自走車

 Raspberry Pi 4 4G + Hailo-8 + IMU + webcam 非常適合做雙輪自走車(兩輪平衡車或差速驅動車),可以結合 AI 視覺、感測器融合與機器控制來打造完整的智慧車系統。這邊幫你規劃出一套 模組化的系統設計架構,包含推薦工具鏈、模型與部署流程。


🧠 總體系統規劃架構圖(模組化)

css
[Webcam] --> [Hailo-8 AI 推論][物件辨識 / 車道追蹤][IMU + Encoder] --> [狀態估測(速度、角度)][控制邏輯(PID / Pure Pursuit)][STM32 驅動雙輪馬達(透過 UART / I2C)]

🔌 硬體構成建議

元件建議規格
Raspberry Pi 44GB RAM,搭配主動散熱
Hailo-8USB 加速器版本
Webcam支援 UVC,可用 Logitech C270 / C922
IMUMPU6050 / ICM-20948(支援 6 或 9 軸)
驅動板STM32F4(透過 UART 控制馬達)
雙輪底盤差速輪車底盤 + 編碼器(encoder)

🛠️ 工具鏈建議(含整合模組)

📦 開發環境

  • OS: Raspberry Pi OS 64-bit (Bookworm)

  • SDK: Hailo SDK(含 Model Zoo + HailoRT)

  • 通訊: UART / I2C(與 STM32、IMU 溝通)

  • 控制程式語言:Python + C/C++(整合 RT 與控制)

  • 視覺處理:OpenCV、GStreamer

  • 感測器處理:smbus / pyserial / mpu6050 等 lib


🤖 推薦 AI 模型(Hailo Model Zoo)

模型用途是否支援
YOLOv5n / s即時物件偵測(人、障礙物)
LaneNet / 自製 CNN車道追蹤可轉換為 ONNX ➜ Hailo
Mobilenet-SSD輕量物件偵測
EfficientNet-lite圖像分類(可判斷路口、標誌)

📌 開發建議流程:

  1. 用 TFLite / ONNX 格式訓練或轉換模型

  2. 使用 hailo_model_optimizer + hailo_compile.hef 模型

  3. 在 Pi 上用 HailoRT 或 GStreamer 播放 + 推論


📡 感測器與驅動整合

1️⃣ IMU(例如 MPU6050) ➜ 姿態估測

  • 透過 I2C 使用 mpu6050 or RTIMULib

  • 融合加速度與角速度,估算俯仰角或車體傾斜

2️⃣ STM32 馬達驅動

  • 用 UART 通訊傳送指令(如 PWM 值、速度)

  • STM32 回報車輪編碼器資訊

  • 可設計 PID 控制 + 編碼器回授封閉迴路


🔁 控制邏輯建議

功能模組說明
影像處理分割道路、檢測障礙物或車道中心線
狀態估測利用 IMU + 編碼器估算線速度 / 角速度
控制策略Pure Pursuit 或 PID 控制轉向
行為決策根據推論結果(如前方有人)做停止 / 避障

🧪 部署流程建議

Step 1:安裝 Hailo SDK(包含模型 Zoo 與 Compiler)

bash
# 須向 Hailo 官網註冊帳號取得 SDK sudo ./install.sh

Step 2:下載模型並測試

bash
cd ~/hailo_model_zoo python3 main.py download --model-name yolov5s python3 main.py run --model-name yolov5s --camera

Step 3:感測器初始化

python
# MPU6050 I2C 初始化 from mpu6050 import mpu6050 imu = mpu6050(0x68) accel_data = imu.get_accel_data() # UART 傳輸指令給 STM32 import serial ser = serial.Serial('/dev/ttyUSB0', 115200) ser.write(b'V100;T20\n') # V=速度,T=轉向

Step 4:整合推論與控制邏輯

python
# 讀攝影機 + 推論 + 控制 image = get_camera_frame() objects = run_hailo_inference(image) center = get_lane_center(image) if detect_obstacle(objects): stop_vehicle() else: steering = compute_steering(center) control_motor(steering)

🧩 Bonus:加值模組可考慮

功能技術 / 模組
遠端監控WebSocket + Web UI + MJPEG Streaming
即時記錄Log 推論與控制數據 (CSV 或 SQLite)
ROS2 整合用 micro-ROS 將 STM32 資訊封裝成 Topic
可視化用 OpenCV 標示推論結果與方向指示線


沒有留言:

張貼留言