2016年12月14日

Raspberry Pi 3 + GY-NEO6MV2

GPIOでこいつらを繋いで、データ抜き出すようになるまで色々めんどくさかった〜。とりあえずまとめてみた。

ラジコンの補佐として搭載しておいて、最終的に自力移動できるメカを作りたいと思って価格が安くて出来るだけ正確な測位を目標に色々選定を進めた結果、ひとまずubloxのneo-6mが候補に挙がったので、そいつをGPIOのUART経由で接続しようと試みてみた。

まず、色々資料をあさってみたのだがRPi3になってからBlueToothが付いてるもんだから設定で色々めんどくさいの何のw

ひとまずcmdline.txtとconfig.txtの書き換えで設定が色々変えられるのは知っていたのだが、それに関して一番手っ取り早そうな資料がここにあった。

RaspberryPi3でシリアル通信を行う

でもってコレでBlueToothをブッ殺してLazarus+Synapceで通信できると思いきや、エラーで接続できないwww
なんでやねんとか思いながら「ls /dev -l」とかで見てみたら、何故か変更したパーミッションが知らないうちに戻っているではないか。勝手に変えるんじゃねぇ(八つ当たり)とか思いながら他に原因はないかと思って調べてみたら、

Raspberry PIのGPIO上シリアルとArduinoの通信

つまり、前述のサイトで書き換えたcmdline.txt上にある

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

ここの「console=tty1 console=serial0,115200」こいつによってUARTが使用中になってしまうということのようだ。

私はあまり深く考えないほうなので「じゃぁ削ればいいかwww」ということでソレを削ってリブート。そしたら正常に起動したのを確認後「/dev/ttyAMA0」のパーミッションが起動時に「crw-rw----」に見事に固定されたので、晴れてSynapseで遊べるようになったのであった。

ボーレートは現状57600までしか上がっていないが、GY-NEO6MV2から一応普通にNMEAのテキストを正常に自作ソフトに吐いてくれているので、次はUBXプロトコルで設定を送り込んでRAW吐き出させるところまで進もうかと思う。

あ〜それで、SynapseのUART利用のためのコアなソースであるSynaserなんだが、RPiのようなarmlinuxだとどこかでズレが生じるのか210行目辺りから定義してある「const Rates」の配列でコンパイラ指令(Cで言うプリプロセッサみたいな役どころ)が妙なエラーを誘発するので、RPi用に書き直す必要があるみたいだ。というかウチでは必要だった。{$IFDEF UNIX}・・・{$ENDIF}の間でBxxxxxxxとかいう定数宣言がされていない、とかいう感じのだっけかな。鬱陶しいのでどうせこんな高いボーレート使わないしということでエラーを起こす奴は全部0に書き換えたw 元は「termios.inc(UnixかBseUnixかでインクルードされる定数ファイルだな)」での「{$ifdef cpuarm}」で選択定義されてるところに件のBxxxxxxってのが存在しないのが原因なんだけど、こいつを入れ子で書き加えても配列要素数か何かの関係で別のエラーが出てきてしまった記憶。まぁいつまでもにらめっこしてても無駄な時間を消費するしね〜。将来的に解決手段が出来たら直すことにしようwww

あとついでに、TBlockSerialなんだが、rawみたいなバイナリデータ扱うときはRecvBufferが一番便利そうだ。最初にTLazSerialをちょいと使ってみたのだが殆どのデータをString経由でやり取りしてて気色悪かったので、その元になってるSynapserを調べたらそこにたどり着いたという流れだったりする。
タイマー内蔵してそいつでイベント拾った方が結果的に負荷少ないしねwおおよそGPSの場合内部計算用のデータを収集する時間がある程度必要なので、例えば細かい機械に0.1秒とかしか計算の暇を与えないとFixしなくなっちゃうようだし、機械精度やアンテナの具合によってある程度は前後すると思うが、人間の目線で見た場合早々細かい時間単位で測位するよりも、必要なときに集中して正確な測位ができた方がマシンパワー的にもよいのではないかと思うしね。平均2〜5Hz程度の情報更新量で大丈夫だろうw 100kmでぶっ飛ばすような機械作るなら別だけどwww

先日のi2cと合わせて姿勢+位置情報が漸く取得できるようになって来たな。


posted by MCI_Error at 22:30| Comment(0) | raspberry pi 3
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: