myCobot Robot ChatGPT アプリケーション: 設計原則とモデル機能

ChatGPT の機能をロボットに拡張し、ロボット アーム、ドローン、ホーム アシスタント ロボットなどの複数のプラットフォームを言語を通じて直感的に制御します。

人間と同じように、自分の言葉でロボットに何をすべきかを伝えたいと思ったことはありませんか? ホームアシスタントロボットに「お弁当を温めてください」と言うだけで、ロボットが自ら電子レンジを見つけられるようにできたら素晴らしいと思いませんか? 私たちにとって言語は自分の意図を表現する最も直観的な方法ですが、ロボットを制御するために依然として手書きのコードに大きく依存しています。私たちのチームは、OpenAI の新しい AI 言語モデルである ChatGPT を使用して、この現実を変え、人間とコンピューターの自然な対話を可能にする方法を模索してきました

ChatGPT は、テキストと人間の対話の大規模なコーパスに基づいてトレーニングされた言語モデルであり、さまざまなプロンプトや質問に対して一貫した文法的に正しい応答を生成できるようになります。この研究の目的は、ChatGPT がテキストを超えて思考し、物理世界について推論してロボット タスクを支援できるかどうかを確認することです。私たちは、人々が複雑なプログラミング言語やロボット システムに関する詳細な情報を学ばなくても、より簡単にロボットと対話できるようにしたいと考えています。ここでの主な課題は、物理法則、動作環境のコンテキスト、ロボットの物理的動作が世界の状態をどのように変化させるかを考慮した問題の解決方法を ChatGPT に教えることです。

ChatGPT はそれ自体で多くのことを実行できることがわかりましたが、それでもいくつかの助けが必要です。私たちの技術文書では、言語モデルをガイドしてロボットタスクを解決するために使用できる一連の設計原則について説明しています。これらには、特別なプロンプト構造、高レベル API、テキストによる人間によるフィードバックが含まれますが、これらに限定されません。私たちは、私たちの研究がロボット システムの開発方法の変化の始まりにすぎないと信じており、他の研究者がこのエキサイティングな分野に参入するよう刺激していきたいと考えています。私たちのアプローチとアイデアに関する技術的な詳細については、以下をお読みください。

今日のロボット工学の課題と ChatGPT がどのように役立つか

現在のロボット パイプラインは、タスクの要件をシステム コードに変換する必要があるエンジニアまたは技術ユーザーから始まります。エンジニアは常に関与しています。つまり、ロボットの動作を修正するには、新しいコードと仕様を作成する必要があります。全体として、このプロセスは遅く(ユーザーは低レベルのコードを記述する必要がある)、費用がかかり(ロボット工学の深い知識を持つ高度なスキルを持つユーザーが必要)、非効率的です(動作させるには複数の対話が必要です)。

ChatGPT は、ボットの新しいパラダイムを解き放ち、(技術者ではない可能性がある) ユーザーがループに加わることを可能にし、ボットのパフォーマンスを監視しながら大規模言語モデル (LLM) に高レベルのフィードバックを提供します。設計原則に従うことで、ChatGPT はロボット シナリオ用のコードを生成できます。微調整を行わずに、LLM の知識を活用して、さまざまなタスクに合わせてさまざまなロボットの形状を制御します。私たちの研究では、ChatGPT がロボットの困難な問題を解決する例や、操作、航空、ナビゲーションの領域での複雑なロボットの展開例を複数示しています。

ChatGPT を使用したロボティクス: 設計原則

LLM の作成は、非常に経験的な科学です。私たちは試行錯誤を繰り返しながら、ロボット タスクのキューをプログラミングするための方法論と一連の設計原則を構築しました。

1. まず、一連の高レベルのロボット API またはライブラリを定義します。このライブラリは特定のロボットに固有のものであり、ロボットの制御スタックまたは認識ライブラリ内の既存の低レベル実装にマップする必要があります。ChatGPT がその動作を推論できるように、高レベル API にはわかりやすい名前を使用することが重要です。

2. 次に、高レベル ライブラリのどの関数が利用可能であるかを明示的に示しながら、タスクの目的を説明する ChatGPT 用のテキスト プロンプトを作成します。ヒントには、タスクの制約に関する情報も含めることができます。

3. または、ChatGPT がその答えをどのように形成するか (補助解析要素を使用した特定のコーディング言語)、ユーザーは直接検査またはシミュレーターを使用して ChatGPT のコード出力を評価します。ユーザーは、必要に応じて自然言語を使用して、回答の品質と安全性に関するフィードバックを ChatGPT に提供します。

4. ユーザーがソリューションに満足したら、最終コードをロボットにデプロイできます。

理論はもう十分です...ChatGPT では具体的に何ができるのでしょうか?

例を見てみましょう...コード リポジトリでさらに多くのケース スタディを見つけることができます。

(ここでは興味深い例のみを紹介します。原文には他にもロボットの例があります)

ループ ユーザー: 複雑なタスクで会話が必要な場合

次に、ロボット アームの操作シナリオで ChatGPT を使用しました。ダイアログ フィードバックを使用して、最初に提供された API をより複雑な高レベル関数 (ChatGPT コード自体) に組み立てる方法をモデルに教えます。モデルは、カリキュラムベースの戦略を使用して、これらの学習スキルを論理的にリンクして、ブロックを積み上げるなどのアクションを実行できます。

さらに、このモデルは、木のブロックから Microsoft ロゴを構築する際に、テキスト領域と物理領域を橋渡しする興味深い例を示しています。内部知識ベースからロゴを呼び出すことができるだけでなく、ロゴを (SVG コードとして) 「描画」し、上で学習したスキルを使用して、既存のロボットのどのアクションがその物理的な要素を構成できるかを決定することもできます。形状。

以下は、ロボット アームを制御して Microsoft ロゴの色の SVG ファイルを作成する方法についての chatGPT との会話です。

ユーザー:

私たちがマニピュレーター ロボットを使って作業していると想像してください。これは、エンドエフェクタに吸引ポンプが取り付けられた 6 自由度のロボット アームです。与えられたシーンとタスクに基づいてこのロボットにコマンドを送信するのを手伝っていただければ幸いです。

いつでも次の機能にアクセスできます。

grab(): 吸引ポンプをオンにしてオブジェクトを掴みます。

release(): 吸引ポンプをオフにしてオブジェクトを解放します。

get_position(object): オブジェクト名の文字列を指定すると、オブジェクトの上部に接触している真空ポンプの座標と方向 [X、Y、Z、Y、ヨー、ピッチ、ロール] を返します。

move_to(position): 吸引ポンプを指定の位置 [X、Y、Z、ヨー、ピッチ、ロール] に移動します。

これらの関数を使用して新しい関数を作成することはできますが、他の仮想関数を使用することはできません。

解決策はシンプルかつ単純なものにしてください。位置はミリメートル単位で、角度は度単位で表示されます。「質問 - 」タグを使用して説明の質問をすることもできます。以下は、明確な質問をする方法を示すシナリオ例です。

シーンに 2 つの球が含まれているとします。

チャット:

問題 - フィールドが 2 つあります。どれを取ってほしいですか?

ユーザー:

スフィア1をお願いします。Python コードを使用してソリューションを表現します。準備はできたか?

チャット:

はい、準備できました。シナリオとタスクについて説明してください。

ユーザー:

シーンには、白いパッド、ボックス、青い四角形、黄色の四角形、緑の四角形、赤い四角形、茶色の四角形 1、茶色の四角形 2 のオブジェクトがあります。ブロックは、奥行き 80 mm の箱の中に高さ 40 mm の立方体が入っています。これらのブロックには、ボックスの上部からのみアクセスできます。物を持ち上げて保持する技術を学んでほしいと思います。これを行うには、オブジェクトの上に安全な距離 (100 mm) を移動し、オブジェクトに到達し、それをつかんで持ち上げる必要があります。

チャット:

理解する。ここにある Python 関数は、オブジェクトの名前を取得し、ロボット アームをオブジェクト上で移動させてつかみ、オブジェクトをオブジェクト上 100 mm の安全な距離に移動します。この機能は、ロボット アームが最初は安全な開始位置にあることを前提としていることに注意してください。

import timedef pick_up_object(object_name):# get the position of the objectobject_pos = get_position(object_name)# move the robot arm to a safe position above the objectsafe_pos = [object_pos[0], object_pos[1], object_pos[2]+100, object_pos[3], object_pos[4], object_pos[5]]move_to(safe_pos)# move the robot arm to the object's positionmove_to(object_pos)# grab the objectgrab()time.sleep(1) # wait for the object to be firmly attached# move the robot arm back to the safe position above the objectmove_to(safe_pos)

コピー

この関数を使用するには、単に pick_up_object を呼び出し、ピックするオブジェクトの名前を文字列として指定します (例: pick_up_object("red block"))。

ユーザー:

素晴らしい!ここで、1 つのポジションでの配置とカウンターの方法を学んでもらいたいと思います。一般的なオブジェクトを保持していることを考慮すると、まずターゲット位置より上の安全な場所に移動し、オブジェクトを落としてから放す必要があります。

チャット:

理解する。これは、オブジェクトを配置する位置を取得し、その位置上でロボット アームを移動し、オブジェクトを置き、放す Python 関数です。この機能はロボットアームが物体を保持していることを前提としていることに注意してください。

def place_object(position):# move the robot arm to a safe position above the target locationsafe_pos = [position[0], position[1], position[2]+100, position[3], position[4], position[5]]move_to(safe_pos)# move the robot arm to the target locationmove_to(position)# release the objectrelease()# move the robot arm back to the safe position above the target locationmove_to(safe_pos)

コピー

この関数を使用するには、place_object を呼び出して、目的の場所を 6 つの数値のリストとして指定します (例: place_object([100, 200, 50, 0, 0, 0]))。位置の単位はミリメートル、方向は度であることに注意してください。

ユーザー:

素晴らしい!次に、これらのスキルを使って緑のブロックを拾い、白いマットの上に置いてください。すべてのブロックの高さは 40 mm です。

チャット:

もちろん!緑色のブロックを選択して白いパッド上に配置する Python コードは次のとおりです。

# get the positions of the green block and white padgreen_pos = get_position("green block")white_pos = get_position("white pad")# pick up the green blockpick_up_object("green block")# calculate the position to place the block on the white padplace_pos = [white_pos[0], white_pos[1], white_pos[2]+40, 0, 0, 0]# place the block on the white padplace_object(place_pos)

コピー

このコードは、get_position 関数を使用して緑色のブロックと白色のパッドの位置を取得し、前に定義した pick_up_object 関数を使用して緑色のブロックを選択し、白色のパッド上のブロックを配置する場所を計算し、白色のパッド上にブロックを配置します。前に定義した place_object 関数を使用します。ブロックがパッドの上に確実に配置されるように、ブロックの高さ (40 mm) を白いパッドの高さに加算することに注意してください。

ユーザー:

素晴らしい!次に、2 つの茶色のブロックを緑色のブロックの上に重ねてもらいます。

チャット:

もちろん!以下は、緑色のブロックの上に 2 つの茶色のブロックを積み重ねる Python コードです。

# get the positions of the green block and both brown blocksgreen_pos = get_position("green block")brown1_pos = get_position("brown block 1")brown2_pos = get_position("brown block 2")# pick up the first brown blockpick_up_object("brown block 1")# calculate the position to place the block on top of the green blockplace_pos = [green_pos[0], green_pos[1], green_pos[2]+40, 0, 0, 0]# place the first brown block on top of the green blockplace_object(place_pos)# pick up the second brown blockpick_up_object("brown block 2")# calculate the position to place the block on top of the first brown blockplace_pos = [green_pos[0], green_pos[1], green_pos[2]+80, 0, 0, 0]# place the second brown block on top of the first brown blockplace_object(place_pos) 

コピー

このコードは、get_position 関数を使用して緑色のブロックと 2 つの茶色のブロックの位置を取得し、前に定義した pick_up_object 関数を使用して最初の茶色のブロックを選択し、緑色のブロックの上に最初の茶色のブロックを配置する場所を計算します。そして、前に定義した pick_up_object 関数を使用します。 place_object 関数は、最初の茶色のブロックを緑色のブロックの上に配置します。次に、2 番目の茶色のブロックを選択し、最初の茶色のブロックの上に 2 番目の茶色のブロックを配置する場所を計算し、先ほど先頭で定義した place_object 関数を使用して、2 番目の茶色のブロックを最初の茶色のブロックの上に配置します。このブロックが前のブロックの上に確実に配置されるように、前のブロックの高さに緑色のブロックの高さ (40 mm) を追加することに注意してください。

ユーザー:

素晴らしい!これらのブロックを使用して、白いパッド上に Microsoft のロゴを構築したいと思います。これは、左下隅が青、右下隅が黄色、左上隅が赤、右上隅が緑の正方形を形成する 4 つの色で構成されます。

チャット:

もちろん!ブロックを使用して白いパッド上に Microsoft ロゴを構築する Python コードを次に示します。

# get the positions of the blocks and the white padwhite_pad_pos = get_position("white pad")blue_pos = get_position("blue block")yellow_pos = get_position("yellow block")red_pos = get_position("red block")green_pos = get_position("green block")# pick up the blue blockpick_up_object("blue block")# calculate the position to place the blue blockplace_pos = [white_pad_pos[0]-20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]# place the blue block on the white padplace_object(place_pos)# pick up the yellow blockpick_up_object("yellow block")# calculate the position to place the yellow blockplace_pos = [white_pad_pos[0]+20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]# place the yellow block on the white padplace_object(place_pos)# pick up the red blockpick_up_object("red block")# calculate the position to place the red blockplace_pos = [white_pad_pos[0]-20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]# place the red block on the white padplace_object(place_pos)# pick up the green blockpick_up_object("green block")# calculate the position to place the green blockplace_pos = [white_pad_pos[0]+20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]# place the green block on the white padplace_object(place_pos)

このコードは、get_position 関数を使用して白マットと 4 つのブロックすべての位置を取得し、前に定義した pick_up_object 関数を使用して各ブロックを順番に選択し、白マット上のブロックを配置する場所を計算し、place_object 関数を使用します。先ほどブロックを白いパッドに配置するように定義しました。ロゴが適切に構築されていることを確認するために、ブロックカラーを使用しています。プロンプトの指定に従って、青いブロックを左下の位置に、黄色のブロックを右下の位置に、赤いブロックを左上の位置に、緑のブロックを右上の位置に配置します。

ロボット工学を研究室から世界へ持ち出す

私たちは、ロボット工学をより多くの人々に届けることを目的として、これらのテクノロジーを公開できることをうれしく思っています。私たちは、言語ベースのロボット制御が、ロボット工学を科学研究室から日常のユーザーの手に届けるための基礎となると信じています。

そうは言っても、ChatGPT の出力は、注意深く分析せずにロボットに直接展開することを意図したものではないことを強調します。ユーザーは、必要な安全対策を常に講じながら、実際に展開する前にシミュレーションの力を利用してこれらのアルゴリズムを評価することをお勧めします。私たちの研究は、ロボット工学における言語モデルの大きな交差点のほんの一部にすぎませんが、将来の研究の多くにインスピレーションを与えることを期待しています。

おすすめ

転載: blog.csdn.net/m0_71627844/article/details/131517207