welcom ! Handel home

2025年4月14日 星期一

RRC(ROS Robot Control)系統程式 by microROS

 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_moveset_velocity_radius
mecanum_chassis.c麥克納姆底盤mecanum_chassis_set_velocity
ackermann_chassis.c阿克曼方向盤底盤ackermann_chassis_moveackermann_velocity_difference

🔹 2.3 Porting(移植層)

與硬體驅動整合,負責初始化與抽象化各元件:

功能模組 / 函式
LEDled_porting.cleds_init, led_set_pin
按鈕button_porting.cbuttons_init, button_timer_callback
蜂鳴器buzzer_porting.cbuzzers_init, buzzer1_set_pwm
IMU (MPU6050)imu_porting.cimus_init, imu_task_entry
LCD 顯示lcd_porting.clcds_init, lcd1_spi_write
馬達控制器motor_porting.cmotors_init, set_motor_param
PWM 伺服控制pwm_servo_porting.cpwm_servos_init, pwm_servo1_write_pin
SBUS 接收sbus_porting.csbus_init, sbus_dma_receive_event_callback
藍牙 UARTbluetooth_porting.cbluetooth_task_entry, bluetooth_dma_rx_event_callback
記憶體配置lwmem_porting.clwmem_region_t
OLED 螢幕 (u8g2)u8g2_porting.cu8g2_init, u8x8_byte_hw_i2c
底盤介面chassis_porting.cchassis_init, set_chassis_type

🔹 2.4 System(系統層)

整合整體應用邏輯與任務流程,主要包括:

功能模組 / 函式
電池偵測battery_handle.cbattery_check_timer_callback
搖桿訊號處理gamepad_handle.cUSBH_HID_EventCallback, A_T_C()
GUI 控制gui_handle.cupdate_sbus_view, lvgl_timer_callback, gui_task_entry
主流程控制app.c → 初始化所有模組,建立 RTOS 任務、主控制邏輯

🎮 三、操作範例:RRC 應用流程

✅ 1. 啟動流程 app.c

c
int main(void) { system_init(); // 初始化所有硬體與中介層 osKernelStart(); // 啟動 FreeRTOS 核心 while (1) {} // 主循環交由 RTOS 任務處理 }

✅ 2. 控制底盤移動(以差速為例)

c
diff_chassis_move(velocity_x, velocity_y, rotation_z);

✅ 3. 接收按鍵事件

c
void button_timer_callback() { if (button_pressed) { diff_chassis_move(100, 0, 0); // 向前 } }

✅ 4. 顯示電壓與狀態

c
battery_check_timer_callback(); // 定時檢查電池狀態 update_sbus_view(); // 在 LCD 顯示接收狀態

📚 四、實作建議與擴充方向

🔌 整合 micro-ROS(延伸)

你可以透過 bluetooth_porting.cuart 加入 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 配合

沒有留言: