« November 2012 | Main | January 2013 »

December 24, 2012

オープンハード・オープンソースの超小型オシロスコープを買った

E272自分へのクリスマスプレゼントに超小型オシロスコープ DSO Quad を買った。千石電商で19,500円だ。
超音波風向風速計とか、いろんな電子回路を作るのに、やっぱりオシロくらい欲しいと思ったんだよね。と言うか、私のような人が、今の今までオシロを持っていなかった方がおかしいか? (ずっとテスタ、それも秋月で1000円で買ったものだけ)

この DSO Quad、小さめの携帯電話より更に小さい超小型だ。超小型のオシロは 2年ほど前から千石のトラ技の広告に載っていたけど、当時は、入力2チャンネルで、サンプリング周波数が 1MHz しかなかったので、買っていなかった。最近になって、4チャンネル入力でサンプリング周波数 73MHzのバージョンも出ているのに気付いて、購入することにした。(購入後、調べたら、4ch 73MHzのバージョンは去年から広告に載っていた。単に私が気付いていなかっただけだ)

まあ、4チェンネル入力とは言え、アナログ2ch、デジタル2chなのだが、それでも極端に安いので、たいした品質ではなかろうと、あまり期待もせずに購入した。そうしたら、期待とは全く違うものだったことが判った。期待を下回ったのではない。期待以上のものであったのだ。

期待以上と言っても、品質が良いわけではない。デジタル用のプローブのうち1本は直ぐにコネクタが外れてしまった。(ネット上を調べたら、このデジタル用のプローブが極めて評判が悪く、コネクタが外れるのは当たり前らしい。まあ、だましだましでも使えないわけじゃないので、諦めるか・・)
また、使用説明書も紙一枚だけで、英語を読んでも使い方が良く判らない。

使い方をネットで調べているうちに、DSO Quad がとんでもないものだと判った。なんとハードもソフトも公開されていてその上改変自由のオープンハード・オープンソースだ。DSO Quad は、STM32を中心にして、FPGAを使って高速でアナログデータをサンプリングしている。この回路図もFPGAの内部プログラムもSTM32のプログラムもネット上で公開されている。
STM32を始めた頃に「STM32を使って、アナログデータを取り込み、オシロにするオープンソース・オープンハードがある」って噂に聞いたんだが、これがそれだったか! やっと繋がった。前述の1MHzサンプリングの2chのバージョンは FPGA を使わずに直にSTM32のADCで入力しているようだ。(詳細まで調べたわけじゃないけど)

期せずして、オープンハード・オープンソースを体験することになってしまった。正直、DSO Quad は、オシロとしては最低レベルだが、使い物にならないわけではない。コストから考えて、この値段で、それなりに実用になるオシロが購入できるだけでも凄い。
逆に、超音波風向風速計をオープンハード・オープンソースで開発しようと思っているが、DSO Quad の品質で販売できるところまで持って行くと言うのは、それなりに大変だと思う。どうやら、ケースのデザインも公募したようで、そう言ったボランタリーベースの協力で、こう言ったものを作ることができると言うのは大したものだ。

ユーザーの立場で言えば、DSO Quadを改造し、少しでもDSO Quadの進歩に協力するかと言えば、それは「クエスチョン」だ。回路図やプログラムのソースコードが公開されており、その上、ネット上には幾つもオリジナルなアプリケーションソフト(例えば、周波数特性とか)が公開されているにも関わらずだ。
曲がりなりにも「STM32使い」の私が二の足を踏むには、主に2つの理由がある。
(1) 使用しているSTM32F103だ。私が普段使っているSTM32F4とSTM32F103では内部が異なり、プログラムが共通化できない。
(2) 曲がりなりにも実用に使っているものを改造する気になれない。
つまり、2ch版の DSO の CPUがSTM32F4に置き換えられたら、もう一台買って改造するか、今使っているDSO Quadが使い物にならないと飽きられた時・・ってことになる。それって、なんだかねぇ。2つ目の理由に至っては、「役に立たないことが改造の理由」って事かいな・・・嗚呼

図らずも、オープンハード・オープンソースのユーザー心理が判ってしまった。私のような我儘なユーザーを開発者として取り込むのは大変なんだなあ。

| | Comments (2) | TrackBack (0)

December 23, 2012

Ubuntu 12.04をインストした

E271メインで使っている超小型ノートPC FMV-BIBLO LOOX U/C30 に、先週から Ubuntu 12.04 をインストした。Ubuntu 12.04 は今年4月にリリースされて半年以上、既に後継の 12.10 もリリースされた今頃になって、12.04 をインストしているわけだから、遅すぎるだろう・・と思われるかもしれないが、それなりに訳がある。
Ubuntu のリリースは半年毎だが、この半年毎のリリースの大半は先端技術が反映されているもののサポート期間が短く、1年半しかない。しかし、2年毎にリリースされる LTS (Long Term Support) は、逆に派手な機能は無いもののサポート期間が長い。今回インストした Ubuntu 12.04 は LTS で5年間のサポート期間がある。
私の場合、Ubuntu をメインで使っているので、派手な機能よりも地道に長く使える
LTS の方が良い。
今まで使っていた Ubuntu 10.04 も LTS なのだが、そのサポート期間は3年(デスクトップ版の場合)で来年4月までである。従って、来年4月までに 12.04 に切り替える必要があったのだ。逆に、なぜ、リリース後半年以上も遅らせたかと言うと、どんなに良くできた OS でも、リリース直後は不具合があり、それが落ち着くまで待っていた。12月初頭まで学会や講義などでLOOXを使うことが多く、それが終わったタイミングで12.04をクリーンインストしたのだ。

実は、Ubuntu 12.04 をインストしたのは、今回が初めてではない。試しとして、デスクトップ機などに何回もインストしている。LOOX自体にもインストして動作チェックを行なっている。LOOXのHDDはパーティションを細かく分けていて、10GBの領域を新しいバージョンなどのテスト領域に使っている。12.04 のリリース直後にテスト領域にインストして動作確認していた。

今回は、以前10.04を入れていたパーティションだけではなく、テスト領域も合わせてフォーマットしなおし、12.04をクリーンインストした。それは、これがLOOXの最後のOSのインストにしようと思ったからだ。

LOOXを買ったのは2009年の1月1日。ほぼ4年になる。Atom 1.3GHzのCPUと言い、1GBのメモリと言い、既にハード的には時代遅れとなった。新しいバージョンのOSは、新しい機能の追加と引き換えに、より高性能な新しいハードを必要とする場合が多い。12.04のサポート期間の残り4年強よりも早くLOOXが壊れるか完全に時代遅れになるだろう。だから、これが最後のインストだと思った。

本当は10.04のサポート期間が後数年あれば、12.04に変える必要はなかった。10.04の機能で、実用上ほとんど問題が無いからだ。むしろ、12.04に変更による問題の方が大きい。

12.04の最大の問題点は、ユーザーインターフェースの Unityだ。このインターフェースは極めて評判が悪く、私も試しに使った限りにおいては良い感触は無かった。よっぽど、Mint Linux のように旧来のユーザーインターフェースを使った Linux をインストしようかと悩んだほどだ。しかし、別途、デスクトップ機にインストした12.04で Gnome Classic を言う旧来とそっくりなユーザーインターフェースを試した結果、最悪の場合、そこに逃げ口があると判断して、12.04をインストすることとした。

12.04には、他にも問題点がある。OS標準となった GMA500のグラフィックドライバーは、LOOXと相性が悪く、デフォルト状態では、画面の上半分しか表示されないと言う不具合がある。また、タッチペンのキャリブレーションにも問題があった。しかし、グラフィックドライバーとタッチペンの問題はインスト後の設定で対処可能な事が判ったので、本格的に使おうと思った。(もし、LOOX U/C30やC40、B50などに Ubuntu 12.04 をインストしようと言う人が入れば、これらの対処法を書こうと思うが如何であろうか?)

一方、12.04にして良くなることもある。一番はサスペンドモードからの復帰だ。Ubuntu 10.04の場合は、サスペンドモードからの復帰時に画面が真っ黒になったままで実用にならないと言う問題があった。12.04では、この問題がなくなりサスペンドが実用的に使える。また、無線LAN用のドライバが新しくなり、無線ルータとして使えるようになった。もっともUbuntu 12.04 パソコンを無線ルータとすることができても、余り使いようが無いので、こっちの方は実用的では無いかも知れない。

Ubuntu 12.04 をインストし、メールクライアントやSTM32F4用の開発環境などを構築していると、わずか、数日で Unity に嫌気がさしてきた。LOOX U/C30には感圧式でシングルタッチではあるが、タブレットPC的な使い方ができるのだが、Unityは全くタブレットOSとして機能できない。その上、Unityは遅いので、今のところ、Unity2Dと言うUnityそっくりだが基本的には別のユーザーインターフェースに逃げているが、Gnome Classic に移行する日も近そうだ。

さて、そろそろ LOOX U/C30 の後継機も考えないといけないのだが、特に、これと言ったものは今のところ無い。Atom Z2760 を使ったタブレットPCが狙い目と思ったが、intel はZ2760はLinuxをサポートしないと宣言したようだ。まあ、Atom Z2760 にLinuxをインストした場合、問題になるのは電源管理部だけのようなので、消費電力が大きくなることを諦めるか(Z2760最大の魅力を失うことになるけど)、誰かがハックするまで待つか。
とまあ、しばらくは LOOX をメインで使うことが続きそうである。

| | Comments (2) | TrackBack (0)

December 09, 2012

超音波風向風速計 センサは何個要る?

E270過去のブログで「水平方向の風向風速なら、送信部1つに受信部3つで良いが、垂直方向まで測定するときは、送信部3つに受信部3つとなる」と書いたが、これは安直だった。今一度、センサが何個必要か、考えなおしてみる。

超音波風向風速計は、送信器から出した超音波が受信器に届くまでの時間を計測して、それを元に風向風速を測る。無風なら、送信器と受信器の距離を音速で割った時間かかる。音速が340m/sとして、送信器と受信器の距離が34センチなら、その時間は、1msecだ。
送信器から受信器の方向に風が1m/sで吹いていると、超音波が341m/sで伝わるのと同じなので、2.9μsだけ早く到達する。逆方向に風が1m/sで吹いているなら、2.9μsだけ遅れる。
つまり、超音波風向風速計で風速を1m/sの精度で測りたければ、少なくとも2.9μsの精度で測定する必要があると言うことだ。実際には、2.9μsの10分の1の300ns程度の測定精度が要ることになる。
さて、測定精度を悪化させる誤差要因を冒頭のイラストを見ながら考えてみよう。まず、左右両端の『デジタル部』と書いた部分だが、ここの誤差は問題ない。デジタル部は50ns程度より大きい精度なら容易であり、今回要求される300nsの精度では全く問題ないと言える。
問題なのは、イラストの中で「送信部遅れ」と「受信部遅れ」と書いた部分と、イラストには無いが音速の変化である。これらは温度と気圧に依存するとされるので、通常なら温度と気圧を測るセンサを別に付けておいて補正するのが普通だ。
しかし、この方法だと、事前に温度特性を測っておかなければならないこと、温度と気圧センサが別個に必要になること、そのセンサにもそれなりの精度が要求される事が課題となる。
それなら、いっそ、温度や気圧で補正することなく、送信部から受信部に届く時間測定だけから、各誤差源の値も一緒に推定してしまえないか、それが今回のコンテツのテーマだ。

受信器数送信器数
12345
11/6/62/6/73/6/84/6/95/6/10
22/6/74/6/86/6/98/6/1010/6/11
33/6/86/6/99/6/1012/6/1115/6/12
44/6/98/6/1012/6/1116/6/1220/6/13
55/6/1010/6/1115/6/1220/6/1325/6/14
66/6/1112/6/1218/6/1324/6/1430/6/15

表を見てもらいたい。縦の列は送信器の数が1〜5個の場合、横の行は受信器の数が1〜6個の場合の表になっている。
表の中のスラッシュ”/”で区切った数字の一番左は、測定できるパラメータの数。つまり、送信器から出した超音波が受信器に届くまでの時間の数で、当たり前だが、送信器数と受信器数の積になっている。
真ん中の数字は、直接できない未知のパラメータの数。全て「6」になっているのは、内訳が以下の通り
・音速
・風向風速(3次元的なベクトル要素なので、パラメータは3つ)
・送信部の遅延時間(全ての送信部の遅延は同一と仮定)
・受信部の遅延時間(全ての受信部の遅延は同一と仮定)
右側の数字は、同じく直接できない未知のパラメータの数なのだが、この場合は、送信部、受信部ともに全て遅延が異なると言う仮定を置いている。
送信部と受信部の遅延時間は、温度に依存すると思うから、同一回路で同一部品なら同じ遅延時間になりそうな気もする。一方、部品一個一個特性が違う可能性もあり、どちらが支配的かは実測してみないと判らない。

とりあえず、測定できるパラメータの数だけ連立方程式が立てられる。未知のパラメータの数が連立方程式の数より多ければ、解は得られない。これを赤字で書いている。ところどころにある黒字は、連立方程式の数が一つ足りないが、風向風速を水平面だけのパラメータとすると成立するもの。

青字で書いたところが、連立方程式の数が未知のパラメータの数より多いので、解が得られる可能性がある。「可能性がある」と、やや曖昧な書き方をしたのは、連立方程式によっては、数が多くても解が得られない場合があるから。これは、送信器と受信器の配置によって、連立方程式が解きやすいものと解きにくいものが出てきてしまう。言い方を変えると、「表中、赤字の部分は幾ら考えても無駄。青字の部分は連立方程式の解きやすい配置を考える余地がある。」と言うこと。

今のところ、送信器2個と受信器3個の組合せが最有力と考えている。これは、送信部同士、受信部同士が同じ遅延特性だと言う仮定なら解が得られるのと、STM32F4はDACを2つ、ADCを3つ内蔵しているので回路が簡単に済むからだ。
送信部と受信部の遅延特性が個々に異なるなら送信器4個と受信器3個が有力かな?この場合、DACとは別に送信器をON/OFFする信号を与えて、4つを切り替えて使うもの。切り替え時間が短ければ、遅延特性とかが変化することは無いだろうと考えてだ。

と、ここまで読んでいて、「スラッシュ”/”で区切った数字の真ん中と右の数字の色は判ったけど、左端の数字の色は何だ?」と思った人は注意深い!!
左端の数字は4以上だと青字になっているけど、何の意味があると思う?

実は、今までの話はあくまでも、瞬間的に取ったデータだけで連立方程式を解いた場合の話。しかし、実際は、時々刻々とデータを取っていけば、連立方程式の数が増える。もちろん、風が全く吹いていなかったり、同じ風向風速の風が吹き続いていても、実質的には連立方程式の数が増えないので解は得られない。
しかし、風の強さや向きは変わる方が普通だ。その変化は、温度や気圧の変化より早い。
つまり、同じ温度と気圧で、送信部や受信部の遅延時間が変わらず、音速も変わらない状況下で、風の強さや方向が変わる度に連立方程式が増えていく。もちろん、風向風速が変わると未知のパラメータも3つ増えるけど、測定できるパラメータが4つより多ければ、いずれは連立方程式の数が未知のパラメータより多くなると言うわけ。左端の数字は4以上の場合に青字で書いてあるのは、これ。ある程度の量が得られたら、解が得られて、風向風速も遅延時間も音速も判る。

これは、最小二乗法って言う方法なんだけど、これなら送信器2個、受信器2個ですむ。STM32F4の性能なら、オンボードで最小二乗法を行うことも可能だろう。

どの方法で、どの組合せがベストかは、今後の課題だ。


| | Comments (1) | TrackBack (0)

December 02, 2012

指導する人が若者の才能の芽を伸ばすのか? 抑えこむのか?

E269先日、高校生のマイコン回路設計コンテストに参加した。14チームの参加があり、ほとんどのチームが2〜6名で構成されていた。数チームが1名のみだったが、多くは在籍する学校のチーム名を付けていた。
マイコンを使ったオリジナルな回路の設計と実際に作ったもののデモンストレーションで競い合うコンペティションだが、まあ「高校生だったら、マイコン使って、この程度かな」と、やや不満に思うくらいの無難な出来のものがほとんどだった。

ところが、たった1チームだけ、1人が個人名でエントリーしているチームがあった。チームというより個人だ。聞けば、顧問の先生もおらず、1人でコンテストにエントリーしたらしい。
その出来は傑出していた。マイコンを使うだけに留まらず、アナログ回路、CPLD回路を組合せ、フーリエ変換プログラムやHDLでのCPLD回路設計まで、全て一人で作業したらしい。完全に他のチームとレベルが違う。いや、そもそも大学生や大人でも、これらを一人でまとめて設計・製作・プログラミングできる人は、そうは居ないだろう。
「アナログとデジタルの回路を合わせて作ったので、ノイズ対策が大変でした。」と語ってはいたが、デモンストレーションで全く問題なく動作したのには感心した。
当然の如く、彼は金賞を受賞した。

彼のような傑出した才能の持ち主は、数は少ないが、各世代ごとに確実に存在する。彼は確かに今回のマイコン大会では金賞だった。しかし、同世代のトップではないかもしれない。
と言うのも、彼と同じ世代で、製作したマイコン工作が音速の壁を突破した少年を私は知っているからだ。

書き間違いでもジョークでもSFでもない。本当に音速を超えたのだ。

17歳の少年が独学で作ったマイコンはセンサーで加速度や回転速度を測り microSDに記録した。このマイコンは、7月にCAMUIロケットで打ち上げられ、音速突破を記録している。CAMUIロケットに載せてもらったと言うより、少年の作ったマイコン自体がメインペイロードで、その計測データこそがCAMUIロケットが初めて音速を突破した動かぬ証拠になった。
加速度センサのデータは、音速の手前で空気抵抗が増え、加速度が落ちた後、音速を超えてから、再び急激に加速していることを示している。いわゆる「音速の壁」だ。少年のマイコンが取得したデータはグラフ化され、先月別府で行われた宇宙科学連合講演会で、北海道大学の永田先生により発表された。

17歳の少年であろうが、大人であっても、音速の壁を突破する瞬間の計測を行う機会など多くはない。しかし、少年の作ったマイコンは、CAMUIロケットのエンジンの振動、打ち上げ時の加速度、音速の壁、パラシュート展開時のショック、海面への着水を耐えぬき、見事に取得したデータを守り切った。これは最上級の賞賛に値する。

マイコン大会で優勝した少年と、音速を超えた少年のどちらが一番かと言う野暮な話は止めよう。むしろ、彼ら二人を会わせて話をさせてみたいと思う。いい友人になれると思うのだが。

彼ら二人が、同一世代のトップもしくは、それに近いところに居るのは間違いない。が、問題は共通点だ。彼ら二人とも「指導する教師のない、独学での成果」だと言うことだ。

別の世代でも、同じく17歳前後の時に、指導者なしで独学で成果を出している人を何人も知っている。他ならぬ私自身がそうだし(<=言い過ぎ・・)、また、デジタルオーディオ・プレーヤーなどを手伝ってくれている水城さんもそうだ。水城さんは高専時代にロボコン大会に出場している。この時、学校の正規チームではなかった。正規チームのやり方に反した彼は、非正規チームを結成しリーダーとしてロボコン大会に出た。当然、彼のチームには指導する顧問の先生も居ない。だが、地区予選で正規チームが敗退するも、彼の非正規チームは全国大会に進み、両国国技館の大舞台でベスト8まで勝ち残った。

傑出した才能は、なぜ指導教官の居ないところで育っているのか?
いや、逆に「指導教官は、傑出した才能を育てるどころか、押さえ込んでいる」じゃないかと言う疑りさえもってしまう。

もちろん、優秀な指導教官のもとで才能のある若者が育つと言う事例もあろう。
しかし、多くの場合、指導教官は「底上げ」つまり「チーム中の最低レベルを引き上げることで、効率的に平均レベルを上げる」事には役に立っても、「傑出した若い才能を、さらに育てる」事には役に立っていない。

想像するに、このような事が起こるのは、次のような問題が原因と考えられる。

(パターン1)指導教官が生徒や学生の才能が自分より良くなることを嫌う。
いわゆる嫉妬とか妬みと言ったもの。これは、小説やドラマの中では良くあるパターンだが、現実にはほとんどない。妬みのような明確な悪意が原因なら、むしろ対処は簡単だが、実際にはパターン2以降のように悪意のない、むしろ善意による行為が原因になるので、かえってたちが悪い。

(パターン2)生徒が高度・複雑な技術を使う時。
判りやすく言うと、教師が生徒に向かって「そんなの無理に決まっているだろ」と言う時だ。
パターン2は、さらに細かく3つに分かれる。
(パターン2A)生徒の使おうとする技術が、指導教官の持つ技術を超える時。
憶測だが、前述のマイコン大会の金賞受賞者は、このパターンの可能性が高い。大人でもマイコン、CPLD、アナログ・デジタル回路、HDLとアプリケーションプログラミングまで全て扱える人は少ない。彼の学校の教師の中に、このような人が居た可能性は低いので、これが原因と憶測した。
教師が生徒を指導する時、もし上手く行かない場合、自分がフォローすることを考えるから、生徒が扱う技術が自分の守備範囲を超えないようにするのが普通だ。
子供に敗北感を与えないように、自分がフォローできる範囲に抑えてしまう。これは善意から来る指導だが、才能を抑える結果を生むジレンマだ。
(パターン2B)生徒が挑戦する技術が多い時。
これは、単純に同時に余りに高い技術に余りに数多くの技術に挑戦する時。教師が生徒が扱おうとする技術より高い技術を持っていようが持っていまいが、それとは関係がない。
複数の技術に挑戦するのは無謀だ。ほとんどの場合失敗する。「同時に挑戦する新技術は1個だけ」と教師は経験をもって知っている。だから、生徒に「無理をしない方が良い」とアドバイスをする。
このアドバイスは妥当だ。たぶん、複数の新技術に挑戦しようとした生徒の10人中9人が失敗するだろう。教師は生徒に敗北感を与えたくないから、こうアドバイスする。
だが、その一方、10人中1人の才能を平凡な成功に抑えてしまう。
一人の大きな才能開花を取るか、9人に敗北感を与えないか・・がジレンマだ。
(パターン2C)生徒が挑戦しようとする技術がチームの他のメンバーに扱えないほど高度な場合。
学校時代にチームで何かを達成させる事は貴重な経験となる。これは紛れもない事実だ。チームワークを重視するため、他のメンバーと技術レベルを合わせると言う指導は必ずしも間違いではない。

(パターン3)生徒の価値観が教師に理解されない時。
判りやすく言うと、教師が生徒に向かって「それやって、何の意味があるの?」というやつだ。
パターン3も、さらに細かく2つのパターンに分かれる。
(パターン3A)生徒のアイデアは自分が思っているほど斬新ではなく、既に何度も提案されては上手く行っていないものである時。
生徒より経験の豊かな教師は過去の事例を知っていて、それを否定してしまう。
(パターン3B)生徒のアイデアが本当に斬新で教師に理解できない場合。
これは本当に斬新なアイデアだった場合。この場合、かなりの確率で教師にはその意味が理解できないことがある。これは、教師がいくら優秀でも教師自身が斬新なアイデアを生み出したとしても、教師が理解できないことがある。ただし、いくら斬新なアイデアであっても、それが上手く行くとは限らない。それどころか、斬新なアイデア20個のうち、上手く行くのは1個で、残り19個は「アイデア倒れ」になる。

これらのパターンのうち、パターン1は論外としても、パターン2と3の中で問題なく否定できるのはパターン3Aだけだ。
残りのパターン2ABCとパターン3Bは、教師としてどう対処すれば良い?
肯定すると、10人中9人とか、20人中19人の生徒が失敗して挫折を味わう。
否定すると、多数の生徒が救われるが、10人に1人とか20人に1人しかいない才能の持ち主が育たない。

より数多くの生徒を救うのが「善意」だ。
だが、それで本当に良いのか?
結局、本当に才能のある生徒は、教師に反して独学で育つしかないのか?
それがジレンマだ。

| | Comments (3) | TrackBack (0)

« November 2012 | Main | January 2013 »