2013年7月31日水曜日

Raspberry Pi で Node.js

 AmazonでInterfaceの9月号を買おうと思って、表紙を見たら、HTML5でIO~みたいなことが書いてありました。さっそくポチったのですが、明日以降雑誌が届く前に、関連しそうなところを予習してみようと思います。今回は、ネットなどでなんか聞いたことがある「Node.js」というWebサーバ?をRaspberry Piで試してみようと思います。

 まず、ここを参考に Node.js をインストール。もっと新しいバージョンが入手できそうですが、実績(安全)を見て、サイトの通りのバージョンを選択しました。

   wget http://nodejs.org/dist/v0.8.11/node-v0.8.11.tar.gz
   tar -zxf node-v0.8.11.tar.gz
   cd node-v0.8.11
   ./configure
   make
   sudo make install

で、インストール。make には少し時間がかかります。

   node -v

で、バージョン確認して、インストール成功を確認。

   npm -v

で、パッケージマネージャもバージョン確認。
 ネットで「node.js入門」とかで検索すると、ほぼ同じサンプルが頻繁に見つかります。例によって node版Hello Worldです。helloworld.jsというファイル名で以下を作成。

   var sys = require('sys');
   var http = require('http');
   var server = http.createServer(function (request, response) {
       response.writeHead(200, {'Content-Type': 'text/plain'});
       response.write('Hello World!!\n');
       response.end();
   }).listen(8124);
   sys.log('Server running at http://127.0.0.1:8124/');

 nodeを起動して、

   node helloworld.js

Raspberry Piローカルからなら、

   http://localhost(または、127.0.0.1):8124/

他PCからなら

   http://Raspberry Piのアドレス:8124/

で、


となることを確認。

つづいて、入門サイトなどにも載っている connect と WebSocket と expressフレームワークは最低限使いそうなのでインストール。

   npm install connect
   npm install socket.io
   npm install express

いくつかのサイトを参考にしつつ、 express のスケルトンを適当に生成してみる。

   node node_modules/express/bin/express exptest
   cd exptest
   npm install

依存ファイルがインストールされて、

   node app.js

とすると、「Express server listening on port 3000」と表示されるので、

   http://localhost (あるいはRaspberry Piのアドレス):3000/

へアクセスすると


 こんな感じで一応動作を確認。色々な方が公開してくれている情報があった(感謝!)ので、それらを断片的に拾い集めてきて、どうにか動作はさせられました。

 続きは、AmazonからInterfaceが届いてから。おそらく、WebからのLチカの方法とかが書かれていると思うので、それを参考にして、「nodeでLチカ」を試してみたいと思います。

2013年7月26日金曜日

Raspberry Pi の Cameraモジュールが届きました。

 RSから荷物が届いていました。


 最近頼んだ記憶がなかったので、開けてみたところ、


 あっ、Raspberry Pi のカメラモジュールだ。思ったより早く届きました。9月くらいかと思っていたんだけど。と、いうわけで、今日のガラクタはRaspberry Pi の カメラモジュールになります。



 早速、公式サイト等を参考にお試しを開始です。まずは、取り付け。


 EthernetとHDMIコネクタの間にあるフレキシブルケーブルのコネクタに接続します。基板のフレキシブルコネクタの枠(濃い茶色)の部分を持って引っ張りあげるとケーブルが差し込める状態になるので、上の写真のような方向(ケーブルの印刷面、端が青色の面をEthernet側へ向けて)で差し込んで、引っ張りあげた枠を元に押し込むとケーブルが固定されます。

 次にドライバのインストールですが、最新のRaspbian ではカメラドライバが組み込まれているそうです。なので、

   sudo apt-get update

   sudo apt-get upgrade

で更新をかけてやります。次に

   sudo raspi-config

で設定画面を開いて、カメラをEnableに設定します。



 再起動を促されるので、再起動します。

 カメラを利用するためのコマンドは、静止画が raspistill で、動画が raspivid です。コマンドオプションは、コマンドのみを打つとだーっと説明が表示されるので、 raspistill | less とか raspivid | less で表示させて確認できます。
 ためしに、静止画をとってみました。

   raspistill -o test.jpg


 画像がぶれているのは、カメラのせいではなく、手で持って撮影したんですが、昨夜のアルコールが切れて手が震えはじめていたためです・・・。重さもないので手で持っての撮影はぶれてしまって厳しいです。マウントするためのベースみたいのを作ってあげて、ミニ三脚とかに固定できるようにしないとダメかも。

参考までに動画をとりたいときは

   raspvid -o test.h264 -t 10000

とすると、10秒の動画を撮影するとのこと。

 あと、はじめに撮影した時、やけに写真が黄色みがかっているのでおかしいと思ってよく見たら、カメラのレンズに保護用の青いフィルムが貼ってありました・・・。って、気が付かないのは自分だけだと思うけど・・・。


2013年7月15日月曜日

エンジニア社のポケットベンダーを使ってみた。

 今回のがらくたは、エンジニア社のポケットベンダーです。


 Amazonでポチッったものです。実は、HOZANのK-130もあるんですが、作業場所を確保して引っ張り出してきてくるのが結構面倒だったりします。サーボブラケットくらいの小さなものならこっちのほうが便利そうだったので、入手してみました。K-130だとフチ付きの曲げや箱曲げもできますが、こちらは50mm幅までの平板を曲げられます。
 曲げ部分を両側から工具の歯で挟み込んで、ぐニュっと手で曲げていきます。


 自分の使い道ではサーボブラケットの強度もそれほど必要ないので、単純にコの字に曲げられれば十分です。通常は、折り曲げの前に穴あけをしますが、今回はお試しなので、先に折り曲げをしました。あとで現物合わせで穴を開けてみようと思います。
 ちなみに今回の図面は・・・


 ひどすぎ・・・(笑)。図面じゃなくて落書きですが・・・。今回は手持ちでB5くらいの大きさの1mm厚のアルミ板があったので、そこから20mm×140mmの板を切り出しましたが、20mm幅で1.5mm厚くらいの長細い帯状の部材がホームセンターで売っていれば、それを必要な長さに切って使うのが切断の手間が少なくて便利そうです。今度、ホームセンターで探してみよう。






LEGO TECHNIC 9398 4WDクローラ の PF赤外線受信機 と PFMate

 中断していたウニモグが終わったので、Amazonから届いて積みレゴ状態になっていた LEGO TECHNIC 9398 4WDクローラ に手を付けました。


 ウニモグに負けない大きなパッケージですが、持った時の重さ(身の詰まり方)ではウニモグのほうが圧倒的に上でした。開けてみたところ、


 かなりの部品点数ですが、ウニモグを見てしまっているので、全然大丈夫。実際、ウニモグに比べるとパーツ数はかなり少ないと思います。ただ、今回、4WDクローラを選んだ最大の理由は「赤外線リモコン」機能です。なんと、LEGOがラジコン(赤外線リモコンですが)みたいに操作できちゃうんです。すげぇ~。
 早速、組立開始。


 車体フレーム中央に設置されたモータは、サーボモータです。TECHNICシリーズでサーボモータはあまりない(はじめて?)じゃないでしょうか?Mindstormsのモータはサーボ(エンコーダ付き)の高機能モータですが、TECHNICシリーズのPower Function系では珍しいとおもいます。Mindstormsのエンコーダ付き回転型サーボモータではなく、ラジコンのサーボに相当する動きのモータです。



 前後の車輪を保持・駆動する部分は中央とはユニバーサルジョイントとボールジョイントのような関節で結合されます。車輪への動力伝達部にもユニバーサルジョイントが使用されています。



 左右輪の間には例によってディファレンシャルギアが配置され、このモデルでは前後の駆動輪それぞれにモータが配置されています。


 骨組み部分を作りこんで、電池ボックスを収めたところ。


タイヤを付けて、下半分(走行機構部分)が出来上がりました。この状態で、リモコンを使っての走行が可能です。




 続けて、上半分、カバーというか車体の見た目部分をサクッと作って、


 取り付け、



 なかなか、いい感じ。ウニモグと並べてみます。



 赤外線リモコンはこんな感じ。


 関係ないけど、アイアンマンのミニフィグが可愛かったので、つい、アイアンマンのミニフィグが含まれたアベンジャーズシリーズのレゴを買ってしまった・・・。マスクも開いて、トニー・スタークの顔も見れます。


 試しに動かしてみたところ。


 レゴ、すごすぎ。

 で、今回の目的のメイン、赤外線リモコンと受信機、モータです。


 バッテリーボックス(電源)とモータの間に挟むように配線します。


 2chのモータを制御できます。各chは動きは同じになりますが、複数のモータをつなぐことが可能です。また、赤外線のchが4chスイッチで切り替えられるようになっているので、IR Receiverを同時に4台、計8ch分のモータが制御できることになります。


 単純に接続して、付属のリモコンで操作したところ。


 今回は、この赤外線リモコン受信機に Mindsensors社の PFMate というのを取り付けて、試してみました。


 要は、赤外線リモコン(送信機)部分をNXTブリックからコントロールできるようにしたものを受信機にダイレクトに載せてしまい、PFモータをプログラムで制御できるようにしてしまおうというものです。


 Mindsensors社ではNXCやROBOTC用等の各種ライブラリも用意してくれています。今回は、ROBOTCを使って試してみました。


 また、合わせてNXShield + Arduino Mega でも試してみました。




 回転数や位置は取れませんが、NXTモータに比べて小型で形状的にも(NXTモータよりは)扱いやすいので、色々と使い道があるかもしれません。
 なお、次期EV3には従来のNXTモータに相当するLモータともう1つ、サイズの小さいMモータというのが用意されるようです。



 従来のNXTブリックでもこのMモータが使えるような情報もあるので、比較的小型でなおかつエンコーダ付きのサーボモータが入手できるかもしれません。






2013年7月13日土曜日

LEGO TECHNIC U400 ウニモグ の続きと ルンバのお掃除

 さて、先日、途中まで組んだところで、強烈な肩こりに襲われてしまい、作業を中断していたLEGO TECHNIC U400 ウニモグ の続きを組み立てました。


 リアに取り付けるクレーンの組み立ててです。エアシリンダーの伸縮でクレーンのアームを動かせるようになっています。


 アーム部に2つ、グリップ部に1つ、エアシリンダー(黄色)があり、三本のエアパイプがクレーンのの根本のところに伸びて、スイッチ(エアの切り替え)に接続されます。


 クレーンを車体後部に取り付けたところ。


 なかなか、かっこいいです。エアーのスイッチで操作するので、モータタイプよりも反応が早いです。ただ、狙ったものをつかむのが動きが早いんで、意外と難しい。


 次に、フロント部に取り付けるウィンチです。ちゃんと、モータからの駆動で糸巻きを回転させてウィンチの動作をします。無理な力が掛かり過ぎると、クラッチ付きギア(白い厚めのギア)がスリップするようになっています。


 フロント部に取り付けたところ。


 これで、途中、だいぶ間を開けてしまいましたが、ウニモグ完成です。
 さて、実は、このあとにすでに、LEGO TECHNIC 4WDクローラ を作り始めようと準備済みだったりします。
 しかし、ここで、ちょっと別の作業を。

 我が家のルンバくんが使い始めて大分たつので、そろそろブラシ類の部品を交換しようと思います。


 といっても、ユニット単位で簡単に交換できるようになっていて、普段は、ブラシ類を外して掃除したりするんですが、今回はそれらを新品に交換しました。部屋のカドのゴミを書き出すブラシ(左上の三方向に細いブラシがでているもの)だけは交換にドライバが必要でした。
 いつものように、アルコールで拭いて、完了。
 ルンバのお手入れは、ロボット担当?の自分の仕事となっております。
 実はルンバにはROIというシリアルポートでの通信で制御できる機能もある(700シリーズはハンドルのところに丸いコネクタがある)のですが、メーカ保証を受けられなくなるので、今は我慢しています。この子が引退したときには、ROIを使って遊んであげようと思っています。

2013年7月5日金曜日

LEGO Mindstorms NXT で全方向移動ロボット

 今回は、LEGOネタです。LEGO Mindstorms NXTで全方向移動ロボットに挑戦してみました。今までTECHNICシリーズとNXTもマニュアルの作例しか試していませんでしたが、今回は素から自分で考えて組むのに初挑戦です。
 全方向移動するためにオムニホイールを3つ使っています。三方向にオムニホイールを配置するために、正三角形か六角形を構成して、その頂点か辺の中点からアームを出して、その先にモータ+オムニホイールを取り付けるというようなイメージはすぐに思い浮かんだんですが、実際、組んでみると、骨組みがふにゃふにゃで、とても、モータやバッテリを積んだNXTブリックを載せられません。で、結果的に出来上がったのは、こんな感じ。


 オムニホイールです。


 で、ふにゃふにゃ問題は


 三角形のフレームを180°回転させて逆向きに重ねあわせて、モータを支えるアームも縦方向に二本並行(+モータのねじれを抑えるために補助としてもう一本)の構成にすることで十分な剛性というか対ふにゃふにゃ感が確保できました。ただ、アームの先まではいいのですが、先に取り付けたモータ部とアーム部のぐらつきがどうしても抑えきれず、どうしてもNXTブリックの重みでオムニホイールが微妙にハの字型になってしまっています。



 今回は妥協しましたが、NXTモータを縦に使っているので、上側にも張りを突っ張る構造にしてやれば改善できるかもしれません。または、そもそも、NXTモータは中心に配置して、シャフトやギアで動力を持っていくのがLEGO流なのかもしれません。

 とりあえず、動かしてみたところ。センサ類はまだ搭載していないので、事前にプログラムしたシーケンスで動いているだけです。


 こういうのが、図面もひかず、ボール盤もバンドソーも使わずに、パーツの現物合わせで組めちゃうところがLEGOのすごいところです。