Smile Engineering blog ( スマイルエンジニアリング・ブログ )

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

アシスト

2015-05-27 09:30:00 | 最新技術動向展開
今回紹介したいのは、車に関する技術の話題です。

最近の自動車メーカーの動向として、自動ブレーキのような
運転をアシストする機能の開発に力を入れているようです。

車の運転好きな私としては、過剰に運転をアシストする機能は好みませんので、
動力をアシストする機能を紹介したいと思います。

現在ではかなり普及してきているハイブリッドカーですが、
その動力アシスト機能は大きく3つに分類できます。

①パラレル方式
 基本はエンジンで走行しますが、大きな力が必要なときは
 モーターが動力アシストします。
 力が必要でないときは、モーターを発電機として充電します。
 イメージとして、電動アシスト付き自転車が近いです。

②スプリット方式(シリーズ・パラレル方式)
 発進時はモーターのみで走行しますが、速度が上がってくると
 エンジンとモーターを効率よく使い分けて走行します。
 複雑な制御をしていますので、モーターと発電機は別々です。
 恐らく流通している数は一番多いです。

③シリーズ方式
 モーターの力のみで走行します。
 エンジンの動力は全て発電機へ入力され、走行には利用されません。
 発電機を積んだ電気自動車です。
 モーターと発電機、バッテリー容量が大きいものを要求されるため、
 あまり採用されていないようです。

それぞれ性格の異なる動力アシスト機能ですが、
一番アシストしたいタイミングは発進時という事が判ります。
やはり、発進時が最も燃料を消費するからでしょう。


一般車のアシストも面白いのですが、
レーシングカーのアシスト機能も方向性が違うので
少しだけ触れておきたいと思います。

その昔、1990年代のF1では「オーバーテイクボタン」というのが付いていて、
押している間、燃料に添加剤を混ぜる事によりパワーが上がる仕組みがありました。
が、公式な発表など無かったので、本当に付いていたかは定かではありません。

数年前の状況では、ブレーキ時に蓄電した電気を使い
モーターによるアシストがあったと思います。

そして最近ではインディーカーが好きでよく見ていますが、
やはり「プッシュトゥパス」というアシストシステムが付いています。

モーターや燃料添加剤によるアシストではなく、
ターボチャージャーの過給圧とエンジン回転数の引き上げによるアシストです。
厳密にはアシストと呼ぶのは苦しいかもしれませんが、
一時的にパワーを追加するという見解で大目に見てください・・・


ここで業務に役立つ発想ができないか考えてみました。

発進時のアシストが一番効果的であることを踏まえ、
若い人が初めての作業をする際、周囲からアシストする事が
組織にとって効果が高いのではないかという考えに至りました。
その際は、やり方とタイミングが大事だという事を再認識しました。

そして、最後に最新技術っぽい事を思いつきましたが、
近い将来、一般車のアシスト機能とレーシングカーのアシスト機能を組み合わせた
画期的な車が世に出てくるかも知れませんね。


monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業
コメント

HTML5のお勉強 第2回 ~WebWorkers~

2015-05-20 13:21:41 | 最新技術動向展開
ちょっとずつ色々な話が出てきているWindows 10ですが、
その機能の中に「Universal Windows Platform(UWP)」というものがあるそうですね。
AndroidやiOSを含む様々な端末向けに開発されたアプリケーションを、
出来るだけ手を加えずにWindows上で動作させることを目的としています。

その中にはHTML+CSS+JavaScriptで記述されたWebアプリケーションも含まれていました。
スマートフォンのネイティブアプリをHTML+CSS+JavaScriptで作成することが
ある種の流行となっていた気がしますが、とうとうWindowsでも標準でサポートするようです。
そんな勢いに乗っているWeb技術ですので、知っていればきっと役に立つと思います。


さて、今回はWebWorkersをご紹介します。
JavaScriptでは旧来から「シングルスレッド」であるがゆえに出来ないことが数多くありました。
時間のかかる複雑な計算をしたり、サイズの大きなファイルを操作したり…。
こういった処理をするたびに画面が固まり、
「応答のないスクリプト」の警告メッセージを見た方は大勢いらっしゃると思います。

そういった状況に対応すべく、WebWorkersというものが登場しました。
端的に申しますと、JavaScriptのマルチスレッド化です。
しかも、WebWorkersは他の言語におけるマルチスレッドと比較して非常に扱いやすく、
デッドロックのような問題も発生しづらい堅牢な作りとなっています。


WebWorkersは概ね下記のような形で使用します。


  ◆UIスレッド側◆

  // ワーカースレッドを生成する。
  var worker = new Worker("JSファイル名またはURL");

  // ワーカースレッドからのデータを受け取る。
  var worker.onmessage = function(message) {
    // 「message.data」にワーカースレッドから渡されたデータが格納される。
  };

  // ワーカースレッドへデータを送る。
  worker.postMessage(/* 送りたいデータ(文字列かJSONオブジェクト) */);


  ◆ワーカースレッド側◆

  // UIスレッドからデータを受け取る。
  self.onmessage(message) {
    // 「message.data」にUIスレッドから渡されたデータが格納される。

    // 好きな処理をする。
    // ここで行う処理は画面とは無関係に実行されるため、
    // 画面が固まったりすることはない。

    // UIスレッドへデータを送る。
    self.postMessage(/* 送りたいデータ */);
  }


似たような文字の羅列で読みにくいかと思いますが、
WebWorkersの基本的な使い方は上記の通り30行にも満たない
とてもシンプルなものとなっています。

それぞれ少しだけ解説します。



■WebWorkersの生成

  ◆UIスレッド側◆
  // ワーカースレッドを生成する。
  var worker = new Worker("JSファイル名またはURL");

ここでWebWorkersの生成を行っています。
引数のJSファイルはWebWorkersを生成(new Worker)した関数が
終了した後に別スレッドで読み込みを開始するようです。

基本的にはWebWorkers用のJavaScriptファイルを用意してそのパスを引数として渡しますが、
Data URI Schemeを利用することでWebWorkersの処理内容を動的に生成することもできます。



■UIスレッドとワーカースレッド間の通信

  ◆UIスレッド側◆
  // ワーカースレッドからのデータを受け取る。
  var worker.onmessage = function(message) {
    // 「message.data」にワーカースレッドから渡されたデータが格納される。
  };

  // ワーカースレッドへデータを送る。
  worker.postMessage(/* 送りたいデータ */);

  ◆ワーカースレッド側◆
  // UIスレッドからデータを受け取る。
  self.onmessage(message) {
    // 「message.data」にUIスレッドから渡されたデータが格納される。

    // UIスレッドへデータを送る。
    self.postMessage(/* 送りたいデータ */);
  }

どちらのスレッドからでも、postMessageメソッドを呼ぶことによって
もう一方のスレッドへデータを送ることができます。
この時に文字列かJSONオブジェクトを1つだけ引数として渡すことができます。

データを受け取るには、onmassageハンドラやaddEventListenerなどで
イベント発生時に呼ばれる関数を設定しておく必要があります。



■いくつかの注意点

・ワーカースレッド内ではDOM操作が出来ません。
 ワーカースレッドは完全に画面から切り離されているため、
 UIスレッドで使用できるwindowやDOM要素を操作することができません。

・スレッド間の通信で渡すデータは複製したものが渡されています。
 サイズの大きなオブジェクトを渡す場合、相応の時間がかかります。

 「Transferable Objects」を利用することで、
 データを複製することなく高速に渡すことも可能です。
 ただし、Transferable Objectsで利用できるデータは今のところ
 「Uint8Array」などのArrayBufferとMessagePortの2つだけのようです。



簡単な使用例も作成してみました。
ファイルをドラッグ&ドロップすることで、ZIP圧縮してくれます。
※大量のメモリを消費しますので、~10MB程度のファイルに留めてください。

http://s.codepen.io/jsp-t/debug/mJErYv
(ソースはこちら: http://codepen.io/jsp-t/pen/mJErYv )



monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業
コメント