PS2コントローラで、無線だとOKだが有線だとNGな原因がわかった
今週はPS2コントローラとの通信を改善するぞウィークです。
そんな予定じゃなかったんだけどな・・・。
VinsentはPS2の無線コントローラ(Logitec製)だと正しくキー入力を認識できるのですが、有線コントローラ(Sony製DUALSHOCK2)だと正しくキー入力を認識できず、今日はその調査を行っておりました。で、原因がわかりました。
25日の日記の波形をよーーく見れば気が付くのですが、無線と有線ではコントローラからの入力信号(波形では黄色)のON/OFFタイミングが微妙に違っています。無線時の入力信号はM16Cからの周期信号(波形では紫色)のOFFトリガに同期してキビキビON/OFFしてます。しかし、有線時の入力信号は同期信号のOFFトリガに当然同期はしているのですが、ゆっくりON/OFFします。
そのあとの周期信号のONトリガにて入力信号をM16Cが取り込むのですが、有線だとこの瞬間ではまだ入力信号が安定していないのです。
何が悪いのかと言うと、周期信号のOFFが遅いのです。なぜ遅いかと言うと、OFFする前にコマンド用の出力信号を出しているからです。
いままでのプログラムはこんな感じ。
1行目:p10_2 = ((m_cPadWData[1] & (1 << ((m_cPadCount - 37) / 2))) != 0) ? ON:OFF ;
2行目:p10_0 = OFF ; // PAD_CLK
この1行目と2行目をひっくり返えしたら有線も無線も問題なくキー入力を認識するようになりました。
1行目の処理は、ひいて、割って、シフトして、アンドして、比較して、代入して・・・結構時間がかかるのでこのような症状が出てしまったようです。
これで、明日のロボファイト2の会場で無線トラブルが発生しても、最悪の場合、有線で操作することが出来ます!!(威張れることではない・・・)
追記 19:30
Vinsentがうつむせで倒れた場合にPS2受信機のボタン押下により無線が使用できない問題ですが、うつむせで倒れていることを加速度センサで検出し、自動的に起き上がるようにしました。
心配なのは、ボタンの押下はやっぱり行われてしまうこと。起き上がったはいいが、操作不能になる可能性はまぬがれない・・・。
有線で参加すれば解決なのだが、それぐらいなら負けたほうがいい。と強がってみる。
そろそろ荷物の準備を始めます。ロボットを持参するときにいつもなやむのが、ロボット以外に何を持っていくか。思い当たるのは、
1、コントローラ
2、バッテリー
3、充電器
4、ドライバやテスタ等の小さな工具
5、パソコン
6、ヤスリやトンカチ等の工具
7、予備サーボ
私は日帰りの時は1〜4だけです。宿泊する場合は1〜7。
もちろん、携帯やデジカメは必須ですね。さて明日はどうしようかな。
会場で参加者の持ち物検査して公表できたらおもしろそう・・・。
そんな予定じゃなかったんだけどな・・・。
VinsentはPS2の無線コントローラ(Logitec製)だと正しくキー入力を認識できるのですが、有線コントローラ(Sony製DUALSHOCK2)だと正しくキー入力を認識できず、今日はその調査を行っておりました。で、原因がわかりました。
25日の日記の波形をよーーく見れば気が付くのですが、無線と有線ではコントローラからの入力信号(波形では黄色)のON/OFFタイミングが微妙に違っています。無線時の入力信号はM16Cからの周期信号(波形では紫色)のOFFトリガに同期してキビキビON/OFFしてます。しかし、有線時の入力信号は同期信号のOFFトリガに当然同期はしているのですが、ゆっくりON/OFFします。
そのあとの周期信号のONトリガにて入力信号をM16Cが取り込むのですが、有線だとこの瞬間ではまだ入力信号が安定していないのです。
何が悪いのかと言うと、周期信号のOFFが遅いのです。なぜ遅いかと言うと、OFFする前にコマンド用の出力信号を出しているからです。
いままでのプログラムはこんな感じ。
1行目:p10_2 = ((m_cPadWData[1] & (1 << ((m_cPadCount - 37) / 2))) != 0) ? ON:OFF ;
2行目:p10_0 = OFF ; // PAD_CLK
この1行目と2行目をひっくり返えしたら有線も無線も問題なくキー入力を認識するようになりました。
1行目の処理は、ひいて、割って、シフトして、アンドして、比較して、代入して・・・結構時間がかかるのでこのような症状が出てしまったようです。
これで、明日のロボファイト2の会場で無線トラブルが発生しても、最悪の場合、有線で操作することが出来ます!!(威張れることではない・・・)
追記 19:30
Vinsentがうつむせで倒れた場合にPS2受信機のボタン押下により無線が使用できない問題ですが、うつむせで倒れていることを加速度センサで検出し、自動的に起き上がるようにしました。
心配なのは、ボタンの押下はやっぱり行われてしまうこと。起き上がったはいいが、操作不能になる可能性はまぬがれない・・・。
有線で参加すれば解決なのだが、それぐらいなら負けたほうがいい。と強がってみる。
そろそろ荷物の準備を始めます。ロボットを持参するときにいつもなやむのが、ロボット以外に何を持っていくか。思い当たるのは、
1、コントローラ
2、バッテリー
3、充電器
4、ドライバやテスタ等の小さな工具
5、パソコン
6、ヤスリやトンカチ等の工具
7、予備サーボ
私は日帰りの時は1〜4だけです。宿泊する場合は1〜7。
もちろん、携帯やデジカメは必須ですね。さて明日はどうしようかな。
会場で参加者の持ち物検査して公表できたらおもしろそう・・・。
この記事のトラックバックURL
http://hiderobo.blog26.fc2.com/tb.php/25-60065410

