「 2016 9月」のアーカイブを表示中です。

投稿者: 錦澤 竜也

OpenCV cv::Matとメモリ

2016年9月30日 (開発者日記)

OpenCVにおいて画像を格納するクラスはほとんどの方がcv::Matクラスを使用していると思います。Matクラスの振る舞いを理解しておくとコーディングがはかどります。


cv::Mat blue(300,300,CV_8UC3,cv::Scalar(0,0,255));
cv::Mat copy = blue;
for(int y = 0;y < copy.rows;++y){
for(int x = 0;x < copy.cols;++x){
for(int i = 0;i < 3;++i){
copy.data[copy.step * y + copy.channels() * x + i] = 255;
}
}
}

みたいなコードがあったときに、変数copyは白一色を表しますが、Mat型では初期化演算子、代入演算子ともに値のコピーを作成するのではなく参照先のコピーを作るだけです。つまりcopyが指しているメモリ空間は変数blueと共用していて、copyの値を書き換えるとblueの値も書き換わってしまいます。この結果blueは白色の画像になります。

メモリーの共有を防ぐには
cv::Mat copy = blue.clone();
という様に書きます。

OpenCVでは前者を浅いコピー、後者を深いコピーといいます。前者のほうが高速にコピーを行えます。

なぜOpenCVがこのような使用になっているかというと、画像の範囲を指定して処理を行いたいときにこの使用が生きてきます。

 

例えば画像の中心だけ画像処理させたいとき、このように書けます。

cv::Mat white(300,300,CV_8UC3,cv::Scalar(255,255,255));
cv::Mat roi = white(cv::Rect(150,150,150,150));
for(int y = 0;y < roi.rows;++y){
for(int x = 0;x < roi.cols;++x){
for(int i = 0;i < 3;++i){
roi.data[roi.step * y + roi.channels() * x + i] = 0;
}
}
}

このコードでは白い画像の中心150*150ピクセルが黒色になります。

このように画像の範囲を指定して処理を行いたいときに、威力を発揮します。(自分はそれしか知りませんが、ほかにも使用用途があれば教えてください…)

投稿者: 我妻 大樹

HTC Viveコントローラーの分解!

2016年9月29日 (開発者日記)

ハード担当の我妻です。
今回は、HTC Viveのコントローラーのバイブレーションが思ったよりも小さな振動であったため、これを手持ちの振動子と交換できないかと試みました。

さらに、振動子を外部にも引っ張り出せないものかと思っています。
HTC Viveはかの有名なiFixitによって、使用されているICなどは既に公開されています。
さらにケーブルの位置もわかるため分解は非常にスムーズに行きます。

しかし、内蔵されている振動子がどこにあるのかは記載されていませんでした。

一応、XboxOneのコントローラーに似ているSteamコントローラーのタッチパネル部とViveのタッチパネル部はほぼ一緒な基板といわれており、Steamコントローラー側の振動子の位置は公開されています。

ということで分解してみます。

dsc_1905
(クリックで大きいサイズの画像が見れます)

まずは、裏面のねじを外します。
星形ネジのサイズは、T4サイズなので一致するドライバーを用意します。

 

dsc_1906
(クリックで大きいサイズの画像が見れます)

ここに一つ隠れているのでこのネジも外します。

 

dsc_1910
(クリックで大きいサイズの画像が見れます)

つぎに赤外線受光素子側のガワを剝いでいきます。

dsc_1912
(クリックで大きいサイズの画像が見れます)

赤外線受光素子側のガワは上下にセパレートする機構になっています。また、コントローラー裏側のガワはツメで固定されています。
これを丁寧にとるとネジが出てくるのでこのネジも外します。

以上でコントローラー上部の分解は終了です。

dsc_1909
(クリックで大きいサイズの画像が見れます)

次にコントローラー下部です。
天板と基板にかけて配線が出ているので気を付けないと切れてしまいます。

dsc_1913
(クリックで大きいサイズの画像が見れます)

これを外すとコントローラーの全容が把握できます。

ここで振動子を探す作業に入るのですが、実際にコントローラーを振動させてみたところ天板が振動していることが分かりました。

天板の各部品をチェックすると、やはりSteamコントローラーと同様にタッチパネル部の裏側に振動子がありました。

uoa1tr5fbsjzzrbq
(クリックで大きいサイズの画像が見れます)(iFixitのサイトから拝借)

画像右の基板上にある、鉄色の直方体が振動子で間違いなさそうです。

dsc_1915
(クリックで大きいサイズの画像が見れます)

 

さらに調べると赤い丸で囲ったこの半田が電源ラインのようです。
テスターで測ってみるとそのまま他の振動子をつけても動きそうですね。

dsc_1919
(クリックで大きいサイズの画像が見れます)

今回は振動子の交換が目的なのでここまでで分解を一時ストップします。
まだまだViveのコントローラーは分解のしがいがありそうな予感がします。

投稿者: 錦澤 竜也

Arduino自作

2016年9月28日 (開発者日記)

チーム明るい家族計画が開発で行ったことを紹介します。

ハード担当の我妻です。ハード担当といっても予選まではほとんどプログラムのお手伝いしかしていませんでした。

なので数少ないハード関連の紹介です。

Arduinoはオープンソースなハードおよびソフトとして有名で、近年のIVRCでも多くのチームが使用しています。
しかし、製品版をそのまま買ってきて使用しているチームがおおく、さらにはブレッドボードで展示もみられる始末です。

組み込み機器を専攻している自分としては、自作してみたいと常々思っていました。
そこでネットに落ちている回路図と学科で習った基板加工の授業を思い出しながら作成してみました。

部品は秋葉原の秋月や千石で買ってきて、一台おおよそ1500円程度で作成できました。
書き込み機の部分が800円ほどかかり、本体部だけなら600円少しといったところでしょうか。

回路があっているか少し不安ですが、一応動作もチェックできて一安心といったとこです。

 

ArduinoPCB

img_0913

写真だとわかりずらいですが、結構コンパクトにまとめられました。

まだコア部分の作成で止まっているのですが、これから使うセンサやらを確定させてメインボードのほうも完成させたいですね。

本選ではハード担当として、チームに貢献したいです。

投稿者: 望月 宥冶

HTC Vive ゼロレイテンシー通信!?

2016年9月18日 (開発者日記)

こんにちは。
明るい家族計画の望月です。

HTC ViveのUDP通信に成功しました。

初期の段階では、UNETを使うのかUDPを使うのか決まらず、どちらも試してみました。

UNETを試した際に、SteamVR pluginのGameObjectをそのまま生成すると、1つのシーンで2つ以上のSteamVRが存在してしまいます。
これによりデバイスの取り合いが起こり、そのままでは使用できません。また、この競合を回避しようにも大幅なレイテンシーにより実用とはいきませんでした。

よって、今回はUNETを使用するのではなくUDP通信によりお互いのViveのpositionとrotationを送りあうようにして解決しました。
注意しなければならないのが、お互いにデータを送り付けているだけなので、基本的には同期処理はしていません。
(今回はほとんど同スペックのPCをローカルの有線接続しているので、致命的なエラーは出ないだろうという考えです。ネット経由で使うときにはまた違ったやり方でないとレイテンシー問題があるかもしれません)

これにより送受信におけるデータ量と、受信のタイミングもこちらでコントロールできるので最終段階では100~120fpsで描画することに成功しました。
したがって、遅延は10ms以下となるので「ゼロレイテンシー」といえるのではないかと。

最後にViveコントローラーの位置に手のAssetをつけて、遊んでみました(通称:ゼロレイテンシー芸人)。

補足として、SteamVRのルームセットアップを的確に行うと、現実での位置とVR空間上の位置が一致するのですが、
それをしてしまうと、VR空間上で相手に触れたときに現実でも相手に触れてしまい、デバック中に怪我人が出てしまうので、今回はこんな感じで….

9/19 我妻追記

投稿者: 錦澤 竜也

IVRC直前ようやく体験フローの完成!宅配便の手配

2016年9月12日 (開発者日記)

チーム明るい家族計画です!

IVRC前日ようやく筐体が完成しました!

img_0915

こんな感じで体験者は椅子に座って2人で体験するコンテンツとなっております。

大会前日にようやく資材がそろいました!

少しジョイントが甘いのでこれからジョイントを増やしていきます。

また配線があまりに汚いのでそれも要修正です。

 

体験のフローもまだ確認できないところが多かったので、筐体を組んでおいてよかったと思います。

時間の関係で削った部分もかなりあるので、完全版ではないですが、遜色ない内容となっております。

 

筐体を組み終わったら、そっこーで片づけて、機材を梱包します。

機材を梱包し集荷を待っていたら13日火曜には届かないらしい\(^o^)/

しかし先輩たちが配送場まで車で届けてくれたので、危機は脱出できました。

先輩たちに感謝です。

img_0862

 

チーム明るい家族計画の健闘を祈っています!(自分で・・・)

投稿者: 錦澤 竜也

チーム明るい家族計画とは?real//baby real/familyとは

2016年9月11日 (コンテンツ)

チーム明るい家族計画の錦澤です。チーム明るい家族計画の展示「Real / baby Real / family」内容について説明します。本コンテンツは、リアルフェイス育児シミュレーターとしています。realbaby

(右のはポスターです)

 

IVRC公式へのリンクはこちらです。→ivrc.net/2016/visitors/#precompe

 

本体験の見どころは、大きく3つあります。

  1. 体験者の顔画像からその赤ちゃんを予測します。
  2. 体験者は最大2人です。
  3. 体験終了後に母子手帳を発行します。

 

未来の赤ん坊予測ーーーー!

img_0858img_0840nisiki_agatuma_baby

上の画像は二人の顔から生まれた赤ちゃんです!

キャワワ!(小並感)

 

2人プレイーーーー!

%ef%bc%92%e4%ba%ba%e4%bd%93%e9%a8%93

極低遅延通信(ゼロレイテンシー)!

2人でVRコンテンツが体験できるとか胸熱だろ!

パートナーと協力して赤ちゃんをあやそう!

2人の仲がより深まるかも!?

母子手帳ーーーーーー!

%e6%af%8d%e5%ad%90%e6%89%8b%e5%b8%b3

体験の記念に母子手帳をプレゼントするよ!

中身は体験してからのO・TA・NO・SHI・MI❤

 

みなさん「Real / baby Real / family」を是非体験してみてください!

Twitter[https://twitter.com/IVRC_realbaby]