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 配合 |
沒有留言:
張貼留言