2021年4月24日土曜日

Deeplabcut 訓練済みモデルと Google Colab

Deeplabcut 【訓練済みモデル】を Google Colabを使って複数のファイルをドバっと処理する方法を簡単に解説します。Google Colabとか詳しくない人用です。Deeplabcutがどんなものであるかの説明は飛ばします。本家あるいは他サイトを参照してください。

http://www.mackenziemathislab.org/deeplabcut

2020年6月11日木曜日

UbuntuとNVIDIA

新しくDeep Learning用に購入したPCにLinux (ubuntu)にインストールしようとしたら画面がバグった。具体的には, 「Couldn’t get size: 0x800000000000000e」と一番上に出て,下の方はぐちゃぐちゃで読めない。

USBが壊れてるのかなと思ってインストールディスクを作成しなおしても同じ症状。困ったなー。とおもったら。NVIDIA Geforce 入っているのがまずいらしい。

https://qiita.com/yoya/items/026317fe2ddb30ab411d
このサイト,助かりました。

指示通りnomodesetを追加すると,普通に起動できました。以前他のPCにubuntuをインストールしたときにはそんなことなかったが,相性とかがあるんだろうな。

その後,NVIDIA公式からドライバをDLしてくる。 ここから,選べばいい。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp

.runというファイルがDLされて,それをクリックするとなぜかtextエディタが開かれて…時間かかった挙句何か文句を言われた。

ターミナルから実行すればいいらしいので,.runファイルのあるディレクトリに移動してから
sudo ./ファイル名.run
を実行。

すると,The distribution-provided pre-install script failed!とか言われる。 最初はびびってとりあえずabortするものの,調べてみると無視していいらしい。Continue installしましょう。

一応,下のサイトに詳しいインストール方法が書いてあります(コメント欄にもっと簡単な方法も)が,私は普通に.runファイルを実行するだけでいけました。
https://sy07-sub.hatenablog.com/entry/2018/10/14/003750

さて,これから2080 Tiのお手並み拝見です。

When I tried to install Ubuntu to a new PC for deep learning, a warning message "Couldn’t get size: 0x800000000000000e" appeared and the installation was stuck. I found that the graphic driver for NVIDIA Geforce seemed not to work well. So, first I had to stop the driver and activate default driver by adding "nomodeset" in the first screen that I can select ubuntu installation (see the screen capture in https://qiita.com/yoya/items/026317fe2ddb30ab411d). Then you can boot install and boot ubuntu normally. After that, I had to install a driver for the graphic board (https://www.nvidia.co.jp/Download/index.aspx?lang=jp). In the installing process, you may see "The distribution-provided pre-install script failed!" but you can ignore it. Good luck!

2019年6月25日火曜日

240Hz presentation with MATLAB Psychtoolbox

Finally, I found the solution!

You can use 240Hz visual presentation using Screen function on MATLAB 2015b (32bit) and Psychtoolbox 3.0.11!

Display monitor: I-O DATA 24.5 inch (240Hz) GigaCrysta EX-LDGC251UTB

you can test the flip accuracy by "FlipTest".

2019年4月10日水曜日

240HzのディスプレイとPsychtoolbox

【解決!】

Windows7で画面の解像度→詳細設定「モニター」タブにて,リフレッシュレートを選べる。そこで240Hzに設定すれば,はい終わり!であれば,ここにメモを残さないわけで。

Screen関数を使用して描画をするんだけどどうも4msが出ない。Psychtoolbox的には240Hzと認識しているのに…。ただしPCの性能ももちろん必要なので仕方ないのかなあ,と思いつつ色々いじったんだけど,なんだか最後までしっくり来ず。

というところで,ふとNDIVIAコントロールパネルの「解像度の変更」というところを確認してみました。そしたら,リフレッシュレート「120Hz」となっていたわけです。UltraHDだと120Hzまでしか出せないらしい。

これを240Hzに修正してPsychtoolboxを走らせて見ると,描画が少し早くなり,安定しました。しかし、相変わらず240Hzでは描画できないのです。

======
ここから時は経ち、PCもグラボも良いのに変えたんだけど(GeForce RTX2060) やはり
240Hzじゃ描画できません。(ここからWin10のはなしになる)


======
やっとできました。長かった。何個PC試したことか。Psychtoolboxのバージョンを3.0.11にして,MATLAB 2015b(32bit) にしたらいけました。32bit は3.0.12からは対応していないはず。3.0.10だとうまくいきませんでした。

ディスプレイの他のセッティング等はいじらなくてOKです。2015は2018と同居していますが,大丈夫(Gstreamerは32bit用のものもインストールする必要あり)。

2018年8月6日月曜日

HDDからSSDに換装した

HDDから,CrucialのSSD(1TB)に換えました。
PCは,DELLのXPS 8700 デスクトップ。Windows7です。
しかし,その途中大変だったので,メモっておきます。

[データ移行ソフト]
・CrucialのSSDを買うと,Acronis True Image for Crucialというコピーソフトが使えます。これは,CrucialのSSDが認識されていないと使えません。
・Freeのものだと,EaseUS Todo Backup Freeや,AOMEI Backupper Standardというものがあります。
・ 概ね,どれでもいいようです。

[物理的に用意するもの]
・SSD本体

私の場合はこれ。生協経由で購入したら,amazonの倍ふっかけられました。まじでボッタクリです。大嫌いです。K大生協。

・SATAケーブル

一般的には,これ,と,だいたいどのサイトにも書いてありますが,その後の使い勝手等を考えると,不要です!ただし,現在HDDに繋がっている既存のケーブルがSSDに対応していないとか,そういう可能性がある場合には,購入してください。

・USBケーブル

デスクトップの場合でも,SATAケーブルの代わりに, こっちを買ったほうが最終的に助かる可能性ありです。ここに貼ってあるのを買ったのかどうか忘れましたが,基本的に動きそうならなんでもいいです。

・ブラケット

これは,最悪なくてもいいです。SSDをケースにちゃんと固定したいならば買いましょう。

[ブツの解説]
SATA/USBは,データ移行(HDD→SSD)の際に使用します。どちらかは必要です。移行後は,既存のSATAケーブルでSSDを接続するので,既存のHDDをそのままPC内部で使用し続けるのではない限り,新たなSATAケーブルが必ず必要というわけではありません。

USBケーブルの場合にも,その後は(基本)使わないので(他のSSDを外付けにする場合には流用可能),状況は同じなのですが,換装にてこずった場合に,こっちの方が楽です。あと,PC初心者は,USBケーブルを扱う方が精神衛生上,楽かと思います。

[ざっくりとした手順]
1.SATA/USBケーブルで,SSDをPCにつなぐ。
 ・SATAの場合は,電源おちているPC開けて,電源とSATAケーブルをそれぞれSSDに繋ぐ。SATAケーブルの一方は,マザーボードのそれっぽいところを探して挿す。
 ・ USBの場合には,SSDにかたっぽを繋ぎ,外付けHDDのように挿すだけ。

2.コピーソフトで コピー。
 ・私の場合には,Acronisを最初に使用。その後色々あって,EaseUSを使用。最終的に,Acronisが悪いわけではなかったと思う。
 ・とりあえず「コピー!」みたいなものを押せば,数十分~数時間で終了です。私の場合には,500GBちょい使用していて,Easeで2時間ちょいだったかな。
 ・「SSDに最適化」 みたいなオプションがあるけれど,つけてみて,失敗したらその次からは外してみればいい。

3.電源落として既存HDDをはずして,SSDを接続
 ・HDDについているSATAケーブルをはずしましょう。
 ・SDDにSATAケーブルが付いていない場合は,接続。あるいは,付け替えたい場合も,付け換える。

4.Windows起動
 ・成功!わーいやったね。簡単!

というのが,絵に描いたモチです。


[上の作業に失敗しないように,いくつか対策です。]
以下は,できるだけ作業前に最初に行ってください。

みんな
・重要なデータのバックアップをとって,色んなドライバなどを更新しておきましょう。

普通のヒト
・Intel Rapid Storage Technologyを必ず,最新版に更新する。なんか色々と悪さするみたいです。ただし,あるバージョンだとOKだとか,そんな話もあるので,もし躓いたらその辺をググってください。

Intel Rapid Storage Technologyを最新版に更新できない人へ!
・マニアックな悩みですが,私はこれでした。なぜか更新の途中でエラーが出て,それ以降,アンインストールもアップデートもできないという最悪な状態に。
・そんなときは,「デバイスマネージャ」→「IDE/ATA/ATAPIコントローラー」→ の「AHCIなんとか」ってなっているところのプロパティ開いて,ドライバ更新→探す→「Standard AHCI 1.0 Serial ATA Controller」にドライバ変更。これは,インテルではなくてマイクロソフト標準のコントローラーらしい。


[上の作業に失敗したヒトへ。]
・失敗すると,分かりやすくWindowsが起動しません。無限ブルースクリーンです。

・私は,2回インストールに失敗(SSDを2台買っていたのでした...)したのち,1回書き込んだSSDを初期化してもう一度コピー作業をおこなう必要がありました。
・しかし,HDDから正常起動させているときに,SSDをSATAで繋いでいてるとWindowsが落ちてしまい,初期化ができないという困った状態に。
・ここで登場するのが,USBケーブルです。USBケーブルなら,HDD起動させている際にも,SSDが邪魔して困ったことに,なんてことにはなりません。
・下のSSDの初期化を参考にSSDを初期化しなおして,何度もコピーにトライしてください。


[SSDの初期化]
 ハードディスクパーティションの作成とフォーマット
・プログラムの検索的なところに「パーティション」とか入力して「ハードディスク パーティションの作成とフォーマット」を探し,起動。
・こまったSSDを探し, ディスク番号を確認。私の場合には,disk 5でした。
・ボリュームを右クリックして,「ボリュームの削除」をしておく。間違えると大変なので超慎重に。

diskpart
・プログラムの検索的なところに「diskpart」と入力,起動。
・コマンドラインに「list disk」と打つと,現在接続されているディスクのリストが出る。
・さっきのディスク番号と照らし合わせて確認してください。kろえも間違えると大変。
・「select disk 5」と打つと,そのディスクが選択された状態に。
・もう一度「list disk」と打って,選択したディスクの横に「*」がついているか確認。
・「clean」と打つと,選択されているディスクがまっさらな状態になります。
・これで,もう一度コピーすることができる状態に戻ります。



2017年10月7日土曜日

Acquiring xy and pressure data from a wacom tablet with python

I gave up to acquire xy and pressure data from a wacom tablet with MATLAB, and used python instead.

1) Download python codes.
  I developed codes based on the below URL.
You may find test.py and tablet.py.
 
https://gist.github.com/nitaku/8377916

2) Install Anaconda3


https://www.continuum.io/downloads

Maybe a 32bit version is better for considering the compatibility with the cgkit2 (32bit).

3) Get Python 3.3 
I installed Anaconda3 with Python 3.6 and thus I had to get Python 3.3 in the environment.

   conda create -n py33 python=3.3 anaconda 

4) The way to activate Python 3.3

   activate py33

if you want to go back to the default environment, you can type

   conda deactivate

5) Download and install cgkit 2

  https://sourceforge.net/projects/cgkit/files/cgkit/cgkit-2.0.0/

  cgkit-2.0.0.win32-py3.3.exe (Windows)


* I could not install cgkit 2 because Python 3.3 was not found in Registry, and had to register by myself.

 5-1) Open Registry
     cmd -> regedit

 5-2) Copy the values of Python 3.6 and edit them to go along with Python 3.3.
    "Export -> text edit -> Import" maybe faster than direct editing using GUI.

 5-3) Finally, I installed cgkit 2.

6) Execute "test.py" with WACOM cintiq 13HD

I can acquire the data at 180Hz!

In the test.py,


    p.t, p.x, p.y, p.p

correspond to timestep in the system time(ms), x coodinate, y coordinate, and pressure, respectively.

You can save them like as

   filename = '0001.csv'
   f = open(filename, 'w', newline='')
   csvWriter = csv.writer(f)


   def draw(p):
         :
         :
         csvWriter.writerow([p.t, p.x, p.y, p.p])
         :
   f.close()








2017年9月2日土曜日

SONYのNeural network consoleを使ってみた

GUIでディープラーニングできちゃう話題のやつ。とりあえず遊んだ備忘録。

バイナリでなく,カテゴリカルなデータを学習させるときには,レイヤ(Affineなど)からの出力をsoftmaxに入力して,softmaxからの出力をカテゴリの数に設定する。

なので,標準で用意されている0~9の画像データセットの場合,10とすればよい。

最後に,Softmaxからの出力をCategoricalCrossEntropyに入力すればよい。

ちなみに,SoftmaxとCategoricalCrossEntropyを足したものである,SoftmaxCrossEntropyを使うと,ちょっと早いらしいんだけど,Evaluation後のクロス表が出力されないので注意です。


2017年8月19日土曜日

MATLAB モニターのサイズをcmとピクセルで取得

実験などで,物理的なサイズで指定したいときにはこれを使って修正。
出力された値の比をとってあげればよいです。

------------------------------------------------
function out = getMonitorSize
% モニターのサイズをcmとピクセルで取得
% 一行目,cm
% 二行目,ピクセル
%

a = groot;
% 単位をcmにする
set(a,'Units','centimeters')
centiM = get(a,'MonitorPositions');
% 単位をpixelに戻す
set(a,'Units','pixel')
pixelM = get(a,'MonitorPositions');
out = [centiM(3:4); pixelM(3:4)];

------------------------------------------------

 昔のバージョンだとgrootだとエラーでるので,0とかにするとよいかも。

2017年7月30日日曜日

Psychtoolbox 動作確認

新しいPCでのPsychtoolbox Screen関数の動作確認。

Mouseコンピュータの小さいやつ,mouse デスクトップパソコン Lm-mini。


メモリはとりあえずささやかに増やして買いました。


CPU Core i3-6100U @ 2.30GHz
メモリ 8GB
ディスプレイアダプタ Intel HD Graphics 520

Psychtoolbox(古いバージョン)インストールして,即Screen関数起動成功。
このサイズのPCで実験ができるとなると,いろいろ結構便利になりますね。

SSDは120GBあるので,プログラム関係は問題なく収まります。
余計なものは,外付けHDDを一台用意すればOK。

USBポートも,全部で6基あり,十分。
ディスプレイ裏マウントが標準で付属されているのも,よい。

2017年5月25日木曜日

Raspberry pi 3bを触る ラズパイさん。

とりあえず覚書です。

Raspberry Pi 3bを買ったよ。

一通りセッティングしたら,センサーのデータだらだら表示などに使う予定。

ディスプレイ小さいのがいいので,3.5インチのタッチモニタを購入。
HDMIでタッチでこの価格とか,すごいね。



到着したディスプレイは「KeDei」と書いてある。ブログをチョコチョコ見ると,あんまりお勧めされていないようだけど,とりあえず無視。最終的には問題ありませんでしたよ。

[ Prepare Raspbian OS]

まず,OSを準備します。

1. Micro SDカードに, imgファイルを書き込もう。

本家サイトからダウンロードしようと思ったら4時間くらいかかりそうだったので
以下のミラーサイト(日本) からダウンロード。

http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/

みんなLiteをインストールしてるけど,機能は多い方がいいじゃないか。ということでフルの方をダウンロード。

2. zipファイルを解凍すると,imgファイルが出てくる。

これを,「DD for Windows」というソフトでSDカードに書き込む。
http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows

3. SDカードは事前に「FAT32」でフォーマット。

対象ディスクを選び,ファイル選択で「.img」ファイルを選び,「書き込み」を押す。
すると,なんかわかんないこと言われるので,「はい」を押し続け,書き込む。
4GBを書き込むのは結構時間がかかるなあ。。


待っている間に,KeDeiのディスプレイについて調べます。

【Osoyooの説明】
なかなか面白い日本語で解説してくれている。
http://osoyoo.com/ja/2016/11/20/raspberry-pi-3-5inch-hdmi-touchscreen/
ここから ドライバをダウンロード可能って書いてある
https://drive.google.com/drive/folders/0B0yi2A0LygMPM3dlOEY3Sml0am8
でも,よくわかんないので, 英語を読む。
http://osoyoo.com/2016/11/20/raspberry-pi-3-5inch-hdmi-touchscreen/
全然説明が違ってびっくりだ。英語の説明を読みましょう。
ドライバをダウンロードをするだけみたいだけど,わからない人にはわからない。

わかりやすいのを見つけたので,こっちに従うことにする。 親切じゃないかOSOYOO
http://osoyoo.com/2017/01/18/install-3-5-hdmi-touch-screen-linux-driver-on-raspberry-pi/ 

ちなみに,「OSOYOO customized image for raspberry pi 3.5" touch screen」というのがあって,これは既にドライバがインストールされているOSらしい。OSをまだ用意していない,というヒトはこっちをSDカードに書き込めば,最初からKeDeiのディスプレイが使えるということらしい。


[ Install Raspbian to Raspberry Pi 3 ] 

さて,話をもとに戻しましょう。

1. SDカードに書き込みが完了したら, SDカードをラズパイに入れて,HDMIを普通のディスプレイに繋いで,電源をつなぐ。

そしたら,起動!Settingも何もなくて起動してびっくり。


[ Connect WiFi in a proxy environment ]

Proxy環境なので,ネットにはつなげないらしい...面倒。とりあえずWiFiでプロキシ使うSSIDに繋いでください。そこから以下の設定。

1. ターミナルで
sudo leafpad /etc/apt/apt.conf
でエディタ開いて(もともとないので新規作成になるけど),
Acquire::http::proxy ""http://*****:8080";
Acquire::https::proxy ""http://*****:8080";
Acquire::ftp::proxy ""http://*****:8080";
と書いたファイルを作成します。 nanoという,ターミナル上のエディタでも編集できるみたいだけど,ムヅカシイので,初心者はleafpad推奨。

2. もうひとつ,ファイルを編集。
sudo leafpad .bashrc
と打つと,既存のファイル (.bashrc) を編集できます。

3. このファイルの最後に以下を追加します。
export http_proxy=http://*****:8080/
export https_proxy=http://*****:8080/
export ftp_proxy=http://*****:8080/

4.注意点として,GUI環境では,ブラウザをターミナルから立ち上げないとProxy通らないのです。ブラウザを立ち上げるためには,

chromium-browser &

を実行しましょう。


[ Install a 3.5 inch touch display driver ]

さて,ネット環境が整ったら,タッチディスプレイを接続しましょう。

1. まず,Chromiumブラウザから,HDMI ドライバのダウンロード。

以下からもらいましょう。
http://osoyoo.com/driver/LCD_show_35hdmi.tar.gz

 【ちなみにKeDeiのサイト】
http://kedei.net/raspberry/raspberry.html

2. 圧縮ファイルを,「pi」フォルダに移動させます。

3. 次に,ターミナルを起動。ブラウザ見ながらだと,そのターミナルはいじれないので,もう1つ追加で立ち上げましょう。

4. 余計な設定を全部飛ばすと,以下のコマンドだけ,打てば終わり!

・ファイルを解凍して,そこにカレントディレクトリを移す

sudo chmod 777 LCD_show_35hdmi.tar.gz
tar -xzvf LCD_show_35hdmi.tar.gz
cd LCD_show_35hdmi

・好きな解像度を選んでインストール。
sudo ./LCD35_480*320
480*320の部分は,好みに応じて 720*480 か 810*540 に変えてね。

このままちょっと待つと,解像度が切り替わります。


[ Connect the 3.5 inch touch display ]

1. さて,その次は,OSOYOOをガチャっとくっつける。
 ピンにささないといけないのですが,向きは「これしかないだろ」的にくっつければOKです。

2. ピンが接続できたら,付属の HDMIケーブル(とは言わないけど,接続部品)を使って,ラズパイとディスプレイを接続します。

3. ディスプレイのスイッチを入れます。右左に動くのが地味についています。

終了!

もしもタッチが反応しなかったら,再起動するといいと思います。




2016年12月9日金曜日

Unity 5.5 0f3 with Leap Motion Hands Module 2.0

is not working! It says there is a compile error (s?).

Use Unity 5.4.3 if you import Leapmotion handsmodule.
Be careful!

Leap motionのhandsmoduleはUnity 5.5 では動かないようです。
時間無駄しました。5.4.3使ったらエラーなく動きました。
現時点では誰も報告していないようなので,とりいそぎ。


Show hands captured by Leap motion in Oculus DK2 with Windows 7, Unity 5.4.3, and Leap Orion 1.3.3 (core asset + Hands module assets)

2016年11月16日水曜日

Pupil Labs



I bought Pupil labs eye tracking camera system. The hardware looks very cheap, but the software is not bad. It run on My macbook air, though it is unstable and sometimes crashes.

The accuracy of gaze points is better than I expected. The above movie shows an example.


2016年8月28日日曜日

Oculus and VR player setting notes

ヘッドマウントディスプレイを買ったはいいけれど,なにかコンテンツがない場合には宝の持ち腐れですよね。私も,実験に使おうと勝手は見たものの,全く使わずに放置でした。とりあえずヘッドマウントディスプレイ(Oculus DK2)を使用して動画を見る方法は確立したので,メモします。他のヘッドマウントでも簡単に見られると思います。

360度動画(画像),およびヘッドマウントに対応しているMovie playerは色々あるようですが,一番使い勝手が良かったのは,VR Playerです。

同様の機能を持つものに,GoPro VR Playerがあります。これは,昔Koler Eyesっていう名前でしたが,いつのまにか変わっていました。ちなみにこっちは,私の環境ではすぐに設定できなかったのでポイっとしました。

[ How to use VR Player ]
インストールしたら,ドラッグ&ドロップで動画を再生できます。
Install a VR player into your computer and drag&drop a movie file onto it.

設定項目は,上のツールバーにあります。細かいものは,「Tools→Settings」へ。
基本的な 「Media」「Device」のみをいじります。

RICHO Thetaなどで撮影した360度動画をHMDで見たい場合 
If you want to watch 360° movie using a head mounted display.

Media 
-- Format: Mono
-- Projection: Sphere
-- Effects: None

Device 
-- Layout: Side by side
-- Distortion: Barrel (None)
-- Tracker: Oculus Rift DK2 (Choose own device's name)

Mediaが入力側,Deviceが出力側の設定だと考えれば簡単です。
Media and Device are for input and output settings respectively.

もし動画が既に両眼用(左右に動画が二つ並んでいる)になっている場合には,
If your movie file is dual one,

Media 
-- Format: Side by side
としてください。

HMDを使わずにPCでみたい場合には,
If using PC display,

Media 
-- Format: Mono
-- Projection: Sphere
-- Effects: None

Device 
-- Layout: Mono
-- Distortion: None
-- Tracker: Mouse (None)

とするといいでしょう。
マウスは一回クリックすると,操作モードになり,もう一度クリックすると戻ります。


【Amazon リンク】



   Oculus Rift 製品版       Galaxy Gear VR(スマホ入れるタイプ。安い)

とりあえず安く体験してみたい方は1000円でハコスコが売っているので,買ったらいいと思います。

動画を撮影する方も,RICHO Thetaを皮切りに,どんどん出ています(iPhoneに付けるのも売ってますね)ので,自分でコンテンツ作るのも非常に楽になってきています。





RICHOTHETAです。新しいモデルは綺麗だし,使いやすくなっていいですね。

2016年6月23日木曜日

MATLAB and LeapMotion



A very convenient motion tracker for hand, LeapMotion.
手のトラッキングに便利なリーププモーションを紹介。


Now, you can buy it only 6200 yen by Amazon. If you get 3D position data from LeapMotion using MATLAB, download Matleap.
ホント安いですね。Kinectもですが…量産とは恐ろしい。 MATLABで位置情報を取得したい時には,以下からmatleapをダウンロードします。

Download https://github.com/jeffsp/matleap

You can easily understand the initial settings by reading Read me file, and have to install Leapmotion SDK first. Matleap contains sample m file to get position data.
Read me読めば,最初のセッティングについてとりあえずわかります。簡単です。 LeapMotionに関しては,SDKをダウンロードして下さいね。 サンプルコードも付いてくるので,あんまり困ることはないです。


LeapMotion ifself always get position data as long as it capture a hand. MATLAB fetches the data from matleap_frame function.
LeapMotion自体はマウスのように,手がある限りずっとデータを取得しています。そこから,MATLABがmatleap_frame関数でデータをとってきます。

matleap_frame.m : read position data from LeapMotion


f = matleap_frame;
% an example of data contents
% f =
%             id: 354491
%      timestamp: 2.1655e+10
%     pointables: [1x5 struct]
%          hands: [1x1 struct]

Position data of fingertips are  f.pointables.position.
指先の一データはf.pointables.positionです。以下のような感じで取り出します。

point_num = length(f.pointables);
if (~isempty(point_num))&&(point_num>0)
    for i=1:point_num
        nowpos(i,:) = f.pointables(i).position;
    end
end

As default, matleap cannot get data other than fingertips, but it seems that you can get other data by changing codes by yourself.
デフォルトでは指先の位置データしか取得できませんが,コード書き換えればその他も可能なようです。
https://community.leapmotion.com/t/matleap-only-has-pointable-information/470/4

2016年1月5日火曜日

Ubuntu 15.4 + Psychtoolbox 3 on DELL Inspiron

Failed!

First, I installed Ubuntu 14LTS version onto a DELL Laptop, but WiFi controller couldn't work (driver  for Intel AC3165 is not provided). Then I installed Ubuntu 15.4, which can recognize well the network controller. 

MATLAB installation was very easy and did not meet any troubles. To install Psychtoolbox, I used NeuroDebian. After some configuration settings, I tried to install matlab-psychtoolbox-3, but the terminal said matlab-psychtoolbox-3-nonfree is required. Then I put it, it needs libglew1.9. I checked about libglew1.9, it cannot be installed on Ubuntu 15.4!

Therefore, if you want to install Psychtoolbox3 on Ubuntu, you need Ubuntu 14 LTS with a compatible WiFi controller. Or, you need to put a driver somehow. A USB WiFi network controller may be a solution..

2015年11月12日木曜日

Installing MATLAB Psychtoolbox on Windows 10

PC spec
Dell Inspiron 13 7000 (2-in-1)
Windows 10 Home 64bit
Core i3-6100U

It was the first time to use a Windows 10 PC for me. So I can't tell what causes this slow processing.... Anyway, I successfully installed Psychtoolbox onto Windows 10 PC with MATLAB 2014b after some struggles.

First I downloaded and installed MATLAB 2015a and Psychtoolbox, but MATLAB crashed when I called Screen function. Then I installed 2014b instead of 2015a, and MATLAB told me to install Gstreamer, which is a familiar comment for me. After installing Gstreamer, the screen function worked. I don't know the reason of the crash first I met.

** P.S.
Psychtoolbox 3 with MATLAB 2015a woked on Windows 10 PC.

2015年11月9日月曜日

MATLAB Connection using UDP (TCP/IP)

時間ないので,暫定版メモ。
今度修正します。
Pscyhtoolboxのpnetという関数を使用します。

UDP Port 5000に接続,タイムアウトを0.5秒,パケット送信がなくなると終了。

@MATLAB

sock = pnet('udpsocket',5000);
pnet(sock,'setreadtimeout',0.5)
dataP = 1;

try
    while dataP~=0
        dataI = pnet(sock,'read');
        disp(dataI);
        dataP = pnet(sock,'readpacket');
    end
catch
    disp('Closed_ERROR')
end

pnet(sock,'close')


おわり。

これで,UDPポートを使ってデータを取得するソフトから,MATLABにリアルタイムにデータを取り込むことができます。

2015年10月5日月曜日

Wait signals and proceed

双方向で通信してる時にはこういうのって必要になることありますよね。
シリアル通信における待ちプログラムについて,MATLABとArduinoの両方で書いてみます。
Sometimes you needs to wait until certain signals come in serial communication. Here I'll describe it in Arduino and MATLAB codes.

一番簡単なのは,こうです。
The simplest one would be

@Arduino

Serial.begin(115200);
while (Serial.available() == 0) {
      delay(1);
}

// CODE //

@MATLAB

s = serial('COM1');
set(s,'BaudRate',115200);
fopen(s);
while (s.BytesAvailable==0)
      WaitSecs(0.001);
end

%% CODE %%

fclose(s);

2つのコードはほぼ同じであることが分かると思います。あとは,特定の文字が入力された時のみ次のステップに進むとかもありますね,書き方はたくさんありますが,例えばこうしてみます。
You can see the two codes are essentially the same. In another case, you have to proceed a program only after a particular character is input. You can write like this for example.

@Arduino

byte WaitingFlag = 1;
while (WaitingFlag == 1) {
    while (Serial.available() == 0) {
      delay(1);
    }
    int str = Serial.read();
    if (str == 'R') {
      WaitingFlag = 0;
    }
}

@MATLAB

WaitingFlag = 1;
while (WaitingFlag)
   while (s.BytesAvailable==0)
        WaitSecs(0.001);
   end
   if strmatch(fgets(s),'R')
        WaitingFlag = 0;
   end
end

どちらも,WaitingFlagが1の間はwhile文を繰り返します。ただし,その中にもう一つwhile文がありますので,何か信号が入ってくるまではここから出れません。出たと思ったら,if文によってそれが目的の文字かどうかが照合され,マッチしていたらWaitingFlagを変更して,while文を抜ける,というロジックになってます。
In both programs, the while sentence is repeated as long as Waitingflag = 1. However, before that, an additional while sentence loops until some signals come to the port. After signals come and processing exits from the while loop, the if sentence judges whether the character is expected one or not. If it is not, you cannot exit from the loop. lol







2015年9月20日日曜日

Arduino: Pointer

ポインタというものがC言語(Arduino)では出てくる。これに関して分かりやすく説明しているページが見つけられなくてとってもこまった。
I couldn't find good explanations for a pointer function in C language on the Web and wasted my time.

今回行いたいのは,作成した関数から複数の戻り値(数値の配列)を得ること。MATLABだと超簡単なんだけど,C言語では基本的にはできないらしい。そこで使用するものが,ポインタというもの,らしい。
This time, I want to get an array of values as the return value of a function. In MATLAB it is very easy to write but C does not allow such a program. Instead, "pointer" enables us to achieve  almost the same thing.

結局,以下のように書いたら上手くいきました。MATLABでいうと,
In MATLAB, to get an array of values as the return value, you write

function main
pointer = testFunc;
disp(pointer)

function pointer = testFunc
for i = 1:6
   pointer(i)=i;
end

これで得られる配列を得るためには,Cだとこんな感じになる。
but in C, you write something like that.

void setup() {
  Serial.begin(115200);
}

void loop() {
  int pointer[] = {0, 0, 0, 0, 0, 0}; //(1)
  // the size of pointer is 6

  // Fucntion
  testFunc(pointer); //(2)

  // print on a serial monitor
  for (byte i = 0; i < 5; i++) {
    Serial.print(pointer[i]);
    Serial.print(',');
  }
  Serial.write(10); // new line character
  delay(1000);
}

void testFunc(int *a) { //(3)
  // put pointer as an argument
  for(byte i = 0; i<5; i++) {//(4)
    *a = i;
    ++a;  
    // the pointer proceeds from 0 to 5.
    // this maybe the same that a[0]=i ... a[5]=i.
  }
  
  // no "return", but the pointer is updated.
}


あまり説明が見つからなかったこともあり,ポインタについての理解は足りませんが,実用的な使い方としての解説をしてみます。


(1) int pointer[] = {0, 0, 0, 0, 0, 0};

で,ポインターと呼ばれるものをつくります。これは,ポインターとか言わずに,とりあえず欲しい配列入れるための変数を宣言すると考えましょう。今回はテストとして0を入れてますが,pointer[6];として,サイズだけ決めてもいいのかもしれません。
this made a pointer, and it is better to regard as just a variable which will contain an array of values. This time I write {0,0,0,0,0,0} but it maybe OK to state int pointer[6].


(2) testFunc(pointer); 

戻り値は書いてませんが,ポインターが勝手に更新されてくれるのでOKです。
this doesn't include the return value, but it's OK because the pointer gets the return value.

(3) void testFunc(int *a) {

引数を「*a」としているのがポインターとして使うというしるしです。きっと。
The asterisk maybe the sign to use an argument as a pointer. 

(4)for(byte i = 0; i<5; i++) {
     *a = i;
      ++a; 
   }

for文の中で,何やらポインターの数を増やしつつ,ポインターに値を代入しています。これがどういう仕組みかはわかりませんが,MATLABでいうと,for i=1:6; a(i)=x; end と一緒ということでしょう。もちろん,厳密な意味は違うのでしょうが,表層的にはこれでいいかと。
In the for loop, the value of the pointer increases and at the same time i is substituted for the pointer valuable. This may mean that for i=1:6; a(i)=x; end in the MATLAB language at least superficially.

とりあえず,これさえ理解できれば,戻り値に配列を設定するのは実装できるかな,と思います。根本的な間違いがあれば教えて下さい。

Arduino: function definition

初歩的ですが,関数を定義する時のルール。MATLABに慣れてるとわかんないだよ。
Cause I get used to MATLAB, even function definition is confusing to me...

void loop() {
   int a = myFunc(); // must be defined.
}

// must be defined as the type of the return value.
// if the function does not return any values, void is used.

int myFunc() {
  int x = 1+2;
  return x;
}

引数を使うときは,またあとで。