iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
Upcoming SlideShare
Loading in...5
×
 

iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する

on

  • 858 views

 

Statistics

Views

Total Views
858
Views on SlideShare
581
Embed Views
277

Actions

Likes
1
Downloads
8
Comments
0

3 Embeds 277

http://yoppa.org 247
http://cloud.feedly.com 29
http://digg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する Presentation Transcript

  • iTamabi 13  第6回:ARTSAT API 実践 2 衛星の情報で表現する 2013年10月28日 多摩美術大学 PBL科目 担当:田所 淳
  • 今日の内容 ‣ ARTSAT API - WebAPIから送出されるデータの意味につ いて ‣ APIから取得した数値で表現してみる ‣ ディスカッション:衛星の数値を、どう表現するか?
  • 先週のプログラムの 復習 APIの全ての内容を表示する サンプル
  • 先週のプログラムの復習 ‣ testApp.mm #include "testApp.h" ! void testApp::setup(){ ofBackground(224); ofSetFrameRate(30); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/ sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; } } ! void testApp::update(){ ! }
  • 先週のプログラムの復習 ‣ testApp.mm void testApp::draw(){ ofSetColor(63); int lineHeigt = 15; ! // 取得した時間を表示 string available_time = response["results"][0] ["closest_available_time_iso_string"].asString(); ofDrawBitmapString(available_time, 10, lineHeigt*1); // センサーの全てのメンバー名を取得 ofxJSONElement::Members mem = response["results"][0] ["sensors"].getMemberNames(); // メンバーごとにセンサーの値をとりだして、画面に表示 for (int i = 0; i < mem.size(); i++) { string lavel = mem[i]; float value = response["results"][0]["sensors"][mem[i]] ["value"].asFloat(); ofDrawBitmapString(lavel + " = " + ofToString(value), 10, lineHeigt * (i + 3)); } }
  • 取得された値について
  • 取得された値について ‣ 表示される値 (ax, ay, az, mx, my, mz …etc.) ‣ これらは何を意味するのか? ‣ 衛星が取得したセンサーの値
  • 取得された値について ‣ センサーの値の意味 センサー名 センサーの意味 lat latitude : 緯度 lon longitude : 経度 alt altitude : 高度 ax, ay, az 衛星の角速度 (x, y, z軸) px, py, pz 衛星の姿勢角度 (x, y, z軸) mx, my, mz 磁気センサー (x, y, z軸) tpx, tmx 太陽電池の温度 (+x面、-x面) tpy, tmy 太陽電池の温度 (+y面、-y面) tpy, tmy 太陽電池の温度 (+z面、-z面) tin 温度 (内部)
  • 取得された値について ‣ センサーの値の意味 センサー名 センサーの意味 epx, emx 太陽電池発電量 (+x面、-x面) epy, emy 太陽電池発電量 (+y面、-y面) epz, emz 太陽電池発電量 (+z面、-z面)
  • 取得された値で表現する
  • 取得された値で表現する ‣ これらの値を用いて、アプリで表現する ‣ どんな値を、何に用いれば良いのか?
  • 取得された値で表現する ‣ サンプル 1 : 角速度で表現する ‣ 取得した角速度をもとに、3Dのオブジェクトを動かす ‣ 実際に宇宙にいる衛星の動きを実感できるかも(?)
  • 取得された値で表現する ‣ 角速度を取得 - testApp.h #pragma once ! #include #include #include #include ! "ofMain.h" "ofxiOS.h" "ofxiOSExtras.h" "ofxJSONElement.h" class testApp : public ofxiOSApp{ public: void void void void setup(); update(); draw(); exit(); void void void void void touchDown(ofTouchEventArgs & touch); touchMoved(ofTouchEventArgs & touch); touchUp(ofTouchEventArgs & touch); touchDoubleTap(ofTouchEventArgs & touch); touchCancelled(ofTouchEventArgs & touch); void void void void lostFocus(); gotFocus(); gotMemoryWarning(); deviceOrientationChanged(int newOrientation); ofxJSONElement response; ofVec3f angleSpeed; };
  • 取得された値で表現する ‣ 角速度を取得 - testApp.mm #include "testApp.h" ! void testApp::setup(){ ofBackground(224); ofSetFrameRate(30); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; angleSpeed.x = response["results"][0]["sensors"]["ax"]["value"].asFloat(); angleSpeed.y = response["results"][0]["sensors"]["ay"]["value"].asFloat(); angleSpeed.z = response["results"][0]["sensors"]["az"]["value"].asFloat(); } } ! void ! } testApp::update(){
  • 取得された値で表現する ‣ 角速度を取得 - testApp.mm ! void testApp::draw(){ // 取得した角速度を表示 ofSetColor(31); ofDrawBitmapString("angle speed x = " + ofToString(angleSpeed.x, 8), 10, 15); ofDrawBitmapString("angle speed y = " + ofToString(angleSpeed.y, 8), 10, 30); ofDrawBitmapString("angle speed z = " + ofToString(angleSpeed.z, 8), 10, 45); }
  • 取得された値で表現する ‣ 角速度が取得できた
  • 取得された値で表現する ‣ 次に、この角速度で3Dオブジェクトを実際の速度で回転 させてみたい ‣ まずは立方体で
  • 取得された値で表現する ‣ openFrameworksで立方体を描く方法 // 立方体のプリミティブ ofBoxPrimitive box; ! // 位置を指定して、立方体を描く box.setPosition(x, y, z); box.draw();
  • 取得された値で表現する ‣ 角速度の単位は、deg/sec つまり一秒間に変化する角度 ‣ アプリケーションを実行してからの時間に、角速度をかけ 算すれば、角度(degree)が計算できる ! ‣ アプリケーションを実行してからの時間を求める方法 // プログラムが開始してからの時間を求める float sec = ofGetElapsedTimef();
  • 取得された値で表現する ‣ testApp.h #pragma once ! #include #include #include #include ! "ofMain.h" "ofxiOS.h" "ofxiOSExtras.h" "ofxJSONElement.h" class testApp : public ofxiOSApp{ public: void void void void setup(); update(); draw(); exit(); … (中略) … ofxJSONElement response; ofVec3f angleSpeed; ofLight light; ofEasyCam cam; };
  • 取得された値で表現する ‣ testApp.mm #include "testApp.h" ! void testApp::setup(){ ofBackground(0); ofSetFrameRate(60); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; // 角速度を取得 } angleSpeed.x = response["results"][0]["sensors"]["ax"]["value"].asFloat(); angleSpeed.y = response["results"][0]["sensors"]["ay"]["value"].asFloat(); angleSpeed.z = response["results"][0]["sensors"]["az"]["value"].asFloat(); // 3D表示設定 } ofEnableDepthTest(); ofEnableLighting(); light.setPosition(200, 300, 50); light.enable();
  • 取得された値で表現する ‣ testApp.mm void testApp::update(){ ! } ! void testApp::draw(){ ofVec3f angle = angleSpeed * ofGetElapsedTimef(); // カメラ開始 ! cam.begin(); // 回転 ofPushMatrix(); ofRotateX(ofRadToDeg(angle.x)); ofRotateY(ofRadToDeg(angle.y)); ofRotateZ(ofRadToDeg(angle.z)); // 立方体を描く ! } ofBoxPrimitive box; box.draw(); ofPopMatrix(); // カメラ終了 cam.end();
  • 取得された値で表現する ‣ 宇宙空間で回転する衛星を再現
  • ディスカッション
  • ディスカッション ‣ INVADERのデータから、何が表現できるか ‣ パラメータと、それを表現する手法について話し合う ‣ 「衛星芸術」の可能性について