メカテック部で開発した、2026年度ロボコンBロボットの制御プログラムです。
本リポジトリには、Arduino Leonardo・Arduino Megaで動作するプログラムと、Raspberry Pi側で使用したプログラムの保存版が含まれています。
Raspberry PiではROS 2を使用し、2台のコントローラーから受け取った操作情報をSerialBridge経由で各Arduinoへ送信します。
このREADMEは、2026年地区大会版(1018地区大会/)を基準としています。
地区大会当時、全機構の正常動作を実機で確認しています。ただし、現在の環境における再ビルド・再動作まで保証するものではありません。
- システム概要
- 使用機器・開発環境
- リポジトリ構成
- 通信仕様
- コントローラー操作
- Arduino Leonardo
- Arduino Mega
- ピン配置
- 電源構成
- セットアップと起動
- 安全上の注意
- トラブルシューティング
- 地区大会後の改造版
- 未確認事項
flowchart TD
C1["コントローラー1"] -->|/controller/joy| PI
C2["コントローラー2"] -->|/cont2/joy| PI
subgraph PI["Raspberry Pi 4 Model B / ROS 2 Jazzy"]
NODE["serial_arduino_node"]
end
PI -->|SerialBridge / USBシリアル 230400 bps| LEONARDO["Arduino Leonardo"]
PI -->|SerialBridge / USBシリアル 115200 bps| MEGA["Arduino Mega"]
LEONARDO --> DRIVE["4輪足回り"]
LEONARDO --> SHOOT["射出・間欠ギア"]
MEGA --> COLLECT["回収機構"]
MEGA --> RELOAD["補充・装填機構"]
MEGA --> SERVOS["ハンド・カム・ローラ・角度調整"]
| 機器 | 主な役割 |
|---|---|
| Raspberry Pi 4 Model B | ROS 2、コントローラー入力処理、Arduinoとの通信 |
| Arduino Leonardo | 足回り、射出機構 |
| Arduino Mega | 補充・回収・装填・ローラ・角度調整機構 |
| MD13S | 各DCモータの駆動 |
| FEETECHサーボ | ハンド、装填カム、ローラ、角度調整 |
Raspberry Piはコントローラーの入力を処理して操作指令を送信します。各機構の状態管理やリミット検出などは、主にArduino側で実行します。
| 項目 | 仕様 |
|---|---|
| Raspberry Pi | Raspberry Pi 4 Model B |
| OS | Ubuntu 24.04 |
| ROS 2 | Jazzy |
| マイコン | Arduino Leonardo、Arduino Mega |
| Arduino開発環境 | Arduino IDE |
| Pi・Arduino間通信 | SerialBridge |
| DCモータドライバ | MD13S |
| 足回りDCモータ | マブチモーター RS-555 × 4 |
| その他のDCモータ | マブチ製、定格7V、型番不明 |
| 主電源 | 4セルLiPoバッテリー |
| 制御機器の電源 | モバイルバッテリー |
将来的にRaspberry Pi 5を使用する可能性がありますが、本READMEの動作実績はPi 4を対象としています。Pi 5での動作は未検証です。
- SerialBridge
- FEETECH SCServoライブラリ
- ROS 2
rclcpp - ROS 2
sensor_msgs - リポジトリ内の独自モータ・機構制御クラス
SerialBridgeとSCServoライブラリは、Arduinoへの書き込み時にも必要です。Arduino IDEから参照できるように導入してください。
ライブラリの厳密な使用コミット・バージョンは未確認です。
2026_B_Arduino/
├── README.md
├── 1018地区大会/
│ ├── 1004Pi.cpp
│ ├── 1006.cpp
│ ├── ros_leonardo/
│ │ ├── ros_leonardo.ino
│ │ ├── Motor.h / Motor.cpp
│ │ ├── Omni.h / Omni.cpp
│ │ └── TppSol.h / TppSol.cpp
│ └── ros_mega/
│ ├── ros_mega.ino
│ ├── Motor.h / Motor.cpp
│ ├── Collect.h / Collect.cpp
│ ├── Hand.h / Hand.cpp
│ ├── Reload.h / Reload.cpp
│ ├── Cam02.h / Cam02.cpp
│ ├── Roller.h / Roller.cpp
│ └── LookUp.h / LookUp.cpp
└── 地区大会後改造中/
└── 地区大会後の変更作業用プログラム
| ファイル | 内容 |
|---|---|
1006.cpp |
地区大会で使用したPi側プログラムの保存版 |
1004Pi.cpp |
Pi側プログラムの別バージョン |
ros_leonardo.ino |
Leonardoのメインプログラム |
Omni.cpp |
4輪足回りの制御 |
TppSol.cpp |
ソレノイドの制御 |
ros_mega.ino |
Megaのメインプログラム |
Collect.cpp |
回収機構 |
Reload.cpp |
補充アーム |
Hand.cpp |
ハンド |
Cam02.cpp |
装填カム |
Roller.cpp |
ローラ |
LookUp.cpp |
射出角度調整 |
ROS 2側の実装は別リポジトリで管理しています。
主な構成は次のとおりです。
New_2026_B_Robocon_ros/
├── .gitmodules
├── SerialBridge/
└── src/
├── serial_arduino/
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── src/
│ └── serial_arduino_node.cpp
├── ref_data_msg/
│ └── msg/RefData.msg
└── sensor_data_msg/
└── msg/SensorDat.msg
地区大会で使用した 1018地区大会/1006.cpp と、ROS 2リポジトリ内の serial_arduino_node.cpp は、提供された保存版において同一内容です。
README内では serial_arduino_node.cpp をROS 2側の正式な実装として説明します。
| 通信先 | 通信速度 | 用途 |
|---|---|---|
| Pi ↔ Leonardo | 230400 bps | 足回り・射出指令 |
| Pi ↔ Mega | 115200 bps | 補充・回収・各機構の指令 |
| Mega ↔ FEETECHサーボ | 1000000 bps | サーボ制御 |
PiとArduino間ではSerialBridgeを使用します。
ROS 2ノードは20ms周期のタイマーで通信処理を実行し、起動直後は約3秒間送信を待機します。
構造体:JoyData_t
| メンバー | 型 | 内容 |
|---|---|---|
joyX |
int16_t |
左右移動 |
joyY |
int16_t |
前後移動 |
joyRot |
int16_t |
旋回 |
buttonGear |
uint8_t |
間欠ギア操作 |
buttonGearBack |
uint8_t |
ギア戻し操作 |
buttonSol |
uint8_t |
ソレノイド操作 |
データ本体は9バイトです。
Pi側の構造体には __attribute__((packed)) が指定されています。送受信プログラムを変更する際は、メンバーの順序・型・サイズを両側で一致させてください。
構造体:MEGA_t
| メンバー | 型 | 内容 |
|---|---|---|
buttonA |
uint8_t |
補充 |
buttonB |
uint8_t |
回収上昇 |
buttonX |
uint8_t |
回収下降 |
buttonCollectROT |
uint8_t |
回収回転 |
buttonCollectHand |
uint8_t |
ハンド |
buttonCollectBack |
uint8_t |
回収回転戻し |
buttonCamUP |
uint8_t |
装填カム上昇 |
buttonCamDOWN |
uint8_t |
装填カム戻し |
buttonRollGo |
uint8_t |
ローラ正転 |
buttonRollBack |
uint8_t |
ローラ逆転 |
buttonLookUp |
uint8_t |
角度調整上昇 |
buttonLookDown |
uint8_t |
角度調整下降 |
データ本体は12バイトです。
| 通信方向 | 内容 |
|---|---|
| Leonardo → Pi | 地区大会版の返信構造体にデータメンバーなし |
| Mega → Pi | buttonA、buttonB、buttonX の3バイト |
Megaからの返信は、受信したボタン値を返すものです。機構の動作完了やセンサー状態を直接通知するデータではありません。
注意: 上記のバイト数は構造体のデータ本体を指します。SerialBridgeの通信フレーム全体の長さではありません。
地区大会版では、Pi側に次のパスが定義されています。
#define SERIAL_PATH_1 "/dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3:1.0"
#define SERIAL_PATH_2 "/dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4:1.0"SERIAL_PATH_1:LeonardoSERIAL_PATH_2:Mega
これらは地区大会当時の接続環境に依存するパスです。別のRaspberry Pi、USBポート、USBハブを使用する場合は、実際のデバイスパスを確認して変更してください。
確認例:
ls -l /dev/serial/by-path/ROS 2では2台のコントローラーを使用します。
| コントローラー | 購読トピック |
|---|---|
| コントローラー1 | /controller/joy |
| コントローラー2 | /cont2/joy |
以下のボタン番号は、ROS 2の sensor_msgs/msg/Joy に格納される配列のインデックスです。コントローラー機種やJoy入力ノードの設定が変わる場合、物理ボタンとの対応も確認してください。
| 入力 | 配列インデックス | 動作 |
|---|---|---|
| 左右移動 | axes[0] |
足回り左右移動 |
| 前後移動 | axes[1] |
足回り前後移動 |
| 旋回 | axes[2] |
足回り旋回 |
| A | buttons[0] |
補充 |
| B | buttons[1] |
回収機構上昇 |
| X | buttons[2] |
回収機構下降 |
| L1 | buttons[4] |
回収機構の回転戻し |
| R1 | buttons[5] |
回収機構回転 |
| S | buttons[7] |
回収ハンド |
| 十字キー上 | buttons[11] |
前後移動指令 |
| 十字キー下 | buttons[12] |
前後移動指令 |
| 十字キー左 | buttons[13] |
左右移動指令 |
| 十字キー右 | buttons[14] |
左右移動指令 |
- スティック入力を最大値
255 × 0.8 = 204に変換します。 - デッドゾーンは変換後の値で±20以内です。
- 十字キーの指令値は
204 × 0.7を整数に変換した値です。 - スティックと十字キーが同時に入力された場合、移動・旋回指令を0にします。
- 足回りの計算・モータ出力はLeonardo側で行います。
| 入力 | 配列インデックス | 動作 |
|---|---|---|
buttons[0] |
0 | 間欠ギア |
buttons[1] |
1 | ソレノイド |
buttons[3] |
3 | ギア戻し |
| L1 | 4 | ローラ正転 |
| R1 | 5 | ローラ逆転 |
| 十字キー上 | 11 | 装填カム上昇 |
| 十字キー下 | 12 | 装填カム戻し |
| 十字キー左 | 13 | 射出角度上昇 |
| 十字キー右 | 14 | 射出角度下降 |
操作表はPi側の joy1_callback()、joy2_callback() に基づいています。
Leonardoは足回りと射出機構を制御します。
| ファイル | 役割 |
|---|---|
ros_leonardo.ino |
メイン処理・SerialBridge通信 |
Motor.h / Motor.cpp |
PWM・DIRによるDCモータ制御 |
Omni.h / Omni.cpp |
4輪足回り制御 |
TppSol.h / TppSol.cpp |
ソレノイド制御 |
- SerialBridgeを更新する。
- 新しい操作データがあれば受信する。
- 通信確認LEDを更新する。
- 足回りの制御を更新する。
- ソレノイドの制御を更新する。
- 射出・間欠ギアの状態を更新する。
間欠ギアにはホールセンサーを使用しています。
ソレノイドとギアは、メインプログラム内の状態管理によって制御します。ソレノイドはPUSH動作の時間管理を行い、ギアはホールセンサーの入力などに応じて動作状態を切り替えます。
詳細な状態遷移を変更する場合は、ros_leonardo.ino と TppSol.cpp を併せて確認してください。
Megaは補充・回収・装填などの機構を制御します。
| ファイル | 役割 |
|---|---|
ros_mega.ino |
メイン処理・通信・機構の統合 |
Motor.h / Motor.cpp |
DCモータ制御 |
Collect.h / Collect.cpp |
回収機構 |
Hand.h / Hand.cpp |
ハンド |
Reload.h / Reload.cpp |
補充アーム |
Cam02.h / Cam02.cpp |
装填カム |
Roller.h / Roller.cpp |
ローラ |
LookUp.h / LookUp.cpp |
射出角度調整 |
Aボタンの押下を検出すると、補充シーケンスが進行します。
flowchart TD
START["CR_START / 待機"] -->|Aボタン押下| CAM["CR_CAM_RELOAD / カムを補充位置へ"]
CAM -->|補充位置に到達| OPEN["CR_ARM_OPEN / アームを開く"]
OPEN -->|開側リミット検出| WAIT["CR_ARM_WAIT / 開いた状態で待機"]
WAIT -->|Aボタン再押下| CLOSE["CR_ARM_CLOSE / アームを閉じる"]
CLOSE -->|閉動作完了| START
Aボタンは押し続けた時間ではなく、押下の立ち上がりを検出して処理します。
装填カムの手動操作は、補充シーケンスの状態によって制限されます。
回収機構では、DCモータ3台とリミットスイッチを使用します。
- 上昇・下降
- 回転
- 回転戻し
- ハンド開閉
- リミット検出
- リミット到達後の負荷抜き・復帰動作
各動作の停止条件は Collect.cpp に実装されています。
Megaの Serial1 を使用し、通信速度1000000 bpsで制御します。
| 機構 | 型番 | ID |
|---|---|---|
| ハンド | STS3215 | 21 |
| 装填カム | STS3215 | 25 |
| ローラ | STS3215 | 27 |
| 角度調整 | STS3046 | 23 |
サーボのIDは実機に設定された値と一致させる必要があります。
以下は地区大会版のソースコード上の定義です。配線作業時には必ず実機と照合してください。
| 用途 | PWM | DIR |
|---|---|---|
| 足回りモータ1 | 13 | 12 |
| 足回りモータ2 | 11 | 10 |
| 足回りモータ3 | 9 | 8 |
| 足回りモータ4 | 6 | 7 |
| 間欠ギア | 5 | 4 |
| ソレノイド | 3 | 2 |
| 用途 | ピン |
|---|---|
| 間欠ギアのホールセンサー | A0 |
| 起動確認LED | A3 |
| 受信確認LED | A4 |
| ソレノイド確認LED | A5 |
| 用途 | PWM | DIR |
|---|---|---|
| 回収モータ3 | 9 | 8 |
| 回収モータ4 | 11 | 10 |
| 回収モータ5 | 7 | 6 |
| 補充アーム | 5 | 4 |
| 用途 | ピン |
|---|---|
回収 limit_3 |
16 |
回収 limit_4 |
17 |
回収 limit_5 |
20 |
回収 limit_6 |
21 |
回収 limit_7 |
A2 |
| 補充アーム開側 | 14 |
| 補充アーム閉側 | 15 |
| 用途 | 設定 |
|---|---|
| 装填カム | サーボID 25 |
| ローラ | サーボID 27 |
| 射出角度調整 | サーボID 23 |
| ハンド | サーボID 21 |
| サーボ通信 | Serial1 |
| 起動確認LED | A7 |
| 受信確認LED | A6 |
注意: Megaの20・21番ピンはI2Cでも使用されるピンです。本プログラムでは回収機構のリミット入力として定義されています。機能を追加する場合はピンの競合を確認してください。
地区大会版では、駆動系と制御機器の電源を分けています。
4セルLiPoバッテリー
│
▼
駆動系主電源スイッチ
│
▼
電源分配・DC-DCコンバータ
├── 約12V系 → MD13S → RS-555 × 4
└── 7V系 → MD13S → その他のDCモータ
モバイルバッテリー
├── Raspberry Pi 4
├── Arduino Leonardo
└── Arduino Mega
4セルLiPoの公称電圧は14.8V、満充電時は16.8Vです。
足回りのRS-555には約12V、その他の定格7V DCモータには降圧した7Vを供給しています。
すべてのDCモータにMD13Sを使用し、ArduinoからPWM・DIR信号で制御しています。
この図は概念図です。 DC-DCコンバータの具体的な型番・台数、サーボへの給電経路、配線の詳細は未確認です。実際の配線図の代わりには使用しないでください。
ROS 2側のリポジトリにはSerialBridgeがGitサブモジュールとして登録されています。
取得例:
git clone --recurse-submodules \
https://github.com/TNCT-Mechatech/New_2026_B_Robocon_ros.git
cd New_2026_B_Robocon_rosすでにcloneしている場合:
git submodule update --init --recursiveSerialBridge/ が空のままだと、serial_arduino パッケージのビルドに必要なソースファイルが不足します。
地区大会ではUbuntu 24.04とROS 2 Jazzyを使用しました。
ROS 2 Jazzyを導入した環境で、必要な依存パッケージを準備してください。
source /opt/ros/jazzy/setup.bashROS 2ワークスペースのルートで実行する標準的なビルド例です。
colcon build --symlink-install
source install/setup.bashserial_arduino パッケージは、CMakeからSerialBridgeのソースファイルを直接参照しています。
以下のパッケージが含まれます。
| パッケージ | 内容 |
|---|---|
serial_arduino |
コントローラー入力・Arduino通信 |
ref_data_msg |
RefData.msg |
sensor_data_msg |
SensorDat.msg |
RefData.msg には int32[] ref_dat、SensorDat.msg には int32[] enc_dat が定義されています。
Arduino IDEを使用します。
Leonardo:
1018地区大会/ros_leonardo/ros_leonardo.ino
Mega:
1018地区大会/ros_mega/ros_mega.ino
それぞれのスケッチをArduino IDEで開き、対応するボードとポートを選択してください。
必要な外部ライブラリは、事前に導入する必要があります。
ArduinoをPiへ接続した後、ポートを確認します。
ls -l /dev/serial/by-path/地区大会版の SERIAL_PATH_1 と SERIAL_PATH_2 が、接続したLeonardo・Megaを正しく指していることを確認してください。
実際に使用した起動順序は次のとおりです。
- Raspberry Piを起動する。
- Raspberry PiとArduino Leonardo・Megaを接続する。
- ROS 2プログラムを起動する。
- コントローラーを接続する。
ROS 2プログラムの地区大会当時の正確な起動コマンドは未確認です。
CMakeに定義された実行ファイル名から、標準的な起動コマンドの候補は次のとおりです。
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 run serial_arduino serial_arduino_nodeこれはソースコードの構成に基づく実行例であり、地区大会で使用したコマンドを復元したものではありません。
コントローラー入力を配信するノードも別途必要です。/controller/joy と /cont2/joy に、想定した形式の sensor_msgs/msg/Joy が配信されていることを確認してください。
4セルLiPoから電源を分配・降圧する前段に、駆動系の主電源スイッチを設置しています。
このスイッチは駆動系の電源遮断に使用します。
Raspberry Pi・Arduinoは別のモバイルバッテリーから給電されているため、LiPo側のスイッチを切っても制御機器が停止するとは限りません。
地区大会では、通信異常が発生した際は再起動して復旧していました。
ROS 2ノードには、コントローラーからの入力が一定時間途絶えた際に警告を表示する処理があります。
ただし、警告処理は最後に受信した操作値を必ず0にする仕組みではありません。
そのため、通信断時にロボット全体が自動的に安全停止するとは想定しないでください。
再起動や配線の確認を行う際は、先に駆動系を安全に停止してください。
- 射出機構にはホールセンサーを使用します。
- 回収・補充機構にはリミットスイッチを使用します。
- リミット入力は主に
INPUT_PULLUPで設定し、LOWを検出条件としています。
使用したホールセンサーの製品ページ:
https://www.switch-science.com/products/2774
リミットスイッチの型番は未確認です。
次の項目を確認してください。
- ArduinoがPiに接続されているか。
SERIAL_PATH_1とSERIAL_PATH_2が正しいか。- LeonardoとMegaの接続先を取り違えていないか。
- Arduino側に対応するスケッチを書き込んでいるか。
- Pi側とArduino側で通信速度が一致しているか。
- SerialBridgeの送受信データ構造体が一致しているか。
MegaのA6、LeonardoのA4は通信受信確認用LEDとして使用されています。
SerialBridgeのサブモジュールを取得しているか確認してください。
git submodule status必要に応じて次を実行します。
git submodule update --init --recursiveまた、ROS 2 Jazzyの環境を読み込んでいることを確認してください。
トピック名とJoyメッセージを確認してください。
ros2 topic list
ros2 topic echo /controller/joy
ros2 topic echo /cont2/joyPi側のプログラムでは、コントローラー1に3個以上のaxesと15個以上のbuttons、コントローラー2に15個以上のbuttonsを要求しています。
配列の要素数が不足している場合、操作入力の更新処理は行われません。
以下を確認してください。
- 対象機構の電源・配線・コネクタ
- MD13Sの接続
- リミットスイッチの状態
- サーボのID
- MegaのSerial1通信
- 該当する機構クラスの状態遷移
地区大会時点で全機構の正常動作を確認していますが、運用上の注意点として配線・コネクタの接触不良がありました。
地区大会後改造中/ には、地区大会後の変更作業用プログラムが保存されています。
本READMEでは、これらを地区大会版の正式な実装として扱いません。
地区大会後の改造版には、モータ関連ファイルを Motor_Pwm.h / Motor_Pwm.cpp に変更する作業などが含まれています。一方で、旧ファイル名を参照する箇所が残っている可能性があるため、地区大会版と混在させないでください。
改造版を利用する場合は、以下を確認してください。
#includeと実際のファイル名が一致しているか。- Pi側とArduino側の通信構造体が一致しているか。
- ピン配置が実機と一致しているか。
- 機構の状態遷移・停止条件が変更されていないか。
以下は、提供されたコードと地区大会時点の情報だけでは確定できなかった項目です。
| 項目 | 状況 |
|---|---|
| 地区大会当時のROS 2起動コマンド | 不明 |
| SerialBridgeの厳密な使用コミット | 未確認 |
| Arduino IDEの使用バージョン | 未確認 |
| SCServoライブラリの使用バージョン | 未確認 |
| RS-555以外のDCモータの型番 | 不明 |
| リミットスイッチの型番 | 不明 |
| DC-DCコンバータの型番・台数 | 未確認 |
| サーボ電源の詳細な配線 | 未確認 |
| Raspberry Pi 5での動作 | 未検証 |
| 通信断時の自動安全停止 | 実装済みとは確認できない |
未確認事項を更新する際は、推測ではなく、実機・配線図・動作試験・ソースコードのいずれかで確認してから記載してください。
本プロジェクトは、Raspberry Pi、Leonardo、Megaの3つのプログラムが連携して動作します。
通信構造体、ボタン割り当て、ピン配置を変更した場合は、関連するプログラムをまとめて確認してください。
特に、Pi側だけで構造体を変更するとArduino側との通信に不整合が生じる可能性があります。
変更時には、地区大会版を比較用の基準として残し、改造版で動作確認を行ってください。
このREADME.mdは、チャットGTPに以下のプロンプトとAiからの質問の回答を進めREADME.mdを生成し、私が一部修正した。
あなたは高専ロボコンのソフトウェア開発、組み込み制御、電子回路、ロボット機構、ROS 2、C/C++、Arduinoに精通した技術ドキュメント作成アシスタントです。
提供されたリポジトリのソースコードを解析し、初めてこのリポジトリを見る後輩でも、プログラムの目的、構成、動作、必要な機器、導入方法を理解できるREADME.mdを作成してください。
単にコードの内容を文章化するのではなく、実際のロボットでどのように使われているかを説明することを重視してください。
- README.mdをいきなり生成しないでください。
- まず提供されたすべての関連ファイルを解析してください。
- コードから確定できる情報と推測を明確に区別してください。
- 不足している情報は、必ず私に質問してください。
- 回答が得られていない内容を勝手に補完しないでください。
- 実際のコードと説明が矛盾しないようにしてください。
- README.mdは日本語で作成してください。
- 専門用語には必要に応じて簡潔な説明を付けてください。
- コードの変更は行わず、ドキュメントの作成に集中してください。
- 最終的なREADME.mdはGitHubで表示できるMarkdown形式にしてください。
最初にリポジトリ全体を調査し、次の情報を整理してください。
- リポジトリの目的
- ディレクトリ構造
- 各ファイルの役割
- 使用言語
- 使用ライブラリ
- マイコンやコンピュータの構成
- モータ・センサ・アクチュエータの制御
- ピン定義
- シリアル通信の仕様
- プログラムの処理フロー
- 初期化処理
- 操作入力と出力の対応
- 停止条件・安全機能
- ビルド・実行方法
- 未実装・未確認の箇所
解析結果には、根拠となるファイル名、関数名、定義名を可能な範囲で記載してください。
ファイルを読み取れなかった場合は、そのファイル名を報告してください。
解析完了後、README.mdを作成するために不足している情報を私に質問してください。
質問対象は以下を参考にしてください。
- 何年度のロボコンで使用したものか
- どのロボット、どの機構のプログラムか
- 何を実現するために開発したか
- 使用マイコンとその台数
- モータの型番・用途
- モータドライバの型番
- センサの型番・用途
- 電源・電圧
- 配線やピン配置
- 各機構の役割
- 動作する順番
- 機械的な制限
- 原点復帰や停止条件
- 使用した開発環境
- ライブラリの導入方法
- ROS 2などのバージョン
- 通信相手と通信速度
- 起動・操作・終了手順
- 現在動作確認できている機能
- 既知の不具合
- 使用時の注意点
- 今後の改善予定
コードから既に確定できる情報は、重複して質問しないでください。
質問は重要度の高いものから、一度に最大5問ずつ提示してください。
各質問には、なぜその情報がREADME.mdに必要なのかを簡潔に記載してください。
回答が不明な場合は「不明」と回答できるようにしてください。
私が回答した後、必要であれば追加質問を行ってください。
質問への回答が完了したら、以下を確認してください。
- コードと回答内容に矛盾がないか
- ピン配置と使用機器が一致しているか
- 通信データの型・サイズ・送受信方向が正しいか
- 実装済み機能と構想段階の機能が混同されていないか
- README.mdを読んだ人が再現できるだけの情報があるか
矛盾がある場合はREADME.mdの生成前に報告してください。
次の構成を基本として、リポジトリの種類に合わせて最適化してください。
- プロジェクト名
- 概要
- 主な機能
- システム構成
- 使用ハードウェア
- ソフトウェア構成
- ディレクトリ構成
- 制御・動作仕様
- ピン配置
- 通信仕様
- セットアップ方法
- 使用方法
- 安全機能・注意事項
- 既知の問題
- 更新履歴
不要な章は省略し、必要であれば新しい章を追加してください。
システム構成や通信フローは、可能であればMermaid形式の図を使用してください。
表を活用し、長い文章だけのREADME.mdにならないようにしてください。
相対リンクを使用し、GitHub上で各ソースファイルへ移動できるようにしてください。
不明な情報は「未確認」と明記し、架空の情報を生成しないでください。
最後にREADME.mdの全文を1つのMarkdownコードブロックで出力してください。
README.md生成後、以下の観点で自己評価してください。
- 初めて読む部員でも概要を理解できるか
- ハードウェア構成を把握できるか
- コードと説明が一致しているか
- 導入手順に不足がないか
- 不確かな情報を断定していないか
- Markdownの構文に問題がないか
改善が必要な箇所があれば修正してから完成版を提示してください。
以上のルールに従い、まずフェーズ1から開始してください。