2009年5月26日火曜日

たぬき?

きょう宇治構内の水路にたぬきみたいな動物が出没しました.思わず写真を撮ってしまった・・・

たぬき正面

夜中には結構いるんですが,昼間に見るのは初めてです.よほど飢えていたのか・・・

水路内たぬき たぬき振り向き

たぬき手を洗ってる

たぬき隠れた

2009年5月22日金曜日

SyntaxHighlighter2でMATLABソースを表示 in Blogger

以前SyntaxHighlighterをMATLAB対応にしました.その後,ファイルを置いてあるサーバーの更新があったり,SyntaxHighlighterがバージョン2になったりで使えない状態で放置していたので,改めて作りなおしてみました.

BloggerでSyntaxHighlighter2を使う

まず最初にBloggerでSyntaxHighlighter2をつかうときの設定ですが,テンプレートに

<!--ここから -->
    <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shCore.js' type='text/javascript'/>
    <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushPlain.js' type='text/javascript' />
    <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushXml.js' type='text/javascript' />
    <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushCss.js' type='text/javascript' />
    <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushJScript.js' type='text/javascript' />
    <script src='http://maru.bonyari.jp/storage/shBrushMatlab.js' type='text/javascript'/>
<!--ここまで -->
</head>
...
<!-- end outer-wrapper -->
<!--ここから -->
<script type='text/javascript'>
//<![CDATA[ 
    SyntaxHighlighter.config.bloggerMode = true;
    SyntaxHighlighter.all();
//]]>
</script>
<!--ここまで -->

のように追加するといいようです.config.bloggerModeの設定がないと改行の位置にBRタグの出来そこないが出現します.

MATLABのソースをSyntaxHighlighterで成形する

【使い方】

上記のファイルを通常の”shBrush*.js”と同じように読み込んで,class=”brush:matlab”で使えます.上のサーバーに置いてあるのを読み込んでも構いませんが,無保証自己責任でお願いします.ちなみにSyntaxHighlighter本体も本家でホスティングされているようですね.(リンク)
上の設定例はこのホストを使う設定にしてます.

2009年5月18日月曜日

MATLABで並列計算(PSO)

素のMATLABは並列計算に弱いようで,最近のデュアルコアのPCだと,プロセッサ使用量が50%で頭打ちします.

ただ,最近学校の MATLAB ライセンスに Parallel Computing Toolbox が加わって一部関数が置き換えられたためか,単にバージョンアップの恩恵なのかは知りませんが,一部の計算ルーチンがマルチコア用にコンパイルされているらしく,計算によっては50%を超えるプロセッサ使用率を見ることもできるようになりました.

でも依然として,大半の処理は片方のコアのみで処理されるようです.
本来は並列計算できる部分は処理系が自動的に判別して最適に処理してくれるのが理想なんですが,なかなか実現されないですね.また,最近はコア1つ当たりの性能向上は収束気味で,今後はコアの数が増える方向にPCは進化するようなので,今後MATLABでPCの進化の恩恵を享受するためには,並列計算のスキルを身につけておく必要がありそうです.

MATLAB で Parallel Computing Toolbox が使える場合,単一マシンで並列処理をするのはとても簡単で
matlabpool 2 %デュアルコアの場合
parfor idx=1:100
   % 並列化する処理
end
matlabpool close

とやれば並列に処理されます.matlabpool の後の数字は生成されるスレッド数です.

結構並列化のオーバーヘッドがあるようで,単位処理の計算量があまりに小さい場合,かえって遅くなることもあるようです.結果が芳しくないときはプロファイラでチェックしてみるべきですね.

Particle Swarm Optimization (PSO) なんかは並列計算の恩恵を最大限に受けられるアルゴリズムなので,目的関数の評価に時間がかかる問題であれば,処理速度がほぼコア数倍になります.(といってもまだデュアルコアでしか試してませんが・・・)

もうちょっと手間をかけると複数のマシンをつないでクラスタリングとかもできるようなので,人がいない夜中とかに実験室のマシンを束ねて試してみようかな〜

・・・・と思ったらクラスタリングには MATLAB Distributed Computing Server っていう別製品が必要なようですね.
また,Parallel Computing Toolbox ではスレッドの数も4つまでに制限されてるようです.
つまり現状ではクアッドコアのXeon W3570以上のCPUを使っても性能向上は期待できないということかな?
値段を考えると2.66GHzのXeon W3520か,近々更新される見込みなCore i7あたりが計算用マシンのCPUとしてはベストになるのだろうか・・・

2009年4月15日水曜日

通販できる海外のホビーロボット用部品店

ネットを使うと海外からも簡単に部品が買えて良いですね.
最近目を付けてる海外サイトをメモしておきます.

  • Gravitech
    Arduino nanoを売ってます.僕が注文したときは12日で届きました.ちなみに送料は$5.85.スイッチサイエンスさんから買った方が速いし,値段もトータルでは同じくらいのはず.
  • Dimension Engineering
    モータードライバー,センサーなど.僕が購入したときはUSPS First Classで送料$2.5,一週間くらいで着きました.急ぐのならメカロボショップさんでも購入できます.
  • RobotShop
    ロボット材料,モジュールなどなど.ルンバをbluetooth接続するキットとかを売っているのが気になる.日本からも通販できるようだけど,重量物は送料が怖い・・・
  • Pololu Robotics and Electronics
    モータードライバ,センサー等々.試したことはないけど,日本からも購入可能なはずです.配送はUSPS First Classのようなので,一週間そこそこで着くはず.送料は基板程度なら$2.5だと思います.急ぐのならメカロボショップさんでも購入できます.
  • Endurance
    R/Cラジコンの部品.PCTx (パソコンをラジコンの送信機にするデバイス)が売ってるのでメモ.
  • The Robot Marketplace
    なんか凶悪そうなモーターが売ってるのでメモ.パワー系ロボコン用ですね
  • SuperDroid Robots
    ロボット関連いろいろ.オムニホイールを扱っているのでメモ.
  • SparkFun
    Arduino関連が超有名.大抵のものはスイッチサイエンスさんで扱っているので,そちらから購入した方が良いでしょう.最近は日本橋でもSparkFun製品を結構見かけますね.

2009年4月8日水曜日

Gainer mini でオシロスコープもどき

最近お手軽なマイコンが流行しているみたいで,僕も色々手を出しています.

Gainer はパソコンとUSBで接続できて,Processing等のお手軽な言語で
パソコン側から制御できるI/Oモジュールです.Gainer mini はその互換機で,より小型のモジュールになってます.
プログラムが簡単なので,芸術作品とかに良く使われてるみたいですね.

純粋な芸術作品にはあまり興味はないんですが,
融通の利く計測装置として便利そうなので,一つ購入してオシロスコープもどきを作ってみました.
パソコン側のスクリーンショットはこんな感じ


Sparkfunのジャイロセンサー(MLX90609・1軸)と秋月の加速度センサー(KXM52-1050・3軸)を接続して動かしている動画.



計測周期は4チャンネルで10msを若干切るくらいが限界のようですね.単チャンネルなら2ms前後までいけるかも知れません.
OSごとの時刻取得関数に依存してしまいますが,10ms程度の制御周期でよければ制御にも使えそうな感じもします.ただ,MacのProcessingの実装では時刻取得関数millis()の精度が良くないようで,厳しいかもしれません.

2009年3月24日火曜日

MATLABでフィードバック系のシミュレーション

たまにうっかり忘れるのでメモ.

MATLABでプラントPと制御器Kが構成するフィードバック系のシミュレーションをするとき,
>> s=tf('s');
>> P=1/s;
>> K=1/(1+s);
>> step(P*K/(1+P*K))
とかやるのはNG.正しくは
>> step(feedback(P*K,1))
とする.一見結果は同じなのだけど
>> P*K/(1+P*K)

Transfer function:
s^2 + s
-----------------------
s^4 + 2 s^3 + 2 s^2 + s

>> feedback(P*K,1)

Transfer function:
1
-----------
s^2 + s + 1

>>
という違いがあり,高次のシステムを使うときになって初めて問題が顕在化したりしてよろしくない.
システムの割り算はMATLABでは逆システムの計算と直列接続で計算されるので,この場合P*Kと1+P*Kが共通の極を持っているにも関わらず,これらが相殺されないことによって問題が起こる.
ちなみにseriesとparallelを*と+で書くのは,少なくともSISOの場合には問題ない(中でやってる処理は同じ).MIMOの場合は未確認.

MATLABに限らないけど,強力なツールを使うのは楽なようで難しい・・・
ソースを全部追うのは大変だし・・・

2009年3月22日日曜日

使えそうな部品探索@日本橋(モータードライバ編)

昔ほど頻繁に日本橋に行かなくなったので,どこの店にどの部品があるか把握できない・・・
というわけで,今後のためにまとめておきます.今回はモータードライバ関連です.

最初に店ごとにとってきたモータードライバ関連部品コーナーの写真,
続いてカテゴリーごとの部品まとめになっています.

あとトーカイとシリコンハウス共立は重要かと思いますが,見る時間がなかったので入ってません.

ではカテゴリーごとのまとめ編

  • モータードライバIC
    一番楽な選択肢で,基本的に一つの部品でモータードライバが構成できます.
    この手のICでよく使われているICにTA7291とかTA8440とかTA8429などがあります.これらのICは,東芝のカセットレコーダー用のICで入手が容易ですが,バイポーラトランジスタでできてるICなので電圧降下が激しく(1~3Vくらい),発熱が大きいことなどから,電池で動くタイプのマシンには使いたくありません.また,スイッチ速度も遅いのでPWMにもむかないです.
    ちなみにTB****という型番のモータードライバはFETベースなので電圧降下が小さく使いやすいです.ただし,こちらは滅多に見かけませんが・・・
    TA****については,どこでも手に入るし,個人的にあんまり使わないので,ここではバッサリ省略してます.
    DCモーター用
    TA****以外のICってやっぱりほとんど日本橋では出回ってないですねー.
    このジャンルに関しては通販で探した方がいいかも.
    1. μPD16805GS
      パーツランドの部品棚ではMPD16805になってます.これはこれで正しい気もしますが,uPDって書いてあることの方が多いかな?
      はんだ付けが少し困難であることを除けば,田宮の工作セット系のモーターFA130とかRA260の制御に申し分ない性能で使いやすいICです.
    ステッピングモーター用
    あんまり使わないけど,ついでにリストアップ.
    1. STK672-050
      ユニポーラ定電流チョッパ方式(他励PWM方式)ステッピングモータドライバ(正弦波駆動)出力電流3.0A
    2. LB1845
      PWM 電流制御式 ステッピングモータドライバ
    3. TB6615PG
      3相/4相ステッピングモータドライバ
    4. (PMM8713)
      製造中止のステッピングモーター用IC.直接ステッピングモーターを駆動するドライブ能力はないそうです.
      今後の入手性に難はありそうですが,デジットにはまだあるようですね.
    ブラシレスモーター用
    いつか使おうと思って全然使ったことがないブラシレスモーター・・・
    この機会に使ってみるか?
    1. ECN3022SP
      ECN3022はIGBTを6個内蔵したワンチップ三相ブリッジICです。
      特に三相DCブラシレスモータ制御用に最適です。
    RCサーボモーター用IC
    使ったことないですが,RCサーボで使われているICも売っています.何度か調べようと思って調べ損ねているのでついでにまとめ.自作の機械をラジコン化するときに便利かな?
    1. NJM2611D
    2. M64611FP
    3. M52461GP
    データシートを見た感じだと,安価なRCサーボのほとんどはデッドバンド付きのP制御のようですね.

  • ゲートドライバ&MOSFET
    適したモータードライバが見つからない場合,大抵はディスクリート部品でMOSFETを使ったモータードライバを組むことになります・・・が,MOSFETのゲートを駆動する回路は電源投入時や電圧低下時の安全性,ゲート電圧の確保などを考えると結構難しく,この部分の間違いでモータードライバが炎上する事故がよく起きます.
    というわけで,僕はゲートドライバは可能な限りIC使って設計を避けることにしてます(笑)
    昔はゲートドライバICとかあんまり売ってなかったのですが,最近は結構売っているようで,いい時代になったものです.
    ゲートドライバ
    マルツパーツ/千石電商の参入で入手できるものがだいぶ増えたようです.
    D級アンプとかが流行ってるのも要因のひとつか?
    1. HCPL-3180
      2 Amp Output Current, High Speed IGBT/ MOSFET Gate Drive Optocoupler
    2. HCNW3120-000E
      2.0 Amp Output Current IGBT Gate Drive Optocoupler
    3. HCPL-316J-000E
      2.0 Amp Gate Drive Optocoupler with Integrated Desaturation Detection and Fault Status Feedback
    4. HCPL-3150-000E
      0.5 Amp Output Current IGBT Gate Drive Optocoupler
    5. HCPL-314J
      HCPL-3140-000E
      HCPL-314-000E
      0.4 Amp Output Current IGBT Gate Drive Optocoupler
    6. IRS2011SPBF
      HIGH AND LOW SIDE DRIVER
    7. IRS2110PBF/IRS2110SPBF/IRS2113PBF/IRS2113SPBF
      HIGH AND LOW SIDE DRIVER
    8. IRS21271SPBF/IRS21281SPBF
      CURRENT SENSING SINGLE CHANNEL DRIVER
    9. IRS2092PBF/IRS2092SPBF
      PROTECTED DIGITAL AUDIO DRIVER
    10. IRS20955SPBF
      PROTECTED DIGITAL AUDIO DRIVER
    11. TLP250 / TLP251
      IGBT/MOSFET駆動用フォトカプラ
      昔結構探してみつからなかった思い出が・・・
    FETアレイ
    たぶん4AM12(廃品種)とかMP4212
    みたいなPch×2,Nch×2の構成のFETアレイがよくつかわれてるんですが,今回なぜか見つからなかった・・・また探しておきます.
    1. MP4208
      Pch×4 RDS:0.2Ω ID 5A(Peak 10A)
    2. MP4209
      Nch×4 RDS:0.28Ω ID 3A(Peak 12A)
    3. MP4210
      Nch×4 RDS:0.12Ω ID 5A(Peak 20A)
    4. MP4211
      Pch×4 RDS:0.16Ω ID 5A(Peak 20A)
    5. MP4410
      Nch×4 RDS:0.12Ω ID 5A(Peak 20A)
    6. MP4411
      Nch×4 RDS:0.28Ω ID 3A(Peak 12A)
    7. MP4412
      Nch×4 RDS:0.28Ω ID 3A(Peak 12A)
    8. MP6404
      Nch×3 Pch×3 RDS:0.12Ω(Nch) 0.16Ω(Pch) ID 5A(Peak 20A)