東京工業大学 ロボット技術研究会

東京工業大学の公認サークル「ロボット技術研究会」のブログです。 当サークルの日々の活動の様子を皆さんにお伝えしていきます。たくさんの人に気軽に読んでもらえると嬉しいです。
新歓特設ページ        ロボット技術研究会 HP        ロボット技術研究会 twitter公式アカウント

MATLAB

「ロボット技術研究会」通称「ロ技研」は、その名前の通りロボットの制作や研究はもとより、電子工作や機械工作、プログラミングなどの幅広い分野にわたるものつくり活動を行っています。

カテゴリ一覧: loading

MAT少女育成計LAB #1

こんにちは!ところたん(@tokoro10g)だポン!
この記事は,rogy Advent Calendar 2016 の18日目の記事に選ばれたポン!

(以降"ま○いく"要素はありません…)

----

みなさまごきげんよう.早く美少女になりたい.石油王でもいい.

来たるべき年末の諸々に向けて,みなさま進捗があったりなかったりすることだろうと思います.
ちなみにわたしは任意のものに進捗がありません.

そもそもアドベントカレンダーは本来的にはクリスマスまでのカウントダウンをしながらお祝いして待ち焦がれるという趣旨のもとに存在するものでして,
それに寄稿している割にお祝いできるような状況でないというのは皮肉なものです.

まあ暗いことばっかり言ってても仕方がないので,諸々過程はすっ飛ばしますが,自分自身が美少女になって妄想によって自分自身と会話をすれば寂しくないはずだという仮説に基づいて,現在鋭意美少女になる準備を進めております.

その一環として,MATLABで簡単なボイスチェンジャーを製作中で,今回の記事はそれの途中経過の紹介ということになります.

livedoorブログは非常に書きにくくてつらいので,自分のブログの方に記事の本体を載せました.
内容としては音声信号からのピッチ・フォルマント推定と,それに基づいた簡単な音声合成を行うというものです.ぜひご覧ください.

[rogy Advent Calendar 2016] MAT少女育成計LAB #01 | Tokoro's Tech-Note

音声の変換・再合成をおこなったサンプルを置いておきます
(現段階では質がちょっと微妙です)


----

明日,19日目はかるもちゃんの『ebayかCybathlonか人工筋か日本酒かその他』です.

MATLAB FBX LoaderとMATLAB 3D Model Rendererの開発

この記事はrogy Advent Calendar 2016 11日目
「MATLAB FBX LoaderとMATLAB 3D Model Rendererの開発」
の記事です.
担当はrej55です.
前半はMATLAB FBX Loaderについて,後半はMATLAB 3D Model Rendererについて書いています.

まえがき

近年,3DCGの技術が大きく発達してきているなと感じています.今年のAdvent Calenderでもisskくんの記事Lineaくんの記事などで綺麗なグラフィックスが載っています.彼らといろいろと話をしていて,自分も3DCGに興味を持ったのでどこかで勉強してみたいと思っていました.

私はMATLABを利用したプログラミングが大好きで,東工大では学生が無料でMATLABを使用できるという背景もあり,趣味でいろいろと開発をしていました.今回は,MATLABで3DCGの描画ができないか?ということで試してみることにしました.

MATLAB FBX Loaderとは?

FBXファイルとは,3Dデータを異なるアプリケーション間でやり取りできるように設計されているファイルのことで,Autodesk社によって開発されています.MATLAB FBX Loaderは,MATLABでこのFBXファイルを読み込むためのライブラリとなります.

MATLAB FBX LoaderではFBXファイル内に格納されている情報を出力します.具体的には,

  • 頂点の数
  • 頂点の3D座標
  • ポリゴンを構成する頂点の集合
  • 各頂点のUV座標
  • 各頂点の法線ベクトル
  • 各頂点のカラーデータ
を出力するようにしています.

FBX Loaderの開発

FBXファイルはバイナリ形式のファイルなので,基本的にフォーマットがわかっていないと読み込むことが不可能です.MATLABでもバイナリファイルの読み込みは可能なのですが,そもそもフォーマットがわかっていないので読み込みができません.

実は,Autodesk社のほうでFBXファイルの読み込みなどができるSDKを配布しています.このFBX SDKはC++とPythonのものしかなく,そのままではMATLABでは使えません.そこで今回はMEXというものを介してFBX SDKを利用することを考えました.

MEXについて

MEXとは,MATLAB上でCやC++で開発された関数を呼び出すための機能で,CおよびC++コードをMEXファイル生成用にコンパイルするとMATLABで関数を呼び出すことができるようになります.

MEXファイルの作成にあたっては,まず下記のようなmexFunctionを用意します. mexFunctionはMATLABがMEXファイルを呼び出したときに実行されるゲートウェイ関数です.基本的にこのmexFunction内で処理を記述します.

MATLAB FBX Loaderは,FBX SDKのAPIを呼び出し,FBXファイル内の必要なデータをひたすらMATLABに出力として渡すという処理を書いているものになります.FBX SDKの詳細についてはこちらこちらを参考にさせていただきました.

MATLAB 3D Model Rendererとは?

MATLAB 3D Model Rendererは,MATLAB FBX Loaderで読み込んだ3Dモデルのデータを元に3DCG画像を生成するシステムです.GPUのハードウェア機能を直接使っているわけではないので,いわゆるソフトウェアレンダラに分類されるかと思います.

MATLAB 3D Model Rendererのパイプラインは下記のとおりです.

  1. ワールド座標からビュー座標への変換
  2. ビュー座標からスクリーン座標への射影
  3. スクリーン座標データを元にラスタライズ
  4. テクスチャフェッチ
このパイプラインに沿って,どのように実装したのかを説明したいと思います.

ワールド座標からビュー座標への変換

この節では,ワールド座標上の3Dモデルをカメラから見たビュー座標系に変換する方法を説明します. ワールド座標とは,3Dモデルの3D空間上での物体の位置を表す絶対座標系です.ビュー座標系は,カメラの位置を原点として,視点方向ベクトルとカメラの上方向ベクトルとこの2つに直交するベクトルを基底とする座標系です.

まず,ビュー座標系の基底ベクトルを求めます.ビュー座標系の基底ベクトルはカメラの視線方向の単位ベクトル$c_t$,カメラの上方向単位ベクトル$c_u$,カメラの右方向の単位ベクトル$c_r$です.これらは下記のように求めます. $$ c_t = \frac{x - t}{\| x - t \|},\ c_u = \frac{c_t \times u}{\|c_t \times u\|},\ c_r = c_t \times c_r $$ ここで,$x$はカメラのワールド座標における位置,$t$は注視点,$u$はカメラの上方向を表すベクトルです. これらの基底ベクトルを利用して,下記のような同次座標変換行列を定義します. $$ T_{\mathrm{view}} = \begin{bmatrix} c_t^{\sf T} & -c_t^{\sf T} x\\ c_u^{\sf T} & -c_u^{\sf T} x\\ c_r^{\sf T} & -c_r^{\sf T} x\\ O & 1 \end{bmatrix} $$ この行列により座標変換を行うことで,ワールド座標からビュー座標への変換が完了します.具体的なソースコードは下記のようになります.

ビュー座標からスクリーン座標への射影

スクリーン座標はその名の通りスクリーン上における2次元の座標系です.ここでは,最も簡単なピンホールカメラモデルに基づいて,ビュー座標系で表される3次元空間上の頂点をスクリーン上の座標へ射影したいと思います.

カメラとスクリーンの距離を$f$とすると, $$ P_{\mathrm{screen}} = \begin{bmatrix} -f & & &0\\ & -f & &0\\ & & 1 &0 \end{bmatrix} $$ が射影変換行列となります.これを用いて,ビュー座標系における頂点の座標は下記のように射影されます. $$ \begin{bmatrix} U \\ V \\ S\end{bmatrix} = P_{\mathrm{screen}} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} $$ 上記の処理は下記のように実装できます.

ラスタライズ

画像を生成するためには,座標データからピクセルのデータに変換する必要があります.この変換処理のことをラスタライズと呼びます.

ラスタライズを行うために,まず画像の各ピクセルとスクリーンの座標の対応を求めます.この処理は,meshgrid関数を利用すると簡単に求めることができます.MATLABでは画像データを行列形式で扱います.行列の各要素が各ピクセルの画素値に対応します.ここで, [X, Y] = meshgrid(linspace(-width, width, w_res), linspace(height, -height, h_res))とすると, XとYは画像の解像度と同じサイズの行列となり,Xには各ピクセルのスクリーン上における$x$座標,Yには$y$座標といったデータが入るため,このXとYを利用することで各ピクセルのスクリーン上における座標を得ることができます.なお,Y座標を反転させているのは,上記のピンホールカメラモデルでスクリーンへ投影すると上下反転した状態で投影されるからです.

ラスタライズを行うためには,各ポリゴンの内部を塗りつぶす処理が必要になります.そのためには,頂点データから多角形の内部判定を行う必要があります.多角形の内部判定を行う関数として,MATLABにはinpolygonという関数があり,これを利用すると各クエリ点が多角形の内部または境界上にあるかを判定することが可能です.

テクスチャフェッチ

ポリゴンをラスタライズする際に,どの色を割り当てるのかという問題が生じます.このとき,UV座標とテクスチャファイルが割り当てられていれば,頂点のUV座標をもとにしてポリゴンの中にテクスチャ画像に対応する色を付けることができます.この処理のことをテクスチャフェッチと呼びます.UV座標についてはこちらの解説を参考にさせていただきました.

UV座標は頂点に割り当てられているため,頂点に対応する各ピクセルのUV座標を求め,ポリゴン内部のピクセルのUV座標を求める必要があります.具体的には,頂点のスクリーン座標におけるUV座標から,各ピクセルの座標におけるUV座標を内挿する計算を行います.このような内挿は,scatteredInterpolantという関数を利用することで内挿のための関数のようなものを求めることができます.実際は,ポリゴンの外側のUV座標を計算するのは無駄なので,ポリゴンの内部のピクセルだけ計算することで計算の高速化を行います.また,隠れた面を描画しないようにするために,各頂点がスクリーンからどの程度離れているかを表すデプスの計算も行います.この計算も,各頂点のスクリーン座標に対するスクリーンからの距離をもとに各ピクセルにおけるデプス値を内挿するように行います.

上記のラスタライズおよびテクスチャフェッチを実装すると下記のようになります.

実際に試してみよう

今回は例としてユニティちゃんを表示してみたいと思います.

ユニティちゃんライセンス
ここでのユニティちゃんの画像につきましては,ユニティちゃんライセンス条項の元に提供されております.

実行した結果がこちらです. CzOAUiyUQAAXgvL
ジャギーを少し軽くするため,上記の処理に加えて今回は出来た画像に対しガウシアンフィルタで軽く平滑化をかけています.

続いて,背景画像と一緒に全身を表示してみます. CzOGIUnUAAIAlBM
背景画像を初期値に指定すれば,3Dモデルを上から塗り重ねるようにしてレンダリングすることができます.

まとめ

長くなってしまいましたが,MATLABでFBXを読み込む方法とMATLABで3Dモデルをレンダリングする方法について書きました.いかがでしたか?

レンダリング自体はかなり計算時間がかかるため,正直なところリアルタイムには向いてないと思います.ですので,現状のままではMATLABで3Dゲームを作る,みたいなものは非常に厳しいと思います.なお,レンダリング処理はGPUを利用することで高速化できますが,これでもリアルタイムには厳しいといったところです.

基本的な描画が可能になったので,今後は下記のような課題が考えられます.

  1. 光源の影響を計算するシェーディング処理
  2. カメラのボケなどを再現するエフェクト処理
上記の課題を達成したらMATLABでの3DモデルレンダリングフレームワークとしてGithubなどで公開したいと考えております.公開できる状況になったときにはまたこちらなどで報告させていただきます. ということで,今後はこれらをやっていきたいと思いますが,まずは修論をがんばって倒したいと思います.

私の記事は以上となります.明日はPLM_precure氏の「ジープがお好き?結構。ではますます好きになりますよ。」の記事となります!

MATLABゲーム制作の基礎の基礎

みなさんアローラ!13のマハトです.
これは rogy Advent Calendar 2016 の7日目の記事です.

普段はMATLABで作った変なものを紹介する記事を書いている僕ですが,今回はせっかくのAdvent Calendar企画だし少し技術的な記事にしようということで,「どうやったらゲームっぽい動きをMATLABで作れるか」について軽く書きたいと思います.

※この記事はわかりやすさを重視するために厳密には正確でない表記を用いている部分があります.またどうプログラムするかは個人の好みの部分ですので,プログラム例はあくまで参考としてお使いください.

・グラフィックスオブジェクト

 誰もが使ったことのある「plot」をはじめとした,figure上に描画できる図形のことをグラフィックスオブジェクトと言います.グラフィックスオブジェクトを作成する関数は色々ありますが,その全てが返り値としてそのオブジェクト自身を示す変数(グラフィックオブジェクト変数)を返します.
p = plot(t,x);		%pはplot(t,x)自体を指す.
よく使うグラフィックスオブジェクトを下に挙げておきます.それぞれの関数の使い方は各自調べてみてください.
f = figure(); %figureウィンドウ
ax = axes(); %座標軸
pat = patch(x,y,color); %多角形
rec = rectangle('Pos',pos); %曲率を設定可能な長方形
text = text(x,y,text); %文字
im = image(x,y,C); %画像
(ちなみにパズドラのゲーム画面はここに挙げたオブジェクトのみで作ってます)


・プロパティ
 MATLABのグラフィックスオブジェクトには「プロパティ」という設定値がありまして,このプロパティを設定することで図形を編集できます.例えばグラフの線の太さや色はそれぞれ「LineWidth」,「Color」プロパティに対応します.プロパティの値を設定するにはグラフィックスオブジェクト変数を使って
set(オブジェクト変数,'プロパティ名','プロパティ値');
または
オブジェクト変数.プロパティ名 = プロパティ値;
とします.逆に,プロパティの値を知りたいときには
value = get(オブジェクト変数,'プロパティ名');
または
value = オブジェクト変数.プロパティ名;
とします.例えば上のpの色を赤に変えたければ,
set(p,'Color','r');    or    p.Color = 'r';
です.逆にpの色を知りたければ,
p_color = get(p,'Color');    or    p_color = p.Color
です.各オブジェクトが持つプロパティは全てmathworks社のページに載っています.「(オブジェクト名) プロパティ」で調べるとすぐに出てきますので,気になるオブジェクトについていくつか調べてみるといいかもしれません.


・ゲームっぽいプログラムの例
 ここからゲーム制作に話が移ります(いきなり難易度が上がります).ここではこれまでの知識を使って「ドラッグすると図形が動く」というパズドラの一番基礎となるプログラムを例として,それについて解説を入れていきます.
patchとfigureとaxesのプロパティのページを見ながら読み進めるとわかりやすいかと思います.

function test
f = figure();
ax = axes();
axis([0 5 0 5]); %座標の範囲をx:0~5,y:0~5に
pat = patch([0,1,1,0],[0,0,1,1],'r'); %(0,0),(1,0),(1,1),(0,1)を頂点とする正方形
pat.ButtonDownFcn = @bdf; %①

    function bdf(object,eventdata) %patがクリックされた時に実行される関数,objectにはpatが入る
        cp = ax.CurrentPoint %②
        x = cp(1,1);
        y = cp(1,2);
        pat.XData = [x-0.5 x+0.5 x+0.5 x-0.5]; %patの中心のx座標をマウス位置に変更
        pat.YData = [y-0.5 y-0.5 y+0.5 y+0.5]; %patの中心のy座標をマウス位置に変更
        f.WindowButtonMotionFcn = @wbmf; %③
        f.WindowButtonUpFcn = @wbuf; %③
    end

    function wbmf(fig,eventdata) %figure上でマウスが動いた時に実行される関数,figにはfが入る
        cp = ax.CurrentPoint; %④
        x = cp(1,1);
        y = cp(1,2);
        pat.XData = [x-0.5 x+0.5 x+0.5 x-0.5];
        pat.YData = [y-0.5 y-0.5 y+0.5 y+0.5];
    end

    function wbuf(fig,eventdata) %マウスが離れたときに実行される関数,figにはfが入る
        fig.WindowButtonMotionFcn = ''; %⑤
        fig.WindowButtonUpFcn = ''; %⑤
    end
end
―メイン(test)関数―
①patch:ButtonDownFcn
 patchには「ButtonDownFcn」というプロパティがあり,このプロパティの値を「@関数名」と設定しておくことで,patchがマウスでクリックされたときに設定した関数が実行されます.このプログラムでは「bdf」という関数を設定しています. 

―bdf関数―
②axes:CurrentPoint
 axesには「CurrentPoint」というプロパティがあり,マウスが最後にクリックされた座標が行列形式で保存されており,(1,1)にはx座標,(1,2)にはy座標が保存されています.これを使うことでpatをクリックされた位置に移動させることができます.

③figure:WindowButtonMotionFcn,WindowButtonUpFcn
 figureには「WindowButtonMotion(Up)Fcn」というプロパティがあり,①同様関数名を設定しておくことで,figure上でマウスが動いた(離れた)ときに設定した関数が実行されます.このプログラムでは「wbmf(wbuf)」という関数を設定しています. ちなみにメイン関数ではなくbdf関数内で設定している理由は,「ドラッグ」を検知したいからです.マウスが押されてから離れるまでの間にのみ処理が実行されて欲しいわけです.

―wbmf関数― 
④axes:CurrentPoint
 先ほど解説した「CurrentPoint」ですが,figureの「WindowButtonMotionFcn」に何か関数が設定されている場合は「最後にクリックされた場所」ではなく「直前のマウスの座標」が保存されています.そのため,マウスが少しでも動けば「CurrentPoint」の値が更新されていきます.

―wbuf関数― 
⑤ figure:WindowButtonMotionFcn,WindowButtonUpFcn
 先ほど設定した2つの関数の設定をリセットします.これでマウスが離れた後はマウスが動いても何も処理が実行されません.


こんなかんじで,意外と簡単に実装できてしまいます.ちなみにこのpatchを複数のrectangleにして動きに応じて位置が入れ替わるようにしたのがMAT&ドLABンズです.


・まとめ
今回読んでもらった知識があれば結構いろんなものが作れます.色々わかりにくいところもあったと思いますが,講義や課題でシミュレーションしてグラフ作ることにしかMATLABを使っていない人もこれを機に遊んでみてもらえたらな,と思います. 

・今後作りたいもの
 
 修士1年になって忙しくなってきたのでこれまでみたいに色々作れるわけではないですが,とりあえず2つほど作ってみたいなというものがあります.
1.パズドラメーカー
 今のパズドラのコードを整理するとともに,チームやステージなどを自作できるツールを開発できたら面白そうだと思っています. 
2.ポ〇モン
  1つの時間軸があってそれに伴ってNPC達がランダムに色々動く,という処理を前から作ってみたかったので,どうせならポ〇モンでも作ろうかな,というようなかんじです.当初simulinkで作りたかったんですが,自分のPCだとsimulinkが重すぎてとても開発できないので,やるならfigureベースになるかなといった感じ.


以上です. 最後まで読んでいただきありがとうございました!

MATLABでグラフエディタ作ってみた(完成版)

みなさんこんにちは,マハトです.

本日,7月ごろに作り始めたMATLAB グラフエディタがついに完成しました!
前回の記事で紹介したものとは大きく変わり,より使いやすく機能も充実させたので,
それらを紹介したい&ソースコードの公開をしたいと思います.

まず,「graph_editor(ノードの数)」 によって起動してみます.今回はノードの数は6個にしました.

起動

6個のノードが円周状に並んでいます.
次にエッジを作ってみましょう.作り方は,始点→終点の順にノードをクリックするだけ.試しに1→2の順にノードをクリックすると……

エッジ1

1→2のエッジが作られました.このとき逆に2→1のエッジを作ってみると,

エッジ2

このように,双方向のエッジに変わります.
こんな感じで好きなノード間にエッジを生成し,グラフを書いていきます.

また, ノードやエッジを右クリックするとメニューが表示されるようになっています.

右クリック


 このメニューを使用することで,ノードやエッジの色や大きさ,太さ等を自由に編集することができます.
試しに色々編集してみたのがこちら↓ 

設定変更

また,各エッジには重みを設定することもできます.メニューバーから「Weigh on」を選択すると……

重み

重みが表示されます.これも重みの数値やフォントサイズ,位置などを自由に設定できます.

他にも,生成したグラフのグラフラプラシアンや隣接行列等を求めることもできます.メニューバーのDisplayからGraph Laplacianを選択してみます.

グラフラプラシアン

コマンドウィンドウに上のグラフのグラフラプラシアンがMATLAB形式で表示されました.正しい値が出力されていると思います.
※グラフラプラシアンや隣接行列の定義は転置されているものとされていないものがありますが,今回は僕がマルチエージェント制御でよく使う方の定義を使用しています.ご了承ください.


ちなみに,作ったグラフはもちろん画像ファイルとして保存できます.今回はfig,png,jpg,eps,svg形式で保存できるようにしてみました.また,figで保存しておくと,メニューバーのFile→Openでそのfigを開くことで再編集することができます.

他にも機能はありますが,紹介しきれないので詳細はフォルダに入っているreadmeをご覧ください.


以上でグラフエディタの紹介は終わりにしようと思います.今回はパズドラとは違ってコードも結構キレイに(あくまで相対的にですが)書いたつもりなので,ソースコードを公開しようと思います.
URLはこちら(Googleドライブです)↓
https://drive.google.com/open?id=0B5hAfc2dCPemQWZFSUp2M1VBVTQ

バグ等が見つかりましたら,この記事のコメント,もしくはreadmeに書いてある連絡先までよろしくお願いします.


ということで,今回の記事は以上になります.
工大祭ではさすがにグラフエディタを展示するのも何なので,MAT&ドLABンズを改造して展示しようかなと思っています.
何も手を付けてないけど,あと1か月あるし何とかなるよね……


おまけ:MATLABで作ったグラフエディタでMATLAB作ってみた
matlabグラフ

 

MATLABでグラフエディタ作ってみた

みなさんお久しぶりです,マハトです.

前回のMAT&ドLABンズの記事から早3か月,最近卒論が忙しいせいでなかなかMATLABで遊ぶことができなかったのですが,先日自分の卒論を書く上で使うツールをMATLABで開発し,それが意外といい出来になったので紹介したいと思います.

作ったものはタイトルの通り,グラフエディタです.グラフとはいっても「いわゆるx軸とy軸があって~」というグラフではなく(そもそもそれならplot関数でいいですよね),下の図のように通信構造などを表すためのグラフです.
 example
各頂点がエージェント,矢印が通信を表しています.例えばエージェント4はエージェント1,3から情報を得ることができます.
また,このグラフがどのような構造をしているかを数学的に表現するものとして「グラフラプラシアン」という行列があります.グラフラプラシアンの各要素をL_ijとすると,その定義は次のようになります.

・i =jのとき
L_ij=自身に向かう矢印の数
・jからiへの矢印が存在するとき
L_ij=-1
・それ以外
L_ij=0
  例えば上のグラフではグラフラプラシアンは次のようになります.
1 0 0 0 0 -1
-1 1 0 0 0 0
0 -1 1 0 0 0
-1 0 -1 2 0 0
0 0 0 -1 0
0 0 -1 0 -1 2

 1には6のみから矢印が来ているので(1,1)は1,(1,6)は-1というようなかんじです(見比べてみてください).

このグラフとグラフラプラシアンは基本的にセットで使うので,グラフを書きつつそのグラフラプラシアンを計算するツールが欲しかったんです.そこで,MATLABのGUI機能を使ってそのようなツールを作ってみました. 

start
起動するとこんなかんじで2つのウィンドウが開きます.左でグラフを書き,右で頂点の数を変えたりグラフラプラシアンを計算したりします.

1click edge
矢印を書きたければ,始めの頂点をクリック(頂点が赤くなる)し,終わりの頂点をクリックすることで簡単に書けます.ちなみに消したいときは矢印をクリックしてからキーボードの「d」を押すと消せます.number
右のテキストボックスで頂点の数を変えられます.このときすでに書かれている矢印は保存されるので,いちいち書き直す必要はありません.

gl2
右の「Calculation」ボタンを押すとコマンドウィンドウにグラフラプラシアンが表示されます.

 グラフを保存するときは,plotを保存する時のように「ファイル」→「名前を付けて保存」とすることで好きな形式で保存できます..figファイルで保存すれば,それをMATLABで開くことで再編集できます.


機能は大体こんなかんじです.自分の卒論用だったので,頂点の位置は円周上に均等に並べることしかできませんし,中の文字も変えられません.卒論が終われば暇になると思うので9月にはそこらへんも修正して公開したいなと思っています.
特にこれから卒業研究をする人の中にはマルチエージェントシステムを扱う人もいると思うので,そういった人が便利に使えるようなツールに仕上げていきたいと思います.


ということで,今回はここまでとなります.fmシンセサイザ,パズドラ,ペイントときて,ついに「MATLABで○○作ってみた」企画では初となる実用的なツールが完成しそうで,ちょっと感動です.  
ギャラリー
  • 自作キーボードを作ろうver1.0
  • 自作キーボードを作ろうver1.0
  • 自作キーボードを作ろうver1.0
  • 自作キーボードを作ろうver1.0
  • 第14回ROBO-ONE Light 結果報告
  • ロボット技術研究会紹介
  • ロボット技術研究会紹介
  • rogy2016冬合宿 in 戸狩
  • rogyサバゲ:†革命†をもっと
記事検索
最新コメント