カーナビ作るぜ!(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で確認してみると…、おぉ、なんか衛星をとらえているっぽいぞ!

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