見出し画像

MediaPipeのハンドトラッキングによるロボット義手の制御 - Mirru

以下の記事を参考にして書いてます。

Control your Mirru prosthesis with MediaPipe hand tracking

1. Mirruとは

Mirru」は、ハンドトラッキングによってロボット義手を制御することができる、開発中のオープンソースのAndroidアプリです。

画像1

このアプリを使うことで、ユーザーは自分の手の動きを、ロボット義手に即座に反映させることができます。ロボット義手は3Dプリントされ、低コストで組み立てることができます。「Mirru」では、既存の高価で煩雑な独自技術に代わる、安価で直感的かつオープンなエンドツーエンドの技術を提供したいと考えています。

画像2

「Mirru」チームは、Violeta LópezとVladimir Hermandの2人で構成されています。彼らは、現在パリを拠点に活動する独立したデザイナー兼技術者です。このプロジェクトをスタートさせるため、「Tweag」の「Open Source Fellowship program」に参加しました。このプログラムでは、資金、メンターシップ、エンジニアの一人であるDorran Howellによるデータエンジニアリングの専門知識が提供されました。このフェローシップのおかげで、「Mirru」はゼロからのスタートを切ることができました。

最初の3カ月間の目標は、コンピュータビジョンを用いて、Bluetooth対応のオープンソースなロボット義手を制御できるAndroidアプリの初期バージョンを開発し、「Google Playストア」で無料で提供することでした。これにより、誰もが自分のロボット義手をプリントして組み立て、アプリをダウンロードできるようになります。

2. なぜハンドトラッキングを使うのか?

スマートフォンの前面カメラとハンドトラッキングを使用することで、ロボット義手を制御するための、手頃な価格で汎用性の高い新しい手法が生まれます。

例えば、私が左手の切断者で、ロボット義手を持っているとします。私は毎日、ロボット義手を使ってさまざまなグリップパターンを操作する必要があります。例えば、小さなものを摘む時にはピンチグリップやトリポッドグリップ、果物やコップなどを摘む時にはフィストグリップを使う必要があります。筋電センサーは、上肢の筋肉を曲げたり緩めたりすることで、グリップを開いたり閉じたりすることができ、これらのグリップパターンを変化させて実行しています。この筋電センサーは、私の身体と義肢間の主要なインターフェースです。

しかし、彼らと一緒に生活することは、思っているほど簡単ではありません。筋電センサーの操作には慣れるまでに時間がかかり、多くの人は慣れません。また、このセンサーを義肢装具士に装着してもらうには、かなりの費用がかかります。特に発展途上国の人々や、健康保険に加入していない人々にとってはなおさらです。さらに、現在販売されている多くの機器では、グリップの種類が10種類以下に限られており、カスタムメイドのグリップを作成できる機種も限られています。

「Mirru」はその代替となるインターフェースを提供します。多くの人が利用しているスマートフォンを使って、ユーザーはリアルタイムに自分の手をデジタルで映し出し、直感的な方法でロボット義手とコミュニケーションをとることができます。これにより、義肢装具士による高価なフィッティングの必要性がなくなり、ユーザーは無制限のグリップを素早くプログラムすることができます。今のところ「Mirru」は、信頼性の高い筋電センサーが高価であるため、筋電図を一切使用していません。プログラムされたグリップは、Androidを介してトリガーされる必要があります。そのため、このアプリの最初のバージョンは、掃除をしたり、本を読みながら持ったり、カップやショッピングバッグを持ったりするような動作に適しています。将来的には、筋電センサーとハンドトラッキングを組み合わせて、両方の利点を生かしたいと考えています。

「Mirru」でグリップをプログラミングすると、以下のようになります。例えば、ロボット義手で物をつかみたいとします。私のロボット義手を対象物に近づけ、Androidの前で私の健全な手で希望のグリップを作り、「Mirru」がそれをリアルタイムでロボット義手にミラーリングします。この新しいグリップをロボット義手で再生し、健全な手を自由にします。最後に、このグリップを後で使うために保存することもできます。

画像3

3. Brunel Hand と Mirru Arduino Sketch

できるだけ多くの人が自分の手をプリントし、組み立て、操作できるようにするという目標を達成するために、「Mirru」は、Bluetooth対応のArduinoボードとサーボモーターで制御するあらゆるロボット義手と互換性があるように設計されています。

今回のプロジェクトでは、「Open Bionics」の「Brunel Hand」というオープンソースのロボット義手をプリントし、組み立てました。まず、「CC Attribution-Sharealike 4.0 International License」で公開されているBrunel Handの3Dプリント用ファイルを3Dプリントしました。そして、必要なサーボやバネ、ネジなどを購入し、ハンドを組み立てました。印刷とサーボの購入を合わせて、ハンドの購入と組み立てには約500ユーロかかりました。

「Brunel Hand」には、「Open Bionics」が開発した筋電図ベースのファームウェアとPCBボードが付属していますが、基本的には4つのサーボモーターだけなので、どんなマイクロコントローラーでも使用可能です。私たちは最終的に、Bluetoothを備えた「Adafruit ESP32 feather」ボードを使用し、自分の手をプリントして組み立てる人がダウンロード、カスタマイズ、アップロードできる「Mirru Arduino Sketch」を作成しました。その後、「Mirru」をダウンロードして、プリントした手のコントロールインターフェースとして使用することができます。

4. MediaPipeによるハンドトラッキング

今回のプロジェクトで使用できるハンドトラッキング用のコンピュータビジョンのライブラリは数多くありますが、私たちが必要としていたのは、独自のモデルを学習する必要がなく、スマートフォンのような携帯端末で確実に使用できる、高速でオープンソースなものでした。

MediaPipe」は、ゼロからモデルを作成するための学習データやリソースもなかったので、我々のチームには最適でした。Androidのサンプルアプリを簡単に作ることができ、そのパフォーマンスには期待が持てました。さらに、ハンドランドマークモデルがプロトタイプに必要な出力をすべて提供してくれたので、既製のハンドトラッキングモデルやグラフに手を加える必要はありませんでした。

実際のユーザーにこのロボット義手を試してもらったところ、多くのユーザーがアプリの動きを素早くトレースできたことに感銘を受け、「これほど素早く、その場でカスタムグリップを作れるものは他にはない」と言ってくれたのが嬉しかったです。

画像4

5. MediaPipeの3Dポイントをロボット義手の入力に変換

「Mirru」の目的を達成するためには、ハンドトラッキングを利用して、「Brunel Hand」の各指をリアルタイムで個別に制御する必要があります。「Brunel Hand」の人差し指、中指、薬指は、0度から180度の角度で動くサーボを使って動作させます。0度は指が完全に直立した状態、180度は指が完全に下に曲がった状態を意味します。これらのサーボの角度を計算できるモデルを一から作るには十分な学習データがないため、プロトタイプの初期バージョンでは、デフォルトのハンドトラッキングランドマークの出力とハードウェアが必要とする入力を関連付けるヒューリスティックな手法を使うことにしました。

画像5

私たちは当初、3Dランドマークで推定された奥行き(Z)座標が、入力の変換に十分な精度を持つかどうか、確信が持てませんでした。最初のステップとして、私たちはサンプルデータを記録し、Plotlyを使ってJupyter Notebookでポイントの視覚化を行いました。奥行きセンサーを使わずカメラ1台しか使用していないことを考えると、高い精度を示しており、とても感心しました。「MediaPipe」のドキュメントにあるように、Z座標はX/Y座標とわずかに異なるスケールを持っていますが、これは私たちのプロトタイプにとって大きな問題ではないようでした。

画像6

3Dランドマークの精度が高いことから、ランドマークの出力とロボット義手に必要な入力を関連付けるために、3Dでの計算を用いることにしました。私たちのアプローチでは、指の方向と手のひらで定義される平面の法線との間の角度を計算することで、手のひらに対する指の鋭角を計算します。0°の角度は指の最大閉鎖に対応し,180°の角度は指が完全に伸びた状態を示す。指の根元のランドマークから指の先端のランドマークまでのベクトルを計算することで、指の方向を算出することができました。

画像7

手のひらの平面上に3つの点を選び、手のひらの法線を計算します。ランドマーク0を基準点として、辺1と辺2のベクトルを計算し、それらのベクトルのクロス積を計算することで、手のひらの法線を求めています。最後に、指の方向と手のひらの法線の角度を計算します。これにより、角度がラジアンで返され、これを使って度数を計算します。

義手の親指の自由度と一致させるためには、いくつかの追加処理を行う必要がありました。親指は、他の指よりも複雑な動きをします。このアプリを親指に対応させるために、親指の方向と手のひらの法線について同様の計算を行いましたが、異なるランドマークを使用しています。

スマートフォンでサーボの角度を計算した後、その値をBluetoothでArduinoボードに送り、Arduinoボードがサーボを適切な位置に移動させます。これは、ロボットの指の動きが不安定になりすぎず、正確なグリップを実現するために重要です。

画像8

6. おわりに

Mirru」と「Mirru Arduino Sketch」は、健全な手とAndroidで誰でもオープンソースのロボット義手を操作できるように設計されています。これは、筋肉センサーに代わる斬新で質素な方法であり、「MediaPipe」は、フルアプリケーションに不可欠なハンドトラッキングに適したツールであることを証明しました。「Mirru」チームは、学習データを収集したり、ゼロからモデルを設計したりすることなく、「MediaPipe」ですぐにハンドトラッキングを使い始めることができました。ハンドトラッキングポイントからロボット義手へのリアルタイムな変換の速さは、テストセッションの中でも特にすべてのユーザーを興奮させ、義肢の未来に多くの可能性をもたらしました。

「MediaPipe」のハンドトラッキング機能を既存の筋電義手と組み合わせることで、カスタムメイドの義手のグリップをリアルタイムに作成・保存するパワフルで高度な方法が生まれる可能性があると考えています。また、「MediaPipe」を利用することで、筋電センサーや義肢装具士を必要とせず、市場に出回っている製品よりもはるかに低価格で、他の開発者がソースコードをカスタマイズして構築できる、プロプライエタリな義肢に代わるオープンソースの製品を提供することができました。私たちのチームは、オープンソースコミュニティが他にどのようなアイデアを出してくるのか、またハンドトラッキングが義肢装具のユーザーやメーカーにどのようなメリットをもたらすのか、期待しています。

現在の「Mirru」では、静止したグリップポジションと比較して、より長いシーケンスである移動ジェスチャーを記録・保存することは、まだ実現していません。例えば、ピアノのベースラインを弾く指の動きを、ループ可能なアニメーションGIFのように記録することができるとしたらどうでしょう。このように、義肢の可能性は無限に広がっており、「MediaPipe」がその可能性を提供してくれることを嬉しく思います。

この記事が気に入ったらサポートをしてみませんか?