タグ

ブックマーク / kougaku-navi.hatenablog.com (11)

  • スマホで作るNintendo Labo - Imaginary Code

    Nintendo Laboが発売されましたね。Toy-Conガレージという自分で作品を作れるモードもあって、すでにTwitterにはいろいろな作品が投稿されています。ちょうどゴールデンウィークなので、工作を楽しんでいる人も多いでしょう。今回はそんなNintendo Laboを、スマホを使って自作しようという話です。 名付けて「段ボールラボ」 スマホのカメラとブラウザで実現 液晶画面や加速度センサなどSwitchの機能の多くはスマホにも搭載されていますが、Nintendo Laboで特徴的に使われているIRカメラに関してはスマホには標準搭載されていないので、普通のカメラで代替します。今回は段ボール箱の側面に穴を開けて、そこから差し込む光の有無をカメラで認識するという方法を採りました*1。 ソフトウェアはブラウザアプリとして作りました。要はWebページです。iOSやAndroidのアプリを作る

    スマホで作るNintendo Labo - Imaginary Code
    mactkg
    mactkg 2018/04/30
    こういうシンプルなしくみと機構を作ってシステムを作るのは、いろいろな発送が湧き出るので楽しい
  • これから研究をする君へ - Imaginary Code

    ●考えるということについて ・普段から意識的に頭を使って考える、という練習をしてください。 ・考えるという行為は運動に似ています。普段からトレーニングをしていない人にはいきなりできません。 ・机に座っている時だけ考える、というのはだいぶ効率が悪いやり方です。考えるという行為は、目隠しをされ、さるぐつわをされ、耳をふさがれ、手足を縛られていてもできる行為です。寝ている時以外はだいたいできます。 ・多くの場合、ヒントはその辺に転がっていますが、問題に取り組んでいる状態でなければ、それをヒントとして認識することはできません。 ・研究の意義や目的を考える時、5W2H(What、Who、When、Where、Why、How、How much)をよく考えてください。これが埋められると基的なツッコミには耐えられるようになります。この中でも特にWhy?は重要です。 ・研究における新規性とは、簡単に言えば

    これから研究をする君へ - Imaginary Code
  • RICOH THETAで撮影した写真やライブ映像をProcessingで全天球表示する - Imaginary Code

    RICOH THETAは2013年の発売以来多くのユーザに親しまれ、バージョンアップを重ねて着実に進化を遂げてきました。2014年に発売されたRICOH THETA m15では動画撮影に対応し、そしてつい先日発売されたRICOH THETA Sでは念願のライブ映像出力(HDMI/USB)が搭載されました。ここではTHETAで撮影された写真・映像をProcessingで全天球表示する方法を紹介します。 RICOH THETA S 360度 全天球カメラ 910720 出版社/メーカー: リコー発売日: 2015/10/23メディア: エレクトロニクスこの商品を含むブログ (13件) を見る パノラマ写真を全天球表示する THETAでは2個の超広角レンズで撮影された画像を繋ぎ合わせて1枚のパノラマ写真を作っています。この繋ぎ合わせの処理のことをスティッチと呼びます。こうして得られたパノラマ写真

    RICOH THETAで撮影した写真やライブ映像をProcessingで全天球表示する - Imaginary Code
  • Processingでフルスクリーンと通常のウィンドウを切り替える - Imaginary Code

    この話は前にも書いているが、前のコードではフルスクリーン化した際にウィンドウ体へのフォーカスが失われるという症状があることがわかったので、そのあたりを修正した。具体的には this.requestFocus(); という1行を加えればよい。ついでに通常のウィンドウに戻す方法も追記する。ちなみにProcessingのフルスクリーン制御ライブラリはあるにはあるのだが、更新が止まっているのでこうやって自前で対応している。 フルスクリーン化する関数 void setFullScreen() { size(displayWidth, displayHeight); frame.removeNotify(); frame.setUndecorated(true); frame.addNotify(); frame.setSize(width, height); frame.setLocation(0

    Processingでフルスクリーンと通常のウィンドウを切り替える - Imaginary Code
    mactkg
    mactkg 2014/12/26
    便利
  • mbedJS + p5.jsでWebブラウザからmbedを制御する - Imaginary Code

    mbedJSを使うと、mbedでWebページ連動のハードウェアを作ることができます。今回はmbedJSの導入方法を説明し、mbedJSとp5.jsの連携、iPadでの利用などについて紹介します。 mbedJSとは mbedJSはmbedをネットワーク経由で制御するためのサーバファームウェアです。mbed上でWebサーバとして動作し、PCやスマートフォンからWebブラウザを使ってmbedにアクセスするとWebページが表示されます。ユーザはそのWebページ上で操作を行うことにより、mbedの入出力を制御することができます。 mbedJSではJavaScriptを使ってmbedのAPIを呼び出せるようになっており、プログラマはJavaScriptHTMLを使ってWebページ連動のハードウェア制御を記述することができます。 必要なもの mbedJSを動かすには以下のものが必要です。 mbed ネ

    mbedJS + p5.jsでWebブラウザからmbedを制御する - Imaginary Code
    mactkg
    mactkg 2014/11/03
    便利じゃん。
  • ArduinoからProcessingへint型のデータを送る - Imaginary Code

    ArduinoでanalogRead()を使ってアナログ端子を読み取ると0〜1023の整数値(int型)を返します。Arduinoで扱われるint型は2バイトです。これに対し、シリアル通信では1バイトずつデータが送られるため、2バイト以上のデータを送受信するにはちょっと工夫がいります。 情報量が減ることを気にしないのであれば4で割って1バイト(0〜255)に収めてしまうというやり方もありますが、ここではint型のデータを上位バイトと下位バイトの2回に分けてデータを送るという方法を紹介します。 ※逆バージョンはこちら。 ProcessingからArduinoへint型のデータを送る - Imaginary Code Arduinoのコード A0端子から読み取ったセンサ値をPCに送信します。ヘッダ('H')は、あるタイミングで受け取ったデータが上位バイトなのか下位バイトなのかを区別するための「

    ArduinoからProcessingへint型のデータを送る - Imaginary Code
  • Processingでスクリーン座標系とローカル座標系の相互変換を行う - Imaginary Code

    translate()やrotate()などの幾何変換によって移動・変形された座標系(ローカル座標系)と、スクリーンの左上隅を原点とするスクリーン座標系の相互変換を行う方法について説明します。 スクリーン座標系からローカル座標系への変換 スクリーン座標系における座標値を、現在の座標系での座標値に変換します。 PVector screenToLocal(float x, float y) { PVector in = new PVector(x, y); PVector out = new PVector(); PMatrix2D current_matrix = new PMatrix2D(); getMatrix(current_matrix); current_matrix.invert(); current_matrix.mult(in, out); return out; } ロー

    Processingでスクリーン座標系とローカル座標系の相互変換を行う - Imaginary Code
    mactkg
    mactkg 2014/07/16
    また便利情報 [processing][programming]
  • Processingでシリアルポートの設定が簡単になるライブラリ「SerialSelector」を作りました - Imaginary Code

    ProcessingでArduinoやXBeeと通信するプログラムを作っているとたびたびシリアルポートがらみのエラーに出くわします。大抵の場合、ポート番号や通信速度が正しく設定されていないことが原因なのですが、プログラムでポート番号を「COM1」とか「/dev/tty.usbmodem1234」とか「Serial.list()[3]」みたいな感じで直接書いていたりするとこの問題が起こりがちです。 この問題に関して以前から「実行中にポート番号や通信速度を自由に変更できるUIがあるといいのに!」と思っていたので、ライブラリを作りました。 SerialSelectorライブラリ SerialSelectorはProcessingにおいてシリアル通信の設定ダイアログを表示するためのライブラリです。WindowsでもMacでも動作します。 ダウンロード: こちらのページに置いてます: BACKYAR

    Processingでシリアルポートの設定が簡単になるライブラリ「SerialSelector」を作りました - Imaginary Code
    mactkg
    mactkg 2014/07/16
  • とあるプロジェクションマッピング作品に感じるモヤモヤについて - Imaginary Code

    みなさんこの動画はご覧になりましたか? BOX この『BOX』という作品では、アームロボットに取り付けられた動くスクリーンに対してプロジェクションマッピングが行われます。スクリーンの動きに同期して正確に投影される映像は実に幻想的です。しかし、どこかモヤモヤとした考えが頭をもたげます。「果たしてこれはプロジェクションマッピングである意味はあるのか?」と。 モヤモヤの原因 投影されている映像には視点位置に依存する3次元的な表現が多く含まれています。言い換えると、カメラの視点から見たときにだけ幾何学的に正しく見えるような絵を投影しています。シーン内に人物が登場しますが、彼の視点からはこういう風に見えていないはずです。おそらくこれを撮影しているカメラもまたアームロボットに固定され、事前にプログラミングされた動きをしているのでしょう(あるいはモーションキャプチャなどの計測機器を使ってカメラ位置を正確

    とあるプロジェクションマッピング作品に感じるモヤモヤについて - Imaginary Code
    mactkg
    mactkg 2013/10/04
    参考:Behind the scenes http://www.youtube.com/watch?v=y4ajXJ3nj1Q
  • Processingでタイトルバーのないウィンドウを作り、それをマウスドラッグで移動できるようにする - Imaginary Code

    タイトルバーがないプログラムをときどき作りたくなることがありますが、タイトルバーがないとウィンドウが移動できなくなってしまいます。そこで、ウィンドウ内をドラッグしたときに移動できるようにしましょう、というのが以下のコードです。 import java.awt.*; int mx = 0; int my = 0; void setup() { size(800,600); } void init() { frame.removeNotify(); frame.setUndecorated(true); frame.addNotify(); super.init(); } void draw() { } void mousePressed() { mx = mouseX; my = mouseY; } void mouseDragged() { Point mouse; mouse = Mou

    Processingでタイトルバーのないウィンドウを作り、それをマウスドラッグで移動できるようにする - Imaginary Code
    mactkg
    mactkg 2013/07/10
    setBackgroundで透明色の指定したらできた。なんでだろ?→https://gist.github.com/mactkg/5964289
  • ProcessingでKinectを使って遮蔽表現のあるARを作ろう - Imaginary Code

    今日の話は,ARにおいて人や実物体の後方にCGがある時に,CGの一部または全体が隠れて見えなくなっている状態(オクルージョン)をきちんと表現するべく,Kinectを使ってみましょうというものです. 前回はマーカベースの手法で遮蔽を実現する方法を紹介しましたが,今回はそれのKinect版です.事前に形が知らされていない未知形状の物体や,変形する物体,人間の手や胴体に対してもオクルージョンが表現できるようになります.ビバ!Kinect! 今日はこれの作り方と原理について解説します.あ,ちなみに僕人です. まずはソースコード いきなりですがProcessingのコードです.Kinectを扱うライブラリとしてsimple-openniを使いました.simple-openniのセットアップについては説明を省きます. import SimpleOpenNI.*; SimpleOpenNI kinec

    ProcessingでKinectを使って遮蔽表現のあるARを作ろう - Imaginary Code
  • 1