2018年12月29日土曜日

Rasp Pi Zero WH:Raspbian:Alipine:Linux:Rasp Pi ZERO で動くシステムの OS を Raspbian から Alpine Linux に差し替えた

Rasp Pi ZERO で動くシステムの OS を Raspbian から Alpine Linux に差し替えた

なぜ?
 shutdown 操作なしでの電源断で SD カードの内容が壊れるのを防ぐため
 
どんなシステム?
 機能1 USB から入力されるデータの一部をネット経由でサーバーに上げる
 機能2 USB から入力されるデータの一部を接続してある LCD に表示する
 USB から入力されるデータ - C94-M8P が送出する RTCM3
 データをネット経由でサーバーに上げるプログラム - str2str
 データを LCD に表示するプログラム - python で書いた自家製プログラム

どうやった?
 ・Alpine Linux 3.8.1 - RASPBERRY PI - armhf をダウンロードして、fat32 でフォーマットした sd カードに解凍したものをコピー
 ・上記 sd カードを RaspPi Zero にセットしてこちらこちらを参考に OS をセットアップ
 ・Raspbian でコンパイルした str2str は Alpine Linux では動かなかった。Rasp Pi Zero でコンパイルするために gcc をインストールし、rtklib のソースをインストールしようとしたところで、メモリが足りなくなる。
 ・Rasp Pi 3B+ を買ってきて 3B+ 向けの sd カードを作成、コンパイルを再挑戦(Zero は RAM 512M だが、3B+ は RAM 1G)。コンパイル成功。
 ・Rasp Pi 3B+ でコンパイルした str2str を Rasp Pi Zero コピーして動作確認
 ・Rasp Pi Zero に python2 をインストールして LCD 制御プログラムの動作確認
  - pip で sysv_ipc, pymap3d をインストールする必要があったのだが、そのために apk で gcc, python2-dev, musl-dev をインストールする必要があった。gcc, python2-dev, musl-dev をインストールして pip を実行、pip 終了後に gcc, python2-dev, musl-dev をアンインストールした。
 ・pip でインストールした内容を 'lbu ci -d' の対象とするために 'lbu add /usr/lib/python2.7/site-packages/*' を実行
 ・/etc/init.d/shoho-getmsg, /etc/init.d/shoho-str2str を作って str2str 、lcd 制御プログラムをサービス化。
 ・'lbu add /etc/init.d/shoho-getmsg', 'lbu add /etc/init.d/shoho-str2str', 'lbu ci -d' を実行して、必要なファイルを永続化。


ここまででわかったこと
 ・RAM の半分を RAM-DISK として使い、通常動作中は sd カードに書き込みをしない
 ・RAM-DISK の内容を sd カードに保存するコマンドは 'lbu ci -d'
 ・RAM-DISK から sd カードに保存する領域の指定は 'ldu add /xxx/xxx'
  - /xxx/xxx/* としないと、サブディレクトリ一式を指定したことにならない
 ・パッケージ管理は apk (apt でも yum でもない)
 ・サービス管理は OpenRC (SysVinit でも Systemd でもない)
  -普通のプログラムはそのままではサービスにならない。バックグラウンドに回すスクリプトを書く必要がある(Systemd の場合は不要だった)
 ・サイズが小さい(上記システムが動く sd のファイルサイズが合計で 145MB)
 ・ファイルフォーマットが FAT32 (Windows で全領域にアクセスできる)
 ・バックアップ・リストアが楽(FAT32 でファイルサイズが小さいので、Windows で簡単にバックアップできる。リストアは Windows で FAT32 でフォーマットした sd カードにバックアップしたファイルをコピーすれば OK)


 

2018年12月25日火曜日

Rasp Pi Zero WH:Alipine Linux RPi.GPIO のインストール

pip を入れてから

>pip install rpi.gpio
とやったら、コンパイルができない >< 系のエラーが出たので

>apk add gcc

とやってから再挑戦。 "Python.h がない!!" というエラーが出たので

> apk add python2-dev

とやってから再挑戦。"limits.h がない!!"というエラーが出たので

>apk add musl-dev

とやってから再挑戦。

やっと Successfully !

Rasp Pi Zero WH:Alipine Linux pip のインストール

ネットで探してもインストール方法が見つからなかったので頭をひねった。

> apk search | grep pip
py2-pip-10.0.1-r0
py-django-pipeline-1.3.25-r0
uwsgi-logpipe-2.0.17-r1
rp-alpine-4-1:/$ apk add py2-pip
でみつかったので
 
> apk add py2-pip

とやったらエラーが出てきて、最後に

>You are using pip version 10.0.1, however version 18.1 is available.
>You should consider upgrading via the 'pip install --upgrade pip' command.

と表示されたので

>pip install --upgrade pip

を実行して完了

2018年12月18日火曜日

Rasp Pi Zero WH:Alipine Linux インストール

 Raspberry Pi Zero を組み込み用に使おうとうしたときに、問題となるのが電源断時の SD カードの内容の保護。
 
 Qiita で RaspberryPi2 の SD カードを aufs と fsprotect で保護する という記事を見つけたが、クロスビルドの環境構築で挫折 ><。他に何か中と調べたら RaspberryPiで「alpinelinux」 という記事を発見。いろいろと特徴が書かれていたのだが、
 
>よほどのことがないと起動パーティションは壊れない(書き換えようとするプロセスが居ない)
>機器の電源断やCPUの誤動作程度ではほぼほぼ起動パーティションの破壊はおこりません

の二点に惹かれて試してみることに。

↑のサイトの内容だけではうまくいかなかったので Raspberry Pi3 ZERO(W) Alpine Linux(3.8.1)インストール と合わせて何とかうまくいった。

実際に行ったのは、結局、

2018年11月25日日曜日

Web:javascript が勝手に動くとき

 サイトで DataTables 使って表を作り、行をクリックして選択、ボタンを押してその行に対する処理を行う処理を実装していた。FireFox の開発ツールを使ってステップ実行をしながらデバッグしていたのだが、ボタンの onClick で飛んできた直後にブレークポイントを入れたのだが、止まったと同時にすべての行が選択されてしまう現象が起きた。

最初はコードがおかしいのかと思ったのだが、どうも開発ツールを使っていないと現象が起きないっぽい。よくよく調べると[監視式]にすべての行が選択される式が書かれていた ><

datatable.rows().select() <- こんな感じ

使い方がよくわからなくていろいろ試していたのだが、こんなことが起きるとは...


2018年11月12日月曜日

Web:JS:一つしかないラジオボタンの状態を拾う方法

ラジオボタンが複数ある場合(フツーの状態)

<form id="target">
 <input name="hoge" type="radio" value="a"> A
 <input name="hoge" type="radio" value="b"> B
 <input name="hoge" type="radio" value="c"> C
</form>

// form要素を取得
var element = document.getElementById( "target" ) ;

// form要素内のラジオボタングループ(name="hoge")を取得
var radioNodeList = element.hoge ;

// 選択状態の値(value)を取得 (Bが選択状態なら"b"が返る)
var a = radioNodeList.value ;

if ( a === "" ) {
 // 未選択状態
} else {
 // aには選択状態の値が代入されている
 console.log( a ) ;
}
(こちらのサイトのコードをお借りした)

しかし、ラジオボタンが一つしかないとき、この方法は使えない。クリックされていない状態でも value が返ってくる(複数あって一つも選択されていないときは value が "" となる)。

ラジオボタンの数が可変で一つのこともある場合は、一つの場合だけ処理を分け、value ではなく、checked (選択されていると true) で拾うのが吉。

上記ソースだと、ラジオボタンが一個の場合は

// 選択状態の値(true)を取得
// value は最初から input 要素の value 属性が設定されている
var a = radioNodeList.checked ;

if ( a === false ) {
 // 未選択状態
} else {
 // 選択状態
}



2018年11月3日土曜日

Linux:Samba:Ubuntu18.04:とりあえず動く smb.conf 設定

何度やっても samba は嵌る ><

smb.conf を壊してどうにもならなくなった時
 -> apt remvoe しても返ってこない。/usr/share/samba/smb.conf にオリジナルがある。

とりあえず以下の設定で共有ホルダーが使えるようになる
 ->[global] に以下を追加
unix charset = UTF-8
dos charset = CP932
unix extensions = no
wide links = yes
120行目付近にある以下のコメントを外して有効に
map to guest = bad user

元ネタはこちらこちら

共有じゃないホルダーへのアクセスは、いまだできず ><


2018年10月20日土曜日

Web:Edge で縦の border が途切れたとき

<span>でセルを並べて、border で罫線を引いた。Firefox /Chrome ではきれいに引けたのだが、Edge (17.17134)だと、半角/全角が横に混じった時、縦の罫線が途切れる。

諸々調べた結果、
 すべてのセルに
  • height: 1.5rem;
  • vertical-align: middle;  
を設定すれば OK

2018年10月5日金曜日

Rasp Pi Zero WH:3.3V は弱い?

 Rasp Pi Zero WH に秋月の 20x4 3.3V LCD をつなげたのだが、1時間ぐらい使っていると WiFi 経由で ssh でログインしているターミナルの反応が鈍くなり、'ネットが切断された'とダイアログが出て落ちてしまった。
 そんなことが数回続いたので、いろいろ調べてみた。LCD の表示プログラムがメモリーリークを起こしているのかと思ったが、free で見た限りそんなことはなかった。CPU に触ったが、熱暴走というほど熱くない。なにより、LCD を外してプログラムを動かすと現象がでない。(LCD へのアクセスは busy を見ないロジックなのでプログラムの動作は LCD があってもなくても同じ)

Linux:systemd で python スクリプトを起動できないとき

 Raspberry Pi zero WH で 、電源オン時に python スクリプトを systemd で起動させようとしたら苦労したのでメモ。

現象:
 python スクリプトを systemd から起動しようとしたらうまくいかない。


原因:
 python のモジュールをインストールしたとき、インストールしたユーザーでしか実行できない設定だった。
 また、自作モジュールのディレクトリ配置にも問題があった

解決策:
  pip でインストールしたモジュール:*.service の [Service]に、'User=pi' を追加
 自作モジュール:[自作モジュール].py を WorkingDirectory にコピー


経過:
 起動できないスクリプトからコードを減らしていき、import がなければエラーが起きないことを確認。ネットを検索すると、systemd は root で実行するが、モジュールインストール時にインストールユーザーしか使えない設定のためエラーになったらしい
 *.service ファイルの[Service]に 'User=pi' を追加して pip でインストールしたモジュールについては解決。

 自作モジュールの import のエラーは解決せずに残った。起動させるスクリプトに一つ下のディレクトリに配置してあったのだが、同じディレクトリにリンクを張って解決(コマンドラインからは問題なく動いていたのだが...)。

その他:
 日本語の情報が見つけられなかった...

2018年10月4日木曜日

Rasp Pi Zero WH:swap を off する

軽い処理しか行わず、RAM が 300Mbyte も余る状況だったので、swap を 0 に設定。

sudo systemctl disable dphys-swapfile
を実行して、reboot すれば OK。

参考:こちら 

----
と、思ったらすでに一度やってた。備忘録の意味がない ><

2018年9月27日木曜日

さくらのクラウド:Apache と PHP のインストール

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install php7.2

いろいろやったが Ubuntu Server 18.04 LTS 64bit は、この3行入力だけでインストール&細かい設定が終わる模様(実行順番は大事)

html を置くディレクトリは /var/www/html





さくらのクラウド:最初のログイン ID は ubuntu

さくらのクラウドにサーバーを立てて、最初のログインで嵌る。

ubuntu を立てたのだが、ID:root passwd:インスタンス作成時の「管理ユーザーのパスワード」でログインできず。

調べたところ最初のユーザーや 'ubuntu' だった...

2018年9月25日火曜日

Rasp Pi Zero WH:OS の swap を無くす

 Raspberry Pi ZERO の SD カードを長持ちさせる方法を調査中。まずは swap をやめる。default では RAM が 512M なのに 100M というなんとも中途半端な swap 領域を確保している。これにどういう意味があるのか?

----
 まずは
pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           434M         27M        336M        3.2M         69M        356M
Swap:            99M          0B          99M
として swap 領域があることを確認。そのあと、 
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile
として swap を止める。そのあと、
$ sudo shutdown -r now
で reboot して、再起動したら

pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         444452       28836      344236        3288       71380      364376
Swap:             0           0           0
となれば OK

元ネタはこちら



2018年9月14日金曜日

Rasp Pi Zero WH:ftp をインストール

> sudo apt-get install vsftpd

一発で OK。

細かい設定が必要というサイトもあったが、自分の環境では Windows から ffftp で、これだけでつながった。

小さなテキストファイルはやり取りできたがでっかい zip ファイルをアップロードできなかった。

こちらのサイトの設定が必要


2018年9月12日水曜日

Rasp Pi Zero WH:PIP をインストール

OS のバージョンは
Linux raspberrypi 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l GNU/Linux
以下の2行で OK
sudo apt-get install python-dev
sudo apt-get install python-pip
元ネタはこちら

2018年9月5日水曜日

メモ:samba が WiFi でつながらなかったら WINS

 Raspberry Pi Zero WH で samba を立ち上げた。USB 経由の TCP/IP 接続では問題なくネットワークドライブとして使えたのだが、WiFi 接続にしたらつながらなくなった。エクスプローラからデバイスは見えるのだが、つなぎにいくとエラーになる。

 調べていくと WINS の設定で使えるようになった。詳細はこちら参照。

2018年9月2日日曜日

メモ:2018/04 に購入した C94-M8P のバージョン

 u-blox 8 / u-blox M8 Receiver Description によると Standard Precision GNSS products ということらしい

----

Software Version:EXT CORE 3.01 (db0c89)
Hardware Version:00080000
Extension(s):
ROM BASE 3.01(107888)
FWVER=HPG 1.40REF
PROTVER=20.30
MOD=NEO-M8P-2
FIS=0xEF4015(100111)
GPS;GLO;BDS
QZSS


2018年8月31日金曜日

Rasp Pi Zero WH:samba を立てる

 RTKLIB 周りのソースに手を入れる必要が出てきた。たくさんのソースを vi でメンテできるほどのスキルが無いので、samba を立てて Windows のエディターを使うことにした。

 まずは samba のインストール
$ sudo apt-get update
$ sudo apt-get upgrade    <- これはおまけ 
$ sudo apt-get install samba

 続いて /etc/samba/smb.conf の最後に以下を追加

[pi]
    comment = Raspberry Pi
    path = /home/pi
    guest ok = yes
    read only = no
    public = yes
    browsable = yes
    force user = pi
最後に samba を起動
$ sudo service smbd restart
$ sudo service nmbd restart

元ネタはこちら

Rasp Pi Zero WH:WiFi に固定 IP を割り当て

 WiFi につながったのだが、IP アドレスがルータから DHCP で振られていると、ssh でログインするたびに IP アドレスを確認しなくてはならないので固定 IP を割り当てることに。

/etc/dhcpcd.conf の最後に以下を追加
interface wlan0
static ip_address=192.168.10.101/24
static routers=192.168.10.254
static domain_name_servers=192.168.10.254
その後以下を実行して有効に
sudo service dhcpcd reload

元ネタはこちら

2018年8月23日木曜日

AliExpress に注文したら、一週間で届いた

 AliExpress で GPS のアンテナを二つ注文した

 こちらの店これこれ。配送は China Post Registered Air Mail で $8 。注文したのが 8/14、届いたのが 8/21。一週間かからなかった。


2018年8月22日水曜日

Rasp Pi Zero WH:WiFi につなぐ

 Raspberry Pi Zero WH を WiFi 経由でネットワークにつなぐ方法。
$ vim pass.txt
(wifiのパスワードを記載)

$ sudo sh -c 'wpa_passphrase "wifiのアクセスポイント名" < pass.txt >> /etc/wpa_supplicant/wpa_supplicant.conf'

$ sudo wpa_cli reconfigure
この後、
$ sudo raspi-config
 で設定画面を開いて、[2 Network Options] を選択、その後[N2 Wi-fi]を選択。そこで国を選ぶ。その先には進まず、終了。

 いろいろやってるうちに気が付いたらつながっていたので、raspi-config は実行しなくてよいかも。

 元ネタはこちら




Rasp Pi Zero WH:bluetooth 経由でスマホを使ってテザリング

 Raspberry Pi Zero WH を bluetooth 経由でスマホで接続、テザリングしてインターネットにつないだ。

やったこと:

1.OS のアップデート
$ sudo apt-get update
$ sudo apt-get upgrade
この時点のバージョンは
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l GNU/Linux

2.スマホとペアリング
$ sudo bluetoothctl
[bluetooth]# scan on
...
Device FF:FF:XX:XX:XX:XX (スマホの型番)
...
[bluetooth]# pair FF:FF:XX:XX:XX:XX
[bluetooth]# exit
 ※元ネタはこちら 、他のサイトでは 'sudo' が無くて動かなかった


3.bluetooth の PAN プロファイルをインストール
$ wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan

$ chmod 755 bt-pan
$ sudo ./bt-pan client XX:XX:XX:XX:XX:XX

※dbusがないとエラーが出た場合は下記を別途インストール
$ sudo apt-get install python-dbus
 ※元ネタはこちら

----
 結果的にはこれで動いたが、最初、スマホがきちんとネットにつながっていなかったために、一苦労した。

2018年8月20日月曜日

Rasp Pi Zero のセットアップで嵌った

 Raspberry Pi Zero WH を購入。まずは、Windows PC と USB ケーブルでつないで ssh 接続しようとしたら3時間以上かかってしまった。

 原因はどうやら、Windows PC に2015年にインストールした Bonjour らしい。

----
 基本的にはこちらのサイトの手順+こちらのサイトを見てポートの穴あけ。

 やったのだが、さっぱり動かない。RaspPi Zero をイーサネットポートとして認識しているのだが ssh でつなごうとすると「gethostbyname() で raspberrypi.local がみつからない」と出てくる。固定 IP を割り振ったら、ping は返ってくるのだが ssh ではタイムアウト。
 直近の OSイメージを使っていたのだが、念のために記事にあるバージョンのイメージを使ってやってもだめ。

 Bonjour を再インストールしようと Windows 設定画面の[アプリと機能]を開くと [Bonjour] と [Bonjour 印刷サービス] と Bonjour が二つある。そして Bonjour の方の日付が 2015年。そういえば昔、入れた覚えが...。

 とりあえず両方アンインストールして、公式サイトから Bonjour をインストールしなおし。これで無事動いた。
 ちなみに、今確認したところ [Bonjour] と [Bonjour 印刷サービス]は両方あった。[Bonjour]の日付はもちろん今日。

 最新の OS イメージを使っても動くことが確認できた。

----
 最近、こういう予想外のところで嵌ることが少なかったのだが、まぁ、こういことは当然あるさ(笑


2018年8月17日金曜日

CSG Shop に注文したら

 GPS 系のアイテムの多い CSG Shop に注文してみた。

 07/23 の夕方に Web から注文して届いたのは 8/14、ちょうど3週間。

 発送確認のメールは 7/30 00:18(JST)。

 'Carrier' は 'Signed EU post with tracking number 100-500gr' はだったけど、tracking number などの連絡は一切なく。送料は $7.00。

2018年8月15日水曜日

2018年8月14日火曜日

u-blox の M8x +u-Center で BeiDou, QZSS を表示させる方法

 C94-M8P を u-Center に接続すると、default setting では BeiDou, QZSS が表示されない。これを表示されるようにする方法。

2018年8月10日金曜日

Linux:firewall に穴を開ける方法

さくらのクラウドで str2str を動かす際に必要。

確認環境:
 さくらのクラウド上の CentOS Linux release 7.5.1804 (Core) 2018/08/09 作成

firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --reload
 元ネタはこちらの下の方


2018年8月8日水曜日

RTK-GPS:u-blox 6 で raw データを出力させる方法2

 u-blox 6 を u-Center から直接操作して raw データを出力できるようになったのが前回までのあらすじ。

 今回は RTKLIB につないだ u-blox 6 に raw データを出力させ RTK を使うお話。

 OpenStreetMap Wiki の情報
!HEX b5 62 09 01 10 00 c8 16 00 00 00 00 00 00 97 69 21 00 00 00 02 10 2b 22
!HEX b5 62 09 01 10 00 0c 19 00 00 00 00 00 00 83 69 21 00 00 00 02 11 5f f0
のような書式があり、どこで使うのかといろいろ調た。u-Center の [Tools]->[GNSS Configuration]->[GNSS > File] で出力される設定ファイルの内容や、RTKLIB ver.2.4.2 Manual pp.10 の内容から、RTKNAVI の [Input Stream]-> [Cmd] で使える書式と判明。上記2行は「使えるようにする」設定で、データを USB から出力するにはさらに以下の2行が必要。(このあたりも参考にした)
!UBX CFG-MSG 2 16 0 0 0 1 0 0
!UBX CFG-MSG 2 17 0 0 0 1 0 0
  結局下の図のように設定することで、無事 u-blox 6 のモジュールが RTKLIB で特別な操作なしに使えるようになり、同様の設定で RtkGps+ でも使えた。



 スーパーの駐車場で u-blox 6 + RtkGps+ + 善意の基準局(5km 程離れている) で試したところ、Float解までは得られて、緯度経度ともに小数点以下5桁までは安定して表示された。5分ほどでは Fix 解は得られなかったが、このあたりが限界か、調整すれば何とかなるのかはこれからの課題。

2018年8月7日火曜日

RTK-GPS:RtkGps+ で u-blox M8P の RAW データを使う

 RtkGps+ が C94-M8P の RAW データを認識しない件、RTKLIB のバージョンが古いことが原因とあたりを付けた。

 RtkGps+ は github にコードが公開されているので、自分でなんとかしようとしたのだが、異様に手間がかかった。
 まずは Android Studio でビルドできるようにと頑張った。なにせ compileSdkVersion 17, minSdkVersion 14, targetSdkVersion 17、おまけに NDK も使ってる。RTK と直接関係ない機能をあっちこっち潰し、ビルド環境を Windwos から Mac に変え、ビルドができるようになるまで一週間以上かかった。
 ただ、そこからは古い RTKLIB と新しい RTKLIB のソースを見比べながら、割とあっさり C94-M8P の RAW データが使えるようになった。使えるようになったといっても、それっぽく表示がそれっぽくなっただけで、まだ RTK が FIX したわけではないのだが。

 次は戸外で FIX することの確認だ。

p.s.
 いまこのブログを書くために元の github を確認したら、ここ一週間で新しいコミットがいくつも入ってる。 近々新バージョンがリリースされるのだろうか?無駄なことしたかもしれない orz

 まぁ、いろいろと Android の勉強にはなったし、当面の目標は達成されたし、いいことにしよう...

2018年7月26日木曜日

RTK-GPS:u-blox 6 で raw データを出力させる方法

 C94-M8P で基地局を作ろうと思って調べていたら、ひょんなことから発見。一筋縄ではいかなかったが、取り合えずやり方がわかったのでメモ。

 条件は厳しい。

対象:
 hardware:u-blox 6
  farmware:Ver 7.03(45969)

 使ったのはアンテナ一体型モジュールで、PC とは USB 接続
 買ったのは 2016/01、Amazon から これ。現在は品切れだけど、型名で検索すると google 様が海外の別な店を勧めてくる。ただし、同じように使えるかは不明(2018/08/01 現在)

やり方:
 ・u-blox 6 を PC に接続(電源 ON)、u-center 起動、u-blox 6 と connect
 ・F9 を押して、Message View を開く
 ・Message View の左の window を一番下までスクロールして CUSTOM を開く
 ・右の Window に以下をコピペして Send をクリック

b5 62 09 01 10 00 c8 16 00 00 00 00 00 00 97 69 21 00 00 00 02 10 2b 22

 ・右の Window に以下をコピペして Send をクリック

b5 62 09 01 10 00 0c 19 00 00 00 00 00 00 83 69 21 00 00 00 02 11 5f f0

  [パラメータはこちらから]

 ・Ctrl+F9 を押して、Configure View を開く
 ・左の Window で MSG を選択
 ・右の Window で[02-10 RXM-RAW],[02-11 RXM-SFRB]で出力を選択

(ここまで書いて翌日試したら動かなかった ><  で、さらに調べて以下を発見)
 ・Configure View の左の Window で PRT を開く
 ・右の Window で下の設定をして send をクリック(出力速度が 9600bps だと raw データを流しきれず、コントローラーが勝手に間引いてしまうらしい。今回使ったのは USB 接続なので、UART1 を disable した。ちなみにこの設定だけは不揮発性メモリに反映される)



  ・このまま電源を切らずに RTKNAVI につなぎ変えると、無事、Rover として認識

----
残念ながら、この設定、u-blox 6 の不揮発性メモリには反映させられないみたいなので、電源投入時に毎回設定が必要 ><

ここを何とかすれば、使い道が広がりそう。

----
続きはこちら。RTKLIB/RTKGPS+ のローバーとして u-blox 6 を使えるようになった 。

2018年7月25日水曜日

RTK-GPS:rtklib と遊ぶ - その2

 Windows 上の rtklib が C94-M8P との組み合わせで動いたので、今度は Android 上で rtklib+ と C94-M8P の組み合わせに挑戦。

 Windows と同じような設定をしても、Rover も Base も SNR に信号がでてこない。緑の四角いのは、二つ、チカチカしてるので Rover/Base ともに、それっぽいデータが来ていることは間違いなさそう。
 シリアルターミナルを立ち上げて C94-M8P からのデータを見ると NMEA っぽく見えるし、telnet で Base につないでも NMEA ぽっく見える。
 (ちなみに base は 善意の基準局掲示板 にあるデータ形式 u-blox、接続方法 STRSVRの局)

 最初、Intel CPU の Android タブレットを WiFi 経由で Base につないでいたので、Intel CPU の問題かと思い、Arm CPU の Android phone + WiFi でつないでもダメ、Android では無理なかと、Windows tablet + rtklib + WiFi で試してもダメ。Wndows tablet + rtklib の設定を、動いている Windows PC + rtklib の設定にしてもダメ。

 ただ、Windows tablet + rtklib と Windows PC + rtklib の設定を比較しているときに、設定ダイアログの内容が微妙に違っていることに気が付いた。
 動いている Windows PC 上の rtklib は 2.4.2 p13、動かない Windows tablet 上の rtklib は 2.4.2。Windows tablet の rtklib を 2.4.2 p13 に入れ替えたら動いた。

 Android 上の RtkGps+ のバージョンは 1.0 alpha 23 。さて、ベースの rtklib バージョンは...

2018/08/01 追記:
 RtkGps+ の README.md によれば  RtkGps+ 1.0 alpha 23 の rtklib は "Version pre 2.4.2p9"。C94-M8P の出力が認識されないのはこのせいか?

 

2018年7月23日月曜日

RTK-GPS:rtklib と遊ぶ - その1

 これから需要が伸びそうなのところを目指して、RTK-GPS を研究中。4月に u-blox の C94-M8P を入手したのだが、忙しくて手を付けられず。

 7月になってようやく触り出す。好条件化で Rover が FIX した時の誤差が cm オーダーになる驚異的な精度を体感。

 次は条件の悪いときの精度を調べたいのだが、外での実験にはいろいろと準備がいるし、天候とも相談だしということで腰が重くなる。

  ということで、家で C94-M8P を Windows 上の rtklib につないでみる。動かすためのキモは、

 ・ドライバーを Windows 標準のシリアルドライバーに変更
 ・u-center に接続して ctrl + F9 でConfigure ダイアログを開き UBX-CFG(config)-MSG(Messages) で [02-15 RXM-RAWX] と [02-13 RXM-SFRBX] を USB から出力するように設定する

  [02-15 RXM-RAWX] と [02-13 RXM-SFRBX]については、RTKLIB ver.2.2 Manual の 6 ページに
- ublox Raw : RXMRAW, RXMSFRM

とあるのを見つけていたが、なんのことかわからず無視していた。 動かないのでいろいろ調べていたところ、こちらのページ

u-bloxの受信機をRTKNAVIに接続する場合,受信機出力としてUBXフォーマットのRXM-RAWとRXM-SFRBが必要になります.

 とあったので、「あ、あの設定か!」と気づき設定したら動いた。

 ただし、C94-M8P では、「RXM-RAW」と「RXM-SFRB」は設定できなかったので「RXM-RAWX」と「RXM-SFRBX」を設定した。

 ちなみに u-blox 6 のアンテナ一体型受信機では、上記パラメータは全く設定できなかったので、u-blox 6 は RTK-GPS のローバーになれないっぽい。

 

2018年4月16日月曜日

Xamarin の C# の Android Framework でメニューを使うには?

 Xamarin + Android Framework でアプリ開発中、Menu の追加にてこずった。
 
 後からメニューを追加しようとして、ネットで探した

public override Boolean OnCreateOptionsMenu (IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.mymenu, menu);
    return base.OnPrepareOptionsMenu(menu);
}

をコピペしたのだが

エラー CS0115 'xxxActivity.OnCreateOptionsMenu(IMenu)': オーバーライドする適切なメソッドが見つかりませんでした。 

エラー CS0246 型または名前空間の名前 'IMenu' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。

とエラーが出る。

OnCreateOptionsMenu() は、Android Framework のメソッドそのままなのに、見つかりませんってどういうこと?と悩むこと10数分。名前空間の指定が足りないのは IMenu の方だった

using Android.Views;

を追加して一件落着。

VS のコード補完は Android Studio より弱いのか。