Spirit

2015年10月24日 (土)

KHR-3HVの上腕を短くする改造

IRC Humanoid Robot Sportsに今年も出場予定です。

Spiritの腕をの規定に合わせて短くしました。脚の長さに対する比率の他に、「直立した状態で腕を下げたとき、膝に届かないこと」という項目があるためです。

1枚目の写真は改造途中の様子です。向かって左が元々のKHR-3HVの肩関節の構造、右が変更後です。機械的干渉により、肩ロール軸で腕を真上まで挙げることはできなくなりましたが、肩のピッチ軸があるのである程度代用できます。また、もともと上に乗せた基板の関係であまり腕を上げる動作はしなかったのであまり問題にはならなさそうです。
なお少し遡りますが、今年の知能ロボットコンテスト前に上腕のひねり軸とグリッパーを追加していました。

12132416_1006557146062810_136845425

肩ロール軸のサーボが上腕の長手方向に沿って配置されていたのを90度回転させた形になります。

下はこの改造のために作ったアルミ板金部品です。これが肩ロール軸のサーボと上腕ひねり軸のサーボを連結して、人間上腕に相当する部分になります。ただしこの後一部寸法を変えて更に作り直しました。サーボのボトムケース(両支持構造にするための軸受けとコネクタ、LEDが出ている)に付けるための構造はKHR-3HVの部品を参考にしました。また、KONDOが公開しているサーボの図面を設計の参考にしました。

12141081_1006557142729477_859016134

| | コメント (0) | トラックバック (0)

2015年3月16日 (月)

第26回ROBO-ONE参加

14日に行われた第26回ROBO-ONE予選に参加しました。

ROBO-ONEの予選は4.5mの徒競走で、ゴールまでの時間順に決勝進出ロボットが選ばれます。持ち時間内に完走出来なかった場合、途中でコースアウトした場合は到達距離が記録となります。最近は障害物として薄いゴムシート帯が敷かれています。歩行時に足裏を地面に擦るような歩き方をするロボットを牽制する意味で何回か前の大会から設けられました。

私のロボット「Spirit」は約37秒の記録で順位は48位でした。予選通過はなりませんでしたが、終始安定した歩容で障害物にも引っかからず完走することができました。

_spirit20150314_4

今までどおりKHR-3HVほぼそのままです。ROBO-ONE競技規則のロボットの寸法に合わせて足裏部分を作り直し、手先の部品を外しました。また、周期的な歩行動作を容易に実現するために制御用マイコン基板をキット付属のものからC言語等によるプログラムが可能な製品(KCB-5)に変更しました。なお、頭部のRaspberry Pi及びカメラは使用しませんでしたが重量バランスを変えないためにそのままにしました。

出場時はこのような歩き方でした。

この歩容を生成しているプログラムは7年くらい前にWild Dog用に作ったものをもとにしています。股関節の旋回軸を使って旋回しながらの歩行ができるように機能を追加しました。このときは周期1秒(=1秒で2歩歩く)、歩幅60mmでした。

大会後、細かい部分を調節して2倍の速度で歩けるようになりました。歩幅はそのままなので、理想的には秒速240mmということになります。KHR-3HVを元にしているロボットの中で予選最上位の津軽号の平均の速度をタイムから逆算

すると226[mm/s]となり、およそ近い値といえるのではないかと思います。

元々この周期で足踏みはできていたのですがどうしても歩幅を増やすと倒れてしまっていました。そこで映像を見て分析した結果をもとにいくつか対症療法的に調整してこのようになりました。
- 片足立ちの瞬間、体全体が後方に傾いて遊脚の後ろが地面を擦る→重力と慣性力で膝関節の伸展が妨げられ偏差が大きくなるため。指令値にバイアスを掛ける。
- 遊脚が前に出る前に着地する(前に擦る)→モーターの速度限界で足先の軌道が厳密には指令通りにならない。遊脚を高めに上げておき余裕を持たせる。

プログラムは元々静歩行を前提として、重心位置の地面への投影が常に支持多角形の内部に入るように作ったものでした。動力学を直接的には考慮していないものでしたがそれでもパラメータの合わせ込みでそれなりにうまく行きました。その理由の考察は次回書きたいと思います。

| | コメント (0) | トラックバック (0)

2014年11月29日 (土)

Spiritの画像処理・計測・制御の処理

先日のマイクロマウス大会で多く受けた質問は、Spiritのセンサーはどこに付いているのか、というものでした。

このことから察するに、カメラをロボットのセンサーとして使用するということについて馴染みのない方も多かったのではないかと思います。そこで初歩的な部分から簡単に説明してみたいと思います。

Spiritは頭部に搭載したカメラをセンサーとして使用します。カメラから得られた画像をもとに必要な情報を計算によって求め、次の一歩でどちら向きに方向転換するかを決めています。

Input

これは練習用コースにロボットを立たせた状態でロボットのカメラで撮影したデジタル写真です。カメラの性能上は5メガピクセルの画素がありますが、そこまでいらないのでひとまず実験用にはVGA(640x480)で撮っています。ただ、これでも多いので後の処理で更に縮小して使っています。

デジタル画像はプログラムから見ると、各画素に数が入っているデータとなります。カラーカメラの場合は各画素に3個の数(たとえば赤・青・緑色の成分)が入っている形になります。ロボトレース競技には白黒写真(グレースケール画像、単色画像or濃淡画像)で十分なので、濃淡画像に変換して以降扱います。各画素には、明るさを表す数値が入っていることになります。

Binarize

ロボトレース競技は床「白い」線とマーカーが描かれており、これらがセンサーで得たい対象です。そこでまず、画像の「白い」部分とそれ以外を分けます。2値化と呼ばれる処理で画素の持っている明るさが一定値より大きいか小さいかで2つに分けます。これは、その結果を見やすく表したものです。

なお、ここではいくつかの仮定を置くことで「床の線」と「画像の画素の値」がつながっていることを強調しておきます。

  • 床材は黒い塗料で塗られており反射率が低い。白線は反射率が高い。
  • 部屋はそれなりの明るさで照明が付いている。
  • 照明の光が床や白線部分にあたり、その反射光がロボットのカメラに入る。
  • カメラのゲイン(感度)や絞り、露光時間は適切に設定されている。

この例ではうまくいきましたが、床の面が平滑で鏡のようになっていると、天井の照明灯が映り込んで黒い床部分も白く写ってしまう場合があります。そのような状況では、単なる2値化処理ではうまくいかず他の処理が必要になることもあります。

Regions

次にマーカーとコースの線を区別します。そのためには、「マーカー」や「コースの線」といった曖昧な概念を計算可能な形にすることが必要です。いろいろな方法が考えられますが、ひとまず一つの例を示します。白い部分を連結した領域単位に分割して、面積が一定より大きいものをコースの線、他をマーカーであるとします。灰色で表した部分がマーカーとして認識した部分です。実際は他にも基準を持っていますが、まだ開発中段階のため割愛します。

Line

マーカーを除外するとこのようになります。これで次の処理がしやすくなります。

Detectedpoints

この先の処理はまだ仮のものですが、ひとまずの処理例を示しています。画像の下端中央あたりを起点として、そこから一定の距離(この例では画像幅の30%と15%)にある点を求めます。これは、仮想的に楕円形のセンサーがロボットの前方に配置されているような効果を得ようという発想で作ったものです。この2つの点からロボットが線からずれている度合いと線の伸びている方向を得ます。

計測の次は、ロボットの動作を決定する処理です。車両型のロボトレーサーと同様の発想で、「ロボットが線からずれている度合い」と「線の伸びている方向」の2つに適当な係数を掛けて操作量(操舵量に相当)を決定することにしました。ただし、今回は、ロボットの動作は一歩ごとに左右への旋回が強い旋回と弱い旋回の2通り、これに直進を加えて5通り作ったのみで、任意の旋回率を指定できない仕様でした。そのため先に述べた操作量を反映するために5通りに場合分けして次の一歩の方向を決めるようにしました。

以上が今年の大会参加時点においてSpiritに採用した計測と制御の方式です。

以前の記事では「簡易的な制御方式」と言いましたが、一言で言えば幾何(geometry)的な処理をまったく行っていないことを指しています。計測の際にはカメラが地面を斜めに撮っているため生じる透視投影(遠近法)の効果を考慮し、またロボット自身とカメラで撮った地面との位置関係を正しく扱うようにすれば、計測結果を角度や距離といった物理的な量の次元で得ることができます。そうすればロボットの行動の方も物理的関係に基づいて行うことができます。例えば、次に踏み出す足を地面の線の方向と直接一致させる、というようなこともできるようになります。

次は熱田の森ロボット競技会への参加を予定しています。それまでに制御方式を根本的に作り直したいと思います。

| | コメント (0) | トラックバック (0)

2014年11月22日 (土)

マイクロマウス2014参加

マイクロマウス2014ロボトレース競技に参加しました。

ロボトレース競技は本来車両型ロボットを想定したものですが、ヒューマノイドロボット「Spirit」で出場しました。

Spirit_inspection

一斉車検場での写真です。

ちゃんと線に沿って歩くところを見せられたので良かったと思います。また、開始直後のスタートゲートをくぐるための匍匐前進(四つん這いの体勢による四足歩行)の動作も好評でした。もう少し調整すればゴールまで回ってくることもできたかもしれません。

交差点で間違った方向に行ってしまうことがあるのは、ごく単純な仮設の制御プログラムで動いているからです。標準的な車両型ライントレーサーに使われているセンサーを用いた追従制御と同じようなことをしています。比喩的に言うと、コースを「点」でしか捉えてないようなものです。その上一歩歩く度に今まで進んでいた向きを忘れているようなものです。今後、もう少し高度な処理を行うようにしていきたいと思います。

マイクロマウスクラシック・フレッシュマンクラスは制御プログラムが未完成の状態でしたが、一応形だけ走らせてきました。

ロボット名は「飛車」で、「でんでん一号」の部品を使って組みなおしたものです。一通りの電子回路はできたので、今後プログラムを作って走らせてみたいと思います。

Hisha

| | コメント (0) | トラックバック (0)

2014年10月28日 (火)

International Robot Contest 2014参加

10月23日から26日、韓国・KINTEXで行われたROBOT WORLD2014内で行われたヒューマノイドロボット競技会にチームROBOT JAPANの一員として参加してきました。

競技会はSeoul National University of Science and Technology(ソウル科学技術大学)主催のHumanoid Robot Olympicsと、Ministry of Knowledge Economy(韓国知識経済省)が主催するInternational Robot Contest 2014内のHumanoid Contestの2つです。簡単のため後者は国別対抗エキシビジョンと呼びます。
私はHumanoid Robot Olympics自律部門のトラック競技と、国別対抗エキシビジョンのサバイバルマラソンに参加しました。
国別対抗エキシビジョンの総合成績では、日本チームは銀メダルとなりました。写真のメダルはチーム全員に貰ったものです。
詳細はまた後日書きたいと思います。

| | コメント (0) | トラックバック (0)