| 15 | Pongと強化学習 (113) | 
FPGAとdqn_atari.pyとのインタフェースプロトコルをChatGPTと相談した結果、以下のプロトコルにまとまりました。ChatGPTは最初はjsonフォーマットを提案してきましたが、FPGAでデコードする都合上シンプルなフォーマットとしました。
通信プロトコル
PythonからFPGAへのコマンド
- SOH= 0x01
- EOT= 0x04
- ACK= 0x06
- NAK= 0x15
- CMD_RESET= 'R' = 0x52
- CMD_ACTION= 'A' = 0x41
- リセットコマンド: - 目的: ゲームを初期状態にリセットし、新しいエピソードを開始する。
- フォーマット: [SOH, CMD_RESET, データ長(0), EOT]
- データ長はこのコマンドにおいてペイロードがないため0。 - 図997.1 リセットコマンド 
 
- ステップコマンド: - 目的: 特定のアクションを実行し、その結果としての新しいゲーム状態を取得する。
- フォーマット: [SOH, CMD_ACTION, データ長(1), アクションコード, EOT]
- データ長は- アクションコード1バイト。 - 図997.2 ステップコマンド 
 
FPGAからPythonへの応答
- リセット応答: - 目的: リセットが完了したことを確認し、新しいゲームフレームを提供する。
- フォーマット: [SOH, ACK/NAK, データ長, フレームデータ, EOT]
- コマンドフォーマットが正常ならACK、異常ならNAKを返す。
- データ長は- フレームデータのバイト数。 - 図997.3 リセット応答 
 
- ステップ応答: - 目的: アクションの結果としての新しいゲーム状態、報酬、およびゲームの継続状態を提供する。
- フォーマット: [SOH, ACK/NAK, データ長, フレームデータ, 報酬, ゲーム終了フラグ, EOT]
- コマンドフォーマットが正常ならACK、異常ならNAKを返す。
- データ長は(- フレームデータのバイト数 +- 報酬1バイト +- ゲーム終了フラグ1バイト)のバイト数。 - 図997.4 ステップ応答 
 
このプロトコルでは、ペイロードの長さを明確にすることで、EOTがペイロード内に現れる問題を解消しています。また、データの一貫性と通信の信頼性を高めるためにペイロードの長さを先頭に加えています。
 前のブログ
前のブログ
 
    
    
    
Leave a Comment