エアロバイクでGoogleMapStreetviewを走る(7)

エアロバイクをゲームパッドデバイスに変更。これは特に問題なく対応できたが、ペダルの回転検出をポーリングで検出するというのは取りこぼしの可能性があるのに気づいた。
軽く調査してみると、ペダル角度でおよそ36度の範囲でONになる。秒間60回ポーリングだと1回転/秒なら6回検知。6回転/秒までは耐えることになる。 逆に、ポーリングが1/10秒だと抜ける。前回調査したところ、パノラマの切り替え時などにけっこう長期間ポーリングスレッドに制御が戻ってこないことがあったので、けっこうありそうな値。

というわけで、ESP側でもポーリングして、回転数をアナログスティックの傾斜値に変換して乗せることにした。いちおう双方の対応プログラムを書いてしばらく比較してみたけれど、今のところポーリング抜けは発生していない。杞憂かもしれないけれど、アナログ値の方が安全なのでこれを利用することにした。

UIもいくつか変更。画面左下の青いパッドアイコンは、ゲームパッドが接続されている時に表示。電源つなぎ忘れの確認とデバッグのため。

自転車アイコンは傾斜の表示。(実際に傾く)
傾斜は現在高度と一つ前の高度(google.maps.ElevationService().getElevationForLocations)と距離から角度を求めている。ただ、この高度はかなり誤差が乗って、単体ではあまりあてに出来ないので、過去10回の移動平均を採用している。この程度なら実用になりそう。

レーダーの左に走行系のパラメータを表示。ペダルによる推進力、傾斜に加減速、空気抵抗、地面抵抗の合力で速度を計算している。これにより、ペダリングを止めてもしばらくは慣性で走り続けてくれるようになって、ちょっと実際のツーリング感覚に近づいている。

ギアはCVTで1~4まで変更。このあたりの計算はなかなか決まらないので試行錯誤している。GoogleSpreadsheetであたりをつけて、あとは実際に走ってみて決めてる。まだ改善の余地はありそう。

これで、ひとまず機能としては最低限の実装が終わった感じ。しばらくは、北海道を走ってみる。

コメント

タイトルとURLをコピーしました