Vibratorクラスを使ったAndroidの振動強弱の制御(Android vibration Control for strength)

Qiitaとかにのせてみたいと思ってます。でもなんだか怖いのでここにまとめておきます。

さて、おおよそすべてのスマートフォンには振動子、バイブレータが内臓されており主に通知などに使われています。

また、AndroidのAPIではVibratorクラスが用意されており開発者は
「自由」に振動機能を使うことができます。

用意されているのは「振動」「何秒間」維持させるかのみ。
また、ネットを探してみても振動の強さのコントロールを実現している人はいません。

ということでAndroidの標準APIを使って振動の強弱をつくりだしてみました。
※基礎的な振動のさせかたなどは他のサイト等を参考にしてください。





動作環境
Windows10 Home x64
Android Studio 2.3.2
HTL21 Android 4.1
Xperia Z3 Android 5.0


AndroidのAPIで用意されているのは、どのタイミングで振動をON-OFFにするかということになります。
したがって振動の強弱を作り出すためには、直接電圧やらをさげて振動子の回転、および強弱をコントロールするやりかたは取れません
(探してみた範囲ではありませんでした。)

そこでPWMという手法を用います。

ざっくり説明するとON(1)とOFF(0)を高速で入れ替え、周期ごとの平均値によって疑似的に0.5など0,1以外の値を作り出すことができるようになります。
工学系ではLEDの明るさやモータの回転数制御などによく使われ、ぼんやりとした明かりや速度の調整ができるようになります。


よって、本題です。
Androidの振動のオンオフをPWMの考え方を使って制御します。
まず、Vibratorクラスの「void vibrate()」を使います。
  このとき、引数が2つあるものを利用します。

これは第1引数に振動パターンを入れ、
  このときの振動パターンにはPWM的な考えを利用したパターンを入れます。
第2引数にリピート回数を入れます。
  なぜかいまいち分かっていませんが、0を入れても動きます。また、1を入れるよりも0を入れたほうが振動が弱くなります。

振動のパターンは次のようにします。
     long[] pattern = {0, s, t-s};  s(振動の強さ) t(周期,ms)
たとえば、周期を20ms,強さを2段階目とした場合、
     long[] pattern = {0, 2, 18};  s(振動の強さ) t(周期,ms)
と、なります。
第1引数の配列は{待ち時間、振動時間、待ち時間、振動時間、、、、}となっており、ループすることを前提とした場合最初の待ち時間は0msで固定し、以後二つの数値で決めます。

端末によっては振動子の挙動が違うため、振動の強さが小さすぎると振動しない場合もあります。
以下は周期20msで三段階の振動の強さに調整できる簡易スクリプトです。

long[] pat1 = { 0, 1, 19 };
long[] pat10 = { 0, 10, 10 };
long[] pat20 = { 0, 20, 0 };

switch (Value)
{
case 0:
vib.cancel();
break;
case 1:
vib.vibrate(pat1, 0);
break;
case 10:
vib.vibrate(pat10, 0);
break;
case 20:
vib.vibrate(pat20, 0);
break;
}



vibrate()関数の挙動を完璧に追えているわけではありませんが、一応振動の強弱をコントロールすることができました。
周期を変えることで振動の強さの段階を自由に変えることができます。
また、挙動が若干怪しいです。自己責任でお願いします。

VRノートパソコンレビュー、というか使いつぶしました。(G-tune NEXTGEAR-NOTE i5702)

どうも、ということで次回です。自分の中でDK2→VIVEを乗り切った名機の紹介です。
買ってベンチしたよ!記事なんて正直どうでも(

今回はOculus DK2時代の、元祖VR対応ノートPC

「NEXTGEAR-NOTE i5702 」
NEXTGEAR-NOTE i5702


を使いつぶしたのでその感想を書いていきます。

まず、基本スペックですが、

■OS : Windows 10にアップグレード済み
■CPU : インテル® Core™ i3-4170
■グラフィックス : NVIDIA® GeForce® GTX™ 970M(6GB)
■メモリ : 24GB
■SSD : 128GB

と、デフォルトの状態からちょいちょいいじっています。
特にメモリは最終的にこんなに増えました。

なぜこんなにもメモリが増えたかというと、こいつのマザーボードはメモリが4スロットタイプの鬼アツモデルだからです。
なので構成的にはノートPCなのに8GBx3枚みたいな感じになってます。

こういう特殊モデル(マウスコンピューター御用達)につよいメーカー「Clevo」製であり、このi5702はP750zmモデルが元となっています。
なのでBIOS関連やらパーツやら説明書はすべてP750zm仕様なため色々ごにょごにょできます。

買ったのは2015/9だったような気がします。同時期にDK2も手に入れてウハウハしてました。(この2か月後くらいにGTX980のMなしモデルが発表されたはず)

買うきっかけになったのはこちらの記事を読んだからですね。
Oculus Rift DK2が完全動作する「変態ノートPC」はどうやって生まれたのか? マウスコンピューター 杉澤氏に聞いた誕生秘話

当時としては、Optimusの問題にたぶんみんな悩んでいて、どうしてもVR=デスクトップみたいな風潮ができつつあったと思います。
そこにデスクトップCPUを積んだノートPCとは!昔Pen4搭載爆速!(笑)ノートPCを中古で買ったのを思い出します。
そこからDK2を半年くらいいじって酔ってを繰り返していたら
クレカでHTCVIVE買ってました

その後VR開発チームを結成し、おおよそ7か月間がっつりHTC VIVE+Unityを開発したノートPCになります。
意外にも、そこまで激しくスペック不足を感じることなくたまにデモ展示機としても活躍しました。

…しかし、相次ぐ開発と展示による負荷がたまったのか2016年の年末に熱暴走をおこします。
その後再起動しかしてくれなくなりあえなくご隠居しました。


ここからは基本的な使い心地です。
キーボード配列は最近流行りのCtrl、Fn、Win(だったはず)で普段ノートPCを使ってこなかった自分としてはまったく問題ありませんでした。
また、キーストロークは深く、Macみたいなパスパスの浅めが嫌いなので使いやすかったです。
重さに関してですが重すぎてカバンがちぎれました
肝心の熱ですが普通に使ってもやばいです。

いやほんとにファンが回ってるのか疑うレベルで、電源プランを最大パフォーマンスにしているとモニターのヒンジ(左側)部分が触れないほど熱くなります。おそらくCPU側の排熱ですね。
底面から吸気するタイプなのでファン搭載のノートPC台が必須になります。なければなんでもいいので底面に隙間を作る必要があります。
CPU温度は80度を余裕でマークします。その代りGPUは70度前後なので「まだ」平気です。

と、いろいろ書きましたが総評としていい買い物だったと思います。
VR対応ノートPCは今でこそかなり増え、軽くなり、GTX10シリーズにより発熱もパフォーマンスも劇的に改善されました。
加えてThunderbolt 3によって外付けGPUなんてものもできてます(夢にまでみたノートPCのGPU交換!

デスクトップを持ち運んでいるかのような重さとスペックでしたが、その分見返りも大きかったと思います。

ラピッドプロトタイピングな時代にビルド遅いからその間暇ぶっこいてると気分も落ちてきます。少なくとも自分は。
このPCで作った試作品は数知れず、みたいな感じなので、思いついたら速攻コード書きたいしマシンパワーでごり押したい人にはおすすめです。


長くなりましたがこの辺りで締めようと思います。
ちなみに、こういうPCは途中でCPUグリスを塗り替えておくと後々寿命が延びます。
次はThunderbolt 3搭載ノートPCかな?

UnityでWiiリモコンを使う(後編)

こんにちは。

前回書いた「wiiリモコンの途中成果」が最近になって伸びてきました。
これですね。


ありがたいことに、動画を見てもらえた人から質問をいただけたのでこちらでまとめたいと思います。

この動画のシステムを簡単に説明すると、

「wiimotelibのサンプル(Visual Studio)にwiiリモコンのセンサの値をテキストファイルに書き込むものを追加する。」

「Unity側でこのセンサの値が書き込まれたテキストファイルから値をとりだす。」

「オブジェクトの回転に利用する!!」


といった形です。
お気づきかもしれませんがわざわざテキストファイルに書き込むのは意味がないです。
しかし、この当時はほかにやり方を知らず、苦肉の策でセンサデータを渡していました。

現在のやり方では若干変わっており、特にテキストファイルに書き込む~、のあたりが違います。

大学のほうで知ったのですが、TCP通信というソフトウェア間で通信する技術を使っています。(こっちのほうがプログラムとしてはスマート)

しかし、世の中ではすでにバランスボードをUnityで使う方法をまとめている方がいました。
Unity+WindowsでWiiのBalanceBoardを使う
こちらの記事でまとめられています。

参考にしているリンク等もかなり勉強になるのでおすすめです。

と、いうことで今別件でこのwiiリモコンのプログラムを書いているのでまとめてみました。

TCPでやったバージョンもありますがそこまで外見は変わっていません。
若干軽くなった?程度ですかね。

もともとプログラムをPICでしか書いていない人間もだんだんとほかの知識が身についてきたのかなといった具合です。

IVRC落選しました。+その他

こんにちは、今やTwitterのアカウントが2つある意味がなかなかなくなってきて片方に偏ってます。
というかアカウントを切り替えるのがめんd

金曜日にIVRCの書類選考の結果が発表されたのですが、みごと落選いたしました。
(周りの人に書類選考とおるっしょwとかいってはずかしい)
今まで知らなかったのですが、審査コメントというのがいただけるようで。
光栄にもお三方からコメントをいただけました。

何回か読み直したのですが
「ふむ……」
といった言葉しか出なかったです。

というのも今回の企画書はいろいろな人に校正してもらったのですが、
教授と身近な人といった具合で、実際に赤の他人に見てもらうのは初めてだったんですね。

まるで

これを思い出しますね。

これも動画を上げる前に身内(バンド仲間)の評価やら初号機先生に評価を事前にいただいたりしてあげたものなんですね。
コメントにある通りチューニングあってません。
というかそもそもオクターブチューニングとかそんなものも知らなかった時代です。
弦高もめちゃくちゃで……というか、この動画の音声はヘッドホンアンプをボイスレコーダにつないで録音してました()

フィールドが違うところに飛び込んでいくことを実感した動画で、
気に入っていて消してないんですけど今回の選考もそうじゃないかと。

まったく新しいことに飛び込んでいくときはボッコボコにされたほうがなんだか長続きすると思います。
メンタル的にはやられますが。

コメントを外部に漏らしてはいけないっていうのはなかったと思うので、
転載しますが(ダメだったら連絡ください。訂正いたします。)

色々な機構を要素として盛り込もうとしているが,それがどう組み合わさって体験を構成するのかを設計しきれていない.足し算で考えるのではなく,いかに最小限の機構で最大限の効果を発揮させるかを考えたほうが良いだろう.」

ということです。なるほど。わかりました。
まるでギターの音作りのようだ()

ふざけてはないんです、ただあまりに正論過ぎて反論できません。
ほかの2つコメントは屁理屈こねられるのですがこれに関しては受け入れるしかないですね。

すべて匿名なのでどなたがコメントしてくださったのかわからないのが本当に残念です。

来年IVRCに参加するかはわかりませんがとてもいい勉強になりました。
企画書を初めて書いたのもそうですが、実際にコメントを頂けるほうがとてもプラスになったのかなと。

ちょっと振り返るべき時なのかもしれませんね。

先端コンテンツ技術展に参加後

コンテンツ東京2016の先端コンテンツ技術展に参加してきました。その中で、いくつか体験させてもらえたので感謝の意味も込めてまとめておきます。
(関係ないですが、ビッグサイトで行われているイベントには「行ってきた」よりも「参加」と言いたくなります。)

と、いうことでまず最初はこれです。

[BLAST&BLAST]


積木製作さんのSIMVRを使った「Blast&Blast」体験してきました。
SIMVRは一時期ネットでは話題に上がったので覚えているのですが、実物を見るのは初めてですね。
ちなみにこちらの記事のモデルとは若干違いました。「http://www.moguravr.com/simvr/

上の動画の体験者、実は自分なのですが久々のゲームで舞い上がってます。

コンテンツの流れとしては、座るとチュートリアルが出てボタンの解説を行ってくれます。
リアルで設定を言うよりVR内で説明したほうが没入感が~というの話を聞いていたのでそれかなと。
加えて、係の人が説明する場合は人によって差が出てしまうのでそれを防ぐ案でしょうか。

その後動画の冒頭に繋がります。
コンテンツ自体のクオリティは高く、特に激しく動いた割には酔いがほとんど無かったです。

酔いは個人の主観にもよるのですが、終わったあとフラつくことも無く、かなり快適でした。

ここまではVRコンテンツとしての感想なのですが、ゲームとしてみると、
難易度はとても低め、最後の敵は恐らく勝手に死ぬ、敵なのかオブジェクトなのか正直撃ってみないと分からない、そもそもHPゲージがない。などなど……
あくまで技術展なのでこんなことを言うのはおかしくはありますが、企業も新規に作っているという感じを受けました。
ただし、酔いという難題をいい塩梅でクリアできている点では今あるコンテンツではぶっちぎりだと思われます。
素直にもう一度やってみたいと思いました。

お次は、「idogaVR」社のデモを体験してきました。
有名なコンテンツや目立ったものはほかのレポートで書いてあると思ったので
すこし趣旨の違うものを体験しました。

idogavr


このようにラジコンに360°カメラ(THETA)を搭載して、このカメラの映像をHMD(この展示ではOculusCV1)で運転手の視点になれるといった展示です。
手元にラジコンのコントローラがあるのですが、なかなか操作が難しかったです。
CV1ということもあり、眼鏡をはずしたのですが視力がもともと悪いのでそれも加わって、難易度はLUNATICでした。
システムとしてはUnityで動かしていて、ソースをみるとなにやらwebcamtextureでやっているみたいでした。
また、接続はUSBではなくHDMIを使っており、画質の向上とFPSの確保をしているようです。

と、いった具合でとても簡単?な仕組みかなと。
ですがロボットに360°カメラの相性は目を見張るものがあります。
ロボ科としてなにかに転用できないかと考えますね。



余談ですが、会場のHMDはCV1とViveがともに同じくらいでしょうか?
というのも一つのブースで何台ものHMDを使うところはViveを主に使っており、一つだけならCV1という構成が多かったです。
Viveを2台以上使う場合は、LightHouseをワンセットで済むのが魅力的ですね。

それと、DK2を使っているブースも少なからずあったように思えます。
必要スペック的にも低いので、移動型展示には向いているのかなというのが理由ですかね?

以上、つらつらと書きましたがいったんレポートは閉めたい思います。

拍手

web拍手

FC2カウンター

現在の閲覧者数:

プロフィール

Head

Author:Head
どもこんにちわHeadです
ゲームのこととか書こうとブログやり始めたら、
もっぱらギターばかりになってました。
最近はVR関連に興味がむいてます。それとunity

{ギター歴:2010.6/27~現在}
{unity:2014.8月~現在}


連絡用のメアド貼っておきます。何かあったら送ってください
head399★gmail.com(★は@に変えてください)

最新トラックバック

Headの弾いてみた(最新)

検索フォーム

ブロとも申請フォーム

QRコード

QRコード