2007-08-15[n年前へ]
■DX7とジャングル・ジムと夏の日
YAMAHA DX7が全盛のあの頃「ジャングルジムのてっぺんに行けば、別のパラレルワールドに行けるかも」と歌うこの曲はポップでとても好きだった。スパイ大作戦が大好きだった頃、スパイ大作戦に出てきそうなスーツケース状キーボードのYAMAHA CP80の音があふれていた。街中のレコード店には、鈴木英人が描くナイアガラ・トライアングルのLPジャケットが飾ってあって、古ぼけたスタジオには、CP80が鉄琴キーボードのローズが置いてあった。そんな時代、"FM変調"というコトバと新鮮な音とDX7が登場した。
上の空をあおぎ眺めた写真でも、下の路地をうつむき眺めた写真でも、眺めた景色を送って頂けたら幸いです。そういえば、夏の暑い日にレンタルレコード店 You & I(友愛)からレコードを借りた。自転車の前カゴに入れて、花小金井から小金井街道を走って帰ると、レコードがダリの絵のようにゆがんでいた。今日は、その日と同じくらい暑い夏の日。
2007-10-30[n年前へ]
■"Rail is draw"
一月くらい前の日曜日、テキトーにRailsでコントローラを一個作って、mongrelプロセスを投げた。当初は、コントローラ名が"rails"だったというくらい、何の考えもなく作った。それが、ラクガキ画像検索&画像処理をする"rails"コントローラだ。
mongrelプロセスを投げる前に、「いくらなんでも"rails"という名前をテキトーに使うのは上手くないな」と思い、名前を"railis"と変えた。変えたといっても、やはり何の考えもなく、キーボードの"i"を押して"rails"に"i"を挿入しただけだ。虚数の"i"、虚実の「虚」を混ぜ、エイチ・アイ・ジェイ…の「アイ」、その時読んでいたRubyの教科書に従って言うなら、ほんの少しの「愛」を混ぜた。
mongrelを投げてから、ふとroute.rbを眺めると、"Rail is draw"というURLになっている。それは、まるで"私が進む線路は私が描く"というように見える文字列だ。「描いたイメージに自分がなれる…」というWEBアプリに、何だかとても似合う文字列になっている。偶然というのは、面白く楽しい。
2008-07-08[n年前へ]
■ロボット・アームでハッピー・ハッキング!?
「ロボットアームにカメラを取り付け、ディスプレイ上のアイコン画像を自動認識させたり、キーボードを操作させ、自動でいろいろなことをさせ続ける」という楽しい動画を眺めた。とても面白いのだが、これはフェイク動画なのだろうと思っている。アームの先に付いているカメラは、ただの飾りで、実際には何の動作もしていないのではないか、と思っている。
Illegal Robotic Digger Arrested! - video powered by Metacafe
なぜそう思うかと言えば、似たようなことを考えて、ほとんど同じセットを持っているからだ。このロボットアームは、コネクタを介せばリレー制御で簡単に外部から動かすことができる。それどころか、専用のリレー基盤も販売されていて、シリアル通信でコマンドを送信するだけでアームの関節ごとに取り付けられているモータを自由自在に動かすことができる。だから、この動画のようなアームの動きをさせることは比較的容易だ。
とはいえ、アームの駆動位置の精度が出づらかったり、駆動速度が遅くトルクも低い…など工夫しどころ・課題満載の「楽しいロボットアーム」なので、実際にこの動画を作るまでには色々苦労したのではないだろうか。たとえば、アームの底面は両面テープか何かで机に固定したのではないかとか(何しろこのアームは結構軽いからだ)、軽い力でキーを押すことができるキーボードを選んだのではないかとか(トルクがない上に、無理な荷重をかけるとすぐにギアがへたってしまうからだ)、この動画を作り上げる過程における、工夫、技術、そして、何よりそこまでの苦労を想像してみると、とても楽しく興味深く思う。
というわけで、右の画像が「ロボット・アームでハッピー・ハッキング!?」しているイメージ画像だ。ロボットアームから伸びている白い配線が、(シリアル通信で制御することができる)リレー基盤に繋がっているのである。…特にキーボードを操作しているわけではないのだが。
2008-07-18[n年前へ]
■エクセルでシミュレーション Vol.1 [静電界準備 編]
「表計算プログラムでシミュレーションをする」というのは、物理などにそれほど詳しくない人が、複雑な数式で記述された世界を感覚的を大雑把に・感覚的に理解するのに、とても向いています。もちろん、そこには、かなり単純であることなどの前提条件がいくつもあります。けれど、自分のコンピュータで、マウスを動かしキーボードを少し叩くだけで、物理シミュレーションができたりすると何だか少し嬉しくなりますし、その計算過程を通して、「自然なこの世界」を「自然に」納得できる、というのは(私たちのような勉強世界からの REST OF US にとっては)とても素晴らしいと思います。
ところで、現在では”表計算プログラム=マイクロソフトのエクセル(Microsoft Excel)”だと考える人も多いことでしょう。だから、上に書いたことを言い換えれば、「エクセルでシミュレーションをする」のは、とても楽しい勉強になるということになります。
自分自身でエクセルでシミュレーションをすることもたまにあります。また、「エクセルで物理現象のシミュレーションをする」という趣旨の講習会にも、何回も関わってきました。ふと、そういった場で得たことを一回整理してみようと思いました。そこで、一番初めの今日は、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」をしてみました。
まず、静電場を記述するポワソン方程式をテーラ級数展開することで離散化し、差分方程式に変えてみます。2次元世界を離散化するということは、エクセルの表がそうであるように「世界(画面)をセルで分割する」ということです。
上で(x,y座標空間での)差分方程式にしたものを、さらにエクセル(表計算ソフトウェア)で解くときのやり方を図解したものが下の図です。「ある点の電位(φ)は上下左右の電位の平均にその点の(係数がかかった)空間電荷を加えたもの」になっているわけです。
また、2種類の境界条件(電位を指定するディリクレ条件/電界を指定するノイマン条件)をどのようにエクセル上で処理するか、というのが下の部分になります。
こういったセルの値が「(そのセル自身を含む)セル間の関係式」で表わされるような計算式を解くためには、エクセルの設定で「反復計算を行う」という設定を有効にしておく必要があります。エクセルのバージョンによってその設定メニュー場所は違いますが、たとえば、下の画面はExcel 2003の設定ダイアログの例です。
以上で、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」が終わりましたから、次は実際に「身近な静電界」をエクセルでシミュレーション計算してみたいと思います。
2008-07-31[n年前へ]
■「計測・解析ソフトのハック」が実験系技術者の一番のLifeHack…かもしれない。
「計測・解析ソフトウェア/ハードウェアのハック」が実験系技術者の一番のLifeHack…かもしれない、と思っています。それを逆に言うならば、実験系技術者が費やす多くの時間を、計測・解析ソフトが消費しているということになります。つまり、一番時間を消費している部分の高速化をすることが、全体の高速化に効果的だろう、ということです。
そんなこんなで、何を今更…という、Perlで「シリアル通信とユーザインターフェース自動制御」のやり方を整理しておくことにしました。なぜかというと、経験的に「計測・解析ソフトウェア/ハードウェアのハック」は、シリアル通信制御とユーザインターフェース自動制御でほとんどの場合対応できることが多いから、です。しかも、計測・解析ソフトウェア/ハードウェアを外注したりすると、時間や費用が無視できないほどかかったりするわけで、そういったシステムを簡単に作ることができるということを知っていると、結構便利であるわけです。
たとえば、RBIOシリーズのような汎用(入)出力ボードは、お小遣い程度の価格で「シリアル通信経由でのハードウェア制御をする」ことが簡単にできます。それは、「計測ハードウェアのハック」がとても簡単にできる、ということです。
そして、Windows上(あるいはWindows上で動くソフトウェア)の作業を”勝手に”プログラミングすることができれば、「計測・解析ソフトウェアのハック」も簡単にすることができます。
というわけで、「シリアル通信とユーザインターフェース自動制御」ができれば、「計測・解析ソフトウェア/ハードウェアのハック」を簡単に実現することができるわけです。
とりあえず、たとえば、Perlで「シリアル通信とユーザインターフェース自動制御」を使うには、Win32::SerialPort と Win32::GuiTest という二つのライブラリが必要です。それらのインストールは、コマンドプロンプトから、
ppm install Win32-SerialPortという風に行うことができます。もっとも、インターネットに直接アクセスすることができない Proxy 内部からであれば、
ppm install http://www.bribes.org/perl/ppm/Win32-GuiTest.ppd
set HTTP_proxy=http://proxy.hoge.com:8080といったような、Proxy対策の環境変数設定をコマンドプロンプトから前もって行っておくことが必要になります。
set HTTP_proxy_user=hogehoge
set HTTP_proxy_pass=hogehoge
あとは、シリアルポート通信ようのConfigファイルを作る、プログラムを書く、ということだけです。たとえば、
!c:\perl\bin\perlといったライブラリを読み込む宣言をした後に、ソフトウェアのユーザインターフェース周りは、
use Win32::SerialPort;
use Win32::GuiTest qw( FindWindowLike GetWindowText SetForegroundWindow MouseMoveAbsPix SendMouse GetWindowRect SendKeys);
MouseMoveAbsPix(320, 160);というような感じで、マウスやボタンやキーボードを自動で動かすことができます。また、ハードウェア周りは、
SendMouse("{LEFTCLICK}");
SendKeys($fileName);
SendKeys("{ENTER}");
my $conf_file="serialport.conf";という感じで*、スイッチやモータを適当にシリアル通信(とRB-IOのようなお手軽I/Fボードで)制御すれば良い、という具合です。午前中に秋葉原に行って部品を買って、午後にスクリプトを2,30行書けば、それで自動計測・制御システムのできあがり、というわけです。
tie *PORT, 'Win32::SerialPort',$conf_file or die; pushSwitch(0);
close PORT or warn "Can't close serialport:COM*";
sub pushSwitch{
my ($portNo) = @_;
my $text=sprintf "PCT%d%d\n",$portNo,1;
print PORT $text;
}
*(なお、ここで使用している"serialport_conf"は、こういったserialport_conf.plで作成します)