2023年09月30日
GNSSモジュールの下調べ
IT系だったのは今や昔(というか入ってすぐ辞めた)ので、こういう分野はまったくの門外漢であります。ちょっと調べただけでも、ボードの配線やプログラミングが必要になりそうです。ラズパイ3にGUI入れてちょこっと触ったり組立済のシールドしか使った事もなく、完っ全に知識0からのスタートになります。
このブログは、とりあえず頭の中を整理するために書き出してます。書いてる事が色々間違ってるかもしれませんが私もまだ理解途中です。絶賛情報収集&整理中です。
○自立航法(推測航法)/Dead Reckoning(DR)とはなんぞや?
ある地点からの移動量を方位や速度から算出、積算して位置を推測する方法(大雑把)。元は航海に使ってたらしい?こまけぇこたぁググれ後の自分。
国産ナビの多くは車速パルスとか車速信号といって、文字通り車の速度を取得している。これにジャイロとか加速度センサの数値を組み合わせて演算、積算していく事でどの向きにどのくらい進んだかを推測している。トンネル内などでGNSSが受信出来なくてもナビが大体合ってるのはこの機能のおかげ。GNSSが受信出来る時はDRで補正することでより高精度な測位を行えるかも。
○何故実装するのか?
先日新しく買った中華ナビのMekede M6Pro Plus、HDMI入力の音が出ない不具合はあったがメーカーからチェック箇所を教えて貰い直した。不具合さえ直ればかなりいい製品で、DRが無いのとオフラインで使えない事を除けば、国産ナビより数段上の使い勝手。オフライン対応はカーナビタイムで100km四方を事前ダウンロードしておけばまず大丈夫だったので、残るDRを実装できれば最強になれるだろう…。
あと、測位精度の向上にも期待。現在は3~5mほど誤差があり、ナビアプリの補正で道路にマッチしている印象。基本的に道路を迷う事はないが、この誤差を2m~1.5m(CEP)まで縮められれば大体の自車位置が見れると思う。
出来るならば、最強のアンドロイドナビにしてみたい。
○どう実装するのか?- モジュール選定
DRを実装する方法を探すと、どうやらu-bloxの製品を入手するのが良さそう。安いモジュールで自作した猛者も見ましたが自分には無理そう。
台湾のLOCOSYSとか日本の古野とか出てきますがどこで売ってるか分からんのでu-bloxでいいかな。
u-bloxの開発基板は一般人でも比較的入手しやすそう。
・UDRかADRか?
u-bloxの製品でDRに対応するのは
Neo-M8U、Neo-M8L、Neo-M9V、ZED-F9Kあたり。M9LとかUBX‑M8030‑Kx‑DRとかいうのもあるらしいが一般には出回ってない。
ZED-F9Kは高速高精度でしかもRTK対応だが価格が他の倍はする。RTK基準局がほぼ無い地方の田舎では無力。悲しいなあ。
M8UはUDR、M8LはADR、M9VはUDRとADR両方使える。
UDRとADR、二つの方式の違い
・UDR
Untethered Dead Reckoning
Untethered=非接続って意味(?)
u-blox独自のDR方式で、車速信号の入力無しに内臓センサを用いて車両の進行と速度を推測し演算するらしい。実装はお手軽。それなりに精度も出るらしく(?)誤差も普通の道路なら困らない程度だとのこと。立体駐車場では無力らしい。
・ADR
Automotive Dead Reckoning
いわゆるDR。車速信号の入力が必要で、車速と各内臓センサの数値から演算する。こちらの方が高精度だが、実装は素人には敷居が高い。どっちも高いので誤差かもしれねえ。
現実的には不要だとしても、高スペックという言葉に惹かれるのは人の性だろう?
とはいえF9Kは高すぎるしあまり売ってないのでM8LかM9V。最悪ADRが出来なくてもUDRも出来るM9Vを選ぶのが安パイか?値段もそう変わらないし。ただ円安過ぎてモジュール輸入がキツい…ユーロ高過ぎんよー
○どう実装するのか?- Arduino?流れは?
・CANから車速を取るのが正確で速い(?)
MCP2515というモジュールとArduinoでCANを取得して解析出来るとかなんとか。
当初はラズパイでやろうかと思ったが、電源周りの機構を実装するのが滅茶苦茶めんどくさそうなのでArduinoを使ってみることにした。ACCオフを検知してシャットダウン信号をラズパイに送る機構を作るとか、どう考えてもめんどくさい。
Arduinoを使ったことはないのだが、電子工作では様々な用途で組み込まれているのを見かけるし、なんかラズパイと違って電源をぶつ切りしても大丈夫そうなイメージがあった。互換品が安く入手しやすい。小さい筐体があるのもいい。
ラズパイは今クッソ高いし、電源ぶつ切りすると結構SDカードが壊れる。筐体はでかいし今回の目的には要らない部品が多い。起動も遅い。うん、ラズパイではないな。
ラズパイを生かせる場所は別にあるのだ…。
Arduinoは今回のCAN信号取込用に、既に先人達の知識とプログラムが配布されている。ありがたや…。
プログラムの事をスケッチというらしい?
というかマジでArduinoの事一つも知らない。基礎知識から始めないとだなあ。
学習時間はかかるし何度も躓くだろうが、新しい内容を学習出来て一石二鳥になるはずだ。
で、流れ的には
OBD2からCAN取出(MCP2515)
↓
信号から輪速数値取出(Arduino)
輪速値を対応入力形式に変換?(どうやって?)
↓
ADR搭載GNSSモジュールに入力(どうやって?)
補正GNSSデータ出力(NMEA)
↓
GNSSデータを中華ナビに入力(多分USBGPS4droidでいける)
↓
Androidの疑似ロケーションに入力
↓
マップに位置反映
まずはCAN信号を取り出してみる所から…出来んのか?
……まあ、やってみなきゃ分からんな
追記
→出来なかった、よ……
信号の取り出し自体は出来るようにスケッチを作成したが、JB64はOBD2からCAN信号が垂れ流しになっていない(最近は大抵そうらしい?)ので、レーダー探知機のようにECUにお願いしないと数値が出てこない。が、この出てくる数値はCANの物とはまた違うらしい。OBD2-PIDsとか言うらしい。車速は取れるが、輪速は取れないらしい。
らしい
らしい…
らしい……
次から次に新しい単語が出てきて訳が分からんぞ!
レー探の戻り値を読んでも求めている結果にはならないということだけは確かだ
4WD ECUのCANバスに割り込めば恐らく一番だが失敗時のリスク……。
前途多難だ。
ブログ一覧
Posted at
2023/05/21 12:00:22
今、あなたにおすすめ