
【訂正】記事の最後の追記で、コード特定できました。ワイドカメラはオプションとして参照されていました。メインカメラは必須です【謝罪】
コード調整しててカメラの使用状態を確かめる必要があり、すごい原始的なやり方で検証しました。
⚫︎まず期待値
experimentalモード→ワイドカメラ
chillモード→望遠カメラ
をそれぞれ使用して走行の推論を行なっている。
⚫︎試したこと
ワイドカメラを布で覆い走行
次に
望遠カメラを布で覆い走行
走行中は手動でexperimentalモードとchillモードを切り替えて挙動を確認する。
⚫︎結果
ワイドカメラ目隠しで、experimental、chillモードどちらも正常に走行
望遠カメラ目隠しで、どちらのモードも停止推論がかかる。
サムネはexperimentalモードのワイド目隠しで、正常に走行してます。(ワイドカメラを使っていたら走れないはず)

望遠目隠しでexperimentalモードはダメ。(ワイドカメラを使っているなら走れるはず)
工工エエエエエエェェェェェェ(゚Д゚)ェェェェェェエエエエエエ工工
この結果を持ってワイドカメラが全く推論に使われていないとは断定できませんが、使われてても限定的な役割しか担っていないのではないかと思われます。(望遠カメラに映らない脇をワイドカメラで補うとか?、あくまで想像です。機械学習部分はオープンソースではないので分からない。正直期待薄)
ともあれこれで、コードの一部を調整する指針が立ちました👍
ーーーーーーーーーーーーーーーーーー
追記、
c2互換機のlegacypilotで望遠カメラ相当の単眼なのにexperimentalモードが動作するというのが不思議だったのですが、今回の検証で腑に落ちました。
要はワイドカメラを推論に使わなくてもopenpilotは動作するということだったんです。
linuxに前方カメラ一つでもopenpilotは動作しますし、これなら納得いきます。
ワイドカメラの今後に期待😂
ーーーーーーーーーーーーーーーーーー
追記、2024/5/17
ワイドカメラは走行の推論には使われてないようですが(かもしれない)、環境光のライトセンサーとして使われてます(ソースコードから確定)
そしてライトセンサーの値はバックライトの輝度の制御に渡されてます。それ以上何に使われているのかは追い切れてません。
走行に使われている望遠カメラの周囲の明るさによる撮影のパラメータの制御は、ワイドカメラのライトセンサーの計算とはコード追った限りでは無関係に見えます。
イチロウパイロットではライトセンサー値を地図の昼夜スタイルの切り替えに使っています。もちろんこれは走行制御には無関係です。
追試は簡単なので(暗幕か何かのキャップをワイドカメラに被せて走ってください)試したい人はお試しあれ。

あらためてcommaに付属のモニターを拭くクロスを二つ折りにして被せただけです。
モードはexperimentalモード固定にしてます。
カメラ画像は真っ黒で、地図が夜スタイルになってます。(ライトセンサーとして使われているので夜と判定されてる)

普通に走れます。カーブでのレーンキープ、前走車への追従停止発進など通常の動作に全く影響ありません。
昼間なので信号に関しては無評価です。
ーーーーーーーーーーーーーーーーーー
追記、2024/5/19

夜に検証。
信号停止発進、ワイドカメラを潰しててもやはり可能です。特段普段と変化ありませんでした。
現状、コードの査読とも合わせてワイドカメラは環境光センサーとexperimentalモード時のカメラ表示にしか使われてないようです。
仮にワイドカメラが使われてても走行の制御に有意な影響はなさそう。
openpilot(と言うかAIの手法)は学習モデルへの入力値(この場合は望遠カメラ動画)の微細な変化(目に見えない撮影画素の変動、道路の振動やcommaに触ることによるちょっとした端末の揺れ)で、たまたまという挙動が容易に発生しますから、それに飛びつかないよう検証の際は気をつけてます。
ーーーーーーーーーーーーーーー
追記20240626、さらに読んでコード見つけました。
# if getCLBuffer is not None, frame will be None
self.model.setInputBuffer("input_imgs", self.frame.prepare(buf, transform.flatten(), self.model.getCLBuffer("input_imgs")))
if wbuf is not None:
self.model.setInputBuffer("big_input_imgs", self.wide_frame.prepare(wbuf, transform_wide.flatten(), self.model.getCLBuffer("big_input_imgs")))
望遠(メイン)カメラ必須、ワイドカメラは有効なら追加で使用するというコードになってました。
全く使っていないと言うことはなさそうです。openpilotさん疑ってごめんなさい😂
secretgoodopenpilotを試していて、キャリブレーションがワイドカメラでおかしくなる現象があり、それ関連でコード見ていて気がつきました。
こちらとしてもワイドカメラ全く使っていないとかもったいない状況じゃなくて良かったです(●´ω`●)
Posted at 2024/06/26 08:41:09 | |
トラックバック(0) | 日記