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

前回発生していた保存系のバグは修正。ウェイポイントの保存は随時行うようにした。いずれにしても、この方が安全。自宅サーバとの通信だし。

道は続いているのにパノラマ画像がないので行き止まりになる問題は、行き止まり検知(後方以外に行き先がない)した時に、前方少し遠目のパノラマを検索して分岐として登録する処理を入れた。これで解決する場合もあるが、それなりの遠距離まで非公開になっている場合などは解決不可能。
検索は google.maps.StreetViewLocationRequest で。できれば候補を複数返してくれればいいのだけど。
なんかGoogle Maps APIは痒いところに手が届かない感じがある。
https://developers.google.com/maps/documentation/javascript/reference/street-view-service#StreetViewLocationRequest

分岐系や視線処理が複雑になってきたので、主にデバッグ用にレーダー表示を追加。ヘディングUP、ノースUP切り替え可能で、視界と前方、分岐候補をリアルタイムに表示する。

視線変化がどうもスムースにいかないと思ったのだが、いくつか問題が。処理系をsetInterval()で秒間60回処理しているのだけれど、時々ガクっとなる。処理系は可変フレームレート処理(前回の実行時からの経過時間を加味した計算)で行っているが、パノラマが切り替わった時に視線変化が反映していないようだ。経過時間をグラフ化してみた(下図.黄色)が、やはりパノラマ切り替え時などにsetInterval()に処理が回ってくるまでかなりのラグがあるようで、物理演算系はそのまま処理するとして、視点変化系は逆に時間を加味しないほうが体感上はスムースになる。(このあたりは1人用アクションゲームの知見)

エアロバイクのデータは今まではBlueToothキーボードとして接続してキーデータで送っていたが、エディタに文字が入力されてしまったりとか、キーリピートが邪魔だったりしたので、ゲームパッド化することにした。
これも、ESP32のライブラリがあるので非常に簡単。(使い方はQiitaに)

ESP32-BLE-Gamepad ライブラリの使用方法 (Qiita)

ボタン1 ペダル
ボタン2 ハンドル左がタッチされている
ボタン3 ハンドル右がタッチされている
ボタン4 ハンドルが右左ともタッチされている
X軸    ハンドルの右左を反映

軸とボタン4は冗長な情報だけど、デバッグの都合上便利なので追加している。

(次回は走行性能系)

コメント

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