2012/02/12

ATMEGA328Pで自作Arduino Pro 3.3V 8MHz スケッチ書き込めない問題

表面実装のATMEGA328PにArduino Pro 3.3V 8MHzのブートローダー入れて、
スケッチを書きこもうとすると
avrdude: stk500_recv(): programmer is not responding
というエラーが出て全く書き込めない。
(自作Arduinoは内蔵クロック使用)

Arduinoアプリ内のboards.txt内のフューズ設定は
Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
pro328.bootloader.low_fuses=0xFF
pro328.bootloader.high_fuses=0xDA
pro328.bootloader.extended_fuses=0x05

なのでこれが原因か?と思い色々調べた結果、
どうやら上の設定は水晶発振器を使用する場合らしい。
内蔵を使う場合は
low_fusesを0xE2にする必要があるらしい。
フューズ設定からやり直したらエラーなく書き込めました〜

2012/02/11

自作Arduino フューズ設定:atmega328P(16MHz & 8MHz)

ATMEGA328Pの自作Arduinoのブートローダ焼くときに、フューズの設定が必要
各Arduinoのフューズ設定をメモでまとめとく

Duemilanove ATMEGA328
・lfuse FF
・hfuse DA
・efuse 05
・lock 0F
Arduino Pro 8MHz
・lfuse C6
・hfuse DD
・efuse 00
・lock 0F

その他はboards.txtを見るとよろし

2012/01/02

新年!javascriptイライラ棒ゲーム

あけましておめでとうございます。
年賀状代わりにjavaでイライラ棒ゲームつくりました。
下のソースコードをメモ帳に貼りつけて、拡張子htmlで保存すると遊べます。
<body onKeyDown="K=event.keyCode-37"><script>K=2;var x,y,t,o;t=0;x=1;y=1;o=0;var a=new Array(4294967295,3252805635,2563557169,4241287161,3251431299,2681005887,2682644287,2147746560,4294967295);function Y(){X=new Array(9);s=new String();t++;if(K==1)y--;if(K==2)x++;if(K==3)y++;if(K==0)x--;for(i=0;i<X.length;i++) {X[i]=new Array(32);for(j=0;j<X[i].length; j++){X[i][j]=a[i].toString(2).charAt(j);if(i==y&&j==x){if(X[i][j]==1){o=1;}else if(i==7&&j==31){o=2;}X[i][j]="★";}else{if(X[i][j]==0)X[i][j]="□";if(X[i][j]==1)X[i][j]="■";}s=s.concat(X[i][j]);}s=s.concat("<BR>");}s=s.concat("速度. "+t+"        あけましておめでとうございます!jun1chi");document.body.innerHTML=s;if(o==1){alert("Over");}else if(o==2){alert("Clear!");}else{setTimeout(Y,400-t*4);}}Y();</script>
実行するとすぐに動き始めます!
十字キーで★の進行方向を変えます。■にぶつかるとゲームオーバーです。
右端のゴールを目指して下さい。見難いですがコースは'2012'になってます。
今年も良いお年を!

2011/11/27

NeonDough webサイト

今進めている研究,NeonDoughのサイトを作りました.
展示での様子や子供たちの作品例,面白い使い方などを載せていく予定です.
http://web.sfc.keio.ac.jp/~yamajun/neondough/

2011/11/10

openframeworksでswprintf使って日本語表示。

瞬く静寂さんの方法でOpenFrameworksで日本語フォント表示をやろうとしたが、
変数等を格納したstringを使って日本語を表示しようとすると少し厄介だったのでメモ。

string A = "てすとてすと";
(あるいはsprintfとかで変数入れてもおけ?)
setlocale(LC_ALL, "ja_JP.UTF-8");wchar_t wcs[20];
swprintf(wcs,40,L"%s",A.c_str());
wstring B=wcs;
myFont.drawString(B, 0, 100);


setlocaleのなかの値をjapaneseだと駄目だった、ちゃんとUTF-8指定じゃないといけないぽい。
あとdrawStringがwstringだからちょっと扱いづらい。

ofxXmlSettingsで日本語の要素を使うなら、この辺を使うと上手くいく

2011/07/30

Yamarduino Writer : 自作Arduinoブートローダ&アップローダー(FT232RL使用)

前回の自作Arduinoの際に、ブートローダの書き込みとアップロードの配線切り替えが面倒くさかったので一つのパッケージにしてみた。


aitendoで前買ってたゼロプレッシャーソケットを使って、ブートローダ書き込みの時はちょっとAVRライターぽさを楽しめる。
スケッチのアップロードやシリアル通信はリボンケーブルの先のピンをAVRに繋げて行う仕様。

ところでaitendoのサイト見てたらUSBaspが在庫切れになっていた、、
安いAVRライターほしい人はFT232RL使えばいいんじゃないかな。
前回の記事のhexファイルを変更すればいけると思う。

2011/07/27

Macで自作Arduino : ATmega168PとFT232RLで作る



流行りに乗っかってArduino自作してみることにした。
調べてみると多くの人がやっていて手順を公開しているのでいいところを持ってきて作り方まとめてみた。

手順としてまず自作Arduinoを作るにはAVRマイコンにブートローダというファームウェアを書き込む必要がある。これは色々種類があるがArduino Duemilanoveを書込むことにする。
またブートローダの書込みはAVRライターなどを使うのが普通だが、今回は秋月のUSBシリアル変換モジュールFT232RLを使うことにする。これはAVRライター兼スケッチの書込みに使えるので一石二鳥。
もしAVRライタがあればそちらを使ったほうが早いかもしれないです。コスト重視です。
Arduino/Arduino の自作/ブートローダを仕込む

手順は、
①ブレッドボードにAVRなど配線する②ターミナルでAVRにブートローダを書き込む③Arduino IDEからスケッチを書き込む④おわり


ブートローダの書込みはBitBang Mode AVR-Writer on MacブレッドボードでArduinoを参考にしました、先人達に感謝。


①ブレッドボードにAVRなど配線する


必要部品 1個分
部品 規格個数
AVRマイコン ATmega168P 1
USBシリアル変換モジュール FT232RL 1
水晶発振器 16MHz 1
コンデンサ 0.1μF 1
コンデンサ 22pF 2
抵抗 1kΩ 2
抵抗 10kΩ 1
タクトスイッチ 何でも 1
ブレッドボード 何でも 1
ジャンプワイヤ 何でも 数本

ブレッドボードにAVRやシリアル変換モジュールなどの部品を配線する。
配線は外付けAVRライタ無しでBootloaderを書き込むの一番下を参考にする。
(※モジュールからのプラスマイナスを間違えないこと。AVRがかなり発熱します)
マイコンに貼るラベルはこちらのPDFを使う。


②ターミナルでAVRにブートローダを書き込む

USBシリアル変換モジュールのドライバ D2XXをインストールする。
MAC OS Xの最新版1.0.4をダウンロードする。
ダウンロードなどに保存後、展開する。
展開後、'D2XX'を「ユーザ」→「(ユーザ名)」に移動

ターミナルを開いて以下コマンドを実行する。
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/include
sudo cp D2XX/bin/10.5\ -\ 10.6/libftd2xx.1.0.4.dylib /usr/local/lib/libftd2xx.1.0.4.dylib
sudo ln -sf /usr/local/lib/libftd2xx.1.0.4.dylib /usr/local/lib/libftd2xx.dylib
sudo cp D2XX/Samples/ftd2xx.h /usr/local/include/ftd2xx.h
sudo cp D2XX/Samples/WinTypes.h /usr/local/include/WinTypes.h
※USBモジュールがちゃんと繋がっているか調べるにはBitBang Mode AVR-Writer on Macに載ってるSampleのBitModeとSimpleを試す。(飛ばしても問題ないが以降エラーがあれば試してみたほうがよい)D2XXはデスクトップとかに置けば良い。
※ちなみに私の場合、BitModeがFailed to get bit modeとエラーを吐いたため、
調べた結果コード内を修正する必要があるとのことでした。参考修正版 main.c (BitModeディレクトリ内main.cに上書き後make)
※ちなみに普段Arduinoを使っている人はもうひとつのUSBシリアルドライバとぶつかってしまうためブートローダの時だけそっちを切る必要があります。
つまりFTDIUSBSerialDriverを切る→ブートローダ(D2XX使用)→FTDIUSBSerialDriverをつける→スケッチ書込み(FTDIUSBSerialDriver使用)の流れ
(停止コマンド)

sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext
(再開コマンド)
sudo kextload   /System/Library/Extensions/FTDIUSBSerialDriver.kext

AVRの書込み環境を作る。
serjtag-0.3 と avrdude-5.3.1をインストールする。
ターミナルで以下コマンド実行
mkdir mac_bitbang
cd mac_bitbang
wget http://www.nmj.sumomo.ne.jp/suz-avr/serjtag/serjtag-0.3.tar.gz
# wget http://www.geocities.jp/arduino_diecimila/bootloader/files/serjtag-0.3.tar.gz
wget http://ftp.twaren.net/Unix/NonGNU/avrdude/avrdude-5.3.1.tar.gz
# MD5 (avrdude-5.3.1.tar.gz) = 58c2be9f7a864b930ed9e6f1858f5cc7
# MD5 (serjtag-0.3.tar.gz) = 7228de34ad8221598401cd631dd6f55e
tar xvzf avrdude-5.3.1.tar.gz
tar xvzf serjtag-0.3.tar.gz
cd avrdude-5.3.1
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-usb910.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-avr910d.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-serjtag.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-ft245r.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-baud.patch
mv ser_posix.c ser_posix.c.ORIG
grep -v B3000000 ser_posix.c.ORIG > ser_posix.c
./configure CFLAGS="-g -O2 -DSUPPORT_FT245R" LIBS="-lftd2xx"
make
./avrdude -v 
(※wget出来なければ代わりにcurlでダウンロード。あるいはファイル名でぐぐると出てくるのでFinderに落とす)

avrdude.confにArduino用の設定を書く。
avrdude.confはmac_bitbang>avrdude-5.3.1内にある。
以下内容を最後にでも書き足す。
#arduino diecimila
programmer
 id="diecimila";
 desc  = "FT232R Synchronous BitBang";
 type  = ft245r;
 miso  = 3;  # CTS X3(1)
 sck   = 5;  # DSR X3(2)
 mosi  = 6;  # DCD X3(3)
 reset = 7;  # RI  X3(4)
;
またhttp://www.geocities.jp/arduino_diecimila/bootloader/files/avrdude.conf
を参考に最後のATmega168Pの項目すべてをコピペする。
念のため以上2つを変更したファイルを用意した。avrdude.conf

ブートローダファイルをserjtag-0.3>binaryにいれる

いよいよAVRにブートローダを書きこんでいく。
その前にちゃんと書き込めるか確認。
ターミナルで
~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -B 4800
を実行。avrdude: safemode: Fuses OKとか出て何事も無く終われば準備おけ。しかし
avrdude: initialization failed, rc=-1            Double check connections and try again, or use -F to override            this check.
など出ればエラーなので、配線や忘れが無いかチェックする。

ターミナルでAVRにフューズ(設定のようなもの)を書き込む。

~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -t -B 4800
を実行し
avrdude> erase
で初期化し
avrdude> w efuse 0 0x00
(拡張ヒューズ:ブートローダ領域を2 Kbyte ( 1024 ワード )に設定)
avrdude> w hfuse 0 0xdd
(上位ヒューズ:電圧2.7V以下低下で停止)
avrdude> w lfuse 0 0xff
(下位フューズ:外部発振器を使う。マイコン内部を使うなら0xE2らしいです。)
avrdude> quit

以上でヒューズ設定終わり。ヒューズについての説明はこちらが分かりやすい。


ターミナルでブートローダを書き込む。

cd /〇〇/mac_bitbang/serjtag-0.3/binary/
移動後
~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -U flash:w:ATmegaBOOT_168_diecimila.hex
書き込み中・・になって
avrdude: 16294 bytes of flash verified
でブートローダ書き込み完了。

最後にロックヒューズを設定する(ブートローダの上書き禁止設定)
~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -t 
avrdude> w lock 0 0x0f 
avrdude> quit

③Arduino IDEからスケッチを書き込む

ブートローダ書き込み後、配線をスケッチ書込み用に変更する。
②までの作業は一回やればよいので、ここからは通常のArduinoに書きこむ感覚で良い。
配線はこちらを参考にする。Arduino/Arduino の自作/DuemilanoveTYPE

あとはArduino IDEを立ち上げて、
設定をArduino diecimila, duemilanove,or nano w/atmega 168
serial portをusbserialにして(ここで表示されてない場合はシリアルドライバの機能を止めている可能性があります。前述あり)
BlinkなどをUploadしてみましょう。
これで終わりです。

④おわり
②の工程がちょっとややこしくなってしまった。実はLuminet-IDEというブートローダの書けるArduino環境を見つけたのだが、それだとどうにも上手くいかなかった。
もしMacの環境で出来た方いたら教えて下さい。

自作するとかなりコスト安くなりそう。初期費用でシリアル変換モジュールが950円で、それ以降は1つ500円以内で出来てしまう。
次は発振子のマイコン内蔵版とワンチップArduinoとか作りたい。

2011/03/10

C言語とC++の連携したプロジェクトで was not declared in this scope がでたら、、

C++のプログラムの中の関数で、C言語のプログラムから関数を参照したい場合、
"xx" was not declared in this scopeっていうエラーがでました。

調べるとCから参照する場合、
externで連携する必要があります。

/* x.cpp */
extern "C" int test(char *, char *);

/* x.c */
int test(char *, char *);

とすればおk
参照元がc言語というのを見落としていたため無駄な時間をかけてしまった、、

2011/02/08

MacportsでOpenCV2.1インストール

1.macportsを導入

macportsをダウンロード

支持に従いインストールを行う。

2.環境変数
ターミナルを起動し、不可視ファイルを見えるようにする。
$ defaults write com.apple.finder AppleShowAllFiles true
$ killall Finder

ホームディレクトリに.bash_profile と .bashrc を作る。
.bash_profileには
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
.bashrcには
export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH
を入れて、miとかで保存。
再びターミナルで不可視に。
$ defaults write com.apple.finder AppleShowAllFiles false
$ killall Finder

ターミナルでmacportsのアップデートを行う。
$ sudo port -d selfupdate
$ sudo port -d sync

駄目なら、参照ファイルを変える必要がある。以下の手順
以下のファイルを編集する。
/opt/local/etc/macports/sources.conf

管理者権限が必要なので、viエディタで。
> sudo vi /opt/local/etc/macports/sources.conf

以下のようにコメントアウトand追記。

#rsync://rsync.macports.org/release/ports/ [default]
http://www.macports.org/files/ports.tar.gz [default]

あるいはVPN接続している可能性あり。
接続環境を確認しましょう。

3.opencvをインストール
ターミナルで以下コマンド。

$ sudo port install opencv

結構時間掛かりました。30分くらい。


2011/01/22

卒論関連研究 〜アニメーション制作支援 インタフェース編〜

直感的にキャラクタなどを操作するためのインタフェース研究です。

 Gulliver’s World
タンジブルインタフェースを用いたキャラクタ操作の研究として
Gulliver’s World が挙げられる。これはテーブル上にあるマーカのついたオブジェクトを動かすことで、仮想空間上のキャラクタを操作することのできるインタフェースである。



Video Puppetry
普段身の回りにある紙をインタフェースに用いたのがVideoPuppetry である。紙人形遊びとカットアウトアニメーションを元にした研究で、紙に書いたキャラクタを動かすことでアニメーションを制作する。
また様々なエフェクトが用意されており、多関節キャラクタ、マルチトラックアニメー
ション、シーン制御、カメラ制御、2.5D アニメーション、シャドウイングなどがある。これらのエフェクトもそれぞれ対応する絵が描画された紙によって入力する。例えば雪の絵が描画された紙をキャラクタに近づけると、雪が降るシーンに変更される。ユーザは紙人形遊びを行う感覚で簡単にアニメーションを制作できる。







Swamped!
人形を用いたCG キャラクタの操作はSympathetic Interface と呼ばれる。Bruce らによるSwamped!は鳥のぬいぐるみを用いたインタフェースである。ぬいぐるみ内部にはワイヤレスセンサが内蔵されており、ぬいぐるみを傾けたり、足を蹴ったりすることで仮想空間のキャラクタを操作することができる。




http://characters.media.mit.edu/projects/swamped.html


SAGE
フィジカルなぬいぐるみを用いてストーリー作りを誘発する研究として、MIT
メディアラボのGesture and Narrative Language Group で開発されたStoryteller Construction Kit が挙げられる。「SAGE(セージ)」と名付けられたシステムで、ウサギ型のロボットと対話をしながらストーリーを作ることができる。このシステムは挨拶や質問の内容を入力することで、ウサギをストーリーテラーとして語らせることができる。またウサギ内部にはモータが内蔵されており、耳を動かしたり、首を傾げたりといった動作も入力可能である。

Soft Toys with Computer Hearts: Building Personal Storytelling Environments

 


Sam 
子供のストーリーテリングを促す手段としてフィジカルなぬいぐるみ等ではなく、バーチャルなキャラクタを用いる研究もある。Sam は半分フィジカル、半分バーチャルな城と投影されたバーチャルなキャラクタSam から成る。ユーザはSam と対話することによってストーリーを制作していく。城の中にある人形を用いてストーリーを制作し、一通り終わるとマジックタワーと呼ばれる場所に人形を入れる。人形が入ったことを検出し、バーチャル空間に人形が現れ、Sam が人形を操作しストーリーを語っていく。
Sam: a collaborative storylistening system for children

STORYMAT
子供が普段接している道具を使うことで違和感なくアニメーションを制作することのできる研究もある。STORYMAT は子供に馴染みのあるプレイマットを用いたアニメーション制作支援環境である。赤外線センサの送信器が内蔵されたプレイマットと受信機の内蔵されたぬいぐるみ、上部のプロジェクタから構成される。プレイマットには道や川等が描かれており、ユーザはぬいぐるみをその上で握りながら動かすことでアニメーション録画を行うことができる。ぬいぐるみを握ると内部のトリガーが作動し動きと声を記録し、トリガーを離すと声が再生され、上部のプロジェクタからキャラクタが投影される。http://www.media.mit.edu/gnl/projects/storymat/


Animal Blocks

動物の積み木を用いたストーリー制作支援のためのタンジブルインタフェースである。ユーザである子供は動物型の積み木を動かし、本に投影されたキャラクタを見ながら話を語っていく。同時に本には入力した文字が投影されており、ユーザは話すことと書くこと両方を体験することができる。システムは、RF-ID の埋め込まれた動物型の積み木と、センシングを行う机、またキャラクタと文字を投影する上部のプロジェクタから成る。積み木の動きを認識し絵本のキャラクタを変化させ、その時の会話を録音する。また投影するストーリーの文章は後で入力することができる。ページをめくることで過去に制作したストーリーを観返すことが可能である。
http://www.media.mit.edu/gnl/projects/animalblocks/


 

映像作品
おはなしの花

卒論関連研究 〜アニメーション制作支援 ソフトウェア編〜

卒業論文を提出して、少し落ち着いたので関連研究でサーベイした研究をまとめてみた。
アニメーション制作支援の研究なので、主に映像系コンテンツ制作支援やインタフェースの研究が多いです。

viscuit
グラフィカルプログラミングの概念を取り入れたアニメーションソフトであり、手描きの絵を個別に設定することによって簡単にアニメーションを制作できる。予め絵の切り替えを設定しておくので、制作途中でアニメーションが変化していくのが特徴である。
http://www.viscuit.com/



Scratch
MIT メディアラボのResnick らの開発した高級言語プログラミングベースのアニメーションソフトウェアである。ブロックが命令文として機能し、その一つ一つに設定を行うことができる。このアイコンを繋げていくことで、「forever」「when」「if」などのループ・制御構造をしたアニメーションを制作する。(あと小型ロボットPaperoの命令群も開発されてるらしい。)
http://scratch.mit.edu/



PICMO
うるまでるび氏の開発した誰でも簡単にアニメーションが制作できるソフトウェアである。主にマウスやタブレットを使い制作し、キャラクタを描画した後、線をなぞることで修正してくれる機能などを持つ。またアニメーション機能に特徴があり、キャラクタの手足等にピンを打ち、ピンを動かすことで手足を操作しアニメーション付けを行う。これは五十嵐らの研究を元に開発されており、ぬいぐるみを動かすような感覚でアニメーションを制作できるのが特徴である。
 http://picmo.com/


TV4U
TV4U は日本放送協会放送技術研究所が開発したアニメーションソフトである。TVML というテキストベースのスクリプト言語を元にCG、音声などを組み合わせてテレビ番組を制作することができる。スクリプト言語にはキャラクタ関係の命令文だけでなく、スタジオセットや小道具、カメラワークや照明なども用意されている。



 Anime de Blog
ユーザが入力したテキストを元に3D アニメーションを自動で作成するソフトウェアである。ユーザは「誰」「相手」「場所」「何をする」などの質問に対して、テキストで答えると、予め用意された素材から検索・表示しアニメーションを生成する。生成したアニメーションはユーザの持つブログやサイトなどに埋め込むことも可能である。
 www.animedeblog.com/

WordsEye 
Coyne らが開発したテキストから3DCG を自動生成するソフトウェアである。ユーザの入力したテキストからキャラクタ、位置、質感、方向、大きさ、動作などを識別する。またユーザはカメラのアングルやブラー効果などの画面のエフェクトを選択することができる。
Transliteracies » Blog Archive » WordsEye: An Automatic Text-to-Scene Conversion System:

Sequential Graphics
Sequential Graphics は線の描画時の動きを記録し、積層することにより描画時の臨場感を再現することのできるペイントソフトである。ユーザはループし描画されるキャンバスに線を描画し、リアルタイムに動的な線を追加することができる。作者の手の動きを臨場感として表現することができる。このソフトウェアでは、例えば火の燃える様子など普段絵では表現できないようなアニメーションを制作することが可能である。

2010/11/06

回転行列から角度を割り出す

メモ:sinとcosが分かっていて、
回転行列から角度を割り出す。
acosとasinを使う。

  double a_c, a_s,a_t;
    a_c = acos(patt_trans[0][0]);
    a_s = asin(patt_trans[1][0]);

    double rad;
    if(a_s > 0.0) {rad = a_c;}
    else     { rad = PI + PI - a_c;}


2010/07/19

OpenCV SURF

2010/05/16

ビルボード効果

オブジェクトが常にカメラの正面を向いていることを
ビルボード効果という。
たとえば擬似パーティクルや木の表現に使う。

以下サンプル。processinで実装されてる。
http://www.mentalgifts.net/article/146253887.html
追加で外部ライブラリをいれる。
http://www.gdsstudios.com/processing/libraries/ocd/
http://hg.postspectacular.com/toxiclibs/downloads



processing用テクスチャ関数

processingのテクスチャ用関数つくってみた。
引数、x,yが座標
sがサイズ
imgがテクスチャ情報(先に宣言)

Tex(0,0,100,tex);
みたいにつかう。

void Tex(float x,float y,float s,PImage img){
   noStroke();
  beginShape();
    texture(img);
 vertex(x, y, 0, 0);
 vertex(x+s, y, 120, 0);
 vertex(x+s, y+s, 120, 120);
 vertex(x, y+s, 0, 120);
 endShape();
}


2010/04/03

アノトペン接続方法

アノトペンの接続が出来たのでマニュアル化

アノトペン KG-DP301
動作環境
OS:windows XP
開発環境
Visual Studio2005
※アノトペンの開発環境はC#です!

DSPDソフトウェアをインストール。
bluetoothドライバをインストール。
アノトペンの電源を入れて、
bluetooth設定でデバイスを検出する。
パスキーの入力を求められるので「0000」を入れる。
接続完了。
DSPDソフトのペン一覧で検出されているのを確認する。

ソフトウェア開発はvisual studioにdspdのライブラリを入れて、
開発する。C#なのでC++のプログラムには入らない?
なので別プログラムで走らせて、
今までのプログラムにペンからの値を送信しようかと思う。

2010/02/24

openFrameworksで背景を透過させてキャプチャする方法

openFrameworksで背景を透明化したPNG画像を書き出す方法。
標準のライブラリだけでは上手いこと書き出せなかったので
イメージピクセルにアクセスして、アルファ値を変更して画像保存した。
簡単に書くと
・イメージ宣言の際にOF_IMAGE_COLOR_ALPHAを代入
・pixels宣言でwidth*height*4
・getPixels()
・アルファ値[(widthOfLine * y + x )* 4 + 3]
・setFromPixels → saveImage

ベースとなるサンプルはimageSaverExampleを使うと良い。
void testApp::setup(){

img.allocate(300,300,OF_IMAGE_COLOR_ALPHA);
img2.allocate(300,300,OF_IMAGE_COLOR_ALPHA);

・ キャプチャ用イメージとアルファ変更用イメージのサイズを宣言。
この時OF_IMAGE_COLOR_ALPHAを代入しておく。

void testApp::draw(){
if(bSnapshot2 == false){
    ofSetColor(0xffffff);colorImg.draw(20,20);//元画像
   }
if(bSnapshot2 == true){
    ofEnableAlphaBlending();
    ofSetColor(0xffffff);
    img2.draw(200,200);//アルファ変更画像
    ofDisableAlphaBlending();
}
//保存
if (bSnapshot2 == true){
        char fileName[255];
        sprintf(fileName, "snapshot_%0.3i.png", snapCounter);
        img2.saveImage(fileName);
        sprintf(snapString, "saved %s", fileName);
        bSnapshot2 = false;
}
if (bSnapshot == true){
        img.grabScreen(200,200,300,300);
        unsigned char * pixels;
        unsigned char * pixels2;
        pixels = (unsigned char*)malloc(300*300*4);
        pixels2 = (unsigned char*)malloc(300*300*4);

        pixels =  img.getPixels();
       
        int widthOfLine = 300;  // 画像の幅
        for (int y = 0; y < 300; y++) {
            for (int x = 0; x < 300; x++) {
               
                int red = pixels[(widthOfLine * y + x) * 4];
                int green = pixels[(widthOfLine * y + x )* 4 + 1];
                int blue = pixels[(widthOfLine * y + x )* 4 + 2];
               
                pixels2[(widthOfLine * y + x) * 4]     = blue;
                pixels2[(widthOfLine * y + x) * 4 + 1]     = green;
                pixels2[(widthOfLine * y + x )* 4 + 2]     = red;
                if(red > 150 && green > 150 && blue > 150){
                   pixels2[(widthOfLine * y + x )* 4 + 3]     = 0;//アルファを変更
                }else{  pixels2[(widthOfLine * y + x )* 4 + 3]     = 255;}
               
            }
        }
        img2.setFromPixels(pixels2, 300, 300, OF_IMAGE_COLOR_ALPHA);//アルファ用に格納
               
        snapCounter++;
        bSnapshot = false;
        bSnapshot2 = true;

    }

・これはビデオイメージから白い部分を判別し、透過させ書き出している。
・ピクセルに対しての変更は以下を参考にする。
RGBAがBGRAになっているので格納の際に逆にすると良い。
   pixels[(widthOfLine * y + x) * 4]     = red;
   pixels[(widthOfLine * y + x) * 4 + 1]     = green;
   pixels[(widthOfLine * y + x )* 4 + 2]     = blue;
   pixels[(widthOfLine * y + x )* 4 + 3]     = alpha;
・あとはOF_IMAGE_COLOR_ALPHAをGL_RGBAにしないこと。
・alpha値は0〜255で透明〜不透明になっている。100くらいだと半透明で保存できる。

2010/02/16

FontSpace

ウェブの仕事でflashを使っているのだが、
良いフリーフォントサイトを見つけた。

FontSpace

12,333 fonts
充実していて、シンプルなのから変わったものまであるので便利。

2009/11/29

ITEX2009

東京ビックサイトで今日までやっていた国際ロボット展に行ってきた。

産業用ロボットがメインかと思いきや、わりとバランス良く展示していて、
大学の研究成果や玩具ロボット等子供も楽しめるような感じだった。



安川電機
ブロックを組み立てるロボット、
箱に無造作に入ったブロックの色、形を識別して
組み立てる事が出来る。


KONDO-ROBOT
サーボモーターを自社生産することで低価格を可能にした玩具ロボット。
全身の関節をサーボモーターで制御していたが結構いい感じの動き。
サーボモーターでもこれだけ行けるということがわかって安心した。
コントロールボードにシリアル通信で最大60こくらいまでモーター制御出来るらしいから
複雑になったらここの使おうかな、、



東北大学 能動スコープカメラ
レスキューロボットで狭い場所などに進み撮影が出来る。
ファイバースコープに毛が付いていて、全身の振動モーターが振動することで
直進する事が出来る。
原理が面白い、こういうタイプのは蛇とかの動きをもとに作りがちだから
こういう発想で作ってあるのは面白いなあ。

あとは電通大の下条研というところがセンサーを扱っているらしく、
360度の距離センサや触覚センサなどを開発していて面白かった。
センサを一から作るという考え方は無かったのでとても勉強になった。
こういうものを作った上でモノを作れると強いなあ
IMG_5024


様々な場所・用途で使われるロボットが一堂に集まっていて
とても有意義な一日でした。
企業制作のロボットはわりとディテールにこだわっていて
基礎技術というよりはいかに正確に動くとか高速に動くとかを目指していた。
よってデモがそういう箇所にフォーカスされてた。
反対に大学研究室のロボットは自由な発想で作られていたものが多く、
レスキューや生活の補助等、目的は実用的だが実装方法は結構柔軟な発想で
作られていた物が多かった。
芋虫のように大腸を進んで行くロボットとか。
あとベンチャー企業が出していたロボットは人のように見えるかとか
かわいいロボットとか独自の路線を目指しているように見えた。
なので大学・大手企業・ベンチャーと特色がありとても興味深かった。
この辺の大学と企業の研究の違いというのにも興味があるので
今度時間を見つけてまとめてみようと思う。

2009/11/20

NumberKey Free

iphoneをワイヤレステンキーとして使う「NumberKey Free」を入れてみた。
結構いいかんじ。
ORFでテンキーが必要だったが、これで買う必要が無くなった。

またair mouse は有料だがマウス用途以外にもブラウジングやkeynoteでのプレゼンでも発揮する優れもの。
ただwifi環境じゃないと使えないのが惜しい・・(bluetoothで出来ないんだろうか・・?)

まるでmacbookの相棒のようです。