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      

カテゴリー

ブログパーツ

無料ブログはココログ

« 2012年9月 | トップページ | 2012年11月 »

2012年10月

2012年10月21日 (日)

NEDO国際ロボットフォーラムに行ってきました(続き)

管理人のページ:よもやまばなし

前回の続き、稲葉先生の講演「急成長しているロボットソフトウェア」の感想です。例によって詳細な講演内容については、他の方の記事をご覧ください。

先生はROSをベースとした汎用作業ロボット、PR2でのプロジェクトの進め方について話されました。このロボットは、ウィローガレージが研究成果の公開を条件に、各国の研究チームに無償でレンタルしているもので、youtubeでもタオルをたたむ動画などで有名なロボットですね。
ROSやOpenCVなどのオープンソースを利用し、開発過程やデータをネット上で公開することで、広い意味でのクラウドベースの開発環境を実現しています。

東大での研究成果がこれです。サンドイッチを探してくるロボットです。とにかくスバラシイ、ロボット愛好家としてはぜひ一台欲しくなるようなロボットです。

先生は必要なソフトや知見がクラウドにあること、他の開発者とのディスカッションがネット上で出来ることなどが、これを非常な短期間で実現できた理由としてあげ、ROSベースの開発の有用性を指摘しました。また、日本製のロボットソフトモジュールの骨組み、Open-RTMとの連動プロジェクトについても触れ、ロボットソフトウェアが部品として用いられるような商品開発の時代が近づいているとしました。

それをふまえ、市場の「欲しいロボット」をいかに見つけるか、そしてそれをいかにして使ってもらうかが大切であると続けます。一つの例として、昨今発売が相次いでいるテレプレゼンスロボットを挙げられました。例えば、ダブルロボティックス社のこれです。

使ってもらうことが大事という提言には、以前の投稿にもあるように僕も大賛成ですが、「欲しいロボット」を見つけて商品化することには、先生ほど楽観的な見方は出来ませんでした。実際には「欲しいロボット」と「実現可能なロボット」には非常に大きなギャップがあるとおもいます。
テレプレゼンスロボット一つとっても、ビジネスマンとしての(ロボット愛好家ではなく!)僕が欲しいと思うのは、非常に簡単な操作で、先方の会議室にある試作品をひねくりまわしてあら探しをしたり、問題のある工場や工事現場に出かけていって、機械の後ろを覗き込んだり、接続部を確認したり、組み立てライン上の半製品を取り上げてチェックしたりできるようなものです。おそらくは海外出張を伴う仕事をしている人の多くもそう思うのではないでしょうか。ディスカッションに参加するだけなら、テレビ電話でたくさんです。

こういったギャップをいかに埋めていくか、おそらくそれには技術開発だけではなく、使い方の斬新なアイデアが必要です。そしてそれこそこれからの若い人たちの力が発揮されるところなのではないでしょうか。

ともあれ、先生のお話でやはりROSだなということは再確認しました。マイクロソフトでもOpen-RTMでもないですね。おかげで方向性がすっきりしました。

2012年10月19日 (金)

NEDO国際ロボットフォーラムに行ってきました

管理人のページ:よもやまばなし

先日「Japan Robot Week2012」で開催された「NEDO国際ロボットフォーラム〜ロボットが拓くスマートな社会〜」という講演会を聴講してきました。

お目当てはGoogleのロボット技術の話と、リモートブレインの元祖、東大の稲葉先生のロボットソフトウエアの話です。

まずは、Googleのカフナー氏。10年ほど前、稲葉先生の研究室で二足歩行ロボットの移動計画の研究をしていたそうで、今回の講演もその師弟関係あってのことかもしれません。そういう訳で、まずはその話から入りました。床の上に「踏んではいけないピンクの色紙」と「目的地である青い色紙」を配置し、天井カメラからの映像をもとに、目的地までの足の配り方を計画するという研究です。最初は各マーカーは静止していて、ロボットは移動前に経路を計算する方式ですが、研究を重ねるに従って、ロボットの移動中にマーカーを動かしても適時再計画し、ダイナミックに対応できるようになります。
氏はこれを「アルゴリズムの研究の成果もあるが、コンピュータの性能アップの効果が大きい」と評価します。これをマクラにクラウドコンピューティングによるコンピュータの高性能化の話に入ります。やっぱりGoogleですからね。

詳しい講演内容は他の方の記事に譲るとして、基本的にクラウドをロボットに応用することの有用性の話でした。僕は話の端々に洗われる「クラウドロボティックス」という言葉が気になりました。こういうロボット工学のカテゴリがあるんでしょうか? 

カフナー氏はクラウドロボティックスの有用性として次の3点を挙げました。

1・知識やノウハウがクラウドに集約されること
2・ロボットのハードウェアのコストを低く抑えられること
3・クラウドのコンピュータパワーを利用できること

1は開発者やユーザー間の交流の意味もありますが、ロボットからの情報、例えば特定の状況でのロボットの振る舞いなどをクラウドでデータベース化することで、他のロボットが同じような状況に遭遇した場合、そのデータを利用できるという考え方を提示していました。

クラウドの利用例としては、画像認識やGoogle Mapを利用したロボットカーの移動計画などを挙げていました。

面白かったのはクラウドロボティックスの実施例として挙げた、Android Phoneを利用したロボタみたいなミニロボットでした。クラウドの利用についてはあまり具体的な話は無かったと思いますが、ともあれ面白そうです。

Crobo

講演の締めくくりに、「ロボティックスでクラウドを利用するインフラは全て整っている」と話をされました。最近よく聞く言葉のようですが、Googleの方からでると、とても説得力がありますね。

長くなりましたので、稲葉先生の話は次回ということで。

2012年10月15日 (月)

RoombaをVisual C#で制御する(その3)

花岡ちゃんのウィークエンド:ルンバを試す

今回はRoombaの主なコマンドについて調べてみます。

Roombaのコマンドは1バイトのコマンドコードに続いて、1バイトずつのパラメータが続きます。コマンドパケットのヘッダーやフッターはなく、不完全なコマンドからのリカバリの機能はありません。そのためコマンドパラメータは必要数だけきちんと送らないとおかしなことになります。
Roombaにはいろいろなコマンドがありますが、今回はもっとも基本的な「モーターや移動のコマンド」と「センサ読み出しコマンド」について解説します。"iRobot Roomba 500 Open Interface(OI)Specification"の当該ページを見ながら読んでもらうとわかりやすいと思います。

■モードチェンジコマンド(P6,P7)
実際のコマンドを送る前にRoombaのモードを設定する特殊なコマンドです。基本的にStart[128]コマンドを送った後、Safe[131]かFull[132]のコマンドを送りモードを設定します。モード設定は最初に一度だけ行えばOKです。

多くのコマンドはいずれのモードでも有効です。Safeモードは落下回避などの安全機能が働きますが、そのときにPassiveモードに戻ってしまうので、またSafeコマンドを送らなければなりません。目の届くところで実験するならFullモードのほうがよいでしょう。

■モーター・移動コマンド
まずはコレから行きましょう。

・Driveコマンド(P10)
基本的な移動コマンドです。速度、旋回半径を与えると動きます。「どこまで」という指示は出来ません。あくまでも移動をスタートするコマンドです。コマンドのパケットは下記のようになっています。

[137][速度・上位バイト][速度・下位バイト][旋回半径・上位バイト][旋回半径・下位バイト]

速度→ -500~500mm/S(プラスで前進、マイナスで後退)
旋回半径→ -2000~2000mm(プラスで左回り、マイナスで右回り)

旋回半径はRoombaの中心(パワーボタンの位置)が描く円弧の半径です。なお、直進させたい場合は32768か32767、時計回りのその場回転は-1、反時計回りなら1を指定します。

コマンド例は前出のRoombaTESTERでやっていますので割愛します。
なお、動いているロボットを止めるには、速度パラメータを[0][0]にします。

せっかくテスト用の10進表記でパケットを作れるソフトを作ったのに、2バイトのパラメータを1バイトずつに分割して記載すると、10進表記のパラメーター→16進変換→上位・下位バイトに分割→各々10進変換→RoombaTESTERに入力、と、えらい遠回りをしなければなりません。残念ですがc電卓の助けを借りて作業します。これならX-CTUでやったほうがいいかもしれません。

・Motorsコマンド(P11)
Roombaには移動用以外に、サイドブラシ、掃除機、本体下のメインブラシのモーターが搭載されています。これをON/OFFするコマンドです。

[138][モーターバイト]

モーターバイト→ ビット0・サイドブラシON/OFF、ビット1・掃除機ON/OFF、ビット2メインブラシON/OFF、ビット3・サイドブラシ回転方向、ビット4・メインブラシ回転方向

ON/OFFビットは1で回転1で停止。
サイドブラシ回転方向は1で時計回り
メインブラシ回転方向は1で掻き込み方向

Roombaを移動ロボットプラットフォームだけではなく、リモートブレイン掃除機としても使いたいなら必要なコマンドです。純粋に移動プラットフォームとして使うなら、メインブラシは外しておいたほうがスムーズに動きます。

次のコマンドでモーターパワーも制御できます。

・PWM Motorsコマンド

[144][メインブラシパワー][サイドブラシパワー][掃除機パワー]

各ブラシパワー→ -127~127(符号が回転方向)
掃除機パワー→ 0~127

なんと、こっちでも回転方向が変えられるみたいです。前のコマンドとの相関関係はどうなっているのでしょうか?

とりあえず、これだけ知っていればRoombaを動かすことが出来ます。


■センサ読み出しコマンド
お次はセンサの読み出しです。これでリモートブレインの移動ロボットとして独り立ちさせることが出来ますね。

・Sensorsコマンド(P17)
これを送るとセンサの値を返します。パラメータは「パケットID」で読み込みたいセンサのIDを指定します。

[142][パケットID]

パケットIDはP35(最後のページ)に一覧表があります。下のスナップショットはSEND1にセットしたコマンドで体内の温度計(ID 24)を読み込んだところです。一番下のボックスに表示されているのが温度計の読み出し値です。充電したてなのでちょっと暖かいようです。

Ondo_2

いくつかのセンサをまとめて読み込めるIDもあります。例えばID 1は落下センサや過電流といった移動ロボットの安全にかかわるセンサをグループ化してあります。ID 106は各方位の光電式障害物センサの値をまとめて読み込むのに便利です。また、ID 100はすべてのセンサを一気に読み込みます。

ID 19の移動距離センサとID 20の旋回角度センサはオドメトリの結果を返すセンサですが、シェーキーのような積算型ではなく、前回読み出したときからの移動距離と旋回角度なので、使い方には注意が必要です。


センサの詳細については、ひととおり実験した後にレポートします。(いずれ、ですが)

とりあえず、これでRoombaが移動ロボットのプラットフォームとして使えるようになりました。市場でもまれた商品、いろいろと良く考えられています。また、一見おもちゃのような作りながら、相応のタフさがあると思います。

実用的なロボットを試作したいなら、改造ベースとして一考の価値があるでしょう。


2012年10月10日 (水)

RoombaをVisual C#で制御する(その2)

花岡ちゃんのウィークエンド:ルンバを試す

前回ハードは作りましたから、あとはコマンドを送るだけです。前出の"iRobot Roomba 500 Open Interface(OI)Specification"によると、コマンドはバイナリで表記されるので、TeraTermなどからASCIIコードで簡単に送る訳にはいきません。XBeeの設定に使うX-CTUのターミナル機能は、バイナリのインターフェィスを備えているので使えそうですが、一つ問題があります。Roombaのコマンドは10進表記なんですが、X-CTUは16進表記でのインターフェイスしかありません。その都度、10進のコマンドを16進に直して入力するのは面倒です。

そこでVC#2010Expressで簡単なターミナル、RoombaTESTERを製作しました。こんな画面です。

Roombatester

一番上の部分がシリアルポートのコントロールです。ポートを選んでOPENボタンをクリックします。ポートが開けたら右に"OPEN"と表示され、開けなければ"ERROR"と表示されます。

その下が、よく使うコマンドを送るボタンです。

さらに下のSEND1とSEND2は各々の右側のボックスに入力したコマンドパケットを送信するボタンです。これでいろいろなコマンドを試してみることが出来ます。コマンドパケットが5つより短い場合は、使わないボックスを空白にしておきます。

一番下の大きなボックスが、Roombaからのリプライを表示する部分です。センサーコマンドなどのテストに使います。ボックスの内容は右下のCLEARボタンで消去できます。

VC#2010のプロジェクトファイルはこれです。
「roombaTest.zip」をダウンロード

■テストしてみましょう
Roombaを128mm/Sで前進させてみます。

Dscn2331

1:インターフェイスに電源を切ったRoombaとパソコンを接続し、インターフェイスの電源を入れる
2:VC#2010でプロジェクトファイルを開きRoomba TESTERを起動
3:インターフェイスを接続したCOMポートを開く
4:Roombaのパワーボタンを押して電源を入れる
5:"Start"、"Safe"ボタンを順番に押してRoombaをSafeコマンドモードにする。Roombaのパワーランプが消える
6:テスト用のコマンドとして上のスクリーンショットにある値をSEND1、SEND2に入力

これで準備完了です。SEND1をクリックすると走り始め、SEND2をクリックすると停止します。結構早く走りますので、狭い場所ではSEND1の3つ目の128を50くらいにして試してください。ゆっくり走ります。

■Tips
Safeモードなので持ち上げるとPassive(通常モード)に戻り、全モーターが停止、パワーランプが点灯します。万一コマンドで止まらない場合は持ち上げてください。
この状態から再度コマンドを送るには"Start"、"Safe"ボタンを押してモードを切り替えます。

実験終了後Roombaの電源を切るには、持ち上げてPassiveモードに戻し、Roombaのパワーボタンを操作するか、TESTERの"Power"ボタンをクリックしてください。

次回は最低限のコマンドについて解説します。

2012年10月 8日 (月)

RoombaをVisual C#で制御する(その1)

花岡ちゃんのウィークエンド:ルンバを試す

今回のウィークエンドは、おなじみのお掃除ロボットRoombaをパソコンにシリアル接続し、C#で動かしてみます。


Roomba500シリーズ以降は、本体上部の化粧パネルの下に7pinのminiDINソケットがあり、ここからシリアル通信でコマンドを送ることでモーターを動かしたり、センサを読み取ったりすることが出来ます。まずはこのパネルを外します。

化粧パネルは主に4箇所の爪で止まっています。後部にさらに2つ小さなフックがありますが、爪を全部外すと自然に外れます。4つの爪は最初の写真の付箋を貼った位置にあり、小さなマイナスドライバーを化粧パネルと本体の隙間に入れ、こじりながら化粧パネルを持ち上げると、比較的容易にパネルを外すことが出来ます。

Dscn2340  Dscn2339

Dscn2334  Dscn2343

7pinのminiDINですが、意外と入手困難です。ぶらりと秋葉に立ち寄ったついでにガード下で探したのですが、なかなか見つかりません。昔はこんなものどこにでもあったのですが、さすが21世紀、こういうアナログな部品は見つけにくいようです。結局、マルツで発見しました。結構いいお値段です。
ハウジングがかなり大きいのでピン部分だけを使います。こんな感じです。

Dscn2333

シリアル通信の結線はこのようにします。MAX232の電源電圧が電池4本だとちょっと高めですが、これくらいなら問題ありません。

Rmbif_2

PDF版はこちらから。
「rommbaif.pdf」をダウンロード


Roombaのシリアルは5Vのロジックレベルなのでパソコンのシリアルポートに接続するには、このようにレベル変換が必要です。また、シリアルケーブルは普通のヘッドホンなどに使う2芯シールド線を使い、GND,TXD,RXDの3本だけを接続します。柔らかいし、ダイソーで売っている「ヘッドホン延長ケーブル」で簡単に延長できるので、移動ロボットの実験には最適です。ノイズの心配をする向きもありますが、普通の家庭の環境では115Kで通信しても何ら問題ありません。写真のものはネットタンサーの付属品ですが、自作も簡単です。

Dscn2328  Dscn2345

コマンド体系などについては、英文ですがこのドキュメント"iRobot Roomba 500 Open Interface(OI)Specification"があります。内容はそれほど難しくないので、試してみたい方はダウンロードしておくことをお勧めします。


続きは次の投稿にて。

« 2012年9月 | トップページ | 2012年11月 »