2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« 2013年4月 | トップページ | 2013年6月 »

2013年5月

2013年5月18日 (土)

D6T-44L-06でサーモグラフィを作る

花岡ちゃんのウィークエンド

前回動作を確認した非接触温度センサアレイD6T-44L-06を使って、温度を色で表示するサーモグラフィの実験をしてみます。パソコン側のソフトは、スイッチサイエンスのこちらのブログを参考にしてProcessingで作ってみました。実験回路は前回と同じです。

下が実験の動画で、センサは黄色いバイスに挟んであります。MacBookの画面に表示されているのが、「サーモグラフィ」です。人間やネコの体温に反応しているのがわかると思います。

今回の実験では、人間や動物を発見することを目的としたので、センサから気温(センサから最初に読み出されるデータ)を含む17点の温度データを読み込み、気温から1℃低い温度を起点として、上下1℃を0.1℃毎に色分けして表示しています。この方式だと、多少室温が変化しても、温度の高い物体を安定に識別出来ます。この辺はプラクティカルに決めたので、使用する環境に合わせて調整が必要だと思います。

このアルゴリズムは大変敏感で、センサが室温で安定していないと表示に影響が出ます。実験する前に、通電した状態で10分くらい放置すると、動作が安定します。また、実験中、エアコンの冷風などが直接センサに当らないように気をつけます。手持ちの機械に使うときは、手の熱がセンサに伝わらないよう工夫する必要があるようです。

PIC24側のソフトはこれです。前回のソフトとはパソコンへ送信するデータのフォーマットが異なるだけです。約100ms周期でカンマ区切りの温度データを連続的にパソコンへ送ります。
「pic24f_test_7.zip」をダウンロード

Processingのコードはこれです。今回はMacOS版で製作しましたが、Windowsでも動くはずです。
「largeimage.pde」をダウンロード
このコードはシリアルポート番号を自分のシステムに合わせる必要があります。起動すると、ポートのリストを表示するので、ソースコードの pn = Serial.list()[4];の4を使いたいポートの番号に置き換えます。
なお、このソフトは時々起動時にハングアップすることがあります。原因はわかりませんでしたが、起動し直せばよいので、このままアップしておきます。

2013年5月10日 (金)

非接触温度センサアレイ・D6T-44L-06を試す

花岡ちゃんのウィークエンド

久々のウィークエンド、今回は非接触温度センサアレイ・D6T-44L-06を試してみます。このカメラのようなセンサは視野を4X4のマトリックスに分割し、それぞれのエリアの平均温度を計測します。分解能は低いですが、サーモグラフィのような使い方が出来ます。
Sesorup

このセンサを使うと、室内の人間や動物の位置を検出することが出来そうです。以前からサーモパイルで実験をしていたのですが、光学系の製作が難しく、思ったようなセンサが作れませんでした。これは光学系も組み込まれている二次元センサですから、その心配はありません。カメラのように取り扱うことが出来ます。しかも、処理系内蔵で摂氏温度がダイレクトに読み取れます。アマチュアにとっては申し分なしです。惜しむらくは少々お値段が高いことでしょうか。今回はスイッチサイエンスから専用ハーネスと一緒に購入しました。

今回実験した回路図です。
マイコンはおなじみのPIC24FJ64GA002、秋月で購入したものです。TX,RXはMAX232などのレベルコンバータを介してパソコンのシリアルポートと接続します。
マイコンの電源は3.3Vで、I2Cバスはこの電源にプルアップします。D6T-44L-06の電源は5Vです。これの精度はあまり気にしなくてもいいようです。この実験ではエネループ4本で4.8V程度を供給しています。

I2Cバスの電圧レベルは3.3V(4.7Kでプルアップ)で、センサの電源は5V。本来ならそのまま接続は具合が悪そうですが… まあなんとかなるだろうということで、何もせずに接続しています。問題なく動作していますが、あくまでも「アマチュア仕様」ですのでご注意ください。

センサは、このようにダイソーで買ったプラスチックの万力に軽く挿んで固定しました。
Dscn2568

ネット上にはこのセンサの詳細な情報は無いようです。スイッチサイエンスのサイトにはアルディーノのサンプルがありますが、アルディーノは使ったことが無いので、あまり参考になりません。ようやくDigiKeyの通販ページで、一般的なサンプルプログラムを見つけました。今回はこれを下敷きにしています。

ソフトはMPLAB Xで作成しました。プロジェクトファイルを参考のため公開します。なお、このソースには、いままで実験してきた全てのI2Cドライブ関数が含まれています。
「pic24f_test_6.zip」をダウンロード

ソースコードを見てもらえば一目瞭然でしょう。センサから読み出した温度データを、4X4のマトリックスの形で、連続的にシリアル送信(9600bps)するだけの簡単なプログラムです。
センサからは35バイトのデータを読み出します。温度データは2バイトで、最初の2バイトはセンサ自体の温度か、視野の平均の温度のようです。調べた範囲ではわかりませんでした。その後32バイトがマトリックスの温度データです。最後の1バイトは、どうもCRCエラー訂正コードのようなので、今回は無視しています。
各温度データは、0.1度単位の摂氏温度のようです。つまり、231は23.1℃ということになります。データシートでは温度の分解能が0.14℃となっているので、0.1度の分解能に丸められているようです。なお、測定温度範囲は5から50℃です。

Dscn2565
上の写真のように、センサから見て左側に手をかざした場合、シリアルターミナルにはこんな風に表示されます。

 241 237 238 236
 278 242 235 226
 285 241 229 224
 236 235 234 233

センサが手のひらの温度を感じて、左端の2行目、3行目の数値が大きくなっているのがわかると思います。

これを応用して簡易サーモグラフィを製作してみました。こちらです。

2013年5月 4日 (土)

roombaをゲームパッドで動かすパッケージを作る(3)

ROSさんお手やわらかに:ROS入門編

roombaの位置と姿勢をrvizで視覚化する。rvizは移動ロボットのUIツールで、ロボットの位置や姿勢、カメラの視界、センサーの読み取り結果などを視覚化したり、移動経路の指示を出したりすることができるらしい。移動ロボット開発の強力なツールとなるようだ。

まず前回作ったrbjoy.pyにtfのブロードキャスターを追加する。
import tfを定義部に追加し、最後のrospy.spin()の代わりに、10Hzでroomba座標系をブロードキャストするスクリプトを追加する。完成したrbjoy.pyはこれ。

次にroomba_workディレクトリ直下のmanifest.xmlを修正し、tfの依存関係を追加する。

 <depend package="tf"/> 
を追加すればいい。


修正したらアプリケーションをローンチし、rvizを起動。
$ rosrun rviz rviz

roomba座標系を表示するには、
・画面左下AddボタンでTFをDisplaysウィンドウに追加
・同様にGridを追加して画面に床面をメッシュで表示(このほうが見やすい)
・Displaysウィンドウ一番上、Global OptionsのFixed Frameのプルダウンから/Worldを選択(World座標系からのビューを設定)

これで中央にworld座標系原とroomba座標系の原点が表示される。表示画面をマウスドラッグで視点の変更、スクロールホイールでズームできる。

Rviz_screenshot_2013_05_0408_58_14

ゲームパッドでroombaを動かすと画面上のroomba座標系も動く。この画面で見るかぎり、オドメトリはかなり正確だ。

このへんまで来ると、ROSの底力がじんわりと解ってくる。次はマップまわりを試してみたいが、ひとまず「ROS入門編」はここでおしまい。

2013年5月 3日 (金)

roombaをゲームパッドで動かすパッケージを作る(2)

ROSさんお手やわらかに:ROS入門編

前回つくったプログラムでroombaを動かしてみる。
手動でプロセスを起動するのは大変なので、ローンチファイルを作る。
前回作ったパッケージディレクトリroomba_workにlaunchディレクトリを作り、そこにstart.launch というスタートアップスクリプトのようなものを作る。

この中身はroscoreの起動(これはアプリオリに行われる)、ジョイスティックノードの起動、ルンバノードの起動、それからジョイスティックでルンバを動かす自作ノードの機動を順番に行う。

roombaとパソコンの接続は以前の投稿を参考に。

アプリケーションの起動は、新しい端末を開き、

$ source ~/fuerte_workspace/setup.bash
$ roslaunch roomba_work start.launch

で、ローンチファイルを実行する。
終了はCtrl+Cで。きちんと終了しないとroombaの電源ボタンが効かなくなる。

実行の様子はこの動画で。

2013年5月 2日 (木)

roombaをゲームパッドで動かすパッケージを作る(1)

ROSさんお手やわらかに:ROS入門編

初めてのちゃんとしたパッケージ作成ということで、ルンバをゲームパッドで動かすパッケージroomba_workを作ってみる。これで実践的なパッケージ作成法を確認する。ROSのバージョンはfuerteだ。

まず、パッケージフォルダをワークスペースのsandbox内に作る。端末を開いた後
$ source ~/fuerte_workspace/setup.bash で、ワークスペースを初期化。
$ roscd で、ワークスペースに移動。
$ cd sandbox で、パスの通っているディレクトリsandboxに移動。

ここまでやったら下記でパッケージroomba_workを作る。依存関係はよく解らないのでとりあえずこれにしておく。
$ roscreate-pkg roomba_work std_msgs rospy roscpp

スクリプトを格納するフォルダscriptsをroomba_workの中に作る。この中にルンバをゲームパッドで動かすスクリプトファイルrbjoy.pyを入れる。これの中身の解説は後ほど。

端末でroomba_workに移動し、
$ make

rosmakeはパッケージ名を指定することで、どこにいてもmakeできる。makeはパッケージディレクトリに移動してパッケージ名なしで実行。どっちでもいいようだ。

このrbjoy.pyをwindowsのテキストエディタで作ったら、なぜかrosrunで実行しようとすると「ファイルが見つからない」旨のメッセージが出た。rosrunではちゃんとtabで補完もできる。つまりパッケージやノードとしての登録はできているということになる。結局、geditでファイルを開き、新規ファイルに中身をコピペして改めて保存したらうまく動いた。文字コードの問題なのか? はたまたメールの添付ファイルとして送ったのが具合悪いのか? ともあれ、仕事中にサボってプログラムを作らない方がいいことだけはわかった。

これでノードの準備はできた。

« 2013年4月 | トップページ | 2013年6月 »