RRC(ROS Robot Control)系統程式的 架構分析與實作操作說明,
包含其軟體模組分層結構與範例應用導引。
🧭 一、RRC 系統架構總覽
整個 RRC 控制系統程式結構可分為四大模組層級:
| 模組層級 | 內容簡述 |
|---|---|
| Peripherals | 外圍裝置控制(LED、按鈕、PWM伺服) |
| Chassis | 車體運動學與底盤控制(差速、麥克納姆、阿克曼) |
| Porting | 硬體移植層:整合 IMU、螢幕、藍牙、SBUS、電機等 |
| System | 系統任務流程、LVGL GUI、手把訊號與電池管理等 |
📂 二、模組詳細說明
🔹 2.1 Peripherals(外圍裝置)
| 檔案 | 功能 |
|---|---|
button.c | 提供跨平台的按鍵偵測邏輯、回調事件機制 |
led.c | 控制 LED 開關與閃爍模式 |
pwm_servo.c | 控制伺服馬達轉向與角度補正介面 |
🔹 2.2 Chassis(底盤運動控制)
此層模組提供各種底盤類型對應的運動學控制演算法:
| 模組檔案 | 底盤類型 | 關鍵函式 |
|---|---|---|
differential_chassis.c | 雙輪差速底盤 | diff_chassis_move、set_velocity_radius |
mecanum_chassis.c | 麥克納姆底盤 | mecanum_chassis_set_velocity |
ackermann_chassis.c | 阿克曼方向盤底盤 | ackermann_chassis_move、ackermann_velocity_difference |
🔹 2.3 Porting(移植層)
與硬體驅動整合,負責初始化與抽象化各元件:
| 功能 | 模組 / 函式 |
|---|---|
| LED | led_porting.c → leds_init, led_set_pin |
| 按鈕 | button_porting.c → buttons_init, button_timer_callback |
| 蜂鳴器 | buzzer_porting.c → buzzers_init, buzzer1_set_pwm |
| IMU (MPU6050) | imu_porting.c → imus_init, imu_task_entry |
| LCD 顯示 | lcd_porting.c → lcds_init, lcd1_spi_write |
| 馬達控制器 | motor_porting.c → motors_init, set_motor_param |
| PWM 伺服控制 | pwm_servo_porting.c → pwm_servos_init, pwm_servo1_write_pin |
| SBUS 接收 | sbus_porting.c → sbus_init, sbus_dma_receive_event_callback |
| 藍牙 UART | bluetooth_porting.c → bluetooth_task_entry, bluetooth_dma_rx_event_callback |
| 記憶體配置 | lwmem_porting.c → lwmem_region_t |
| OLED 螢幕 (u8g2) | u8g2_porting.c → u8g2_init, u8x8_byte_hw_i2c |
| 底盤介面 | chassis_porting.c → chassis_init, set_chassis_type |
🔹 2.4 System(系統層)
整合整體應用邏輯與任務流程,主要包括:
| 功能 | 模組 / 函式 |
|---|---|
| 電池偵測 | battery_handle.c → battery_check_timer_callback |
| 搖桿訊號處理 | gamepad_handle.c → USBH_HID_EventCallback, A_T_C() |
| GUI 控制 | gui_handle.c → update_sbus_view, lvgl_timer_callback, gui_task_entry |
| 主流程控制 | app.c → 初始化所有模組,建立 RTOS 任務、主控制邏輯 |
🎮 三、操作範例:RRC 應用流程
✅ 1. 啟動流程 app.c
✅ 2. 控制底盤移動(以差速為例)
✅ 3. 接收按鍵事件
✅ 4. 顯示電壓與狀態
📚 四、實作建議與擴充方向
🔌 整合 micro-ROS(延伸)
你可以透過 bluetooth_porting.c 或 uart 加入 micro-ROS serial 串列協定,串連至 ROS 2 主機,達成:
-
ROS 控制
cmd_vel -
上傳感測器資料
/imu,/battery
🧠 客製開發重點
-
擴充自己的控制介面:修改
button_porting.c,motor_porting.c -
自訂底盤類型切換邏輯:於
chassis_porting.c中透過set_chassis_type
🧩 範例操作流程摘要
| 步驟 | 操作內容 |
|---|---|
| 1️⃣ | 使用 STM32CubeProgrammer 燒錄原廠 firmware |
| 2️⃣ | 啟動後觀察 OLED 螢幕與 LED 狀態(由 LVGL/LED 模組控制) |
| 3️⃣ | 透過藍牙或 PS2 控制器操控移動,確認 SBUS 訊號處理 |
| 4️⃣ | 按下按鍵觸發馬達轉動,確認 button_porting.c + motor_porting.c 配合 |
沒有留言:
張貼留言