Tech Sketch Bucket of Technical Chips by TIS Inc.

JavaScriptを使った簡易ツール作成のススメ

Pocket

はじめに

技術的に「濃い」記事が多いTech-sketchですが、逆にあっさり系の記事が不足しているため、気軽に読める記事を書いてみようと思います。
JavaScriptを使ってブラウザ上で動く簡易ツールを作ってみませんか?

簡易ツールを作りたい!

同じツールを実現する場合でも、幾つかの方法があります。

Point Cloud Libraryからkinectを利用してみる

Pocket

Point Cloud Library(PCL)

Point Cloud Library は3D空間上の点の集合に対して、解析、操作、保存、表示などを提供するBSDライセンスのライブラリです。
PCLを利用してkinectの入力を取り扱うことで「現実空間」を「コンピュータ上の3次元の空間」に取り込むことが可能になります。
これによって以下の動画のように、通常のカメラ画像の情報に追加する形で、kinectからのdepthセンサの情報を利用することで特定の画素までの距離(depth)もリアルタイムに表現可能になります。


今回の記事ではPCLの紹介と、上記の動画を撮影するのに利用したPCLに付随するサンプルアプリケーションを動作させる手順の説明をします。

AWS + Rails3.2.1 + jasmine + phantomjs + coffee scriptを使ってCUIでJavaScriptの自動テスト

Pocket

はじめに

TDDは大分一般的になってきたように思いますが、テストしやすい項目、しづらい項目が混在しているのはご存知かと思います。
今回の記事ではテストしづらい物とされてきたJavaScriptについて、rspecとほぼ同じ手順でテスト出来るようになるまでの手順を書いていきます。この記事では、実際に実行したコマンドをほぼ全て網羅しておりますので、順に実行していけば簡単にテスト環境を作ることが出来ると思います。

本来の目的とは違いますが、部分部分を切り出せば「node.jsのインストール手順書」、「ruby 1.9.3のインストール手順書」、「Jasmineのインストール手順書」としても使えるかと思います。

それでは、インスタンスを立ち上げる所からスタートです。

体を動かすロボット操作(ジェスチャ入力チーム:OpenNI + Xtion Pro Live )

Pocket

人の動きに合わせてモノが動いたら楽しい。

Kinectを利用して動作するものを考えたときに、チーム内で人の動きに合わせて動いたら楽しいよね。

やろうか

ということで、1泊2日で動くものを作るを目標にして2/24にチームの開発合宿を実施しました。
今回はその合宿で作った成果をここにまとめます。

つくってみます

本記事では冒頭の通り、「体の動きに合わせて物を動かす」ことを目標に2回の記事に分けて1つのアプリケーションを作っていきます。
まず、全体的なアーキテクチャを以下のように設計しました。

gesture-robot.png

画像内の左右に対応した以下の2チームに分かれて実装にかかります。

ジェスチャ入力チーム

  1. 人間の動きを検出して
  2. 画面表示しつつ、
  3. 条件を満たしたときに対応したRESTのリクエストを送付

ロボ制御チーム

  1. RESTのリクエストを元にロボット(LEGO MINDSTORMS NXT 2.0)を制御

まずはジェスチャ入力チームの記事です。

体を動かすロボット操作(ロボ制御チーム:Ruby + LEGO MINDSTORMS NXT 2.0)

Pocket

人の動きに合わせてモノが動いたら楽しい。

2011年/2012年のGartner hype cycleにもあるように、「キーボード・マウス・ディスプレイ」という三種の神器を越えた Natural User Interface が今注目を集めています。「ならば、作ってみっか!」という精神の元、2012/2/24に行なった「1泊2日で動くものを作るぞ!チーム開発合宿」にて

Kinect等を用いて人間の動きを検出し、その動作に従ってロボットを動かす

という仕組みを、 Xtion Pro Live を用いた ジェスチャ入力チーム(クライアント側)LEGO MINDSTORMS NXT 2.0 を用いた ロボ制御チーム(サーバ側) の2チームに分かれて作ってみました。

ジェスチャ入力チーム(クライアント側)

  1. 人間の動きを検出して
  2. 画面表示しつつ、
  3. 条件を満たしたときに対応したRESTのリクエストを送付

ロボ制御チーム(サーバ側)

  1. RESTのリクエストを元にロボット(LEGO MINDSTORMS NXT 2.0)を制御

ここでは後半の、ロボ制御チームの処理概要について解説します。

なお LEGO MINDSTORMS NXT 2.0 は、こんな感じで動きます。


右手の先に針が取り付けてあります。リモート制御で風船を割るのが今回の目標です。