みちびき 軌道シミュレーター


20140523satellite_orbit_app20140523Satellite_orbit_qz

「みちびき」 の軌道は、地表で8の字を描きます。
これが直感的に分からなかったので、シミュレーターを作ってみました。
軌道傾斜角 (inclination) と 軌道離心率 (orbital eccentricity) を変更できます。

ソースは google code で公開しています。

静止衛星 (stationary satellite) は、軌道傾斜角が 0度、軌道離心率が 0.0です。
赤道上を円軌道で周回しています。
地表からは、同じ場所に留まって見えます。

準天頂衛星 (quasi-zenith satellite) みちびき は、軌道傾斜角が 45度、軌道離心率が 0.099 です。
赤道に対して45度傾いた軌道を、北に伸びる楕円軌道で周回しています。
地表では、8の字を描きます。

そういうことは、確かめられましたが。
8の字を描く理由は、直感的には、謎のままです。(^^;

参考
準天頂軌道とは – JAXA


SFC Fabspace 開設イベント


20140520sfc_fabspace_discussion

2014年5月20日、慶応大学 SFC で開催された FabSpace 開設イベント に参加してきました。

パネルディスカッションのあとの質疑応答で、3Dプリンタで銃を作る件が出ました。
これに対する 村井純 先生の回答がよかった。

3Dプリンタには3つの課題がある。
(1) 法的規制
(2) 製造者責任
(3) 知的財産権

(1) 法的規制
銃に限らず、人を傷つけるものは、インターネット上でも規制の対象になっている。
3Dプリンタだからいって、新しい規制を作る必要はない。

(2) 製造者責任
特定の機関が、お墨付きを与えるのではなく。
社会全体で多くの人がこういう風に使っても大丈夫です、
という知見が集積されていくと、期待している。

(3) 知的財産権
今までは、誰がか作ったものをそのまま使う時代だった。
これからは、改変することが、当たり前になる。
例えば、楽器の3Dモデルが公開されたら、楽器が売れなくなるのか?
楽器を作る人が増えたら、楽器の材料や部品を買う人も増える。
また、自作すれば難しさも分かり、プロが作ったものも欲しくなる。
そんな話を楽器メーカーの人としている。

村井先生の話を聞いて感じたこと。
こういう話は、3Dプリンタという文脈だと、ピンとこないところもあるが。
インターネットやオープンソースという文脈だと、すでに当たり前になっています。
ただし、数10年かけて浸透してきた考え方なので、
「ものつくり」の世界でも同じように時間がかかるのだろうな。

なお、FabSpace の機材ですが。
新製品の Replicator がなかなか格好よかった

20140520sfc_fabspace_equipment


みちびきの軌道周期 と 地球の自転周期


「みちびき」 の軌道周期は、23時間56分です。
これは地球の自転周期らしい。
1日は24時間だから、4分短いと、そのうち昼夜反転するのでは、という疑問が浮かぶ。

yahoo 知恵袋に解説がありました。
地球の自転にかかる時間は23時間56分4秒なのに一日24時間計算だと狂ったりしないん…

20140519michibiki


GpsStatus.Listener からGSP衛星を取得する一連の処理


GpsStatus.Listener にて、「みちびき」とGPS衛星1番の区別がつかなくなる件について、Android フレームワークを調べてみました。

結論からいうと、ハードウエアのドライバーの段階で、そうなっているようです。

GPS には libgps.so というドライバーを使っています。
これのソースは見つかりませんでしたが、ヘッダファイル gps.h は見つかりました。
gps.h にて、GpsSvInfo という構造体が定義されています。
ここの prn が、GpsSatellite の PRN になっているようです。
libgps.so からは、次のような流れで、GpsSatellite が取得されるようです。

libgps.so ( gps.h GpsSvInfo )
IGpsStatusListener#onSvStatusChanged
LocationManager#getGpsStatus (公開API)
GpsStatus#getSatellites (公開API)
GpsSatellite

参考
[ANDROID] Final Vogue Kaiser GPS Support
 libgps.so を使う話
codetastrophe SatInfo
 IGpsStatusListener#onSvStatusChanged をリフレクションで使う例


みちびき Nexus7 GpsStatus.NmeaListener


20140519nmea_listener_n720140519nmea_listener_qz_radar

Nexus7 (2012年モデル) と、GpsStatus.NmeaListener を使用して、
「みちびき」 の位置が取得できるか確認しました。
「みちびき」とGPS衛星1番の両方が捕捉できました。

ソースコードは Google Code に置いています。

簡単な説明
Nexus7 で取得できる nmea は、下記のデータです。
一般的なもの
– $GPGSA 捕捉された衛星の番号
– $GPGSV 衛星の位置情報
– $GPGGA 測位された現在地
– $GPRMC 測位された現在地(推奨)
Nexus7 特有のもの
– $QZGSA 準天頂の捕捉された衛星の番号
– $QZGSV 準天頂の衛星の位置情報
– $GNGSA Glonass の捕捉された衛星の番号
– $PGLOR 製造情報らしい

$GPGSA と $GNGSA は全く同じようです。
$QZGSA は準天頂固有のものです。「みちびき」は衛星番号1番です。

参考
NMEA sentences – PGLOR, GNGSA and QZGSA


みちびき Nexus7 GpsStatus.Listener


20140513gps_status_listener20140513gps_status_listener_qz_radar

Nexus7 (2012年モデル) と、GpsStatus.Listener を使用して、
「みちびき」 の位置が取得できるか確認しました。

結論からいうと、ダメですね。
「みちびき」のGPS衛星番号は 193番らしいのですが、Android API では 1番に化けます。
「みちびき」が捕捉できて、1番のGPS衛星が捕捉できないときは、「みちびき」を表示します。
「みちびき」と1番のGPS衛星の両方が捕捉できたときは、どちらを表示するかは、運次第です。

参考
Nexus7のGPS機能と準天頂衛星「みちびき(QZSS)」対応についての検証


みちびき QZ-Radar


20140513qz_radar

QZ-radar は、ある場所、ある時刻において、準天頂衛星「みちびき」とGPS衛星群が上空のどの方角に何機見えるかをシミュレートするアプリケーションです。

「みちびき」は、23時間56分の周期で地球を周回しています。
しかし、一日のうち約8時間しか、日本上空にいません。
しかも、毎日4分づつずれるので、いつ日本上空にいるのか、分かりません。
そんなときには、QZ-radar で探します。
残念ながら、Windows版しかなく、MACな人には使えない (^^;


GPS衛星の位置 GpsStatus.NmeaListener


2014-0506nmea_listener20140506nmea_listener_nmea

GpsStatus.NmeaListener を使って、GPS衛星の位置情報を取得します。

ソースコードは Google Code に置いています。

プログラムの簡単な説明
(1) LocationManager#addNmeaListener で GpsStatus.NmeaListener を登録します。
(2) GpsStatus.NmeaListener#onNmeaReceived で、nmea 形式のデータを取得できます。
(3) nmea は、NMEA (National Marine Electronics Association) で規定されたGPS情報のデータ形式です。
GPS – NMEA sentence information に、データ形式の説明が載っています。
(4) GalaxyNesus で取得できるのは、下記のデータです。
– $GPGSA 捕捉された衛星の番号
– $GPGGA 測位された現在地
– $GPRMC 測位された現在地(推奨)
– $GPGSV 衛星の位置情報
GPGSV は、1行で4つの衛星の位置情報が記述されています。
4つ以上の衛星があるときは、複数の行で記述されます。

参考
Android で GPS 衛星からの情報を NMEA 形式で取得する方法
GPS – NMEA sentence information
GPSのNMEAフォーマット


GPS衛星の位置情報 GpsStatus.Listener


20140505GpsStatus_Listener

GpsStatus.Listener を使って、GPS衛星の位置情報を取得します。
この種のアプリでは、GPS Test が有名みたいです。

ソースコードは Google Code に置いています。

プログラムの簡単な説明
(1) LocationManager#addGpsStatusListener で GpsStatus.Listener を登録します。
(2) 衛星の情報は、GpsStatus.Listener#onGpsStatusChanged の中で、GpsStatus#getSatellites() を使って取得できます。
戻り値は Iterable の形式です。
(3) GpsSatellite には、下記の値が含まれています
PRN (pseudo-random number) 衛星の番号
Azimuth 衛星の位置を示す方位角
Elevation 衛星の位置を示す仰角
Snr 信号のSN比

留意点が2つあります。
(1) requestLocationUpdates を設定しないと、
onGpsStatusChanged がコールバックされません。
(2) onGpsStatusChanged の中で、LocationManager#getGpsStatus を実行しないと、
GpsStatus が更新されません。

public void onGpsStatusChanged( int event ) {
	Iterable<GpsSatellite> satellites = mGpsStatus.getSatellites();
	… 何か処理する … 
	mGpsStatus = mLocationManager.getGpsStatus( mGpsStatus ); 
}

3×3 LED マトリックス その2


YouTube Preview Image

3×3 LED マトリックス基板を作って、Arduino から点滅させた。
3×3 LED マトリックス その1 の続きです。

前回は、LEDが横一列で点灯した。
今回は、LEDが一つ点灯するように、LED一つづつに抵抗をつけてみた。

シールド基板
前回と同じく、1mm合板をレーザーカッタで切ったもの を使ってみた。

今回は、厚紙を、1ピッチ間隔 1mm から、2ピッチ間隔 2mm に変更した。
20140505_led_matrix_middile_paper

回路図と実装図
20140505_led_matrix_circuit20140503_led_matrix_structure

制作
シールドの制作には2時間ほどかかった。
20140505_led_matrix_front 20140505_led_matrix_top_rear
20140505_led_matrix_middile_rear20140505_led_matrix_finish

動作確認
Arduino に スケッチ を転送して、動作させてみる。
うまくいった。
LED がランダムに点滅するように スケッチ を変更する。

資料
– 完成写真
– 回路図
– 実装図
– レーザカッタ用 ai ファイル
– Arduino スケッチ
20140505_led_matrix