2009-03-12[n年前へ]
■新幹線のアクティブ制御の設計解析手法
以前「鉄道車両の設計と制御におけるシミュレーション技術」という川崎重工の技術紹介を聞いたことがある。これが、実に様々な点で面白かった。
新幹線の振動/揺れが気になることが多かったので、たとえばこういった記事をはじめとして、新幹線の振動抑制制御について、とても気になっていた。特に血液中の鉄分が多い方、いいかえれば、鉄っちゃん(鉄道おたく)ではないと思うのだが、新幹線の制御をどのような考え方で、どのようなやり方で設計/開発を行っているのか
に興味があった。
新幹線の振動抑制に関しては、
- 台車の左右加速度を計測する
- 加速度をフーリエ変換しパワースペクトル密度にする
- 人間の振動に対する各周波数に対する感度をかけ、さらに積分することで「乗り心地」指数(レベル)を算出する
ちなみに、このような「乗り心地」評価値を用いながら、客車を支える空気バネの電磁弁を開閉することでセミアクティブ制御したり、客車下中央に位置する動揺防止制御用アクチュエータでアクティブ制御を行っている、という。
ちなみに、加速度センサからのFB制御だけでなく、ATCの地点情報を用いてFF制御を行っている、というあたりも面白い。…鉄道もなかなか面白い。鉄っちゃんの気持ちが、少しわかるような気がしてきた。
この講演の面白さ/興味深さは「(シミュレーション)ソフトウェア開発/管理における課題」「異種技術分野のソルバ/ツール連携」に関する現状の問題を、講演者が整理した上で、聴衆になげかけた部分にもあった。実に勉強になった。
2009-05-19[n年前へ]
■Microsoft、「魔法の杖」の特許を出願
もちろん、「魔法」といっても、実際はビデオカメラ、加速度計などの速度センサ、位置および方位センサといった各種コントローラと複数の通信技術によって実現するものだ。
5月第3週の後半にその存在が明らかになった特許申請書の中で、Microsoft は特許申請する技術を実際に「Magic Wand (魔法使いの杖)」と呼んでいる。申請書の要約には次のように記されている。
「同アーキテクチャは、その全体もしくは一部を、杖またはそれに類似した形状の筐体内に収納する。同アーキテクチャは、集合したセンサーの中から1つ以上のセンサーを利用して、運動方向、すなわち杖と連動した身振りを測定する。さらに、その運動方向に基づいて環境要素の状態を更新するよう指示を出すことができる」
2009-12-02[n年前へ]
■Ruby版 Thinkpad 加速度センサ類取得クラスを書きました
Lenovo(旧IBM)のノートPC ThinkPad
にはハードディスク保護を目的として、加速度センサが付いています。SSDを搭載している機種でも、(その他のハードウェアは共通化されているからだろうと思いますが)やはり加速度センサが付いているということです。
以前、C++でThinkpad加速度センサ類取得クラスを作りましたが(このC++コードを眺めてみると、不要な部分が残っていたので、その点については後で修正します)、今回はRubyでそのクラスを組んでみました。作成したRubyソースは、ここに置きました(accelerometer.rb)。ソース最下部には、使用方法もコメントアウトした上で付けておきました。また、このバージョンはC++バージョン同様、最近のThinkpadでも動く実装になっています。
読みやすさのために改行を適当に入れたソースは、下記のようになります。
# jun hirabayashi jun@hirax.net 2009.12.02
class Accelerometer
require 'Win32API'
attr_accessor :x
attr_accessor :y
attr_accessor :temperature
attr_accessor :presentState
def initialize
begin
@sensorFunctionAPI=Win32API.new("Sensor",
"ShockproofGetAccelerometerData", ['P'], 'V')
@buffer=' '*17
if @sensorFunctionAPI.Call(@buffer)
parse(@buffer)
@offsetX=-@latestRawAccelDataX.to_i;
@offsetY=-@latestRawAccelDataY.to_i;
end
rescue
'We have some problem.'
exit!
end
end
def parse(result)
@presentState,@latestRawAccelDataX,@latestRawAccelDataY,
@latestAccelDataX,@atestAccelDataY,@temperature,
@atestZeroG_X,@atestZeroG_Y=result.unpack("iSSSSCSS")
end
def getAccelerometerData
@sensorFunctionAPI.Call(@buffer)
parse(@buffer)
@x=@latestRawAccelDataX.to_i+@offsetX.to_i;
@y=@latestRawAccelDataY.to_i+@offsetY.to_i;
return [@x,@y]
end
end
このRubyクラスを使った加速度取得スクリプト例は、下記のようになります。ちなみに、Xが(ノートPCに向かって)左右方向で、Yが奥行方向になります。これで、1秒おきにThinkpadの傾斜をコンソール出力します。
require 'accelerometer'
accelerometer=Accelerometer.new
10.times{ |i|
puts accelerometer.getAccelerometerData.join(',')
sleep 1
}
MA5授賞式で面白いものを作っている開発者を見たせいか、何か色々作ってみたくなります。4年ほど前には、この加速度センサテクニックを使って「「未来の立体ディスプレイ」を作る」とか色々作ったような覚えがありますが、まだまだ色々な応用がありそうな気がしてきました。というわけで、まずは準備のために、今日はRuby版 Thinkpad 加速度センサ類取得クラスを書いてみました。
2009-12-05[n年前へ]
■Thinkpad 加速度センサ+RubyによるExcel3次元グラフ動画
「Thinkpad 加速度センサでExcel3次元グラフを未来のディスプレイ風にしよう」を操作しているようすを、ケータイのカメラで撮影してみました。それが、下の動画になります。Ruby版 Thinkpad 加速度センサ類取得クラスを使い、Excel 2007のグラフを視点を操作している、という具合の動画です。パースペクティブを適切につけておくと、上下方向の視線移動に関してはかなり自然に眺めることができます。(この動画実行のためのRubyソースは上記記事を参照してください)
Excelの三次元グラフが、ElevationとRotationという、天頂近くで精度が低下しやすい座標指定方式なのと、Thinkpadの加速度センサが2軸方式で、鉛直線中心の回転を取得することができなかったりするところが(東芝のPCなどでは3軸取得が可能だったりするのですが)、「少しの変さ」をかもしだしていたりしますが、そこはそれ、Microsoft ExcelのグラフをノートPCの方向を変えると、それに応じた色々な方向から眺めることができる、というのは何だか面白い、とは思いませんか?
2009-12-06[n年前へ]
■Thinkpad加速度センサ取得用C++クラスの手直しをしました
Lenovo(IBM) Thinkpad加速度センサ取得用C++クラス(関連記事・Thinkpad加速度センサ取得用C++クラス/新しいThinkpad にも対応した加速度センサ値取得プログラム)を少し手直ししておきました。動作は全く変わりませんが前回の修正の際に不要な部分が残っていたので、その点について直しました。
Thinkpad加速度センサ取得用C++クラスをまとめたヘッダファイルソース(Sensordll.h)、および、使用サンプルソース・バイナリ(sample.cpp・sample.exe)は、ここに置いておきました(古いバージョンは、サブディレクトリに置いてあります)。
サンプル・アプリケーション例では、よく意味がわらないままに、"Temprature"も出力するようにしてあります。
sample.exe 1000 10という風にコマンドラインからアプリケーションを実行すると、
0=x, 0=y,35=temp. 0=x, 0=y,35=temp. 0=x, 0=y,35=temp. 0=x, 0=y,35=temp. 1=x, 1=y,35=temp. -16=x, -3=y,35=temp. -1=x, -1=y,35=temp.とった具合に左右方向の傾斜と奥行き方向の傾斜(とtemprature)を出力します。



