2008-07-14[n年前へ]
■「メディアの特性」と「制御工学の安定性」
渋谷で飲んだ帰り、道玄坂の坂を駅に向かって下っていくと、隣を歩く人が「あんな風に名づけ、メディアが取り上げるから、そんなものが増えてしまうんですよね」と言った。メディアに関わるその人が、そんなことを言った。その人の視線の先を眺めると、渋谷駅前のビルの上に「モンスターペアレント」という広告が大きく光っていた。
光る広告を見た後に、「1,2ヵ月前のログに、検索語として、漂白剤や洗浄剤の商品名が多かったこと」をなぜか連想した。その検索語を示す何桁にもおよぶ検索ログを見て、「メディアが名づけ・報道すること」や「検索サービスがユーザに与えるもの」について、考えさせられたことを思い出した。
その言葉を聞き道玄坂を下りつつ、「制御工学のフィードバック」を考えた。「出力(結果)を入力(原因)側に戻す」ことを意味するフィードバックにおいて、「出力の増加が入力の増加をさらに生む」ような「戻し方」を正のフィードバックという。
正のフィードバックが働いている場合、(特に系のループ利得が1を越える場合)何らかの破綻が起こるまで出力が増大しつづける。また、この領域では初期値の違いが時間の経過にしたがって無限に引き伸ばされるため、僅かな初期値の違いがシステムの挙動を大きく変える(カオスな振る舞いとなる)場合がある。これは複雑性や多様性を生み出す原動力となりうる。そして、その逆に「出力の増加分を入力を減らす」ように働く、出力(結果)の入力(原因)側への戻し方を「負のフィードバック」と呼ぶ。
負のフィードバックが働く場合は、フィードバック系の増幅率は裸の増幅率より小さな値となる。この増幅率の余裕分の範囲で、出力の増加は増幅率を引き下げるように働き、出力の低下は増幅率を引き上げるように働くので、出力の変動を抑えることができる。(不安定性を消し、安定にすることができる)
電子機器・メカ機器で多く使われるフィードバックシステムは、「負のフィードバック」だ。なぜなら、それにより「システムの安定化」を実現化することができるからである。逆に言えば、そういう風にシステムを作らなければ、安定して機器を動かすことはできない。
その一方、ユーザーインターフェースをつかさどる機器は、「正のフィードバック」として動くものも多い。たとえば、車のハンドルを動かすパワーステアリングなどは、入力の増幅が出力の増幅を生み出す「正のフィードバック」システムだ。少ない力で人の手助けをするシステムを作ろうとするならば、「正のフィードバック」を使うのが自然で人に優しい、というわけである。そういった、ユーザの反応を増幅拡大して見せるポジティブ・フィードバック系が多い。
ユーザの操作・反応がとても重要であり、同時にマスメディアでもあるようなツールを作ろうとするときには、この「フィードバック」特性を意識することは、きっと何かの知見を与える、と思う。「正のフィードバック」と「負のフィードバック」、そして、それらのフィードバック・システムが生み出すシステム、そういったものの挙動をシステムに関わる人々が想像してみることは、きっと何かの役に立つのではないだろうか、と思う。
どちらが良いとか悪いといった単純な二元的な話ではなくて、複雑なシステムの挙動に対して道具が与える影響を考えてみることはきっと無駄にはならないだろう、と思う。
2008-07-24[n年前へ]
■今井功の「当然!」「○」「?」
(「物理の散歩道」などの著作活動をし続けたグループ)ロゲルギストの一人が、流体力学を専門としていた今井功(I2)だ、敬称を略しているのは、そんな敬称が必要ないくらいの人だから、である。「初心者向けに書かれた電磁気学解説文」に対して、その今井功が鉛筆で添削をしたものを見た。
「電磁気学解説文」を読みながら、今井功の鉛筆直筆の書き込みを追いかけた。その直筆コメントを追いかける作業が、本当に面白かった。たとえば、どんな部分に下線が引いてあり、その横に「マル」が付けられているのか、とか、どういった部分にはダメ出しをしているのか…というようなことを推理していくのがとても楽しいのだ。
ちなみに、右の画像は今井功が鉛筆で書いた「当然!」と「○」と「?」である。「当然!」と書いてあるのは、数値的に誘電体に働く力を解析した結果について述べた部分である。その結果が今井功にとって「当然!」なのだろう…と思ったり、「お手軽」とか「大雑把には」という部分に「○」が付けられていることに不思議に納得したり…と、実に面白い体験だった。読んでいくうちに人の姿が浮かび上がってくるような、秀逸なミステリを読んでいる気持になった。
「わからないこと」を無理してわかろうとしない方が良いんだ「わからないこと」というのはたいていどこかおかしい。
今井功
私が見た今井功の鉛筆コメントは、氏が亡くなる2年前、2002年のものだった。家ではホームズやポワロ、ミス・マーブルのテレビが好きだったという今井功は、亡くなる直前まで「トイレットペーパーを一番上手くちぎる方法」や「点滴がどのような機構で制御されているのか」といった身の回りのことへの観察や解析をし続けていた、という。
数値で語れなければ、プロとは言えない。
今井功
2008-07-26[n年前へ]
■Simulinkで”日焼け対策”を最適化 Vol.1 [はじめに 編]
先日、Mathematicaで肌の色や日光の色スペクトルを表現するためのライブラリを作り、いくつか計算をしてみました。また、昨日は、「日焼けに影響を与える日照時間」の変化・「気温の変化」「化粧品の商品切り替え時期」「日焼け対策を行う時期」について考えてみました。
そんなことを考え出すと、究極の”日焼け対策”・至高の”日焼け対策”はどういう風にすれば良いだろうか、という技術的な興味が湧いてきます。もちろん、外に一切出ない・顔には紫外線反射膜をコーティングする、といったような対策もあるわけですが、そんな対策をしても「そんな毎日でいいのか?」という疑問を感じるに違いありません。やはり、色々な観点を含めた上で、それらの観点を少しづつ満たすような”日焼け対策の最適化”を考えなければならないように思われます。
そこで、Simulinkを使って、(動的なシステムのモデル化・制御システム構築・プロトタイピングを簡単に行うことができる)MATLAB社のSimulinkで”日焼け対策”を最適化に挑戦してみたくなりました。そこで、今日はまず[はじめに]ということで、平均日照時間と平均気温をSimulinkでグラフ表示してみました。
とりあえず、下の微分方程式のように平均気温(TEMP)の変化は平均日照時間(SUN)に比例するとおくと、
d TEMP /dt = SUN平均気温は平均日照時間を積分したもの、ということになります。そんな関係をSimulinkでモデル化し(数値はまだ合わせていません)、グラフ表示してみたのが下の図です。気温が日照時間に対する「位相遅れ」を持っていることがわかります。
・・・と、ここまでは当たり前の結果ですが、こんな感じで「日焼け対策の最適制御」について色々考えていこうと思います。
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で作成します)
2008-08-08[n年前へ]
■LEGO Mindstorms NXT でロボット開発
リアルタイムOSであるOESK RTOS(TOPPERS/OSEKをLEGO NXT 向けに移植した nxt OSEK)で動く LEGO Mindstorms NXT を見ていると、自分でも色々なロボットを作ってみたくなる。たとえば、下の動画は Simulink(…と各種ToolBox) でロボットの制御プログラムを書き、Embedded Coder Robot NXT で LEGO Mindstorms NXT 用にコンパイル・実行したものである。まさに、昔子供(こども)だった大人心をくすぐる「大人の玩具(おもちゃ)」だ。
もちろん、Simulink といった値の張るツールを使わずとも、複雑な色々な制御を短時間にコーディングしようと思わなければ、制御プログラム開発はできそうだ。というわけで、「nxtOSEKアプリケーション動画」の数々を眺めていると、小中学生のこどもの「夏休みの課題」にかこつけてLEGO ロボットを購入し、ロボット・ハッキングで真夏の暑い夜を過ごしてみたくなる大人も多いはず。