プロジェクト概要¶
用途と責務¶
RoboCup SSL用ロボットの4輪ステアリング機体に搭載するメイン制御ボードです。2026-09-13に提示された要求として、次を定義します。
- ochin-CM4v2にマウントされたCM4とSPIで通信する。
- 機体内部の高速なフィードバック制御を担う。制御対象、CM4やアクチュエーター側基板との制御分担は今後決定する。周期はユーザー指定の500 Hzとする。
- 通常動作とボタン操作による出力デバッグなど、単純なモード切替を行う。
| モード | 要求される動作 | 未確定事項 |
|---|---|---|
| 通常モード | CM4からのコマンドを受け付けて動作する | 共通の設計案・未決事項を参照 |
| アクチュエーター出力デバッグモード | ボタン操作でアクチュエーターを動かす | 同上 |
モード一覧は現時点の要求例です。モード選択に使う入力、遷移条件、起動時のモード、切替時の出力処理は未確定です。CM4通信、フィードバック制御、モード切替は未実装です。基礎ドライバとCAN・IMU・OLEDの取得・診断機能を実装しています。実機検証は開発手順の記録と区別してください。
通信仕様と実装状況¶
| 対象 | 参照する契約・設計 | 本FWの状態 |
|---|---|---|
| CM4からの指令 | 共通コマンド、4WSのモード・SPI設計案 | 未実装。モードの採用設計と実際の受信・制御対応を区別する |
| MainからCM4への帰還 | 共通128バイトfeedback | 採用設計あり。各項目の取得・格納、CRC生成、SPI送信は未実装 |
| SPIの物理条件・転送手順 | SPI設計案 | 未実装。生成設定のSPI2はslave、CM4_CSはGPIO出力のため、設計案との対応確認が必要 |
| CAN機器通信 | Orion CAN契約 | Classic CAN転送、電源API、Orion受信解析を実装。対応範囲とDLC制約は基礎ドライバ・CAN受信を参照。4WSのノード・車輪割当は未確定 |
共通feedbackの採用設計は、転送や制御の実装完了を示しません。現在のUART4ログ・SWD診断RAMは本repoの内部診断で、CM4向けfeedbackではありません。Orionの停止条件・UART・更新方式を4WSの確定仕様へ転用しません。文書の所有範囲は管理境界を参照してください。
旧世代ボードの参照先¶
旧世代のプロジェクトはC:\Users\hiroyuki\STM32CubeIDE\workspace_1.17.0\G474_Orion_mainです。
| 参照ファイル | 参照する内容 |
|---|---|
README.md |
通常動作、モーター・ドリブラー・キッカーなどのテストモードと操作説明 |
doc/overview.md、doc/board_spec.md |
旧世代の構成、通信、周辺HWの説明 |
doc/hw_control.md |
旧世代の速度制御の構成 |
Core/Src/ai_comm.c、Core/Inc/robot_packet.h |
上位通信の処理とパケット定義 |
Core/Src/state_func.c、Core/Src/robot_control.c |
モードごとの処理と制御の構成 |
旧世代ではCM4との通信にUSART2を使用しています。4WS向けの指令・帰還の採用設計と未確定のSPI転送手順は通信仕様と実装状況を参照してください。2026-09-13の追加要求により、CAN、デバッグUART、ブザーPWM、ユーザーSWなど同等化できる部分は旧世代と同等仕様にする方針です。ドライバ互換調査は旧ソースの調査履歴として保持します。4WSの操作モード、CAN機器割当、制御方式、ブートローダー構成は別途定義します。共通契約はspecsを参照し、移植時は該当ソースと照合します。
対象¶
| 項目 | 現在の設定 |
|---|---|
| CubeMXプロジェクト | 4WS_MainFW.ioc |
| CMakeターゲット/成果物名 | 4WS_MainFW |
| MCU | STM32G474RET6、LQFP64 |
| CPU | Arm Cortex-M4F |
| システムクロック | 170 MHz |
| FW基盤 | STM32Cube HAL、RTOSなし、C11 |
| Flash配置 | 0x08000000から512 KiB |
| RAM配置 | 0x20000000から128 KiB |
現在は単一アプリケーション構成です。独立したブートローダー、設定保存領域、アプリケーションオフセットは設けていません。
ディレクトリ構成¶
| パス | 内容 |
|---|---|
Core/Inc、Core/Src |
CubeMX生成のアプリケーション、初期化、割り込みコード |
Application/ |
ユーザーコード。Board / Device / Protocol / Appに基礎ドライバを実装、Controlは今後追加 |
Drivers/ |
CMSISとSTM32G4 HALドライバー |
cmake/stm32cubemx/ |
CubeMXが管理するソース一覧とビルド設定 |
cmake/ |
Arm GCC/STArmClang用ツールチェーン定義 |
Script/ |
ビルド、書き込み用PowerShellスクリプト |
doc/ |
プロジェクト文書 |
.vscode/ |
VS Codeのタスク、デバッグ、補完設定 |
build/<Configuration>/ |
CMakeが生成するビルド成果物 |
ルートのCMakeLists.txtはユーザーが保守する設定です。cmake/stm32cubemx/CMakeLists.txtはCubeMXが生成する設定として扱います。
現在の起動処理¶
main()はHALとクロックを初期化し、GPIO、ADC1、FDCAN½、I2C1、LPUART1、UART4、SPI½、TIM½/3、CORDICの初期化関数を呼び出します。その後、USER CODEからapp_init()を呼び、while (1)でapp_process()を繰り返します。
AppはUART4デバッグ、ADCユーザーSW、両Classic CAN、IMU取得の状態管理、OLED検出を開始し、制御IRQ開始後に起動ブザーを2 kHz・100 ms鳴らします。メイン処理で電源・Orionテレメトリー受信、IMU取得、OLED表示、UART入力・状態表示、ブザー時間管理を行います。制御入口はTIM6 IRQで500 Hz、UART状態表示はmainのp()で常時10 Hzを基準に実行します。電源指令の自動送信、アクチュエーター出力、CM4 SPIは実装していません。詳細は基礎ドライバとCAN・IMU・OLEDを参照してください。
Application/Board/board_gpio.cには、名前付きデジタル入力の生レベル取得とLED端子のレベル設定を実装しています。LEDはHigh点灯の指定に従い、Appの起動シーケンスから使用します。コード階層に各層の責務、依存方向、旧世代の実装から整理する方針を定義しています。
今後の実装と確認¶
機器間の制御分担、通信条件、CANノード割当、モード切替・停止・復帰の定義はspecsの未決事項で管理します。FW側では次の内部実装と確認を進めます。
- TIM6 IRQの500 Hz入口へ制御演算・出力処理を接続し、実行時間とデータ受渡しを確認
- PHOTO_0/1とBATT_Vの取得方法・しきい値。BATT_Vは10 kΩ/1 kΩ分圧の11倍換算とユーザー指定、ADC基準電圧・校正は未確定。U_BTNは旧5方向判定値を実装済み
- ICM-20602の機体軸対応・校正・制御への受渡し。SPI1での識別・取得は実機確認済み
- CM4 SPIを設計案に従って実装し、生成設定・CSとの整合、指令の反映・帰還の生成と通信契約への適合を確認
- ブザー以外のPWMの周波数・デューティ範囲・起動時の安全状態
- DIPの表示位置とコードの対応、追加SWの実入力を確認し、specsで決める操作仕様をAppへ実装
未確定事項はピン名から用途を推測せず、要求仕様、回路図と接続機器の仕様を確認して決定します。