カーナビ作るぜ!(1) USBGPS2をLinuxで使う

カーナビに必要なものといえば、GPS。正確にはGPSレシーバ。

GPSで現在地をしって、地図上にマッピングするわけです。いろいろあるんですが、PCで簡単に使えそうなものとして、2007年秋に発売されたI-O DATAのNAVI CLIP (USBGPS2)というものがあります。こいつがLinux上で使えれば、カーナビ作成の第1歩となるわけです。

実際、USBGPS2を買う前にいろいろ調べてみたんですが、USBGPS2にはSiRF社製STARIII/LPというチップが載っていて、GPSレシーバメーカーとしてはかなりメジャーなとこ見たいです。で、はたしてLinuxで使えるのか。調べてみて分かったことで、ほとんどのUSB接続のGPSレシーバは、USB部分は単なるUSB-シリアル変換をしているだけっぽい。ということはLinux側のUSBシリアルドライバが使えればOKそうである。まぁ、USBシリアルならそんなに複雑じゃないだろうから、万一、認識しなくてもドライバを書けば良さそうである。

というとこら辺で考えるのをやめて、ヨドバシに在庫がありそうなのを確認した上で、買ってきました。

さて、とりあえず、LinuxノートPCにさしてみる。反応は特になく、ログを見ても何かささったということしか認識していない。

GPS用のドライバっぽいものを試してみよう。/lib/modules/..../を見ていると、garmin_gpsとか言うのがあるじゃないですか。なんか、調べてたときにgarminという単語は何度も出てきた。というわけで、とりあえず、読み込んでみる
# modprobe -v garmin_gps

usbserialが一緒に読み込まれた…が、まったくダメ。

そこで、WIndows XPのマシンにUSBGPS2をさしてみると…、FT232R USB UARTと出てくる。 やはり、USBシリアルの様だ。

cat /proc/bus/usb/deviceを見てみると、FT232R USB UARTがあった。 んで、Linuxでどうするか。カーネルソースで

grep -i ft232r drivers/usb/serial/*
とかしてみるとftdi_sioがそれっぽい。 とりあえず、
# modprobe ftdi_sio
としても認識されない。 ふーむ。USBってどうやってデバイスを判断しているんだろう。

ソースを読んであたりをつける。たぶん、vendor idとproduct idで 識別してるっぽい。なんか、たくさん登録されている。ハードコーディングしないといけないのか…?まぁ、追加すりゃいいのかな…?とソースを 読み進めると、

発見。モジュール読み込み時にパラメータで指定できるっぽい。

module_param(vendor, ushort, 0);
module_param(product, ushort, 0);

ので、

# modprobe ftdi_sio vendor=0x04bb product=0x093c

とかしてみると。見事に認識!!

drivers/usb/serial/ftdi_sio.c: Detected FT232RL
usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new interface driver ftdi_sio
drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver

というわけで、/dev/ttyUSB0が使えるようになった。さて、認識したところで、次はこいつをソフトウェアから使わないといけないんですが…、 gpsdとgpsdriveはfedoraからrpmが提供されているようなので、そのまま入れる。

gpsd-2.37
gpsd-clients-2.37
gpsdrive-2.09
# yum install gpsd gpsd-client gpsdrive

入ったら、gpsdを起動

# gpsd /dev/ttyUSB0

いくつか有効そうななオプション: * -N バックグラウンドに回らず(デーモン化せず)に出力を標準出力に出す * -D # デバッグモード

gpsd-clientsに付属のxgpsで確認してみると…、おぉ、なんか衛星をとらえているっぽいぞ!

xgpsの画面

んで、なんか緯度経度も表示されている。その座標をGoogle mapで出してみると…、ちゃんと現在値になっているじゃないですか。どうやらLinuxで使う設定はこれで問題ないらしい。

Posted by TechStrom on Wednesday, September 03, 2008