2013年12月27日金曜日

BeagleBorn上の rtkrcv が動いた

シリアルポートからのデータが出ているかの確認が難しい。(めんどくさい?)

BeagleBoneを有線でネットワークに接続することにした。
まず、余っていた無線LANのルータを用意して、HUBとDHCPサーバの代わりに使う。
(ネットワークにはつながないので、WLANコネクタは使わない。)

BeagelBoneのEthernetコネクタに100base-Tケーブルをつなぐだけ、 
ifconfig をタイプすると、eth0にIPアドレスが割り当てられているのが確認できた。

次に、
ノートパソコンに、NV-08cと ublox6TをそれぞれUSBで接続する。
Teratermでrawデータ(バイナリメッセージ)が出力されていることを確認。 (ボーレートの数字やパリティなどもチェック)

続いて、 RTKLIBから strsrv.exe を選んで、起動。 

NV-08cを接続しているシリアルポートを 同様に51001にサーバ接続する。
これで、このパソコンのIPアドレスにTCPクライアントとして51000にリクエストを送ると、NV-08cのデータを受け取ることができる。

もう一つ、srvsrv.exeを起動して、
ublox6Tが接続されているシリアルポートを選択して、TCP のポート番号51000にサーバとして接続する。


以後は、Beaglebornのつながっているパソコンに戻って作業すればいい。
rtcrcv にTCPクライアントからデータを受け取る設定を行う。

rtcrcv.conf を書き直す。
7行目付近にある  inpstr1-type = serial を inpstr1-type = tcpcli に変更
10行目付近の  inpstr1-path = ttyO4:11520:8:n:1:off を
        inpstr1-path = 192.168.11.4:51000 に変更
192.168.11.4の所は、先ほどGPS受信機を接続したPCのIPアドレス、
51000はサーバとして設定したTCPのポート番号です。

ほかには、13行目付近の
ipnstr1-format  に 受信機の型を指定します。
NV-08cの場合はnvc,  ublox6Tは,ubxとなります。

あと、53行目付近の
pos1-navsys をデフォルトのGPSのみから +GLONASSに変更するのをお忘れなく、
GPSは1、 GLONASSは4なので、 GPS+GLONASSだと 1+4で5を指定します。
すべて、の場合は、63かな?

./rtkrcvで起動した際に、
** rtkrcv ver.2.4.2 console (h:help) **
rtkrcv> と表示されれば、OK だけど、 ほかのメッセージが表示される場合は、
.confの書き方がわるいか、接続のどこかが悪いか、rtkrcvのコンパイルが悪いかのいずれかなので、メッセージしたがって、修正する。

rtkrcv> に startを入力して、
starup script ok
rtk sever start と表示されば、問題なし。

私の場合、rtkrcv.confのオーナがrootだったので、sudo su でルート権限になったあと、
ファイルを書き換える必要があった。(sudo su 気がつくのに数時間を要した)

obs で 疑似距離データのデコードができていれば、OK.
navi で航法メッセージのデータが表示される。
sol で計算結果が表時される。
obs 10 の様に、数字をつけると、10秒ごとに表示させることができる。ctrl-cで復帰。

NV-08Cは、エフェメリスを衛星からのデータは、バイナリモードに変更した後と、それ以外は、逐次に受信したときに出力する(最低でも30秒間隔)ので、 rtkrcvで測位開始までに時間がかかる。 遅いときは、10分以上を要する。(待ちくたびれる)。
6Tは数秒置きに表示できるコマンドがあるので、それほど時間がかからない。

無事に、BeagleBorn上のrtkrcvでNV-08cのrawデータで、測位計算ができるようになった。

次は、シリアルポートだ。






Beagleborn に 無線LAN

USBポートに「ちっこい無線LANアダプタ」を 接続して、
リセットボタンをポチリ。

ログインして,
lsmod で確認すると、
無線LANらしいものが表示されている。

/etc/netwark の下にある interfaces ファイルを viで開いて編集。

#WiFi Example とあるところを
auto wlan0
iface wlan0 inet dhcp
wpa-ssid    "ここにRFLANの親機のSSIDを書く"
wpa-psk     "パスフレースを書く"  

と書き直して、

また、リセットボタンを押す。

ifconfig コマンドで表示した結果に wlan0が入っていて
ipアドレスをゲットできていたら、成功。


ping コマンドにより、ネットワークにあるパソコンにパケットが届くことを
確認できるはず。

これで、終わり。  あー、簡単だ。 5分もかからない。
(うそです。ここまでくるのに、ぐるぐる。 大変だった。)


しかし、この後に

CAUTION: musb: Babble Interrupt Occurred  エラーがでて、
BeagleBornが反応しない。 リブートを繰り返す。

似たような現象は、ほかにもあるみたい。
https://groups.google.com/forum/#!msg/beagleboard/C6gMT2_FfiM/bdwVSeahD_sJ

解決策は簡単には見つからず。 USBの許容電流不足の様に見える。

きょうの所は、これでお手上げ。 | ~.~ |  


2013年12月26日木曜日

USB serial on Mac terminal

Mac OSで USB serialに接続すると、/dev下に ttyとcuが作られるので、
違いをしらべてみたら、
「Unixは伝統的に /dev/tty* は受信用、/dev/cu* が発信用である。」 とあった。 へ〜。

じゃ、GPS受信機用には、ttyを使おう。

$stty -help
stty: illegal option -- -help

usage: stty [-a|-e|-g] [-f file] [options]


$stty -f /dev/tty.usbserial-AH01I5ON 
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb crtscts


$stty -f /dev/tty.usbserial-AH01I5ON 115200 では 速度が変更できない?
なんだかわからないなぁ。


screen /dev/tty.usbserial-AH01I5ON 115200 では OK

以下の質問者と同じ状況。
http://www.societyofrobots.com/robotforum/index.php?topic=12663.0
答えが出ていないように見えるのだが、...。


Mac用のターミナルソフト
goSerial  http://www.furrysoft.de/?page=goserial
Zterm   http://www.dalverson.com/zterm/

goSerial は Donte のみで利用が可能。
使いやすい。 








beagleboneのUbuntuで、
一般ユーザからrootになるために、su をしたり、sudoでコマンドを入力していたけど、
どっちもできない。 あれ? 

こっそりと教えもらったら、 sudo su と入力するのが正解でした。
単にsuではルートになれないのね。



$ ./rtkrcv -d /dev/tty.usbmodem1411  -o ../single.conf
invalid option value pos1-snrmask (../single.conf:46)

エラーがでて、先にすすまない。 ublox 6Tでも同じ。