2014年12月26日金曜日

午前中は、娘と買い物

今日の午前中は、娘と買い物 ケーキの材料を買うのに付き合う。 ついでに梅酒を買う。

2014年12月25日木曜日

今年の休みは長いぞ〜。

今年の年末年始は、本業の方が 12月23日(火曜日)から1月4日(日曜日)まで およそ2週間がお休み。 なので、この休み期間は張り切って製作所の仕事をしています。 といっても、23日は、何していたか忘れたし、 24日は、人間ドックの結果を聞きに行き、 午後は、?? わすれた。 今日(25日)の午前中は、 お風呂のヒビ割れに、バスコーキング。 車のフロントガラスの水垢落とし。 キーレスエントリーの電池交換 昼から年賀状作成。 大したことしてないね。

2014年12月10日水曜日

到達高度の確認

高度200mで リリース装置が起動するかの実験。

時間は
13:30-14:45まで
使用者は
5MI 学生 及び
入江

2014年11月14日金曜日

9 Degrees of Freedom センサスティック for UNO


9 Degrees of Freedom センサスティック for Uno

http://www.usmv.sys.okayama-u.ac.jp/~in/sampleprg/sen-10724.html を参考に
(ほとんどそのままに) Unoように 9Degrees for Freedom センサスティック用の
スケッチを作ってみた。 I.N.先生に感謝します。



//ITG-3200 & ADXL345 & HMC5883L 読み出しサンプル
//2012.12.14-17 I.N.
//2014 Nov. 14  H.I.  for Arudino UNO

//#include <rxduino.h> for GR-SAKURA
#include <Wire.h>

#define delayus(t) delayMicroseconds(t)
#define delayms(t) delay(t)

//ジャイロセンサ(ITG-3200)
#define G_ADR           0x68
#define G_SMPLRT_DEV    0x15
#define G_DLPF_FS       0x16
#define G_XOUT_H        0x1D
#define G_XOUT_L        0x1E
#define G_YOUT_H        0x1F
#define G_YOUT_L        0x20
#define G_ZOUT_H        0x21
#define G_ZOUT_L        0x22
//加速度センサ(ADXL345)
#define A_ADR           0x53
#define A_POWER_CTL     0x2D
#define A_DATAX0        0x32
#define A_DATAX1        0x33
#define A_DATAY0        0x34
#define A_DATAY1        0x35
#define A_DATAZ0        0x36
#define A_DATAZ1        0x37
//地磁気センサ(HMC5883L)
#define M_ADR           0x1E
#define M_CONFIG_A      0x00
#define M_CONFIG_B      0x01
#define M_MODE          0x02
#define M_DATAX_MSB     0x03
#define M_DATAX_LSB     0x04
#define M_DATAZ_MSB     0x05
#define M_DATAZ_LSB     0x06
#define M_DATAY_MSB     0x07
#define M_DATAY_LSB     0x08

// shortを"-##### "~"+##### "へ変換
void short2dec5(short n, char *s)
{
    unsigned char a;
    int d;
    if(n<0){
        d=-n;
        s[0]='-';
    }else{
        d=n;
        s[0]='+';
    }
    a=(unsigned int)d/10000u;
    s[1]='0'+a;
    d-=(unsigned int)a*10000u;
    a=(unsigned int)d/1000u;
    s[2]='0'+a;
    d-=(unsigned int)a*1000u;
    a=(unsigned int)d/100u;
    s[3]='0'+a;
    d-=(unsigned int)a*100u;
    a=(unsigned int)d/10u;
    s[4]='0'+a;
    d-=(unsigned int)a*10u;
    a=d;
    s[5]='0'+a;
    s[6]=' ';
    s[7]=0;
}
#define PIN_SW  5
#define PIN_LED0 A2
#define PIN_LED1 A3
#define PIN_LED2 5
#define PIN_LED3 6


void setup() {
    pinMode(PIN_SW,INPUT);       //青ボタン使用
    pinMode(PIN_LED0,OUTPUT);    //LED0使用
    pinMode(PIN_LED1,OUTPUT);    //LED1使用
    pinMode(PIN_LED2,OUTPUT);    //LED2使用
    pinMode(PIN_LED3,OUTPUT);    //LED3使用
    digitalWrite(PIN_LED0,0);
    digitalWrite(PIN_LED1,0);
    digitalWrite(PIN_LED2,0);
    digitalWrite(PIN_LED3,0);

    //---Serialは外部へのデータ送信---
//    Serial.begin(38400,SCI_USB0);      // 仮想USB(baudrateはダミー)
    //Serial.begin(115200,SCI_SCI0P2x);   //IO0=RXD0, IO1=TXD0
    //Serial.begin(187500,SCI_SCI0P2x);   //IO0=RXD0, IO1=TXD0
    Serial.begin(9600);  //for Uno
  //  sci_str *sci;
  //  sci=Serial.get_handle();
  //  sci->crlf_rx=CRLF_NONE;                //受信:改行変換なし
 //   sci->crlf_tx=CRLF_NONE;                //送信:改行変換なし

    //I2C開始
    Wire.begin();

    //ジャイロセンサ初期設定
    Wire.beginTransmission(G_ADR);
        Wire.write(G_SMPLRT_DEV);
        Wire.write(0x09);        //1k/(9+1)=100Hz
        Wire.write(0x18|0x01);    //2000deg/s, lpf=188Hz
        Wire.endTransmission();  

    //加速度センサ初期設定
    Wire.beginTransmission(A_ADR);
        Wire.write(A_POWER_CTL);
        Wire.write(0x00);
        Wire.endTransmission();  
    Wire.beginTransmission(A_ADR);
        Wire.write(A_POWER_CTL);
        Wire.write(0x10);
        Wire.endTransmission();  
    Wire.beginTransmission(A_ADR);
        Wire.write(A_POWER_CTL);
        Wire.write(0x08);
        Wire.endTransmission();  

    //地磁気センサ初期設定
    Wire.beginTransmission(M_ADR);
        Wire.write(M_CONFIG_A);
        Wire.write(0x18);    //average=1, rate=75[Hz]
        Wire.write(0x20);    //gain=1.3Ga
        Wire.endTransmission();  
    Wire.beginTransmission(M_ADR);
        Wire.write(M_MODE);
        Wire.write(0x01);    //mode=single
        Wire.endTransmission();  

    delayms(100);
    digitalWrite(PIN_LED0,1);
}

unsigned char dat[18];
short d[9];
unsigned int dt,t0;

void loop() {
    char ss[8];
    int i;

    digitalWrite(PIN_LED1, 1);
    t0=micros();

    //ジャイロ読み出し
    Wire.beginTransmission(G_ADR);
    Wire.write(G_XOUT_H);
    Wire.endTransmission();  
    Wire.requestFrom(G_ADR,6);
    while(Wire.available()<6);
    for(i=0;i<6;i++){
        dat[i]=Wire.read();
    }
    d[0]=(dat[0]*0x100)|dat[1];
    d[1]=(dat[2]*0x100)|dat[3];
    d[2]=(dat[4]*0x100)|dat[5];

    //加速度読み出し
    Wire.beginTransmission(A_ADR);
    Wire.write(A_DATAX0);
    Wire.endTransmission();  
    Wire.requestFrom(A_ADR,6);
    while(Wire.available()<6);
    for(i=6;i<12;i++){
        dat[i]=Wire.read();
    }
    d[3]=(dat[ 7]*0x100)|dat[ 6];
    d[4]=(dat[ 9]*0x100)|dat[ 8];
    d[5]=(dat[11]*0x100)|dat[10];

    //地磁気読み出し
    Wire.beginTransmission(M_ADR);
        Wire.write(M_DATAX_MSB);
        Wire.endTransmission();  
    Wire.requestFrom(M_ADR,6);
    while(Wire.available()<6);
    for(i=12;i<18;i++) {
        dat[i]=Wire.read();
    }
    d[6]=(dat[12]*0x100)|dat[13];
    d[7]=(dat[14]*0x100)|dat[15];
    d[8]=(dat[16]*0x100)|dat[17];
    Wire.beginTransmission(M_ADR);
        Wire.write(M_MODE);
        Wire.write(0x01);    //mode=single
        Wire.endTransmission();  

    //データ出力
    for(int i=0;i<9;i++){
        short2dec5(d[i],ss);
        Serial.print(ss);
        if(i==2 || i==5) Serial.print("|");
    }
    Serial.print("\r\n");

    digitalWrite(PIN_LED1,0);
    //ここまでで約4ms on GR-SAKURA
    //時間待ち
    do{
        dt=micros()-t0;
    }while(dt<10000);
    t0+=10000;
}

2014年11月12日水曜日

QZQSMをデコードするプログラムをPythonで作ってみた。

QZQSMをデコードするプログラムをPythonで作ってみた。


#GPS QZSS robot car using QZPOD for QZSS scramble 
import serial
import time

def main():
 
    con=serial.Serial('/dev/ttyACM1', 19200, timeout=10)
    print con.portstr

    a='QSM'

    while 1:
        str=con.readline()
        if a in str:
              b=str.split(',')
              c=b[2]
              d=c.split('07DE')
              e=d[1]
              teamNo=e[0:2]
              X_div=e[2:4]
              Xwidth=e[4:6]
              Y_div=e[6:8]
              Ywidth=e[8:10]
              NumberTarget=e[10:12]
              Stx=e[12:14]
              Sty=e[14:16]
              T1x=e[16:18]
              T1y=e[18:20]
              T2x=e[20:22]
              T2y=e[22:24]
              T3x=e[24:26]
              T3y=e[26:28]

              print(e)
              print('->', teamNo, X_div ,Y_div ,Xwidth ,Ywidth,NumberTarget,'-',Stx,Sty,'-', T1x,T1y, '-',T2x,T2y,'-',T3x,T3y)

#       con.write(str)

if __name__ == '__main__':
    main()

2014年11月7日金曜日

検索した店舗の位置を地図にKmlで表示する。(その1「コンビニ編」)

検索した店舗の位置を地図にKmlで表示する。(その1「コンビニ編」)
Text 第6章 pp.44-50の課題をArcGIS に代わりにGoogle Earthで実行」
手順)
1.      コンビニエンスストアの住所検索
iタウンページ(http://itp.ne.jp/)にアクセスして、
「熊本県八代市 コンビニ」 を検索する。
2.      コンビニデータをCSVデータに変換する
(1)iタウンページの検索結果をExcelにコピペ(コピー&ペースト)する。
(2)「データ」の「区切り位置」を使って、店舗名と住所をそれぞれ、別のセルに保管する。
(3)フィルタや置換を使いながら、店舗名と住所を同じ行に並べる。
(4)データをCSVデータとしてファイル名を付けて保存する。
3.      住所データから 緯度経度データに変換する。
(1)CSVアドレスマッチングサービスを利用する
 を利用する。
(2)出力結果をメモ帳で開いて確認
(3)Exel開いて、整理番号,場所の名前,説明,経度,緯度,標高 の順に並べる。
4.      CSVデータに入っている緯度経度を利用して kmlで矢印位置を 表示させる。
CSVからkmlの変換サイトを利用
5.      今日の出力結果をメモ帳に貼付けて、保存します。ファイル名は、shop3AC00名前.kml  とします。提出フォルダに提出してください。

次回への課題1 (あらかじめ準備しておくと、早く終われます。)
出席番号と同じ都道府県番号
http://www.mhlw.go.jp/topics/2007/07/dl/tp0727-1d.pdf)の県庁所在地のコンビニの位置をkmlファイルで作成しなさい。 
ただし、48 福岡県北九州市  49番 神奈川県横浜市 とします。


次回への課題2 特定種類の施設の位置をkmlで表示させなさい(例えば、動物園、美術館、スタバの位置など。表示数が50個以上のモノを探す。)

2014年10月20日月曜日

QZS&GPS GLONASSも

 QZPODの
試験用に定点、 円、 サイクロイド
で実験

Almanac は  内部のデフォルト値を利用。

2014年10月18日土曜日

図で結果表示


GPS・QZSSロボットカーコンテスト 2014 大会結果


エントリー
番号
所属形態 ロボット名 QZSS
スクランブル
ダブル
パイロン
出走順 出走予定時間 競技記録 再チャレンジ 最終成績 入賞者順位
1 チーム名:I.K.K. ロボット名:I.K.K. 5 13:50 0 0 0
2 個人参加 ロボット名:マノマロカリス 17 DNS DNS
3 個人参加 ロボット名:できるかな 18 DNS DNS
4 チーム名:早稲田大学天野研究室 ロボット名:Kevin   2 13:35 95   95 D.P. 1位
5 チーム名:熊本高専八代ラジコン研究部 ロボット名:阿蘇不知火4号λχ(らむだかい) 12 15:20 DNS 0 0
6 チーム名:熊本高専熊本C葉山研究室 ロボット名:阿蘇不知火5号   1 13:30 20 0 20 D.P.3位
7 チーム名:電気通信大学ロボメカ工房 ロボット名:GarlicToast 4 13:45 DNS DNS
8 チーム名:大宮工業高校電子機械科A班 ロボット名:トムカ 6 13:55 0 0
9 チーム名:大宮工業高校電子機械科B班 ロボット名:エディ 9 15:05 0 0
10 チーム名:大宮工業高校電子機械科C班 ロボット名:ブレイカー 8 15:00 0 0
11 チーム名:大宮工業高校電子機械科D班 ロボット名:マシュマロ 7 14:00 0 0
12 チーム名:熊本高専八代AC科 ロボット名:チームmorimori 19 DNS DNS
13 チーム名:チーム海洋大 ロボット名:かいおう 10 15:10 0 5 5
15 チーム名:電気通信大学ロボメカ工房 ロボット名:Polaris[0] 15 15:35 DNS DNS
16 個人参加 ロボット名:やまくも2号 16 DNS DND
17 チーム名:電気通信大学ロボメカ工房 ロボット名:Luchs   11 15:15 80 40 80 D.P. 2位
18 チーム名:有明高専岩本研究室 ロボット名:荒炎車α(こうえんしゃアルファ) 3 13:40 0 0
19 チーム名:有明高専岩本研究室 ロボット名:荒炎車β(こうえんしゃベータ)   13 15:25 20   20 D.P.3位
20 チーム名:チームサレジオ ロボット名:Ants3号 14 15:30 0 0 0
4 チーム名:早稲田大学天野研究室 ロボット名:Kevin   101 14:20 59   59 Q.S. 1位
5 チーム名:熊本高専八代ラジコン研究部 ロボット名:阿蘇不知火4号λχ(らむだかい) 102 14:25 DNS DNS
6 チーム名:熊本高専熊本C葉山研究室 ロボット名:阿蘇不知火5号   103 14:30 360   360 Q.S. 2位
7 チーム名:電気通信大学ロボメカ工房 ロボット名:GarlicToast 104 14:35 400 400
13 チーム名:チーム海洋大 ロボット名:かいおう 107 DNS DNS
14 個人参加 ロボット名:ロボット・インフィニティ   105 14:40 360   360 Q.S. 2位
15 チーム名:電気通信大学ロボメカ工房 ロボット名:Polaris[0] 106 14:50 DNS DNS

競技会場の座標

GPS・QZSSロボットカーコンテストの競技会場の座標を公開しています。

NAME, 
DMS-Lat, DMS-Lon,(DEG-Lat, DEG-Lon,DMM-Lat,DMM-Lon)
<競技1>
ダブルパイロン競技用の2点(D01,D02)

D01,
353956.00000, 1394736.71000, (35.66556, 139.79353, 3539.93333, 13947.61183)

D02,
353956.65000, 1394736.71000, (35.66574, 139.79353, 3539.94417, 13947.61183)

<競技2>
QZSSスクランブル競技用フィールドの3点(X01,X02,X03)
X01=南西カドのグリッド中央点
X02=北西カドのグリッド中央点
X03=南東カドのグリッド中央点

NAME, 
DMS-Lat, DMS-Lon,(DEG-Lat, DEG-Lon,DMM-Lat,DMM-Lon)
X01,
353956.04000, 1394737.19000, (35.66557, 139.79366, 3539.93400, 13947.61983)

X02,
353956.63000, 1394737.19000, (35.66573, 139.79366, 3539.94383, 13947.61983)

X03,
355956.04000, 1394737.90000, (35.99890, 139.79386, 3559.93400, 13947.63167)


※各角度表現の詳細
DMS=ddmmss.ss
DEG=dddd.dddddd
DMM=ddmm.mmmmmm


2014年10月10日金曜日

QZSSスクランブル データフォーマット


GPS QZSSロボットカーコンテスト 競技概要:

衛星測位しながら自立走行する自作のロボットカーで競技する。以下の2種類の競技を行う。
競技1、競技2のどちらか一方、もしくは両方に参加することができる。

競技1(ダブルパイロンレース):2つのWaypoint(パイロン)を周回することにより得られるポイントを競う

競技2(QZSSスクランブル):準天頂衛星システム(QZSS)の簡易メッセージ(災危通報)で指定されたルートを走行し、走行時間の短さを競う 。(←2014年度からの新ルール)


      簡易メッセージを受信した例:NMEAフォーマットの$QZQSM で送信されます。
ーーーーーーーーーーーーーーーーーーーーーーーーー
$GNRMC,073412.00,A,3228.5330,N,13036.4010,E,0.0,19.3,240914,,,D*7B
$GNVTG,19.3,T,,M,0.0,N,0.0,K,D*2D
$GPZDA,073412.00,24,09,2014,,*6D
$GPQSA,A,3,06,193,23,10,13,12,05,02,17,,,,1.9,1.1,1.5*15
$QZQSA,A,3,01,,,,,,,,,,,,1.9,1.1,1.5*35
$QZQSM,55,C6C407DE0207030703030101050706020205000000000000000000001BAD358*08
ーーーーーーーーーーーーーーーーーーーーーーー
$QZQSM,55,C6C407DEまでは共通、その後の0207以降がロボットの番号やメッシュデータと行き先を表しています。(C6が共通じゃない。2014/10/14修正)
C407DEは、C4がメッセージタイプ(ID:196)、7DEが今年のロボットカーコンテストの固有の番号(ID:2014)となっている。(2014/10/31 追加)
最後の1BAD358*08は調整用のメッセージおよびパリティです。 

解析例は、次の通りです。
02:指令をうけとるロボットの番号
07:緯度方向のユニット分割数、
03:ユニット間隔[m]
07:経度方向のユニットの分割数、
03:ユニット間隔[m]
03:目標ターゲット数
0101:スタートユニット位置 (1,1)
0507: 第一ターゲットの場所(スタート位置から北に5マス目と東に7マス目)
0602: 第2ターゲットの場所(北に6マス目と東に2マス目)
0205: 第3ターゲットの場所(北に2マス目と東に5マス目)

提供されるデータはすべてASCIIのテキストデータです。

データフォーマット例を示したpdfファイルver5は、
$QZQSM,55,53,C407ED02.....  と53 とC4の間にカンマが入っていますが、

今回使用する受信機のQZPODが出力するデータは、
$QZQSM,55,53C407ED02.....  とカンマが入りません。

またこの53は、 災危メッセージの212bitsの前に付加されます。

プリアンブル 8bit   メッセージに関わらず3パターンが繰返し
    従い パターンA  01010011    53
                 パターンB  10011010    9A

                 パターンC  11000110    C6   が使われます。






GPS・QZSSロボットカーコンテスト2014 エントリー一覧

Webページの更新が遅いので、
エントリ状況をこちらのブログにも公開します。

エントリーチーム一覧(2014.09.25まで)

   1. チーム名:        I.K.K. 
   2. 個人参加 ロボット名: マノマロカリス
   3. 個人参加 ロボット名:     できるかな
   4. チーム名: Amano Lab.                            ロボット名: Kevin 
   5. チーム名:熊本高専八代ラジコン研究部   ロボット名:阿蘇不知火λχ(らむだかい)
   6. チーム名:熊本高専熊本C葉山研究室       ロボット名:阿蘇不知火5号
   7. チーム名:電気通信大学ロボメカ工房      ロボット名:GarlicToast
   8. チーム名: 大宮工業高校電子機械科  A班  
   9. チーム名: 大宮工業高校電子機械科  B班
  10. チーム名: 大宮工業高校電子機械科  C班
  11. チーム名: 大宮工業高校電子機械科  D班
  12. チーム名:熊本高専八代 チームmorimori
  13. チーム名: チーム海洋大 かいおう
  14. チーム名: チーム海洋大 
  15. 個人参加  ロボット名:ロボット・インフィニティ
  16. チーム名: 電気通信大学ロボメカ工房 ロボット名:Polaris[0]
  17. 個人参加  ロボット名:やまくも2号
  18. チーム名:電気通信大学ロボメカ工房    ロボット名:Luchs
  19. チーム名:有明高専岩本研究室 ロボット名:荒炎車α(こうえんしゃアルファ)
  20. チーム名:有明高専岩本研究室 ロボット名:荒炎車β(こうえんしゃベータ)
  21.  チーム名:チームサレジオ ロボット名:Ants3号

2014年9月28日日曜日

kml その1

KML (Keyhole Markup Language)の知識を身につける
後期の授業概要>
後期では、各種の位置情報を利用して、地図情報と組見合わせて活用する技術であるGISGeographic Information System ;空間情報システム)について学んでゆきます。
教科書では、ArcGISというソフトを活用した事例を紹介していますが、その前に、無料のソフトである、Google Earth Google Mapsを使いながらGISの基本的な操作を学びます。特に、Google EarthGoogle マップ、モバイル Google マップなどの Earth ブラウザで地理データの表示に使用するファイル形式であるKML については理解します。ArcGISなどの各種GISソフトは、インターネットが発展する前から存在していました。それに比べるとかなり新しい部類に入るKMLが、スマフォやインターネットと組み合わせて使われることで、急速に発展し、GISを活用する有意義な方法の一つとして世界中で利用されています。
 特定の場所についての KML ファイルを作成し、航空写真・衛星写真で描かれた地図上に各種のイメージデータを オーバーレイして、豊富なデータを公開できる新しい方法です。今日から4回の予定で、KMLの使い方について学んでゆきます。

KML関係の授業の予定>
                1回目:なんさま使ってみよう。(09/26
2回目:kmlのフォーマットの仕組みを知る(09/29
3回目:kmlで作ってみよう(10/03
4回目:kmlの簡単な作品の作成(阿蘇のジオパークを紹介する)(10/10

本日の授業内容>
1.    GoogleEarthを立ち上げます。いろんな場所をみてその位置情報を閲覧しよう

(例題1)Google Earthで熊本高専の場所を見つけてください。
      (例題2)熊本高専八代Cの八龍寮の位置を緯度経度を調べてください。
   (ctrl+Lを押してみよう。)
 (例題3)その緯度経度をdd.ddddddd やddmmss.ssssddmm.mmmmmmに相互に変換してください。
       (例題4)緯度経度がそれぞれ緯度 354033.197(35.675888), 経度 1394441.489(139.744858)の場所を見てみよう。

(応用問題;住所から座標への変換はどうすればいいかな?)


2.つぎにブラウザからhttps://developers.google.com/kml/ にアクセスしてください。

説明: https://developers.google.com/kml/documentation/images/kml_feed_small.png USGS 地震 などをクリックして、

自分のパソコンにkmzファイルをダウンロドします。Google Earthでは、kmlkmzを取り扱うことができます。
kmzファイルとは、kmlと写真データなどを組み合わせてZipファイルとして一つにまとめたファイルです。 

 (例題)Google Earthで用意されたツアーに参加してみよう。

 (例題)kmlkmzの違いを説明してください。

   (応用問題)自分でツアーを作るにはどうしたらよいだろうか?

今日の課題:次の位置を探してみよう。緯度経度を調べて記録してください。(度単位)
目印のピンを立てて、名前を付けます。
1.      沖縄高専   北緯           東経          
2.      最も北にある高専:     高専 北緯       東経         
3.      パリの凱旋門                          
4.      東京タワー                          
5.      南極昭和基地                          
6.      北極点                             
7.      エジプトのピラミッド                        
8.       アメリカの首都                      
9.       南アフリカの首都                      
10. お勧めのラーメン店                        
11. 夕日を見るならお勧めの場所                       
12.                                   
13.                                  
14.                                  
15.                                  
10から15には、各自で場所を決めて、その位置に目印をつけてください。
適切に区分して目印の色や大きさを変えてください。

最後に、そのファイルを保存し、提出します。 名前は3AC00氏名20140926.kml としてください。  00には自分の出席番号が入ります。名前は名字だけで良いですが、同じ名字の人達は名前まで入れてください。

(宿題)KMLを学ぶための便利なWebサイトを見つけてきて、そのURLと特長(どの辺りがよいかをWordファイルにまとめてきてください(次回提出します。)

(予習)kmlファイルの中身はテキストファイルです。メモ帳などで開いて中身を見てください。その書き方の規則性を見いだします。