hirax.net::Keywords::「自動制御」のブログ



2008-07-31[n年前へ]

「計測・解析ソフトのハック」が実験系技術者の一番のLifeHack…かもしれない。 

 「計測・解析ソフトウェア/ハードウェアのハック」が実験系技術者の一番のLifeHack…かもしれない、と思っています。それを逆に言うならば、実験系技術者が費やす多くの時間を、計測・解析ソフトが消費しているということになります。つまり、一番時間を消費している部分の高速化をすることが、全体の高速化に効果的だろう、ということです。

 そんなこんなで、何を今更…という、Perlで「シリアル通信とユーザインターフェース自動制御」のやり方を整理しておくことにしました。なぜかというと、経験的に「計測・解析ソフトウェア/ハードウェアのハック」は、シリアル通信制御とユーザインターフェース自動制御でほとんどの場合対応できることが多いから、です。しかも、計測・解析ソフトウェア/ハードウェアを外注したりすると、時間や費用が無視できないほどかかったりするわけで、そういったシステムを簡単に作ることができるということを知っていると、結構便利であるわけです。

 たとえば、RBIOシリーズのような汎用(入)出力ボードは、お小遣い程度の価格で「シリアル通信経由でのハードウェア制御をする」ことが簡単にできます。それは、「計測ハードウェアのハック」がとても簡単にできる、ということです。
 そして、Windows上(あるいはWindows上で動くソフトウェア)の作業を”勝手に”プログラミングすることができれば、「計測・解析ソフトウェアのハック」も簡単にすることができます。

 というわけで、「シリアル通信とユーザインターフェース自動制御」ができれば、「計測・解析ソフトウェア/ハードウェアのハック」を簡単に実現することができるわけです。

 とりあえず、たとえば、Perlで「シリアル通信とユーザインターフェース自動制御」を使うには、Win32::SerialPort と Win32::GuiTest という二つのライブラリが必要です。それらのインストールは、コマンドプロンプトから、

ppm install Win32-SerialPort
ppm install http://www.bribes.org/perl/ppm/Win32-GuiTest.ppd
という風に行うことができます。もっとも、インターネットに直接アクセスすることができない Proxy 内部からであれば、
set HTTP_proxy=http://proxy.hoge.com:8080
set HTTP_proxy_user=hogehoge
set HTTP_proxy_pass=hogehoge
といったような、Proxy対策の環境変数設定をコマンドプロンプトから前もって行っておくことが必要になります。

 あとは、シリアルポート通信ようの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";
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;
}
という感じで*、スイッチやモータを適当にシリアル通信(とRB-IOのようなお手軽I/Fボードで)制御すれば良い、という具合です。午前中に秋葉原に行って部品を買って、午後にスクリプトを2,30行書けば、それで自動計測・制御システムのできあがり、というわけです。

 *(なお、ここで使用している"serialport_conf"は、こういったserialport_conf.plで作成します)

2017-04-30[n年前へ]

スマホ(BLE)から動かせる街中スナップ用の(Ricoh Theta S用)2軸自動制御アームを作ってみる。 

 先週、Ricoh Theta用の極座標自動アームを作った。それを旅先で持ち歩き・街中で2軸アームを 動かしつつ気軽なスナップ写真を撮るために、今日は「ステージ制御をスマホ(iPhone)からできる」ようにしてみました。作戦は、iPhoneとアーム制御ボード間をBluetooth(BLE)で繋ぎ、iPhone上で動くPython環境(Pythonista)から制御アームとRicoh Theta Sを同期制御するという仕組みです。

 先週組んだアームはMakeblockのパーツを使っているので、その制御に使ってる(Makeblock製の)ArduinoボードにBluetooth I/Fを繋ぎ、ドキュメントとiOSアプリのLightBlue Explorerで制御ボードにアクセスしてみると、servicesのFFE1中にあるcharacteristics FFE3 に書き込みを行えば、制御ボードに情報を渡すことができることがわかります。…というわけで、「iPad + Pythonista(iOSで動くPython) + BLEで、Genuino101のLチカをしてみた。」を参考に、Makeblock(Arduino UNO)ボードに(適当に俺ルールで決めた5byte一組の)コマンドをiPhone(Pythonista)から送りつけ、そのコマンドをもとに2軸アームを動かしてみることにしました。

 というわけで、スマホから制御できる「Ricoh Theta S+制御アーム」を持ち歩き、山道で撮影した(円筒表面上の48枚の)画像から、試しに生成してみたた3次元風景が下の動画です。Ricoh Theta S自体は、全天周撮影を行うカメラですが、それを閉曲面状の複数点で撮影することで、3次元な全天周世界を復元したり、周囲の見た目を再現したり(ライトフィールド)することができます。

 ちなみに、iOS Pythonista ( Python ) からの制御コードは、上記参考コードをもとにして、たとえば下のような感じにしています。

    def did_discover_services(self, p, error):
        for s in p.services:
            print(s.uuid)
            if 'FFE1' in s.uuid:
                p.discover_characteristics(s)

    def did_discover_characteristics(self, s, error):
        if 'FFE1' in s.uuid:
            for c in s.characteristics:
            if 'FFE3' in c.uuid:
                 self.myProcedureWithTheta(c)
その上で、(上記コードのmyProcedureWithThetaとしたような部分で)適当なコマンドや値をMakeblock Arduinoボードに渡す(そしてその情報をもとにアームのモータなどを動かす)ことで、持ち歩き用の自動制御アーム付き三脚のできあがり!というわけです。
self.peripheral.write_characteristic_value(
        c, cmd, False)
self.peripheral.write_characteristic_value(
        c, bytes([step]), False)

スマホから動かせる街中スナップ用の(Ricoh Theta S用)2軸自動制御アームを作ってみる。スマホから動かせる街中スナップ用の(Ricoh Theta S用)2軸自動制御アームを作ってみる。スマホから動かせる街中スナップ用の(Ricoh Theta S用)2軸自動制御アームを作ってみる。






2017-05-20[n年前へ]

スマホ(BLE)から動かせる街中スナップ用の(Ricoh Theta用)自動制御アームで特殊映像を撮ってみる 

スマホ(BLE)から動かせる街中スナップ用の(Ricoh Theta S用)2軸自動制御アームを作ってみる」を南国バンコクに持ち込んで、この撮影機材をリュックの中に詰め込んで、自転車で街中をウロウロしながら特殊撮影をしてみました。特殊撮影というのはどういうことかというと、異なるたくさんの視点から撮影した全周画像をもとに3次元空間を再現したり、その3次元空間に光が注ぐ世界の中を歩いてみたり…という実験です。

 リュックから大型三脚とBLE経由制御の駆動ユニットを組み立てて、Ricoh Theta Sを取り付けるまで、慣れれば1分で完了します。そして、バンコクの通りに立てた特殊機材の近くから、iPhone 経由で駆動制御と撮影をしてやるのです。数十枚〜百枚弱の撮影をおよそ5分弱の間に行うのです。

 そんな撮影をしたら、カメラの周りに存在した3次元空間を再現するための計算をCPUとGPUをぶん回し行います。あるいは、そんな世界に差し込む光や反射する光をガウス的に捉え再現するための計算を、やはりCPU・GPUをぶん回して行うのです。…そんなことをするこで、色んな映像を作り出すことができます。

 たとえば、下の動画はBTS(バンコク中央部を走る高架鉄道)のスラサック駅近くにある、中華系の墓地の Tae Chew Association of Thailand で撮影した72枚の全円周な画像群から生成した3次元映像です。この動画では3次元空間を1方向に向かい眺めているだけですが、再現されたデータ世界の中では、「一応」すべての方向に向かう風景が生成されています。

 といっても、こんな映像はとてもチープなのもまた確かです。けれど、そんな撮影画像であっても、「もう二度と見ることができない今の時代を撮影した」データであるような気もする…ので、こんな変な撮影を色々してみて残していこうかな、と思います。

スマホ(BLE)から動かせる街中スナップ用の(Ricoh Theta用)自動制御アームで特殊映像を撮ってみるスマホ(BLE)から動かせる街中スナップ用の(Ricoh Theta用)自動制御アームで特殊映像を撮ってみる








■Powered by yagm.net