Blog
こんにちは。リサーチャの康です。PFNではソフトウェアだけでなく、ハードウェアについても積極的に研究開発を行っています。その中でもロボットハンドは重点的に取り組んでいるテーマの一つです。本日はこの度IEEE Robotics and Automation Lettersに採択され、2020 IEEE/RSJ International Conference on Intelligent Robots and Systemsでも発表する予定の論文である”A Tendon-driven Robot Gripper with Passively Switchable Underactuated Surface and its Physics Simulation Based Parameter Optimization”(arXiv)について、著者として概略を説明したいと思います。
劣駆動クローラを指面に持つ腱駆動ハンド
人間の手は極めて精巧にできており、その器用さ、力強さ、頑健さを同時に再現できるロボットハンドはまだ登場していないのが実情です。産業用途では、コストや頑健さなどに対する制約から器用さを諦めて単純なパラレルグリッパを使う例が未だ支配的ですが、少量多品種生産の増加や、今までロボットが活用されてこなかったシーンへロボットが導入されるにつれ、これまでの機構では不十分な場面が増えつつあります。
人間の手に出来て、パラレルグリッパに出来ないことの一つがインハンドマニピュレーションです。人間は手中で自在に物体の姿勢を変えることによって多様なタスクを実現できますが、その中でも重要なのが持ち上げ動作における把持形態の切り替えです。机や床などの硬い面の上に置かれたコインを自分の指で拾って移動することを想像してみて下さい。面が邪魔していきなりしっかり持つことはできないので、まず指先で摘み上げると思います。一方でその摘んだ状態でコインを移動させることは少なく、大抵は無意識のうちにインハンドマニピュレーションを行ってより安定した形態に持ち替えているのではないでしょうか。パラレルグリッパではこのような動作を行うことができないため、最初からしっかり掴めるように治具でワークを持ち上げるなどのお膳立てが必要とされ、運用上の大きな制約となっています。
今回提案するハンドの機構は、ハンドの指表面にクローラを取り付けることによってワークをハンドに「引き込む」ことを可能にし、硬い面上に置かれた薄いワークをしっかりと掴めるようにしたものです。これまでにもクローラやローラを有するハンドは多く提案されてきましたが、今回の特徴はクローラを駆動するために独立した別アクチュエータを用意する必要がなく、関節駆動用のメインアクチュエータからトルクを分岐して劣駆動できるようにしたことです。アクチュエータの数を削減できることはコストや信頼性、システム側のIO数の制約などの上で大変重要な性質です。
提案するハンドの機構を下図(左)で説明します。基本的には腱駆動の対向2指ハンドであり、モータによってベルトを巻き取っていくとハンドが閉じる仕組みです。ここで特徴となるのが、駆動ベルトが一部指表面に露出していることと、通常フレームに固定されるはずのベルト終端部がバネと当て止め機構によって可動するようになっていることです。これがもたらす動きについて、下図(右)で説明します。最初ワークにアプローチしようとハンドを閉じる際には、終端部はバネの力によって当て止めに押し付けられて動かないため、通常のハンドと同じような動きをします(a)。指先がワークに接触し、更にモータでベルトを巻き取っていくと、関節はワークとの接触によってそれ以上曲がらないため、腱張力が終端のばね力を超えた時点から終端部が動き始めます。指表面に露出しているベルトは、終端部が動くとワークを引き込む方向に動くように経路を工夫されているため、ワークを引き込みます(b)。終端部がもう片方の当て止めに当たると、これ以上ベルトがスライドしないので、モータのトルクは全て関節トルクとしてワークの把持のために余すことなく利用されます(c)。こうして、把持動作の進展に合わせてクローラの動きを切り替えることが、ユーザによる制御も別アクチュエータによる駆動もなしに全て受動的に行われます。
なお、駆動用のベルトをワークと積極的に接触させることには耐久上の懸念があり、注意を払って設計する必要がありますが、搬送用のベルトを用いて規定張力を守った運用をすることによって、手元では10万回の耐久試験を行ったあとも特段劣化が見られない程度には耐久性を有することが確認できています。
Optunaによる設計パラメータの最適化
上記のような機構は概念的には単純ですが、実際の設計に落とし込むために設計パラメータを定めなくてはなりません。具体的には、各リンクの長さ、関節中心からベルトまでの距離(モーメントアーム)、終端部分のばね定数などです。所望する動きを受動的に行わせるためには各パラメータが絶妙なバランスの上に成り立っている必要があり、これを見つけるのは容易なことではありません。ましてやハードウェアですので、一回一回の試行ごとに試作と物理的な実験を繰り返していたら大変な時間とコストが掛かってしまいます。このような場合にシミュレーションと最適化の技術が威力を発揮します。
ロボットハンドは構造が複雑なので、設計の最適化に対する需要は古くからあり、すでに多くの先行研究が存在しています。しかし多くの場合、指とワークとの接触点が予め決まっていたり、途中で変化しないことが前提とされているため、今回のようなインハンドマニピュレーションを含む把持動作に適用することができません。また、解析的に把持の性能を導出することも困難です。そこで、アプローチから持ち上げまでの一連の動きを物理シミュレータ内で実行し、把持完了後のスコアが高くなるようにブラックボックス最適化を適用することとしました。
シミュレータ内で複数のワークを把持させ、持ち上げた高さをスコアとします。ワークには持ち上げられた高さに強度が比例したランダムな方向の外乱を与えることで、持ち上げ高さと把持の頑健さを紐付けます。最適化問題としては、以下のように定式化できます:
\[ \boldsymbol{\theta}_{\tt opt} = \mathop{\rm arg~max}\limits_{\boldsymbol{\theta}} \prod_{i=1}^n \left( 1+ \frac{1}{m}\sum_{j=1}^m h_j(p_i, \boldsymbol{\theta}) \right) \]
\(\boldsymbol{\theta}\)が求めようとしている設計パラメータです。\(h_j(p_i, \boldsymbol{\theta}) \)はワーク\(p_i\)について、パラメータ\(\boldsymbol{\theta}\)の元で把持を試行した場合の持ち上げ高さを表しています。外乱の方向はランダムなので、\(m\)回試行した平均をとります。\(n\)種類のワークについてそれぞれ試行したものの積を最終的なスコアとし、これを最大化する\(\boldsymbol{\theta}\)を求めます。
最適化ツールとしてはPFNで開発しているOptunaを、シミュレータとしては解析的に求めた関節の挙動とPyBullet*1の剛体シミュレーションを組み合わせたものを用いました。求められた最適なパラメータ下での把持シミュレーションの様子を下図に示します。およそ1000回の試行で最適値を得ることができました。
最終的なハンドの動きがこちらです。
今後、今回開発したハンドの実用化と並行してハードウェア設計最適化手法の水平展開についても進めていく予定です。
*1 E. Coumans and Y. Bai, “Pybullet, a python module for physics simulation for games, robotics and machine learning,” http://pybullet.org, 2016–2019.