2011年11月27日日曜日

GPSモジュールGT-720Fの設定コマンドと応答

忘却の彼方のGPSモジュール

いつだったか忘れましたが、随分前に購入してそれっきりだったGPSモジュールGT-720Fを引っ張り出してきました。 


特にこのモジュールを使いたい強い動機はないのですが、TOPPERS/ASP for LPCのUART系のデバッグに色々繋いで確かめたいというのと、どうせデバッグするなら「何か本当に使っている感じが欲しい」という事からの再登場です。(本当に使っている感じにするのは、成果物をより実用的なものにする意図があります。)

先日の「LPCXpresso横浜お楽しみ部会」にあわせて適当に仕立てた時、(どうでも良いけど)気になる事があったので調べる事にしました。 (私の場合、本当に些細でどうでも良い事が気になって大事な時間を使ってしまったりして何だか残念な感じです。)

(どうでも良いけど)気になる事

  • 「データ・シート」と言われているPDFに設定コマンドの仕様が書かれていない。
  • 「SkyTraq(付属アプリケーション)では設定できるけど、マイコンからはできない。」と主張している人がいる。
  • それっぽいPDFは見つかるが、GT-720Fで使えるのかわからない。
  • 誰もあまり調べてない。
まぁ、GPSと言えばu-bloxでしょという感じで、このモジュールにそれほど時間をかける意味もないのですが、気にしなくて良いや、と思えば思うほど、どんどん気になってくるのです。

とりあえず調べる

コマンドのやり取りに関する「それっぽいPDF」は見つかったので、それを参考にアプリケーションとGPSの通信を見てみます。

下のやりとりは、Configuration NMEA Messageコマンドです。

以下のメッセージは、SkyTraqのNMEAメッセージ編集画面で設定を実行した時に、アプリケーションからGPSモジュールに投げられるコマンドです。


さて、GPSモジュールからは2つのパケットが返ってきました。



さて、ウェブに転がっていたApplication Note AN0003 Binary Messages Of SkyTraq Venus 5 GPS Receiver Ver 0.3 Feb. 1, 2007と比較してみます。(Start of SequenceとEnd of Sequenceを黄色で囲ってあります。)

以下の通り、メッセージのフォーマットが一致している事がわかります。


Configure NMEA Messageのペイロードの仕様は、以下のように記述されていました。
どうやらこのPDFの内容と完全に一致するようです。


ACKの場合、要求に応じてACK応答の後に情報を返してくるようになっています。
これは、先の結果どおりです。


このように、それっぽいPDFの内容と一致していそうという事がわかりました。
それではということで、マイコンに以下のようなインターフェースを実装してみました。


とにかくマイコン上のアプリケーションからこのインターフェースを呼べば、SkyTraqと同じ設定が可能になるというわけです。

試しにVTGのみ1秒に設定し、その他を0(出力なし)にしてみました。


どうやら制御できているようです。


ということで

ということで、GT-720Fの設定はSkyTraqからだけでなく、当然のようにマイコンからも可能である事がわかりました。

まぁ、だからなんだという感じですが、特別に摩訶不思議なシーケンスがあるわけではない、という事がわかってスッキリしました。

モジュールに対して、永続的に設定を書き込みたいわけではないけど使いたい設定がある場合には、やはりマイコンから直接操作してやりたいものです。
コマンドの中にはバージョンを取得するインターフェースもあるので、GPSモジュールのバージョンを調べるのも良いかもしれません。

タダ同然で自分専用のバグ・トラッキング・システムを立てたい (レンタル・サーバー「ロリポップ」上にRedmineを仕立てる)

タダ同然で自分専用のバグ・トラッキング・システムを立てたい

2012/12/25追記:2012年12月に「さくらのVPS」にサーバーを移行しました。Redmineをインストールする場合、ロリポップでは環境面でかなり厳しいものがあります。

開発に欠かせないバグ・トラッキング・システムですが、以前から公開ウェブ・サーバー上に自分専用のサービスが欲しいなと考えていました。

自分が進行しているプライベートなプロジェクトの色々なアイデアやTODOをいつでもどこでも更新出来たら嬉しいなぁと考えたわけです。個人的にgithubやsourceforgeを使う事はありますが、バグ・トラッキング・システムを自分の好みで変更できないのが残念なところです。

また、プライベートなアイデアやプロジェクトが、ダダ漏れになるのも、それを避けるためにお金を払うのも、自分が好きなバグ・トラッキング・システムを使えない事と相まってお得な感じがしません。




単にアイデアをメモするだけならばその手のツールがあるのですが、それは単なるメモとしてしか役立ちません。 後々見返してみた時に、「これ何だっけ?」とか「アイデアとアイデアの関係がどうだったのか?」とか、そもそもメモなのできちんと管理できないわけです。(少なくとも私は。)
それらのアイデアがどのようにコードになったのか知るすべもありません。

そんな事を考えていた時、自分が約10年前からレンタルしているサーバーの契約更新がありました。状況を調査してみたところ、以前に比べてバグ・トラッキング・システムを導入する為の環境が整いつつある事に気付きました。(プランの変更によって最大の障壁だったsshログインが可能という事がわかった。)

そこで、今回は私が使用しているレンタル・サーバー「ロリポップ」上に、バグ・トラッキング・システムRedmineを導入する過程を簡単に御紹介します。使用するプランは「チカッパプラン」です。このプランは月額525円で30GBの容量を確保できます。更に今回の作業で重要なsshが使えます。


この手の作業の何が面倒なのか?

この手の作業でとにかく一番面倒なのは「やってみて、うまくいくまで試行錯誤する過程。」です。
ウェブ・アプリケーションを導入する場合、沢山の依存関係の解決と細かなバージョン差異による影響を取り除くような作業が欠かせません。(あ、組み込みも同じか。)

開発をスムーズに進めるための環境作りに時間がかかりすぎて、開発がスムーズに進まないなんて笑うに笑えません。(実は今回そんな感じ。来週はMTM07です。出展の準備をしたい。)

本当に「何やってるの自分?」と自分に突っ込みたくなってきます。
更にRailsって何?とかRubyGemsって何?とかやってるとどうしようもなく時間がかかります。

この記事は「できる」という事実を示し、試行錯誤を少しでも取り除こうという狙いで書きました。


バグ・トラッキング・システムによる製品開発フロー

バグ・トラッキング・システムを使って製品を開発するフローは、背景にある考えによって様々ですが、大抵の場合は以下のようになるでしょう。
  1. 製品の仕様を考える。
  2. 「やること」を洗い出す。
  3. 「この日までに実現するんだ!」と決める。
  4. 「やること」と「この日までに実現するんだ!」を見ながら進捗や状況を管理する。
  5. 製品が完成したらリリースを決める。
  6. 市場から得られるフィードバックを集める。
  7. 最初に戻る。(要するに無限ループ。)
上記のループは、必ずしも1から始まるとは限りません。
もしかしたら6から始まるかもしれないし、もしかしたら3から始まる場合もあるかもしれません。


大切なのは「繰り返しの中で製品を改善する過程」です。

Redmineを使った機能追加の管理の実例を以下に示します。
Redmineの開発は、Redmineで管理されています。
以下に挙げるチケットは「ユーザの削除機能」に関するものです。
メジャーなツールと僕の好きなRedmine

国内ではやたらとTracがメジャーな感があります。
私は以下の理由でRedmineを好んで使用しています。
  • 一回構築すれば複数のプロジェクトで使用できる。
  • ビューがシンプルで美しい。
  • 画像を貼ったりファイルを貼ったりが簡単。
  • その他(色々な事が自然にできるところなど。)
もしかしたら、現在ではその他のツールも同様の事ができるのかもしれませんが、一度Redmineに慣れてしまうと他のツールに積極的に移行する気になれません。これは、数年前にTracとMantisをつまみ食いしているので、自分にとってどちらが好ましいと感じるかを知っているせいかもしれません。


ロリポップでRedmine

さて、長い前置きはさておき、ロリポップでRedmineを実現します。
今回は手始めとしてcgiモードを使ってまずは実現する事を念頭に、ハマりそうなところだけを列挙しする事にしました。

出来上がるとアクセスした時に以下のようなページが表示されます。


使用した各ツールのバージョンを挙げておきます。
rubyはロリポップのサーバーにインストールされているruby 1.8.7を使用しました。
上記のバージョンの関係はRedmine本家のインストール・ガイドのページに記載されています。


新しいバージョンのRedmineをインストールしたい場合、上記バージョン関係を把握してから行ないましょう。上記の依存関係を見てもわかるように、細かなバージョンの違いで動作しない事が十分に考えられます。



RubyGemsのセットアップ

初めにRubyGems 1.3.7をwgetでダウンロードして展開します。
展開したディレクトリにあるsetup.rbに「--prefix $HOME」を与えてセットアップを実行します。
ロリポップが提供するサーバにsshでログインした場合、LolipopUserというIDが割り当てられています。(当然ながらroot権限ではありません。)

これでRubyGemsのインストールは完了です。
私はこの時点で.bash_profileに以下を追加しました。
export RUBYLIB=~/lib
export GEM_HOME=~/lib/ruby/gem
export RAILS_ROOT=~/rails/redmine
export PATH=$PATH:~/bin:~/lib/ruby/gem/bin
「source ~/.bash_profile」したら念のためホームで「gem -v」してバージョンを確認します。
「1.3.7」と出れば狙いの環境になっています。エラーが出たらパスが通って無いとかsetup.rbでの環境構築に失敗しているとかが考えられます。



Railsのセットアップ

次にrailsをgemを使ってインストールします。
「gem install -v=2.1.2 rails」とすればバージョンを指定してインストールする事ができます。

以上でRedmineが依存する環境を作り上げた事になります。



Redmineのインストールとセットアップ

次にRedmine本体のインストールです。

Redmine 0.8.7をダウンロードして、展開します。
私は$HOME/rails/redmineに展開しました。


config/database.yml

展開したらconfigディレクトリに移動してセットアップを行ないます。
初めにconfig/database.yml.exampleをコピーしてconfig/database.ymlを作ります。


(ハマりどころ)設定はロリポップの管理ページにある情報をそのまま記載します。
(ハマりどころ)socketの項目はテンプレートに無いので追加して下さい。
(ハマりどころ)socketの設定はロリポップのmysqladminを使って確認して下さい。サーバの変数という項目にsocketがあります。
(ハマりどころ)production設定を使う為の作業をしていると頭の片隅に入れておいて下さい。


データーベースを初期化する


この作業は展開したredmineのディレクトリで行います。
rakeがRakefileを参照して作業するからです。
rake db:migrate RAILS_ENV=production
rake redmine:load_default_data RAILS_ENV=production

config/environments/production.rb

ウェブ・サーバが持つルートの配下にディレクトリを作って構成する場合には、config/environments/production.rbに以下を追加します。
ActionController::AbstractRequest.relative_url_root = '/あなたのディレクトリパス

config/environment.rb

config/environment.rbにパスの設定などを追加します。
(下記の設定は最適でないかもしれません。環境に合わせて最適な記述をして下さい。)

また、productionを使うのでコメント・アウトされている部分を有効にします。


もう、このあたりで「動くのかなぁ~。」と不安になります。


dispatch.cgi

最後にディスパッチャの設定です。
今回は遅い遅いと評判のdispatch.cgiを使っています。
一行目のrubyへのパスを環境に合わせて「/usr/bin/ruby」としました。


.htaccess

最後に.htaccessの編集です。
  • 「Options +FollowSymLinks +ExecCGI」をコメントアウト。
  • 「AddHandler  cgi-script  .cgi」を追加。
  • 「RewriteRule  ^(.*)$  dispatch.cgi  [QSA,L]」を追加。

公開ディレクトリにあるファイルのパーミッション

公開ディレクトリにあるファイルのパーミッションを整えます。
ロリポップのサポート・サイトの情報も参考にしてください。


とりあえず動かすようにした作業のまとめ

今回は「とにかく実現してみるんだ」という方向で作業しました。

レンタル・サーバでRedmineというと何故だかさくらインターネットでの事例ばかりです。
もしかしたらきちんと運用する人は「ロリポップなんて使わない。」ということかもしれません。

今回は「ロリポップでもRemineを動作可能」を示すためだけにかなり適当に作業しました。
メールの設定やバージョン管理システムとの連携が残っていますが、動作する事がわかったので後はゆっくりとやっていこうという感じです。


タダ同然じゃない!

「タダ同然で」と書きましたが、全然タダではありません。
冒頭に書いたとおり月額払う事になりますが、「ホームページを運用していたサーバで、実は動作させられる。」と考えれば安いと考えられなくもありません。

2011年11月24日木曜日

ET2011でNatural Tiny Shell (NT-Shell)のデモ・キットを展示しました

御報告が遅くなりましたが、ET2011でNatural Tiny Shell (NT-Shell)のデモ・キットを展示しました。
以下の写真が展示の様子です。


物凄く地味なデモですし、内容も内容ですから、本当に興味を持った人しか立ち止まらない感じで、逆にそれが個人的に面白かったです。

私のプレゼンテーションを聞いてくれた人からも「実は私も同じようにシェルに不満を持っていました。」と声をかけてくれた人もいました。


さて、肝心の成果物ですが、本日Version 0.0.8をリリースしました。
http://sourceforge.jp/projects/ntshell/releases/ からダウンロードできます。

以前はシェル用ライブラリだけでしたが、今回から「ライブラリ」と「サンプル」の二本立て構成にしました。今のところ「サンプル」にはTOPPERS用の実装のみ追加しています。

今回プレゼンテーションを作成するにあたって設計を振り返ったところ、まだまだ改良できる点が多くある事に気付きました。

今後も継続的に改善を行ない、よりコンパクトで使いやすいシェルライブラリにする予定です。


2011年11月9日水曜日

小規模組み込みシステム向けシェル・タスク『Natural Tiny Shell Task』のデモ・キットをET2011のTOPPERSブースで展示します。

小規模組み込みシステム向けシェル・タスク『Natural Tiny Shell Task』のデモ・キットをEmbedded Technology 2011TOPPERSブースで展示します。

先日から「Natural Tiny Shell Taskがどうのこうの。」と煩いわけですが、実際に触っていない人にとっては「何がそんなに嬉しいんだ?」という感じです。


そこで、今回は実際に動作を体験して頂けるようにしようと考えました。
下の写真がデモ・キットの外観です。


NXPセミコンダクターズ社のARM Cortex-M3が搭載されたLPCXpresso LPC1768にUSB-UART変換基板が接続されたものです。今回はシェルのデモなのでこれだけでも良いのですが、あまり面白いデモと言えなかったので、カラーLEDを付けてシェルから操作できるようにしてみました。


組み込みシステムのデバッグでは、コマンドをシステムに与えてデバッグする事がよくあります。今回はcolorコマンドに表示色を与えることで、カラーLEDの色が変化するというデモを用意しました。システムに対する要求が視覚的に判断できるので、楽しんでいただけるのではないでしょうか。


また、TOPPERSを触った事のない人にとって「きちんと動いているシェルっぽいもの」を見ても「何がそんなに良いわけ?」となります。そこで、このデモ・キットは、「適当に実装したシェル」と「Natural Tiny Shell」の二つを同時に体験できるように設計してあります。


「適当に実装したシェル」は、それこそ本当に適当で文字の入力を誤ると酷い事になるような実装になっています。「そんなのあるわけ?」と思うかもしれませんが、残念ながら小規模組み込みシステムでは実際によくある話です。

当日は2つの端末を並べて実際に操作しながら比較する事ができるようにする予定です。

ET2011の最終日である18日(金)の15時過ぎから「TOPPERS活用アイデア・アプリケーション開発コンテスト表彰式」と「コンテスト受賞作品の紹介」も行われる予定です。紹介のプレゼンテーションは私自身が担当する予定ですので皆様是非お越し下さい。