ロボコンといったNHKロボコンネタを主に。Piの設定メモexFATの外付けストレージを認識させる高専ロボコン全国大会の動画の入ったSDカードを再生しようとして再生できなく、ファイルシステムexfatを認識できないというメッセージが出たことから気づく。グラフィカル環境では装着後所定の位置に自動マウントも確認。秋月電子通商のみちびき対応GPSモジュールを接続し、GPSから現在位置と現在時刻を取得。同モジュールの1PPS出力を用い、より高精度な現在時刻を取得してみます。本体装備のシリアル/UARTのデバイス名が/dev/ttyAMA0であるのですが、3やZeroだと/dev/ttyS0になるようです。使用したキットはこちら。太陽誘電のGYSFDMAXBを搭載したGPS受信キットです。小型なのが特徴でしょうか。みちびき対応はキットの出荷時期等によってはファームウェアの更新が必要です。自分の確認不足があり上手く動かすことができず(スイッチサイエンス製のUSBシリアルコンバーターにおいて、シリアル側Vccが5Vでは動かず、ジャンパピンで3.3Vにレベルすると動く)、今回は前述のモジュールを用い動かします。本体GPIOのシリアルをシリアルコンソールから汎用的に使えるシリアルにする本体GPIOのシリアルが、ログイン可能なシリアルコンソールに割り振られているのを無効にします。シリアル経由でのログインシェルとしての利用をNo、シリアルポートのハードウェア機能を有効にするかの質問でYesを回答。変更するあるい関連する設定ファイルの直接修正とシリアルコンソールログイン用のgettyを無効にする方法です。rootwait2行目は変更前の内容を残したコメント行です。ポイントはconsoleやkgdbocからttyAMA0および速度設定を外すことです。/boot/config.txtに次のエントリを追加enable_uart=1シリアルコンソールの代わりに、本体の該当するピンを汎用的なUARTにします。続いてシリアルコンソールのgettyを無効に。下記はinitやサービスがsystemdベースのシステムの場合です。http://0pointer.de/blog/projects/serial-console.htmlシリアルコンソールの無効化を行ったら、シャットダウン。GPSモジュールと結線して、電源を入れなおすことになります。GPSキットを結線する。PWM0ときれいに並んでいます。GPS受信キットのピン出力は5VGNDRXDTXD1PPSと、簡単に繋げられる組み合わせになっていますので、幅5ピンのフラットケーブルやGPSキット側をボックスコネクタにしたりして、直結させます。BCM18を1PPS入力とすることになります。GPSキットからのデータ送信を確認。GPSキットを接続して電源を入れたら、GPSキットの受信LEDが赤く点灯することを確認します。GPS衛星群の受信が完了し現在位置の確定・ロックとなりますと1秒ごと明るく点灯します。何らかの方法で汎用シリアルポートへのアクセスと、読みだしてモジュールから送信されてくるか確認します。/dev/ttyAMA0など。GPSモジュールが正しく接続されていれば、おおよそ1秒毎に$で始まるメッセージが飛び続けてくるはずです。0183出力より扱いやすいフォーマットにするのがgpsdデーモンの役割です。導入後はローカルのTCPの2467番ポートから各プロセスがGPS情報を包括的に照会できるようになります。gpsd、gpsd-clients、そしてこのあとの1PPS入力のためにpps-toolsをインストール。次の記述をしますDEVICES="/dev/ttyAMA0"GPSD_OPTIONS="-n"GPS機器が接続されている先と、gpsdのオプションを指定します。設定が終わったら、gpsdを開始させます。-sなどのコマンド、オプションで確認できます。どちらも「q」コマンドないしは「q」+Enterで終了します。行った結果が次のような感じとなります。xmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj座標等は消しています。右のリストが受信した衛星のリストですが、一番上のPRNが193の衛星がみちびき初号機(QZS-1)となります。他に受信できているみちびきはPRNが195が該当します。対応ファーム効果が分かります。gpsd.socket1PPS入力に対応する利用したモジュールはPPS出力を持つので、1PPS入力のピンを定義、gpsd側もそれを認識させて精度を高めてみることにします。/boot/config.txtについて、UARTの有効化の記述の直後のあたりにでも、pps-gpioを有効にする記述と、pps-gpioに与えるパラメータ2つ(gpiopinとassert_falling_edge)を記述して設定します。ここで注意なのは後者のパラメータの側。enable_uart=1dtoverlay=pps-gpiodtparam=gpioin=18dtparam=assert_falling_edge=trueassert_falling_edgeをtrueにすることで、1PPS入力について下りエッジで反応するようにしています。今回用いた太陽誘電製のGPSモジュールは、アクティブローの端子であるためこのような設定となっています。同モジュールのPPS出力は、1秒ごとに100msほどアクティブロー状態となる動作であります。最初この設定を忘れていたために、後に誤差を確認する際NICTのサーバ群と100msほど確実にずれてしまうという事象に陥ることになりました。gpiopinパラメータの値は各自のPPS出力がどこのGPIOに繋がっているかに応じて適宜変更してください。1PPS入力に対応後gpsmonを実行すると、ちゃんと捕捉及びPPS信号が受け取れていれば、UART出力のダンプの合間に次のような出力が観測できるはずです。------画面上部のHUD部分について、下部にPPSの項目も出現します。高専ロボコン30周年を前に月別アーカイブはてなブログをはじめよう!nezukuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。