【Poke-Controller】PCに繋いだコントローラーの操作を記録、再現するサンプルプログラム(PyGameを利用)
はじめにの前に
2023/1/17追記:
もっと快適に操作できるプログラムをフウさんが公開しています。
今後利用される方は、ぜひそちらをご利用ください!
フウさん、いつも素晴らしいプログラムをありがとうございます。
また、ツイートの掲載許可もありがとうございました。
2023/1/18追記:
フウさんのプログラムについての補足です。
こちらのコントローラーの操作記録で保存される内容(sample.txt)は、自作のPoke-Controller用プログラムにそのままコピペできる形式ではありません。(sample.txtをもとに操作を再現する関数が必要です)
「不完全な操作でも良いから、記録した内容を自作のPoke-Controller用プログラムにそのままコピペして使いたい」という場合には、私のプログラムを使っても良いかもしれません。
使いたい用途にあったプログラムをご利用いただければと思います。
はじめに
自動化プログラムを作るとき、コントローラー操作を入力するのが大変!
そんな思いから、PCに繋いだコントローラーの操作を、Poke-Controllerの命令で記録するプログラムを作りました。
ただ、私の技術力不足であまりクオリティは高くないかもしれません。
サンプルプログラムということで多めに見てください・・・。
2022/10/14追記:ダウンロードリンクを貼り忘れていました…ごめんなさい!
ダウンロードリンクはこちらです。
何が出来るの?
次の2つができます。
1.PCに繋いだコントローラーでPoke-Controllerを操作できる
2.操作した記録をテキスト形式で出力して、プログラムで再現できる
ただし、完全な再現はできません!スティック操作は8方向のみ認識します
(私の技術力ではこれが限界です!)
文章ではイメージしづらいため、動画も用意しました。
(動画でもコントローラーで操作してる部分がわかりづらい)
注意事項
コントローラーのボタン割り当てはスイッチのプロコンに準拠しています。(別のコントローラーを使う場合は、後述するボタン割り当て変更が必要です)
PokeCon3.6(Python3.6)でのみ動作確認しています
Poke-Controllerの環境設定が必要です。
(pygameというライブラリをインストールする必要があります)
事前準備
Poke-Controllerの環境設定(pygameのインストール)
過去の記事の項目「事前準備」を参考にしてください。
※「pyaudio」を「pygame」に読み替える必要があります。
(人によって環境が違うため、記載のやり方ではできないかもしれません)
プログラムの格納
1. ダウンロードしたファイル「ControllerRecord.py」と「ControllerPlay.py」を格納する
下記フォルダに格納してください
パス:Poke-Controller-master\SerialController\Commands\PythonCommands
2. ダウンロードしたフォルダ「ControllerTest」を格納する
下記フォルダに格納してください
パス:Poke-Controller-master\SerialController\Template\
使い方
Poke-Controllerで「コントローラー操作記録_demo」を実行します。
実行すると、「pygame window」というウィンドウが出てきます。
このウィンドウが最前面にある間、PCに繋いだコントローラーを操作すると、それに連動してPoke-Controller上で同じ操作を再現します。
再現した操作は、下記フォルダの「mycontroller.txt」に記録されます。
パス:Poke-Controller-master\SerialController\Template\ControllerTest
※プログラムを実行する毎に「mycontroller.txt」は初期化されます!
操作を残したい場合は、別ファイルにリネームして退避してください。
「mycontroller.txt」に記録されるのはPoke-Controllerで動かせる命令です。
これを使えば、自動化プログラムの自作が少し楽になるかも…?
なお、「コントローラー操作再生_demo」を実行すると、「mycontroller.txt」に記録された操作をいつでも再現可能です。
上手く動かないときは
下記3種類の原因が考えられます。うち2つは解決できていません!
1.コントローラーのボタン割り当てが違う
PCに接続するコントローラーの種類によって、内部的なボタン割り当てが異なります。
コントローラーのボタンにはそれぞれ内部的に番号が振られています。
が、この番号の割り当てがコントローラーによって違っています!
例えば4番のボタンはスイッチプロコンだとマイナスボタンに対応していますが、別のコントローラーだとLボタンに対応していたりします。
その場合は、ご自身のコントローラーに合わせて、ボタン割り当てを変更してください。
プログラムの40行目に、ボタン割り当ての設定箇所があります。
※プログラム40行目あたり
#ボタン割り当て
self.button0 = Button.A #ボタン0:Aボタン
self.button1 = Button.B #ボタン1:Bボタン
self.button2 = Button.X #ボタン2:Xボタン
self.button3 = Button.Y #ボタン3:Yボタン
self.button4 = Button.MINUS #ボタン4:MINUSボタン
self.button5 = Button.HOME #ボタン5:HOMEボタン
self.button6 = Button.PLUS #ボタン6:PLUSボタン
self.button7 = Button.LCLICK #ボタン7:LCLICKボタン(左スティック押し込み)
self.button8 = Button.RCLICK #ボタン8:RCLICKボタン(右スティック押し込み)
self.button9 = Button.L #ボタン9:Lボタン
self.button10 = Button.R #ボタン10:Rボタン
self.button11 = Hat.TOP #ボタン11:十字キー上ボタン
self.button12 = Hat.BTM #ボタン12:十字キー下ボタン
self.button13 = Hat.LEFT #ボタン13:十字キー左ボタン
self.button14 = Hat.RIGHT #ボタン14:十字キー右ボタン
self.button15 = Button.CAPTURE #ボタン15:CAPTUREボタン
プログラムを実行すると、押したボタンの番号が何番か表示されます。
それを参考に、ボタンの番号と対応するボタンの割り当てを修正してください。
2.コントローラーのドリフトを検知してししまう
ごめんなさい!これは解決できませんでした!
私のスイッチプロコンは、何もしなくてもスティックが微妙に押されている(ドリフト)ようで、このプログラムを使うと、何もしていないのに勝手に右方向へ走り続けてしまいます。
これが厄介で、上手く直すことができませんでした。
3.「コントローラー操作記録_demo」が再実行できない
プログラムを再実行すると「pygame window」が現れず、コントローラーの操作を記録することができません…(原因不明で直せませんでした、ごめんなさい!)
一度Poke-Controllerを閉じて、再度Poke-Controllerを開いてからプログラムを実行すると、また動くようになります。
あとがき
自動化を推進してくださる先人の方々、本当にありがとうございます。
このプログラムが自動化プログラムの作成に役立てられたら嬉しいです。
使い勝手の悪い部分があるため、改善できる方はぜひ公開してください。
勉強させていただきます…!
プログラムが無事に動いたこと、上手くいかなかったことなどあれば、
記録として残していただけると大変ありがたいです。
他の方が調べたときに、その記録がきっと役に立ちます・・・!
特に私が喜びます!