2015年2月22日日曜日

Arduino:Bluetooth 4.0 Low Energy BLEシールドを入手しましたが、、、


表題のとおり、ArduinoにBluetoothシールドを入手しましたが、いろいろトラブっている最中なので作業録です。

対応するArduino IDEは1.0.6まで
まず、これにハマりました。ライブラリを追加してコンパイルすると、
C:\Program Files (x86)\Arduino\libraries\RBL_nRF8001\RBL_nRF8001.cpp:25:23: error: setup_msgs causes a section type conflict with __c
みたいなエラーがでます。現在、Arduino IDEは1.6が最新ですが、コレじゃダメ。なんと、1.06までしか対応してないようです(公式の回答をネットで目にしました)。で、1.06をダウンロードしてコンパイルしたら見事成功。iPhoneアプリでも接続を確認しました。

Bluetooth 4.0 Low Energy ってのが曲者
Low Energy...最新の低電力版ってことだね。。と安易に考えておりましたが、これは対応機種が限定されるようです。AndroidやiOSでも最新版が必要なのはわかるんですが、Windowsでも8.1以上が必要らしいです。手元にWindows7のノートPCがあって、検索にひっかかるけどコネクションできない、、、というよくわからない状況で、プログラムがおかしいのか、デバイスが4.0対応じゃないのか、、と思ったりしたのですが、Win8.1以上とは、、、とりあえずは旧式のBluetoothボードにした方がいいかもしれません。


2015年2月21日土曜日

Arduino:PCからの入力に合わせてLEDをON・OFFする 〜USB接続編〜




新規立ち上げの研究テーマでArduinoを利用することになったので、C#でUSBを通してArduinoを制御するプログラムを書いてみました。具体的には、USBで接続されたArduino本体のLEDを、PC側のクライアントソフトでON・OFFするというものです。
Arduino側のプログラム(スケッチというらしい)は下記のようになります。C#のプログラムは書くまでもない(シリアルポートに対してWriteするだけでよい)ので省略します。


C#にてシリアルポートからの通信を受信する

C#でシリアルポートからの通信結果を受信するサンプルです。簡単ですね。


2015年2月19日木曜日

Kinect v2にてMultiSourceFrameを利用する

Kinectプログラミングでは、v1ではAllFrameReadyイベントを用いて各種フレームを一括で処理するのが便利ですが、v2でも同様のイベントがあります。が、名前が変わっており、処理の仕方やメソッド名も違うので注意が必要です。具体的には以下のようになります。


2015年2月18日水曜日

NuGetを利用したOpenCVSharpのインストール

※OpenCVSharp3用に少し記事を書き換えました(2016/09/30)

OpenCVSharp3のインストールは、NuGetを利用するのが一番です。そのほうが、実行マシンでのOpenCVのバージョンの変化に対応しやすいです。下記はその手順です。なお、環境は、Visual Studio 2013を想定しています。

1.Nugetを利用したインストール

(1)NuGetマネージャーの起動
プロジェクトを右クリックして「NuGetパッケージの管理」を選択してください。


(2)OpenCVSharp3の検索とインストール

左のサイドバーからオンライン → すべて を選択したあと、右上の検索ウィンドウに「OpenCVSharp3」と入力してください(フルに歌入力しないと検索に引っかからないです)。“without DLLs”というのは、OpenCV本体のDLLを含まないという意味ですが、OpenCVSharp3はOpenCV本体とのバージョンの差異で動かなくなりますので、DLLを含んだもの(without DLLsと書いていないやつ)を選んで下さい。



2.サンプルを試す
下記のソースコードが実行できればOKです。testの画像は別途、どこかから用意してください。

注意事項
プロジェクトのプロパティで下記の設定を確認してください。
  • 対象のフレームワークを .NET Framework4にする
  • 64bit版のOpenCVを利用する場合は、プラットフォームターゲットを64bitにする


2015年2月17日火曜日

Kinect v2にて骨格情報を取ってくる

Kinect v2にて骨格情報を取ってくる方法です。クラス名に変更がありますが、やり方はほぼ同じですね。


Kinect v2にて人物領域を取得する

Kinect v2ではv1よりフレームワークが変わっているところが所々あります。今回の話は、BodyFrame(人物領域)の取得について。v2からは人物領域だけを格納するBodyFrameというのが新たに用意されました。v1ではDepthFrameからその情報の一部として取得していました。人物だけを表示するには、今までは自前のプログラミングが必要でしたが、その手間がなくなりますね。


2015年2月16日月曜日

kinect v2セットアップ ~PCが対応しているか確認しよう~

ずいぶんネタが古くなりましたがKinect v2のセットアップについてです。製品版がでてずいぶん時間も経ったので、インストールも楽になったかな~とかよくわからん期待をしたのですが甘かったです。。。かなり手間取りました。以下、注意事項です。

マシンの準備
下記のスペックのPCが必要です。
  • Windows8.1以上
  • CPU:2.66 GHz 以上のデュアルコア、64 ビット (x64) プロセッサ
  • GPU:DirectX 11 対応グラフィックス カード
  • 接続ポート:USB 3.0
  • メモリ:2GB RAM
メモリとCPUのスペックはα版と比べると下がりました。しかし、問題は残る2つ。USB3.0と:DirectX 11 対応グラフィックス カードが厄介でした。

マシンスペックの確認方法
USB3.0というのは、USBの口が青色になっていると思います。これで確認できます。しかし、DirectX 11 対応グラフィックス カードというのがわからない。。。これを確認するには、

  1. Kinect v2 SDKをインストール
  2. SDK Browser2.0を起動(SDKに同梱されインストールされてます)
  3. Kinect Configuration Verifier を起動する
というように、まずはSDKをインストールし、Kinect Configuration Verifier で確認するのが一番です。


Browserの最初のメニューにあります。


チェックがすべて入っていればOK(KinectをつなげてないのでConnectedは×でOK)。
ここでよく、USBとかGraphic Processorが×になるんですよね~。そうなったら残念。ボードを追加購入しましょう。

P.S
なお、上記がクリアしていても、Face系のプログラムが動かない事象が起きました。その際は、Graphic カードのドライバを最新にして解決しました。


2015年2月11日水曜日

Kinect v2にてRGBカメラを表示する

先行して入手したものの、全く手をつけていなかったKinect v2での開発をはじめました。とりあえずRGBカメラの表示です。噂通り、書き方が変わっているとことが多いですね。ただ、最終的にbyte[]に格納してWriteablebitmapにすればいいというのは従来通りなので、全面修正にはならないでしょう。なお、RGBカメラを表示後、数秒後にプログラムが落ちる事象が置きましたが、win8.1のバグのようです。とりあえず、ガーベージコレクションを強制実行することで回避できます。



2015年2月2日月曜日

OpenCVSharpにてテンプレートマッチングを行う

OpenCVSharpにて、テンプレートマッチングを行う方法です。Mat形式に対応しています。