Deep Learning を用いた『不定形物ピッキング』のデモ その2

こんにちは、トロボです。

前回は『不定形物ピッキング』のデモの内容と、Deep Learning による認識の仕組みを紹介しました。そして、Deep Learning として ①野菜識別、②把持位置検出、③把持角度/把持深度検出 のためのEncoder-Decoder構造のCNNを使用していることを説明しました(下図)。

不定形物ピッキングデモの全体フロー

今回の記事では、これらのCNNのパラメータ(重み)の学習方法を紹介します。

①野菜識別用のCNNの学習方法

野菜識別用のCNNは、カラー画像を入力すると、各分類クラスの尤度を画素ごとに出力します。(なお、推論時には各画素で最も尤度の高いチャネル番号を出力するようにさらにArgMaxレイヤーを最終段に追加します。)

野菜識別

このような多クラス分類器としてのCNNにおいては、一般に出力画像と教師データとの差分を「交差エントロピー誤差」を損失として算出し、誤差逆伝搬させて学習します。(この手法の詳細に関しては多くの文献で解説されていますので、ここでは説明を割愛させて頂きます。)

ただ、この野菜識別のCNNの学習で最も大変な点は、教師データの作成の方です。一般的にはアノテーションツールを活用して、画素ごとに色分けした教師データ(上図の右)を作成します。

世の中のアノテーションツールを探したところ、効率的にアノテーション可能なツールは見つかりませんでした。というのも、世の中のほとんどのアノテーションツールは、マウスでクリックして閉多角形の頂点を描画し、その内部を指定色で塗るというものだったからです。閉多角形をきれいに作るには時間と神経を消耗します。そこで、弊社では独自の効率的なアノテーションツールを開発しました(下図)。

アノテーションツール

この独自のアノテーションツールは、カラー画像を読み込むと、色と位置が近い画素同士をセルまとめて網目状にするスーパーセル処理を行います。作業者は、塗りたい色を右側のテーブルから選び、マウスの左ボタンを押しながら対象のスーパーセルにマウスカーソルを当てるだけです。マウスカーソルに1度でも触れたセルは色が塗られるため、とても簡単かつ効率的です。また、複雑な形状の野菜も精確に塗ることができます。これにより、1つのカラー画像につき1分ほどで教師データを作成することができるようになりました。

②把持位置検出用のCNNの学習方法

把持位置検出用のCNNは、深度画像を入力すると、把持成功度の値(0.0~1.0)を画素ごとに出力します。そのため、このCNNはPixel-wiseの回帰問題として学習させます。

把持位置検出

教師データは、把持位置(=グリッパーの中心位置)に白い丸(=1.0)を1つ描画した画像として作成しました(下図の中央)。

把持位置の教師データ

ロボットアームで毎回試行すると時間がかかってしまうため、今回は深度画像から目視で把持位置を判定し、教師データを作成しました。このような教師データを多数作成しました。そして回帰問題を解くため、教師データとの差分を最小二乗誤差として算出し、誤差逆伝搬法を用いてCNNを学習させました。

ただし、この方法では上手くいきませんでした。その原因は黒画素の扱いにありました。教師データの白画素(=1.0)は「把持可能な位置」を意味しますが、黒画素(=0.0)は「把持不可能な位置」を意味する訳ではありません。正しくは黒画素は、把持可能か把持不可能か不明な画素を意味します。すなわち、教師データの黒い領域には、白い領域となるべき箇所が残っている可能性があるということです(上図の右の「理想的な出力データ」)。しかし、本来ロボットアームで把持を試行できるのは1か所しかありません(一度試行すると、野菜の位置関係が変化します)。そのため、複数の把持位置を白く塗った教師データを作るのは好ましくありません。

そのための工夫として、最小二乗法を損失関数に使用するのはやめて、下図のようなグラフの関数を損失関数として採用しました。この損失関数を使うと、教師データが白い画素の場合は誤差の重みが大きくなり、教師データが黒い画素の場合は誤差の重みが小さくなります。

mean_quantile_error

これにより、CNNは黒い画素よりも白い画素を優先的に学習するようになり、推論時には複数の白い領域を出力することができるようになりました(上図の右の「理想的な出力データ」がそれです)。

③把持角度・把持深度検出用のCNNの学習方法

把持角度・把持深度検出用のCNNは、深度画像を入力すると、把持角度(0~179)と把持深度(0~255)の2つの値を画素ごとに出力します。そのため、このCNNもPixel-wiseの回帰問題として学習させます。

把持姿勢検出

各画素が出力する2つの値は、色で表現すると下図のようになります。

把持角度・把持深度のカラー

教師データは、把持角度と把持深度に応じた色で丸を描画した画像として作成しました(下図)。もちろん、この丸の位置は把持した位置です。

把持角度・把持深度の教師データ

この教師データを用いて学習する際、注意しなければならないのは、「丸を描画した画素以外は学習で使用してはならない」ということです。というのも、黒い画素を学習に使用してしまうと「把持角度=0度、かつ把持深度=0mm」という誤った意味で学習してしまうためです。(②の把持位置のCNNの学習で黒い画素を学習に使用することができたのは、黒が誤った意味を持っていなかったためです。)

丸を描画した画素以外は学習に含めないように、教師データごとにマスクデータを用意しました、そして、学習時にはCNNの出力レイヤーにマスクデータを掛け合わせることで、マスクデータが黒(=0)の画素は損失が0となるようにしました(下図)。

把持角度・把持深度のマスク画像の使い方

これにより、正しい学習を行うことができました。

以上により、「ロボット × Deep Learning」の一例としての『不定形物ピッキング』のデモを実現することができました。

デモの動画を再掲します。

弊社は、このデモのような「ロボット × Deep Learning」の研究領域に、ロボットを開発・供給して貢献したいと考えています。(弊社が今回のデモで実装した Deep Learning はあくまで一例です。) この記事の内容が、皆さんの Deep Learning の研究のご参考になりましたら幸いです。

Deep Learning を用いた『不定形物ピッキング』のデモ その1

こんにちは、トロボです。

昨年末の国際ロボット展(iREX2017, 会期2017/11/29~12/2)にて、弊社では不定形物ピッキングのデモを行いました。この不定形物ピッキングのデモの内容を紹介します。

 

下の写真は弊社ブース全体の様子です。左側で不定形物ピッキングのデモを動かしました。

iREX2017 東京ロボティクスのブース全体の外観

不定形物ピッキングのデモの概要を簡単に説明いたします。

不定形物ピッキングのデモの内容

デモの全体像を下図に示します。

ピッキングデモのシステム

容器内に多数の野菜がバラ積みされており、ロボットアームと2本指グリッパーを使ってピッキングし、野菜の種類に応じてカゴに仕分けます。ロボットアームの先端にRGB-Dセンサ(Intel社製のRealSense SR300)を取り付けてあり、このセンサで容器の上方からカラー画像と深度画像を取得します。Deep Learning を用いてカラー画像と深度画像からから野菜の認識と把持位置を検出を行います。そして制御装置がロボットアームを動作させて野菜をピッキングし、野菜の種類に応じたカゴに仕分けます。

デモのビデオをご覧頂ければと思います。

デモの様子はいかがでしたでしょうか。このシステムを使用することで、バラ積みされた不定形物の野菜を自動的に仕分けることができます。

本デモを展示した目的

弊社では、「ロボット × Deep Learning」という組み合わせが今後の産業に一層貢献をもたらすと考えています。今回のデモは、このような「ロボット× Deep Learning」による一例をお見せすることが目的です。

従来のピッキングでは、テンプレートマッチングをベースとしたアルゴリズムが把持位置の検出に採用されてきました。例えば、従来ではボルトの深度画像(下図)に対してグリッパーのパターン(水色)を探索することで、把持可能な位置を検出するといったアプローチがなされてきました。

テンプレートマッチングによる把持検出深度画像に対してグリッパーのパターン(水色)を探索した結果

[1] Y.Domae, H.Okuda, et.al. “Fast Graspability Evaluation on a Single Depth Maps for Bin-picking with General Grippers”, ICRA2014.

しかし、このテンプレートマッチングをベースとした把持検出は、野菜のような不定形物の画像に対しては苦手です。その理由は、野菜は同じ種類であっても千差万別の形状をしており、『想定外』の形状によってマッチングにミスが生じてしまうからです。

そこで、Deep Learning の出番です。Deep Learning を使うことで、テンプレートよりも柔軟な特徴量を見つけ出し、より高精度で把持位置を検出することが可能となります。

さらに、Deep Learning は高解像度・高密度なデータではなくても粗いデータから答えを類推できるという特性があります。そのため、高価なセンサや複雑な画像処理が不要になる場合があります。

Deep Learning による認識の仕組み

今回採用した Deep Learning による認識の仕組みを紹介します。RGB-Dセンサからカラー画像と深度画像を取得した後、下図に示すようなEncoder-Decoder構造のCNN (Convolutional Neural Network) に入力します。Encoder層で次元を圧縮することで重要な特徴量だけを抽出し、Decoder層でタスクに合わせた画像データを生成することができます。このCNNはSegNet[2]を参考に実装しました。

Encoder-Decoder構造[2] Badrinarayanan, Vijay, Alex Kendall, and Roberto Cipolla.”SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation.” arXiv preprint arXiv:1511.00561, 2015.

デモのシステムの全体フローは下図のようになります。

ピッキングデモのアーキテクチャ

RGB-Dセンサからカラー画像と深度画像を取得した後、Encoder-Decoder構造のCNN を使用して野菜種別・把持位置・把持角度深度を表す画像を出力します。そしてそれらの画像を解析することで、野菜の種別と把持位置を決定することができます。

それでは、各CNNが出力する画像データについて紹介します。

①野菜識別のCNN

このCNNは、RGB-Dセンサから取得したカラー画像が入力されると、画素ごとに野菜の種類ごとの尤度(likelihood)を出力します。すなわち、画素ごとに多クラス分類問題を解くCNNとなっています。下図の出力画像は、画素ごとに最も尤度の高い野菜を、野菜に対応した色で描画したものです。

野菜識別

今回のデモに使用した野菜は以下の8種類です。似た色の野菜は学習がうまくいかないこともありました。

ピッキングデモで使用した野菜

各野菜のコード値に対する色分けを下図に示します。色分けはあくまで人が見てわかりやすくするためのものです。

野菜識別コード

②把持位置検出のCNN

このCNNは、RGB-Dセンサから取得した深度画像が入力されると、把持可能な位置(グリッパーの中心位置)を白、把持可能でない位置を黒として出力します。

把持位置検出

上図の出力画像の中で、白領域の面積が最も大きい箇所の中心座標を、最良の把持位置と決定します。

なお、グリッパーが野菜を把持する際は、UFOキャッチャーのように野菜の上方で水平面上の位置決めを行い、鉛直軌道で野菜を掴みにいくように動作させることとしています。そのため、鉛直上方から撮影した深度画像さえあれば、グリッパーが野菜を掴むことができる位置を、Deep Learning が判断することができます。(もし、グリッパーを鉛直軌道以外の複雑な軌道で動作させると、深度画像ではわからないオクルージョンの情報も Deep Learning に必要になってしまいます)

③把持角度・把持深度検出のCNN

このCNNは、RGB-Dセンサから取得した深度画像が入力されると、「把持の角度」と「把持の深度」を表すカラー画像を出力します。

把持姿勢検出

「把持の角度」とはグリッパーを鉛直上方から見た時の水平面上の回転角度のことで、値域は0~179となります(下図)。

グリッパーの角度

「把持位置の深度」とは、グリッパーで把持する位置の深度(単位はmm)です。

このCNNは、下図のように「把持位置の角度」を青色の強度で、「把持位置の深度」を緑色の強度で表現した画像を出力します。

把持位置の角度・高さのカラー表現

④画像解析

①~③のCNNの出力画像を基に、最良の把持位置を決定し、それに対応する把持角度・把持深度・野菜種類を判定します。そしてその判定結果を基に制御装置でロボットアームを操作することにより、野菜をピッキングして仕分けることができます。

 

以上、「ロボット × Deep Learning」の一例として、不定形物ピッキングデモの内容を紹介しました。

次回は、このデモにおける各CNNの学習方法を紹介します。

知能ロボットのお話 その4

こんにちは。トロボです。

前回前々回の記事で、知能ロボットの重要な3要素である創発、立脚性、および身体性についてお話ししました。そこで示したロボットの例は、センサとモータの直結による反射系を利用するような非常に単純なものでした。今回は、知能ロボットの基本原理から逸脱することなくロボットを複雑化させることで、より賢いロボットを生み出す方法論(方向性)についてご紹介したいと思います。

左図にあるロボットは、これまでのスライドで多用してきたセンサ・モータ直結型のロボットに一工夫入れたものです。センサとモータの間に挟んだものを、ここでは仮にニューロン(神経細胞)と呼びますが、これはセンサ入力とモータ出力の間に、右図のような関数を持たせることに該当します。関数の形は何でも構いませんが、形を変えると振る舞いが変わります。

前のスライドにあるような閾値関数を持たせた時、何が起こるかと言いますと、このスライドにあるように「我慢」ができるようになります。つまり、光が遠いときはロボットが動かず、光がある距離以上に近づいた時、突然せきを切ったように動き出すという訳です。もちろん、これが我慢なのかどうなのかは外部観察者の解釈でしかないですが(これが知能の本質)、そういう解釈を生み出したというだけでも、ニューロンの介在によりロボットが少し知的(生物的)になったと言ってよいのではないでしょうか(参考文献)。

では、センサ・モータ間を単一のニューロンではなく、複数のニューロン(ニューラルネットワーク)で繋いだら何が起こるでしょうか? この場合、ニューロンの関数や閾値をどう設計すればロボットがどのように動くのか、もはや設計者にとっても予測がつかない領域になってきます。こうした場合の効果的な設計手法の一つとして、遺伝的アルゴリズムを用いてニューラルネットワークの接続形態(重み・閾値)を進化させるという方法があります。(これ以外にも、強化学習や教師あり学習などの方法があります)

これはStefano Nolfi教授が、ニューラルネットワークを遺伝的アルゴリズムで進化させることで、ロボットがゴミを拾えるようにした例です。上記の適応度関数を用いて個体(あるニューロンの重みを持つロボット)の振る舞いを採点し、点数の高いいくつかの個体を残し(淘汰と選択)、交配させ(ゲノムの一部交換)、これを何世代も繰り返すことで、ゴミを拾ってフィールドの外に捨てるような振る舞いを生み出すことに成功しました。当然ながら、ゴミというモデル(表象)は明示的に実装されておらず、ロボットの身体構造とニューラルネットワークを介したセンサ・モータ間の接続だけでゴミ拾いタスクを実現しています。

上で見てきたニューラルネットワークは、フィードフォワード型と呼ばれ、基本的には入力と出力の関係を静的にマッピングするものです。この場合、ロボットは、同じセンサ入力に対して同じモータ出力を返すため、反射的な行動しかできず、その知的レベルには限界があると言われています。そこで、ロボットをさらに賢くするため、再起結合を持つリカレント・ニューラルネットワーク(RNN)を活用する流れが生まれました。RNNによってロボットに「内部状態」を持たせることができ、言わば、経験に基づく行動や経緯(コンテクスト)を踏まえた行動が可能になる訳です。例えば、この論文では移動ロボットが充電エリアを行き来するようにRNNを進化させていますが、内部状態を表すニューロンに「場所」がコーディングされ、それと各種センサ入力を合わせ込むことで、適切な行動が生成されています。

フィードバック結合により現在時刻と次の時刻の状態をマッピング可能なRNNは、力学系を近似することができます。力学系とは、Wikipediaにあるように、「一定の規則に従って時間の経過とともに状態が変化するシステム」のことですが、その重要な性質として「アトラクタ」を持つことが挙げられます。とりわけリミットサイクルアトラクタは状態空間を周期運動するので、例えば、この論文この本にあるように歩行を生成できます。アトラクタには引き込み作用があるので、例えば二足歩行モデルを歩かせている間に身体の一部を少し押した際に、一旦よろけるも、すぐに元の歩行に自動復帰することができます。また、RNNを用いて移動ロボットに移動軌跡を学習させた例では、未知のスタート地点からの移動やセンサノイズの影響で道を外れた時などでも、アトラクタ・ダイナミクスにより学習済みの軌跡に引き戻されることを示しています。

RNNはアトラクタ以外にも面白い特徴を持っています。このスライドは、不肖トロボがこの論文を追試したものですが、1→0→(0 or 1)という3つ目の値が50%の確率でランダムに切り替わるシーケンスをRNNに学習させた結果です。グラフより、学習回数が少ないうちは1、0、 0.5にプロットがあるのが見てとれると思いますが、これはRNNが1→0→0.5という値を順番に出力しているからです。一方、学習回数が450回を超えたあたりから、1→0→(ランダム値)が出力されています(このランダム値は初期値鋭敏性を持つカオスによるものです)。ここで、3つ目の値に対し、0.5以上を1、0.5未満を0に変換するとします。こうすると、1→0→(0 or 1)という確率過程を再現できます。このようにRNNはカオスを利用することで確率過程を学習していることが分かります。

この実験が興味深いのは、非常に人間臭い別の解釈ができるところです。「1→0ときたら1と言え」と「1→0ときたら0と言え」という2つの指示は明らかに矛盾しています。これを人に対して強制したらどうなるか、間を取って1→0→0.5(小声)と誤魔化すことは大いにあり得ることと思います。しかし、強制者が「いや、そうじゃない」とさらに2つの矛盾した指示を強要し続けたらどうなるか、きっと頭が混乱して“カオス”になってしまうと思います。これはたまたまかもしれませんが、スライドのグラフの最後の方は、もはやカオスですらなく、よく分からない値を出力し、あたかも放心状態のようになっています。このようなRNNの振る舞いは、ベイトソンのダブルバインドの概念にも類似するものです。こうしたことから、RNNは非常に興味深いツールと言えます。

谷教授は、ハイデッガーの存在論やメルロ・ポンティの身体論、ウィリアム・ジェームズの意識論などを思想的背景に、RNNを用いた力学系アプローチによりロボットの意識にまで踏み込んだ議論をしています。このスライドは、谷教授の論文から一部引用したもので、細かい説明は省きますが、ニューロンの状態を示した(b)(c)のグラフを見ると、安定な状態と不安定な状態が繰り返し生じていることが分かります。安定状態は、移動による環境の見えの変化と、RNNによるその変化の予測が整合している状態を表し、不安定状態とはそれが噛み合わなくなった状態を意味します。谷教授は、この安定状態が不安定状態に変わる時、意識が立ち現れると言います。どういうことでしょうか? 以下、谷教授のアイデアに私見も交えて説明します。

自転車を例に取ります。脳、身体、道具(自転車)、環境は、それぞれダイナミクス(力学系として表現される動的過程や物理特性)を持っています。自転車で道路をスムーズに進んでいる時は、これら要素があるリズムをもって噛み合っている状態と言えます。この時、ある程度の速度が出ていれば、特に何かを強く意識することなく無心で自電車をこいでいるはずです(遅いとあれこれ考え事をしているかもしれません)。つまり、各要素がシステムとして一体化し、自己が透明になっている訳です。ここで、石を踏むなどしてバランスを崩し、転びそうになったらどうでしょうか。石や自転車、場合によっては冷や汗が意識に上ることになります。安堵感も意識するかもしれません。つまり、脳・身体・道具・環境のコーディネーションの突発的な崩れにより、主体(自己)と客体(自己以外)が分離する訳です。この瞬間に生じる「経験」が、原初的な自己意識と考えられます。自分を自分と意識するような自己参照的な自己意識に至るまでには、何か追加の要素が必要かもしれませんが、この議論には一定の説得力があるのではないでしょうか。

話は少しそれますが、「考え過ぎ」や「悩み」というのは、脳(アタマ)だけが空回りして環境のダイナミクスに結合していない状態と言えます。上の議論で言うと、自己が現れ過ぎていている状態です。禅や瞑想、マインドフルネスを実践するということは、要は世界と一体化(心身統一)して、自己を透明化するということです。これはジョギング、釣り、掃除、草刈りなどでも同じで、無心になって対象に向き合うことで禅と同じ効果が得られます。なぜこうしたことが悩みの解消に効果的かと言うと、環境や身体の変化は脳内意識の変化に比べ相対的に遅いため、アタマの中で空回りしているループ(悩み等)を緩やかかつシンプルにするからだと思います。比喩的に言うと、バイクのエンジンを空吹かしするとエンジンに負担が大きいのに対し、ギアとチェーンでタイヤと繋がり、タイヤが大地と噛み合って走っている時は、エンジンにとって快適というイメージです。

これまでの議論で、ニューラルネットワーク(特にRNN)がロボットの知能を生み出す有効な道具であることが分かりました。このスライドでは、ニューロン数(オーダー)を含めた人間とロボットの複雑性を比較しています。2003年時点のものなので、ロボットのニューロン数が少ないですが、深層学習が当たり前になった現在では、少なくとも画像認識部で10万個程度のニューロンが使用されていると思います。この記事によると、ニューロン数が最大の人工ニューラルネットワークでは1,600億個とのことなので、人間の860億個を超えたようです。ただ、ビッグデータによる認識に特化したニューラルネットワークと、これまで議論してきたようなsituateしたロボットは考え方が大きく異なるため、知能ロボットという文脈では単純に比較できないと思います。

これが最後のスライドです。チューリングテストをパスするようなロボットは当分出てこないと思いますが、知的で役に立つロボットは徐々に生まれることと思います。我々もそれを目指し、日々研究を続けています。

・・・

4回に渡って知能ロボティクスについて紹介してきましたが、いかがでしたでしょうか。15年前の古いスライドをベースに記事にしましたが、今振り返っても、本質は何も変わってないと感じます。むしろ、ここ15年で、身体性を活用し環境にsituateしたロボットがどれだけ生まれたのか。研究は着実に進んでいるようですが、大きなブレークスルーはなかったように思えます。このことは逆に、これから知能ロボティクスが再燃する可能性があるとも言えるのではないでしょうか。知能ロボットの基本原理に基づき最新の技術を適用した時、どのようなロボットが生まれるか、今後が楽しみです。

知能ロボットのお話 その1
知能ロボットのお話 その2
知能ロボットのお話 その3

知能ロボットのお話 その3

こんにちは。トロボです。

前回は知能ロボティクスを構成する3要素のうち、Emergence(創発)を紹介しました。今回は、残りのSituatedness(立脚性)とEmbodiment(身体性)をご紹介します。

Situatedness(立脚性)という概念に関し、知能ロボティクスの分野でも定義が混乱しているようにも思えますが、こでは「センサとモータを介した環境とのカップリング(結合)」とします。

ただし、その結合度合いは、このスライドにあるように密でなければなりません。知覚して行動して終わりではなく、行動の結果が知覚に影響を与え、その知覚の結果が次の行動を引き起こすというようなループが環境を介して常に回っている必要があります。

これは人間もsituateしているという一例です。人間が壁に向かって立っているとき、気づかないくらい壁を前後させると、無意識的に前のめり・後ろのめりになるという実験です。つまり「立つ」という行為は、単純に物が置いてあるのとは異なり、不断のセンサ・モータループに支えられた“積極的な行動”ということになります。

これは知覚のために行動を利用する例です。この実験は、振ることによって物の形を当てることができるというものですが、振り動作を行うことを通して慣性モーメントという不変項を知覚していると言われています。これはロボティクスの分野では「アクティブセンシング」と呼ばれ、ロボットの認識能力を向上させる手法として重要視されています。

ここで、触覚ならともかく、視覚は高次の認知機能が関わるので行動は不要だろうと思われる方もいるかもしれません。つまり網膜に映った像を解釈することで対象を認識するので、行動とは関係ないという見方です。しかし、それを否定する実験があります。これこれは行動を通して能動的に環境を見る猫と、ゴンドラに乗って受動的に環境を見る猫の発達を比較した実験ですが、可哀想なことに後者の猫は同じ風景を見ていたにも関わらず奥行きを認知できない猫になってしまったそうです。つまり、視覚の発達においても、行動との結びつきが非常に重要ということです。

ロボットの例はないのかと思われるかもしれませんが、ビヘイビアベースドロボットは最初から環境にsituateしています。

次にEmbodiment(身体性)についてお話しします。ここでのポイントは「身体の特性を活かす」ということです。皆さんが展示会等のデモで見かける多くの二足歩行ロボットは、言うなら「計算」で歩いています(物議を避けるためスライドは黒塗り)。どこに足を着けば転ばないのかを考え、そのための関節角度を計算し、モータに指令を送ることでロボットを歩かせています。その際、膝を伸ばしきってしまうと関節角度を得るための数式が解けなくなることから、多くのロボットは歩行中に常に膝を曲げています。また、これらロボットの関節はフリーで動かない(振り子にならない)ため、関節の正確な位置と速度の制御によってしか歩行できません。この時、モータは常に駆動しているので、スライドにあるようにエネルギ消費が大きい訳です。

一方、スライドの左の動画にあるPassive Dynamic Walker(受動歩行機械)は真逆の発想で設計されています。上の動画がWebに見つからないため、こちらを参照してください。脚(Leg)のダイナミクス(物理特性)と足(Foot)の構造、環境(坂の角度)の絶妙な組み合わせの中で、自然な歩行が生まれていることが分かると思います。ここにコンピュータやモータは介在していません。人間や生物の歩行も、身体のダイナミクスを用いるという意味では、こちらに近いと言えます。神経系で生成した制御リズムと脚の振り子の周期を調整しながら歩行しているものと考えられます。

ところで、脚・足・環境の相互作用で歩行が生まれることは、ある意味、先に述べたEmergence(創発)とも言えます。また、前回紹介したゴミ集めロボットは、センサがボディの斜め前についているという身体的な特徴を利用しているため、Embodimentして(身体性に基づいて)いるとも言えます。ゴミ集めロボットはセンサ・モータループを介して環境と結合していますので、当然Situate(立脚)しています。こうしたことから、創発、立脚性、身体性という概念は密接に関係していることが分かると思います。

もはや昔の話になりましたが、MITのLeg Labでは脚のダイナミクスを利用した歩行について研究を進めていました。その名もSpring Flamingoです。

Spring Flamingoは、運動の要所要所で制御をかけることで、消費電力を低く抑えることを実現しています。これは人間や動物の歩行(それ以外の動作)でも行っていることで、非常に効率のよい制御方法と言えます。よくスポーツで「肩の力を抜け」と言いますが、省エネ・高効率の運動とは、入れるべきときに力を入れ、それ以外は身体のダイナミクスを利用することを意味しています。

ちなみにMITのLeg Labは、Boston Dynamicsの創業者であるMarc Raibertも在籍していた研究所です。彼は当時ホッピングロボットを研究しており、それが今日のBoston Dynamicsの素晴らしいロボットに繋がりました。

今回議論してきた内容は、生態心理学(Ecological Psychology)の開祖であるJames J. Gibsonが提唱したアフォーダンス理論と非常に親和性が高いものです。Gibsonは、環境を無味乾燥な入れ物ではなく、生物に行動の可能性を与えるアフォーダンスで満ちているものと考えました。生物の行為は、自分が環境内を動いているのか環境に動かされているのか、その両方が真となるような、環境との密接なカップリングのもとに成り立ちます。この時、生物にとっての世界の「意味」や「情報」というものは、環境との相互作用という動的過程における変化するもの・しないものから見出されます。

Gibsonは「自己(意識)」については言及していないかもしれませんが、アフォーダンスの考え方をベースにすると、当然ながら自己も環境(およびインターフェイスとしての身体)と切り離せないものになるはずです。このように、アフォーダンス理論もまたデカルト的心身二元論を超えるものであり、本稿で紹介した知能ロボティクスの考え方と共鳴するものであることは明らかです。

・・・

既にお気づきの方も多いと思いますが、ここで紹介した内容は、Rolf Pfeifer教授とChristian Scheier博士が著した「知の創成」をベースにしているところがあります。この本は私の青春時代の研究活動におけるバイブルでもありました。発刊から20年以上経ち、徐々に古典になりつつありますが、知能ロボティクスの分野においては今でもなお必読の書と言えます。

次回は、知能ロボットの3要素である創発、立脚性、身体性というコンセプトを維持したまま、ロボットの知能をさらに高度化する方法についてご紹介します。

知能ロボットのお話 その2

こんにちは。トロボです。

前回の記事では、ビヘイビアベースドロボティクスについて解説し、人間の認知過程を人間の言葉・世界観(モデル)で実装していないにも関わらず、知的な振る舞いを実現できることを示しました。このことは、知能(精神、意識、心と言い換えても良い)が身体や環境から切り離された次元に存在するという心身二元論的な認知科学を超えて、より客観的で本質的な原理にアプローチできる可能性を示唆するものでした。それが「サイエンスとしてのロボティクス」という領域を切り開くことになった訳です。

エンジニアリング(工学)とサイエンス(科学)の定義はいろいろあるかもしれませんが、ここでは前者が「役に立つことを重視する」のに対し、後者は「本質的な原理に迫ることを重視する」と大雑把に捉えて下さい。今回はサイエンスとして、知能の本質について議論を深めたいと思います。プレゼンシートは前回のものからの続きです。

それでは、ロボット(人間などの生物も含む場合「エージェント」と呼ばれる)における知能の本質的な原理とは何でしょうか。ここでは、Emergence(創発)、Situatedness(立脚性)、Embodiment(身体性)という3つキーワードを紹介したいと思います。以下のシートでそれぞれの考え方について具体的に見ていきます。その他、Adaptability(適応性)やAutonomy(自立性)など、重要な概念もありますが、ここでは議論しません。

まず「創発」という概念について紹介します。Wikipediaでは次のように定義しています。

創発(そうはつ、英語:emergence)とは、部分の性質の単純な総和にとどまらない性質が、全体として現れることである。局所的な複数の相互作用が複雑に組織化することで、個別の要素の振る舞いからは予測できないようなシステムが構成される。

要は、要素同士が局所的に相互作用したとき、思いもかけない全体の振る舞いが立ち現れるということです。上の「Simonの浜辺のアリ」の例では、アリが持つ「障害物があったら右か左に避ける」という単純な行動ルールが、浜辺の複雑な地形と相互作用することで、いかにも知的な移動軌跡が生まれています。「なんだそんなことか」と思われる方もいるかもしれませんが、馬鹿にしてはいけません。大事なことは、環境の作用を無視して知能を考えることはできないということです。

この例は、走光性の単純なセンサ・モータ接続を持ったロボットが、それが故にデッドロックに陥ってしまっている仲間を助けるというものです。はじめに上方にいるロボットが下の2台のロボットの光に引き寄せられて動き出し、最終的にそれらにぶつかり、それによってデッドロックが解れます。それを傍から見ると人助け行動をしているように見えるという訳です。当然ながら、そのようなプログラムはどこにも書かれていません。

この研究は既に20年も前のもので、Webで動画が見つからず残念なのですが、その代り同様の例を以下に示します(別な講演で使用したプレゼンシートから転載)。

これは以下の論文にあるゴミ収集ロボットです。

M. Maris, R. Boeckhorst, “Exploiting physical constraints: heap formation through behavioral error in a group of robots”, IROS 96.

ロボットの構造は単純化すればこのようになっています。では、なぜこのようなセンサ・モータ直結のロボットでゴミが集められるのでしょうか?

答えは、単に正面が見えないからです。正面が見えないが故にゴミを押し続け、そのうちゴミが集まっている場所に出会うと斜め前に付いているセンサが反応してその場を去り、また偶然正面にゴミがあると押し続け、、、それを続けるうちにゴミのクラスターを形成してしまうというものです。

上記の例はいずれも、「他者を助ける」や「ゴミを認識し集める」などといった行動ルールや、他者やゴミ、環境のモデルがプログラムとして書かれているわけではなく、ロボットと環境の相互作用により行動が創発している例と言えます。

創発の最後の例は、有名なBoidsという鳥の群れのシミュレーションです。Boidsでは、個々の鳥に上記①~③の単純な力ベクトルを作用させることで、極めて自然な群れの振る舞いを実現しています。上記リンク内の動画にもあるように、これら単純なルールのみで、群れが半分に別れて障害物を回避し、その後にスムーズに一つの群れに戻ることができています。最近の事情はよく分かりませんが、昔は映画内の鳥の群れのCG制作などに使われていたようです。

上のBoidsは不肖トロボが昔作成したものです。Javaアプレットがブラウザ非対応になったので、Javaアプリケーションに作り変え、さらに動画にしてみました。上記①~③を制御するパラメータを変化させた際に、群れの挙動が変わっていることが分かると思います。なおこのBoidsは勢い余った時には地面に張り付くようになっています。1秒以内のランダムな時間張り付くのですが、その後急ぎ仲間を追いかけるような挙動が生まれていることが分かります。単に群れの中央から離れるため、上記②の力ベクトルが大きくなるだけなのですが、慌てて追いかけているような挙動が創発しています。

上でいくつかの創発の例を見てきました。どの例も、人間が人間の見方で分析した知能をトップダウンで書き込んでいるのではなく、要素同士(環境とロボットの身体構造、鳥同士の単純なルール)の相互作用の中でボトムアップに知的な振る舞いが引き起こされていることが分かると思います。前回の記事における整理方法を用いると、前者がモデルベースド知能、後者がビヘイビアベースド知能ということになります。大事なことは、知的な振る舞いを生じさせる内部メカニズムは、必ずしも人間の認知・分析結果とは一致しないということです。

別な言い方をすると、知能の創発というものは観察者なしでは起こり得ません。物理的には、ある身体構造を持ったロボット(エージェント)が環境と何らかの相互作用をしているだけであり、知能とはそれを外部から見る観察者が、ある意味勝手に解釈するものだからです。これを突き詰めると、「そもそも知能(意識や心)は実在するのか?」、「それを観察している自分自身(自己意識)とは何なのか?」という深淵な問いにも繋がってきます。ただ、これは深すぎるので、ここで議論するのはやめましょう。

・・・

今回は知能ロボティクスを構成する3要素のうち、Emergence(創発)を紹介しました。だいぶ長くなりましたので、Situatedness(立脚性)とEmbodiment(身体性)に関しては次回ご紹介したいと思います。

知能ロボットのお話 その1

こんにちは。トロボです。

先日、バックアップファイルを整理していたとき、今から15年前(2003年)にある地域コミュニティでお話した時のプレゼンシートが出てきました。題して「知能ロボティクスのお話」です。情報は古いですが、考え方としては現在でも通じるものですので、このブログで紹介させていただきます。なお、画像等に関し出展が定かでないものがありますので、著作権者がお気づきになった場合はご指摘いただければ幸いです。

・・・

話は若かりし頃の私がROBODEX(ロボットの大型展示会)に参加したところから始まります。2000年台初頭は、今のAIブームのようなロボットブームであったため、各社斬新なロボットを開発し、会場は非常に賑わっていました。

特にソニーさんやホンダさんの人型ロボットは、当時の先端技術の粋を集めたもので、これからのロボット社会の到来を感じさせるに十分なインパクトがありました。

ただ、未来のロボット社会を純粋に夢見る一般の方とは違い、設計者・研究者は、ロボットが人間と同じように振る舞うために超えなければならないハードルが数えきれないくらいあることを十分に理解していました。その中でもとりわけ「知能」の実現が大きな課題であると認識していました。

ではロボットにおける「知能」とは何でしょうか。この図は、センシング能力(知覚)と行動能力(働きかけ)が必須であることを示しています。センシングのみでは単なるセンサであり、行動(アクチュエーション)のみでは単なる機械であるため、知覚と行動を通して間断なく外界とやりとりすることで初めて知能ロボットと言える訳です。

ここでロボットにおける知能の歴史を確認します。ロボット自体の歴史は、日本のカラクリ人形やヨーロッパのオートマタ(機械人形)からの流れもあると思いますが、こと「知能」という側面では、デジタルコンピュータに端を発していると言ってよいと思います。コンピュータの応用により後述する古典的人工知能が生まれ、それを頭脳にすることでモデルベースドロボットが生まれました。そして、そのアンチテーゼとして登場したのがビヘイビアベースドロボットです。

※本記事の最後に述べるように、モデルベース/ビヘイビアベースの区分は現在ではあまり意味を持たなくなっています。ただ、その考え方を整理しておくことは、知能の本質に迫るためには重要です。

デジタルコンピュータを頭脳とすると、そこで扱う記号とその演算から「知能」が成り立つと考えるのは自然なことです。これは、単語と文法の構造から言葉を研究する言語学(特に普遍文法が言語の背景に存在するというチョムスキー的な言語学)と類似するものがあり、一定の説得力を持っています。そのため、コンピュータ上の記号処理で知能を作ることが人工知能研究の中心的なアプローチになりました。これを「古典的人工知能」と呼びます(記号主義AIとも言います)。

こうした流れから、人と会話できることが知能とみなされ、対話プログラムELIZAのような成果が生まれました(エディタのEmacsにも遊び心で入っているようです)。映画「2001年宇宙への旅」で登場するHAL(人工知能コンピュータ)などは、人と会話するだけでなく最後は意志を持ってしまい、その脅威から人工知能という概念を普及させるのに大きな役割を果たしました。

※2003年頃の対話エンジンはチープでしたが、近年の発展はめざましく、膨大なデータを背景としたディープラーニングによる単語やフレーズのベクトル化、イメージデータと融合した意味理解などを活用し、もはや人工無能と笑えないレベルになっているように思います。

上述した古典的人工知能はコンピュータ上で動くため、コンピュータ(=脳)をロボット(=体)に載せようというのは極めて自然なアプローチです。また、コンピュータ上のプログラムを精神や心と考えると、「精神が体を動かす」ことになり、デカルト的心身二元論によってお墨付きを得ることになります。このような思想的背景から生まれたのがモデルベースドロボットです。モデルベースの設計では、ロボットに搭載されたコンピュータ内に世界のモデルや行動規範をプログラムとして“書き込む”ことで知能を実現します。

ここで、モデルベースドロボットに強烈なアンチテーゼを唱えた研究者がいます。後にルンバで有名なiRobot社や協働ロボットのRethink Robotics社を創立したMITのRodney Brooks教授です。Brooks教授は1980年台にビヘイビアベースドロボティクスを提唱し、ロボットを制御するコンピュータ内に「世界(モデル)」を記述するのではなく、センサ読み取り値に対する反射系の集まり(単純な動作パターンの階層的な切り替え含む=サブサンプションアーキテクチャ)で十分な知能が実現できるとしました。実際に、彼が発表した虫型ロボットGenghisは、モデル化が難しい環境を滞りなく進むことができました。

ビヘイビアベースドロボティクスでは、知能とはプログラムとして実装するものではなく、ロボットが環境とうまく相互作用する様子から観察者が見いだすもの、という立場をとります。この考え方は心身二元論を超えるもので、「知的な振る舞いに精神は不要」ということを意味します。そうすると、いったい人間の知能とは何なのか、心は実在するのか、などといった、より深遠な議論にも繋がってくる訳です。Brooks教授の論文を集めた「Cambrian Intelligence」は今読んでも非常に示唆に富んでいます。

ここで、モデルベースド/ビヘイビアベースドロボットの方法論の違いに関し、タスク実行の観点から議論してみたいと思います。上の例のように環境内をStartからGoalまで二輪のロボットを動かす実験を考えてみます。

このタスクを実行するロボットをモデルベース的に実装すると、ロボットにカメラを載せ、その画像情報から障害物を認識、その見え方を予め保持している環境地図(モデル)と比較することで自己位置を推定、自己位置とゴール位置から適切な移動経路を計画、そしてその結果に基づき車輪を回す、という処理を毎ステップ繰り返すことになります。

現在のプロセッサを用いれば、これを実行するのはたいして難しくないかもしれませんが、いずれにせよ計算量は少なくありません。また、環境地図を予め書き込んでしまっているため、環境の変化に対応するには地図を随時書き換える仕組みが必要になります(誰がいつどうやるのか、こちらのほうが今でも問題かもしれません)。

このように、モデルベース手法を用いると、言わば頭でっかちで、あまり融通がきかないロボットになりがちです。一方で、行動が目的達成のための全体計画にしっかり基づくため、最適な行動を採りやすいという利点もあります。

一方、ビヘイビアベースの発想でロボットをデザインすると、このようになります。センサ・モータ直結という考え方で、センサがアクティブになったときに、モータを正回転または逆回転させるのかを設計するだけになります。後は環境内で実際に動かし、よりスムーズに動くようにセンサの位置や数などの調整を行っていきます。

つまりビヘイビアベースドロボットは、ロボットの身体構造がそのままタスク達成のためのデザインになっており、非常に効率的な設計になっている訳です。一方で、大域的な目標達成計画を立てることが苦手であり、局所的な解(地図でいうと袋小路)に陥ることや、無駄な行動(行ったり来たり)が多く目標達成に時間がかかるという欠点もあります。

モデルベース/ビヘイビアベースの知能をグラデーションとして表すとこのようになります。特に説明は不要かと思います。

このスライドは誤解を生みそうですが、言わんとしていることは、コンピュータを頭脳としてロボットを動かす際には注意が必要ということです。コンピュータプロラム内のモデルは、往々にして人間が人間目線で整理した内容を、人間が分かりやすい形で記述されます。例えば、コンピュータ内において環境の地図はX-Y平面として描かれ、ロボットや障害物の位置はそこにおける座標として表現されますが、この記述は知能を実現する上で本当に妥当なのか、ということです。

本質的な知能にアプローチするには、人間による分析結果を実装するのではなく、ロボット自身がロボットの身体を使って世界のモデルを獲得するような設計にすべきです。対話を中心にコミュニケーションするロボットを例に取ると、設計者がロボット内に記述した単語がロボット自身にとってどういう意味を持っているか、おそらく何も意味のない記号になるはずです。例えばロボットが「熱い」という概念を本質的に理解し、発話の中に的確に組み入れるには、温度センサを持ち、かつ「熱い」ということが生命の危機(故障や破壊)に繋がるようなことでないと、人間と意味を共有できないのではないかと思います。

最近、ディープラーニングの文脈で東京大学の松尾豊教授が使う「子どもの人工知能」「大人の人工知能」という概念は、上記の議論に類似するところがあります。
http://www.soumu.go.jp/main_content/000400435.pdf (P.23)

これも大胆な割り切りのスライドですが、なかなか的を射ていると思います。設計者が人間の知能を分析した結果をそのまま実装するするのがモデルベースド知能、設計者がロボットなりの知能を発現させる内部メカニズムを構築するのがビヘイビアベースド知能と言うことができます。ただ実際は、これらをハイブリッドする手法や確率ロボティクスなどの中間的な手法もあります。確率ロボティクスは、ベイズ推定を用いることで、不完全なモデルしか持っていなくても逐次的に得られるセンサ情報から自身の状態をそれなりに推定できるという枠組みです。この方法は、ここ15年でSLAM(simultaneous localization and mapping)として確立され、工場内の自動搬送車などにも使用されるようになりました。

長々と議論してきましたが、実のところ、今やビヘイビアベースとモデルベースという整理の仕方自体があまり意味を持たなくなりました。現在のコンピュータは十分高性能で、データベースクラウドとも高速に繋がり、画像処理もFPGAやGPUで高速に実行できるようになっています。そのため、モデルベースドロボットが実世界で十分よく動けるようになり、ビヘイビアベースもモデルベースも目標とするタスクをよりよく遂行するための一手法として同列になったからです。ただ、ビヘイビアベースドロボティクスは知能の本質に迫ったため、「サイエンスとしてのロボティクス」という新しい領域を切り開くことになりました。次回からはそれについてお話ししたいと思います。

材料の話 チタン合金について

こんにちは、トロボです。

今回は材料についてのお話です。
ロボットではアルミ合金や鋼が使われることが多いと思いますが、ここではチタン合金について説明します。

チタン合金は文字通り、チタンを主成分とする合金です。チタンは鉄とアルミのちょうど間程度の比重で、金属の中でもトップクラスの非強度を持っています。さらに表面に酸化皮膜を作るため耐食性が良く、また熱にも強いという性質も持っています。
これらの特徴より、チタン合金は航空・宇宙機体をはじめ、スポーツ用品やメガネなど様々な分野で使用されています。特に航空機分野では、機体やエンジン部に多く用いられています。

そこで今回は、様々な種類のチタン合金とその性質について説明します。

純チタンの結晶構造は、低温域では六方最密構造(α相)ですが、882℃以上で体心立方構造(β相)になります。チタンにβ相安定化元素を加えていくと、常温でもβ相が存在するようになります。
常温でα相の割合が100%近いものをα型合金、β相の割合が100%近いものをβ型合金、また両者が共存するものをα+β型合金など呼びます。

以下にそれぞれの合金の特徴を挙げます。

α型合金

  • 高温強度・耐食性・耐熱性・クリープ特性などに優れる。
  • ヤング率がβ型よりも高い
  • 加工性が悪い
    • α型合金は、高温でも低温でも安定した強度を持ち、耐食性が良いため、ロケットなどの燃料タンクや航空機エンジン、プロペラシャフトなどに用いられます。ロボットを過酷な環境下(高温や海水など)で動かす場合、有効な材料となるかもしれません。

      β型合金

      • ヤング率が低い
      • 加工性に優れる
      • 熱処理により高強度化できる

      β型合金は、低ヤング率と高強度を生かして、ばねや釣具、メガネフレームなどに利用されます。あまり流通しておらず、加工業者でも手に入れるのが難しいようです。

      α+β合金

  • α型とβ型の間の特性をもつ。添加する金属の比率により特徴が変わる。
  • α+β合金の代表的なものとしてTi-6Al-4V合金(通称64チタン)があります。これはヤング率、強度ともに非常にバランスの良い特性を持っており、流通量も多いです。航空機の構造材を始め、スペースシャトルや原子力産業、医療用の人工骨など、様々な分野で用いられます。

    α、β、α+β合金は、おおよそ以下の表のようにα相とβ相の比率に従って特性が現れます。α,β安定化元素の割合をそれぞれ調整することで必要な特性を得ることができます。

    これらの合金の特性とは違う、特殊な性質を持つ合金についても説明します。

     

    Ni-Ti 合金(形状記憶合金)

    形状記憶合金は、形を変えても一定温度以上になればもとの形に戻る金属です。

    その中でも多く実用されているものがNi-Ti合金です。一定の温度(変態温度)より高温側ではオーステナイト相、低温側ではマルテンサイト相になっています。マルテンサイト相に一定以上の応力を加えると、除荷後にもひずみが残ります。しかしここで変態温度以上に温度を上げると、オーステナイト相になり、ひずみが解消されます。これを形状記憶効果と言います。

    この変態温度以上では、応力を加えて通常の弾性域の10倍程度まで変形させても除荷すると元の形に戻ります。これを超弾性効果と言います。この時、応力に対して以下の図のように非線形的なひずみを示します。

    この変態温度は、ニッケルとチタンの割合を変えることで変えることができるので、室温で変態温度以上になるようにすれば、室温で超弾性の性質を使うことができます。

    Ni-Ti合金は、形状記憶効果を活かしたばねや内視鏡、超弾性効果を活かしたメガネフレームやアンテナ、歯科矯正などに用いられています。

    超弾性を活かし、ロボットの指先などに使うこともできるかもしれません。

    引用:(株)豊田中央研究所公開資料

    ゴムメタル

    ゴムメタルは豊田中央研究所により開発されたβ型チタン合金の一種で、Mg合金並の低ヤング率と塑性変形を始める応力が1GPa以上と高く、非常に弾性範囲が広い合金です。加工性や耐食性にも優れ、幅広く使用されています。

    ゴムメタルは冷間加工しても全く加工硬化せず、延性も低下しません。熱処理された状態だとヤング率・強度ともに高いものとなるのですが、冷間加工を施すことにより、低ヤング率の超弾性特性が現れます。

    ゴムメタルは、メガネのフレームを始め、歯科矯正、ネジ、ゴルフクラブなどに利用されています。

    ロボットの代表的な使用例としては、早稲田大学のTWENDY-ONEがあります。関節部の受動柔軟機構にゴムメタルが使用されており、人間のような柔らかさを実現しています。

    https://www.jstage.jst.go.jp/article/jrsj/31/4/31_31_347/_pdf

    引用:(株)豊田中央研究所公開資料

    以下にそれぞれの主要特性と、特徴を示します。

    *弾性変形能:弾性変形範囲の伸びの割合

    同じチタンからなる合金でも、このように性質が大きく異なることがあるので、チタン合金を応用する際には、それらの性質を知っておく必要があるでしょう。

    チタンが金属材料として用いられるようになったのは比較的最近で、高価なためロボットであまり使われることはありませんが、今後これらの特性を生かしたロボットが登場してくるかもしれません。

    以上、少々特殊な材料のお話でした。

メカの話-減速機②

前回に引き続き,ハーモニックドライブ®を使った設計に際して留意する点をお話させて頂きます.

簡単な原理説明

前回も簡単に紹介しましたが,ハーモニックドライブ®はウェーブジェネレータ(WG)・フレクススプライン(FS)・サーキュラスプライン(CS)の3部品で構成されています.

楕円形状のWGがFSの内側で回転し,その楕円形状に沿ってFSが変形,FSの外側にある歯とCSの内側の歯がくさびを打ち込まれるようにして次々に噛み合っていく,といった原理です.

ハーモニックドライブ®を選定する際の注意点

ハーモニックドライブ®を選定する際にまず重要なのは許容トルクです.(その他のギアを使用する際にも当然重要ですが)ハーモニックドライブ®の性質上,FSは弾性変形しながら動力伝達を行います.そのため,FSにかかる応力が特に重要になります.

金属材料には弾性域と塑性域が存在し,その境目の応力を降伏応力と呼びます.さらに繰り返し応力がかかる場合には金属の強度は公称降伏応力値の1/7~1/8まで(アルミ等の非鉄金属であれば更に)低下します.ハーモニックドライブ®,ひいてはロボットを長期間の使用に耐えられるようにするためには,この金属疲労について考えなければなりません.製品の技術資料の許容トルク,強度や寿命に関しての記載を参照しつつ,型番を選定する必要があります.

また衝撃等,過度な外部トルクが印加された際には,FSとCSの歯がずれてしまう「デドイダル」が発生してしまうので注意が必要です.

減速機としての使用法について

一般的には以下のように設計を行います.

WG:入力軸
FS:出力軸
CS:ハウジングに固定

この場合,減速比は公称値(1/50, 1/100等)となります.
これとは別に,

WG:入力軸
FS:ハウジングに固定
CS:出力軸

といった設計も考えられ,この場合には減速比が変わる(1/51, 1/101等)ので注意が必要です.

他にも入力軸と出力軸を入れ替え,増速を行うといった使い方も考えられますが,一般的ではないでしょう.

コンポーネントタイプとユニットタイプの差異

ハーモニックドライブ®にはコンポーネントタイプとユニットタイプがあります.

WG・FS・CSのみがバラバラの状態で納品されるのがコンポーネントタイプであり,この3部品に加え,ハウジング・シャフト・ベアリング・オイルシール等が高精度に組み上げられた状態で納品されるのがユニットタイプとなります.

薄型・中空・軽量タイプといったものから,半ユニット製品など,バリエーションも豊富にありますので,設計にあったタイプを選ぶことができます.

ハウジング周りの設計・組立について

弊社ではコンポーネントタイプを好んで使用しています.それはハウジングやシャフト等,周りの形状を最適に設計できるため,トルクセンサ・モータ・エンコーダ等,ロボットの構成要素を高密度に組み込むことができるからです.(ちなみにトルクセンサやエンコーダ基板は内製,モータもフレームレスモータを使用する等,他の要素周りにおいても最大限に高密度化を図っています.)

逆にハウジングやシャフト等の設計・加工・組立を自分で行う必要があるため,難しい点もでてきます.

ハーモニックドライブ®のアセンブリを考えた時に最も大切なのが各部品の組付け精度です.同軸度や直角度を厳密に出して加工する必要があります.技術資料に推奨公差が載っていますので参照しながら設計を行います.

更に,たとえ個々のパーツの精度が出ていたとしても組み込みの際に極小の金属片等が挟まってしまったり,ボルトを均等に千鳥締めしなかったりなどしただけでモーションに大きな影響を与えてしまうことがあります.

精度が出ていないまま使用すると,バックドライブ(出力軸に力をかけて入力軸を回すこと)させた際に入力軸側180deg毎の周期で大きな脈動を感じるようになります.これはWGが楕円形をしているため,その周期で摩擦による大きなトルク変動が生じるのです.

ソフトウェアによる制振にも限界があり,そもそもハードウェア側で大きな振動が生じている状態ですと振動を取り切れない場合がほとんどです.高精度なロボットアームを製作するためにはソフト・ハード両面からトルク変動を抑制していくことが不可欠です.

 

以上,設計時に気にする点をざっと紹介させて頂きました.

より詳しいことを知りたい方はハーモニック・ドライブ・システムズ社のHPから製品の技術資料をダウンロードできますので,そちらをご参照ください.

メカの話-減速機①

こんにちは,トロボです.
今回からは少々メカの話をさせて頂きます.

ロボットに使用される駆動部として最も主流なのが電動モータです.制御性が良く,取り扱いが容易であることがその理由ですが,一般に電動モータの出力は高速回転・低トルクです.一方,ロボットに求められるのは低速回転・高トルクである場合がほとんどであり,この性質を変換する機構が減速機です.

今回はこの減速機,中でも精密駆動ロボットによく使われる
・ハーモニックドライブ®
・サイクロ®減速機
・RV®
の3種類について,ざっくりと紹介したいと思います.

ハーモニックドライブ®
ハーモニック・ドライブ・システムズ社の製品です.一般名称としては波動歯車装置と呼ばれる,金属の弾性を利用するという特殊な減速機です.

特徴は以下

・ノンバックラッシ
ハーモニックドライブ®は歯車の噛み合いが転がりではなく,次々にくさびが押し込まれるような独特な噛み合い方式によって,ノンバックラッシを実現しています.ちなみにより一般的な減速機であるプラネタリギアは1°ほどのバックラッシがあります.

・小型軽量
たった3部品から構成されており,コンパクトな機構です.大きさの観点からハーモニックドライブ®が選定されることも多いでしょう.中空製品が揃っている点もロボットに適していると言えます.可搬重量10kg以下の小~中型ロボットによく使用されており, Torobo,ToroboArmにも多く使用されています.

サイクロ®減速機
住友重機械工業社製の精密減速機です.図のように内接式遊星歯車機構と等速度内歯車機構を組み合わせた構造を持っています.偏心体を回転させることで,揺れ動く曲線板の動きを,カムを介して出力軸である内ピンに伝達しています.

特徴は以下

・ノンバックラッシ~低バックラッシ
原理的に(エピトロコイド平行)曲線板が外ピンの全てに常に接触しながら転がり接触するため,回転が滑らかで低バックラッシです.

・高剛性
上記と同じ理由により,高い出力軸の剛性を持っています.減速機に高負荷がかかった時,ねじれによる位置ずれが無視できなくなります.そのため高負荷環境下では剛性も精度に関わる重要な要素となります.

多数の部品を使用するため,ハーモニックドライブ®比較して大型となりますが,高剛性で衝撃にも強い点から,比較的大型のロボットで採用されています.

RV
ナブテスコ社製の精密減速機です.原理としてはサイクロ®減速機と似ており,クランクシャフト(偏心部)の回転によってRVギアを揺れ動かし,カムを介して出力軸に伝達しています.

特徴は以下

・低バックラッシ
第1減速部と第2減速部の入れ子構造を持つ減速機であり,減速比はそれそれの減速比の積となります.第一減速部がプラネタリギアと同じ構造を持っているため,バックラッシが発生しますが,出力軸でのバックラッシは1/(第2減速部の減速比)となるため,結果として低バックラッシとなります.バックラッシは1[arc min]以下(RV-006E 減速比103)とのこと.

・高剛性
サイクロ®減速機と同じく,同時噛み合い数が多いため過負荷に強い構造を持ちます.

・減速比が自在
第1減速部の歯数比を変えることにより容易に減速比を変えることができます.

ロボットなど精密動作に使われる減速機として,世界シェア60%を誇ります.最も安定性と信頼性をもつ精密減速機と言えるかもしれません.

 

以上,精密減速機3種類についての概要でした.

基本的には
小型・・・ハーモニックドライブ®
中型~大型・・・サイクロ®減速機またはRV®
といったところでしょうか.

Toroboでは主にサイズの面から,ハーモニックドライブ®を採用しています.
次回はこのハーモニックドライブ®について,設計の視点から改めて紹介したいと思います.

『ROS+シミュレータ(Gazebo)』のPID制御をチューニングする方法

こんにちは、トロボです。前回の続きです。

今回は、『ROS+シミュレータ(Gazebo)』のPID制御をチューニングする方法について説明します。

なお、ROS_ControlのPID制御の詳細についてMoriKen氏が丁寧に説明してくださっています。ここではその情報を拝借しながら、私が実際にROS+Gazeboで試した所感も踏まえて概要を説明させていただきます。

ROS_Controlでは、Gazeboのロボットアーム関節(Joint)に入力する操作量として「①位置(Position)操作」「②速度(Velocity)操作」「③力(Effort)操作」の3種類のいずれかを選べます。Gazeboに渡すtorobo.transmission.xacroファイルのhardwareInterfaceで設定します。例えば下記では速度制御にするためにVelocityJointInterfaceと記載しています。

<robot xmlns:xacro="http://ros.org/wiki/xacro">
  <xacro:macro name="arm_simple_transmission" params="name reduction">
    <transmission name="${name}_transmission">
      <type>transmission_interface/SimpleTransmission</type>
      <actuator name="${name}_motor">
        <mechanicalReduction>${reduction}</mechanicalReduction>
        <hardwareInterface>PositionJointInterface</hardwareInterface>
      </actuator>
      <joint name="${name}_joint">
        <hardwareInterface>PositionJointInterface</hardwareInterface>
      </joint>
    </transmission>
  </xacro:macro>
</robot>

ここで注意が必要なのが、「①位置(Position)操作」を選ぶとPID制御とはならないということです。なぜなら、関節(Joint)の位置を操作しても、速度や力は決まりませんよね。そのため、「①位置(Position)操作」を選んだ場合は下図のように、Gazeboに対して速度目標値や力目標値は与えられず、位置目標値をGazeboに転送するだけとなります。下図の黄色いブロックはROS_Control、黒いブロックはGazeboです。

すなわち、ROS_ControlのControllerと、GazeboのJointInterfaceとの関係は、下表のようになっています。

  Gazebo Position I/F Gazebo Velocity I/F Gazebo Effort I/F
Position Controller
Velocity Controller ×
Effort Controller × ×

次に、Gazeboのロボットアーム関節(Joint)に入力する操作量として「②速度(Velocity)操作」を指定した場合を説明しましょう。この場合はPID制御ループが実現されます。下図はJoint Position Controllerからの位置目標値との位置偏差が小さくなるようにPID Controllerが速度操作量を制御します。

ここにさらにJoint Velocity Controllerをつなげたらどうなるでしょうか。下図のように位置偏差だけでなく速度偏差も小さくなるようにPID Controllerが速度操作量を制御します。

なお、PID Controller (Velocity I/F用)は内部で位置偏差にKpゲインを掛けることで速度偏差に変換しています。速度偏差に対してはKdゲインを掛けています。そして位置偏差の総和(積分)に対してはKiゲインをかけています。すなわち、下記の式によるPID制御を行っています。下記式のeはJointの位置(=関節角度)を表します。

このKpKiKdの3つのゲインをチューニングすれば実機の動作に近づけることができます。これらはroslaunch時にrosparamとして読み込ませるyamlファイルで指定することができます。

toroboarm:
  Position Controllers ---------------------------------------
  joint1_position_controller:
    type: position_controllers/JointPositionController
    joint: first_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}

実際にチューニングを試した所感ですが、ROS_ControlのPID制御ではうまく制御できないことが多くありました。GazeboEncoderから取得される速度値を見ると振動しているため、PID制御のような高周期では速度制御が難しいのかもしれません。

回避策として、PID制御をやめて「①位置(Position)操作」を選ぶのも1つの手です。「位置操作では速度目標値を指定できないため実機の挙動と合わせられないのでは?」という疑問が残るかと思います。ROS_ControlではJointTrajectoryという遷移時間を含んだメッセージをサポートしており、これを使えば速度目標値を指定できます。このJointTrajectoryについては、ROS_ControlではPID制御を行わずにTFライブラリによる軌道計算を行ってロボットアームのJointの位置制御をしているものと思われます。

以上、長くなりましたが、『ROS+シミュレータ(Gazebo)』のPID制御のチューニング方法をメインに解説してきました。シミュレータと実機の挙動を完全に合わせることは難しいですが、『ROS+シミュレータ(Gazebo)』をより多くの分野で活用できるように知見を深めていきたいと考えています。ありがとうございました。