Search Unity

ロボティクスの世界には未知の物事がいっぱいです。センサーノイズから重要な物体の正確な位置合わせまで、ロボットは正確かつロバストな動作をするために周囲の世界を理解する必要があります。私たちは以前、Niryo One ロボットを使って、位置と向きがわかっている立方体を拾い上げるピックアンドプレースタスクを Unity で実演しました。しかし、現実世界では、正確な物体の位置が事前に知られていることはほとんどないため、この方法ではロバスト性は高くありませんでした。新しく公開された Object Pose Estimation デモでは、Unity Computer Vision の Perception パッケージを使用してデータを収集し、与えられたオブジェクトのポーズを予測するための深層学習モデルを訓練する方法を紹介します。次に、訓練したモデルを Unity でバーチャルな UR3 ロボットアームと統合して、未知のポーズや任意のポーズを持つオブジェクトのピックアンドプレースシステムを完全にシミュレートする方法を紹介します。

現実世界のロボットは、動的な環境で運用されることも多く、その環境に適応することを求められます。このようなアプリケーションでは、ロボットが関連する物体を認識し、それらとやり取りする必要がしばしば生じます。物体を認識してやり取りする際に重要なのは、ある座標系に対する物体の位置と向きを理解することです。初期の姿勢推定アプローチでは、多くの場合、古典的なコンピュータビジョン技術とカスタムの位置合わせのためのマーカーに依存していました。これらのソリューションは、特定の環境で動作するように設計されていますが、環境が変化したり、予想されていたものと異なる場合には、失敗することもしばしばありました。従来のコンピュータービジョンの限界によってもたらされたギャップは、新しい有望な深層学習技術によって対処されつつあります。これらの新しい手法は、多くのサンプルから学習することで、与えられた入力に対して正しい出力を予測できるモデルを作成します。

このプロジェクトでは、画像と正解のポーズラベルを使用して、オブジェクトのポーズを予測するモデルを訓練します。実行時には、訓練されたモデルは、見たことのない画像から物体のポーズを予測することができます。通常、深層学習モデルが十分な性能を発揮するためには、数万枚以上の画像を収集し、ラベル付けする必要があります。このようなデータを現実世界で収集するのは手間やコストがかかりますし、3D 物体の定位のようなケースでは本質的に困難となることもあります。こうしたデータを収集してラベル付けすることができたとしても、そのプロセスは偏りがあり、エラーが発生しやすく、手間がかかり、コストがかかるものだとわかることもあります。では、欲しいデータが手に入らなかったり、アプリケーションに必要なデータが実際にはまだ存在しない場合、どのようにして強力な機械学習アプローチを問題に適用すればよいのでしょうか。

Unity Computer Vision では、機械学習データの要件を満たす効率的かつ効果的なソリューションとして、合成データを生成することができます。この例では、機械学習モデルを訓練するために Unity で自動的にラベル付けされたデータを生成する方法を示しています。次に、このモデルを、Robot Operating System(ROS)を使用してシミュレートされた UR3 ロボットアーム上に Unity にデプロイし、未知のポーズを持つ立方体のピックアンドプレースを可能にします。

合成データの生成

ランダムに生成された姿勢と環境ライティングをクローズアップしたところ

Unity のようなシミュレータは、合成データを生成することでデータ収集の課題を解決する強力なツールです。Unity Computer Vision を使用すると、以前にお伝えしたように、完全にラベル付けされた大量の多様なデータを最小限の労力で収集することができます。このプロジェクトでは、さまざまなポーズやライティング条件での立方体の多くのサンプル画像を収集しています。このようにシーンの要素をランダム化する方法をドメインランダム化1と呼びます。通常、データの種類が多いほど、よりロバストな深層学習モデルが得られます。

実際の世界で立方体を様々なポーズにしてデータを収集するには、手動で立方体を動かして写真を撮る必要があります。Unity のモデルでは、トレーニングに 30,000 枚以上の画像を使用しているため、1 枚の画像につき 5 秒で撮影を行うことができたとしても、データを収集するのに 40 時間以上かかることになります。この時間には、必要なラベル付けは含まれていません。Unity Computer Vision を使用すると、30,000 枚のトレーニング画像と 3,000 枚の検証用画像をわずか数分で生成することができます。この例では、カメラ、テーブル、ロボットの位置は固定されていますが、ライティングと立方体のポーズはキャプチャされた各フレームでランダムに変化します。ラベルは対応する JSON ファイルに保存され、ポーズは 3D 位置 (x,y,z) とクォータニオンで表される向き (qx,qy,qz,qw) で記述されます。この例では立方体のポーズと環境ライティングを変化させるだけですが、Unity Computer Vision ではシーンの様々な側面に簡単にランダム化を施すことができます。姿勢推定を実行するには、教師あり機械学習の技術を使用してデータを解析し、訓練されたモデルを生成します。

深層学習を使って姿勢予測を行う

姿勢予測のための深層学習モデルアーキテクチャ

教師あり学習では、入力とそれに対応する出力、画像、ポーズラベルのセットを学習し、それに基づいて特定の結果を予測する方法をモデルが学習します。数年前、ある研究チームが、物体の位置を予測できる畳み込みニューラルネットワーク(CNN)を発表しました2。私たちは立方体の 3D 姿勢に興味があるので、この研究を拡張してネットワークの出力に立方体の向きを含めるようにしました。モデルを訓練するために、予測された姿勢と正解の姿勢の間の最小二乗誤差(L2 距離)を最小化しました。訓練を行った後、モデルは立方体の位置を 1cm 以内、向きを 2.8 度(0.05 ラジアン)以内の誤差で予測しました。このモデルがロボットがピックアンドプレースタスクを成功させるのに十分な精度を持っているかどうかを見てみましょう。

ROS におけるモーションプランニング

姿勢推定のワークフロー

このプロジェクトで使用しているロボットは、Unity Robotics URDF Importer パッケージを使用して Unity シーンに Robotiq 2F-140 グリッパー付きの UR3 ロボットアームです。通信を処理するために、Unity Robotics ROS-TCP Connector パッケージを使用し、ROS MoveIt パッケージはモーションプランニングと制御を処理します。

深層学習モデルを使用して立方体の姿勢を正確に予測できるようになったので、この予測された姿勢をピックアンドプレースタスクの姿勢として使用できます。前回のピックアンドプレースデモでは、目標のオブジェクトの正解の姿勢に依存していたことを思い出してください。ここでの違いは、ロボットが立方体の姿勢に関する事前知識を持たずにピックアンドプレースタスクを実行し、ディープラーニングモデルから予測された姿勢のみを取得する点です。このプロセスには 4 つのステップがあります。

  1. 目標のキューブが映った画像を Unity がキャプチャする
  2. 画像が訓練済みのディープラーニングモデルに渡され、予測された姿勢が出力される
  3. 予測された姿勢が MoveIt モーションプランナーに送られる
  4. ROS が Unity に軌跡を返し、ロボットがキューブをピックアップする試行を行う

タスクの各イテレーションで、キューブはランダムな位置に移動します。シミュレーションではキューブの姿勢は分かっていますが、実世界ではこの情報の恩恵を受けることはできません。したがって、このプロジェクトを実際のロボットに移植するための基礎を築くには、センサーデータだけからキューブのポーズを決定する必要があります。Unity の姿勢推定モデルはこれを可能にし、シミュレーションのテストでは、Unity での実行時間の 89%にわたって、信頼性のある形でキューブのピックアップに成功しました。

結論

Unity での姿勢推定を使ったピックアンドプレース

私たちの Object Post Estimation デモでは、Unity を使用して合成データを生成し、ディープラーニングモデルを訓練し、ROS を使用してシミュレートされたロボットを制御して問題を解決する方法を紹介しています。Unity Computer Vision ツールを使用して、合成データを作成し、ラベル付けされたトレーニングデータを作成し、立方体のポーズを予測するためのシンプルなディープラーニングモデルをトレーニングしました。このデモでは、このプロジェクトを再現する方法を説明したチュートリアルを提供しており、より複雑なシーンを作成するために、より多くの乱数生成器を適用して拡張することができます。私たちは Unity Robotics ツールを、訓練されたモデルを使用してキューブの姿勢を予測する ROS 推論ノードと通信するために使いました。これらのツールやその他のツールを使用することで、ソリューションの探索、テスト、開発、およびローカルへのデプロイが可能になります。ソリューションをスケールアップする準備ができたら、Unity Simulation を使用することで、ローカルなシステムを使う場合に比較して、時間とコストの両方を節約することができます。

また、Unity Computer Vision と Unity Robotics のツールはどちらも無料でご利用いただけます。Object Pose Estimation デモも、今すぐアクセスしてご利用を開始していただけます。

作り続けよう

姿勢の分からない物体のピックアップが可能となりましたが、ここからどのように展開させていくか、想像してみましょう。障害物がある場合や、シーン内に複数のオブジェクトがある場合はどうでしょうか。こうした状況にどのように対処するかを考えてみてください。また、私たちの次回の記事にもぜひご期待ください。

次の記事まで待ちきれない方のために、ロボティクスコンピュータービジョンに関する最新情報をメールで受け取ることができるニュースレターをご用意しております。ぜひご登録ください。

この記事でご紹介した以外のロボティクス関連のプロジェクトについては、Unity Robotics の GitHub をご覧ください。

コンピュータビジョン関連のプロジェクトについての詳細は、Unity Computer Vision のページをご覧ください。

私たちのチームは皆さんからのご質問、ご意見、ご提案を常に受け付けております。ぜひ unity-robotics@unity3d.com までご連絡ください。

引用文献

  1. J. Tobin, R. Fong, A. Ray, J. Schneider, W. Zaremba, P. Abbeel, “Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World” arXiv:1703.06907, 2017
  2. J. Tobin, W. Zaremba, and P. Abbeel, “Domain randomization and generative models for robotic grasping,” arXiv preprint arXiv:1710.06425, 2017

4 replies on “Unity を使ってロボットに見ることを教える”

This is a really good innovation, world is going to artificial intelligence, unity too.

Thanks unity for this addition.

This is great information. I’m curious to learn more.

I have a few questions:

1. Will this work with objects of multiple sizes and shapes, as long as the robot can physically grab it (so it can’t be too large, too small, or too smooth)?

2. What happens if the cube or the end location for the cube to be placed are out of reach for the robot? (does an error appear or the robot try to reach it and then stop moving?)

3. Would I be able to control a real robot:

3.1 If the real robot is placed in the same position with regards to the virtual robot, and have the real robot perform the same movements of pick and place that virtual is doing (but without any real cube for the real robot to grab)? I just want to see the real robot perform its movement and grasping motions while the virtual one performs its actions. Maybe even generate a rosbag from the virtual objects movements which can then be played on the real robot?

3.2 If the camera input of the environment (to track the markers on the cube and the end placement position) are coming from a real-world camera (i.e. a webcam on the computer running Unity), which would then use the information from that camera to feed into Unity, which would then send the pose information of the robot joints to the real robot?

4. Out of curiosity, with the Unity Computer Vision, would I be able to use it for AR, as I would use it to track specific markers (or even specific 3D objects) in the real environment and having that object’s pose, I can place a virtual object on top of it?

Thank you.

Hi Ivan, to answer your questions:

1) This tutorial is about training a computer vision neural network to “see” where a fixed-size cube is. Training it to analyse arbitrary shaped objects, in order to figure out where to grab them, would be a very different task.

2) Most likely, the computer vision system would see where the cube is, but when that information is fed to the trajectory generator, it would be unable to find a valid way to reach that position, and would report an error.

3.1) Yes, if you have a real robot of the same design as the virtual one, you can replay the same commands on both robots and they should behave the same. We have a tutorial specifically about doing this: https://github.com/Unity-Technologies/Unity-Robotics-Hub/blob/main/tutorials/pick_and_place/4_pick_and_place.md

3.2) Training a neural network using simulated data and then applying what it’s learned to the real world is an area of active research… I don’t believe we’ve tested this specific setup this way yet, but it’s certainly on the roadmap.

4) This question is hard to answer, as it’s way outside the scope of the tutorial! To be clear, in this tutorial you’ll use the Unity Perception package to generate annotated training images, and then use those to train a Pytorch computer vision model. In principle, yes, you could probably make an AR system with a workflow similar to this.

Thank you for all of that information Laurie.

Great to see that you guys have already looked into replicating the simulated robot’s movement to a real robot, this is becoming even more interesting.

To hear that testing the neural network on a real world environment is on the roadmap is great news. All of this work seems really promising and I can’t wait to see how it further develops.

Comments are closed.