Article #997

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

Pongと強化学習 (113)

posted by sakurai on July 15, 2025 #997

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
  1. リセットコマンド:

    • 目的: ゲームを初期状態にリセットし、新しいエピソードを開始する。
    • フォーマット: [SOH, CMD_RESET, データ長(0), EOT]
    • データ長はこのコマンドにおいてペイロードがないため0。
      図%%.1
      図997.1 リセットコマンド
  2. ステップコマンド:

    • 目的: 特定のアクションを実行し、その結果としての新しいゲーム状態を取得する。
    • フォーマット: [SOH, CMD_ACTION, データ長(1), アクションコード, EOT]
    • データ長アクションコード1バイト。
      図%%.2
      図997.2 ステップコマンド

FPGAからPythonへの応答

  1. リセット応答:

    • 目的: リセットが完了したことを確認し、新しいゲームフレームを提供する。
    • フォーマット: [SOH, ACK/NAK, データ長, フレームデータ, EOT]
    • コマンドフォーマットが正常ならACK、異常ならNAKを返す。
    • データ長フレームデータのバイト数。
      図%%.3
      図997.3 リセット応答
  2. ステップ応答:

    • 目的: アクションの結果としての新しいゲーム状態、報酬、およびゲームの継続状態を提供する。
    • フォーマット: [SOH, ACK/NAK, データ長, フレームデータ, 報酬, ゲーム終了フラグ, EOT]
    • コマンドフォーマットが正常ならACK、異常ならNAKを返す。
    • データ長は(フレームデータのバイト数 + 報酬1バイト + ゲーム終了フラグ1バイト)のバイト数。
      図%%.4
      図997.4 ステップ応答

このプロトコルでは、ペイロードの長さを明確にすることで、EOTがペイロード内に現れる問題を解消しています。また、データの一貫性と通信の信頼性を高めるためにペイロードの長さを先頭に加えています。


左矢前のブログ 次のブログ右矢

Leave a Comment

Your email address will not be published.

You may use Markdown syntax. If you include an ad such as http://, it will be invalidated by our AI system.

Please enter the numbers as they are shown in the image above.