このリポジトリには、ロボット制御で生成 AI 手法を活用するための、プライバシーを意識した実験的なセットアップが含まれています。ここで紹介するソリューションを使用すると、ユーザーは音声でアクションを自由に定義でき、そのアクションはカメラで観察されるオープンワールド環境でロボット掃除機が実行できる計画に変換されます。
ここで紹介する方法の基本的な利点は次のとおりです。
このシステムは、最新の AI ツールがロボット制御ソリューションの開発時間を大幅に短縮できるという学習演習と概念実証として、3 日間のハッカソンで開発されました。
このリポジトリのすべての機能を使用するには、次のものが必要です。
開始するには、以下の手順に従います。
requirements.txt
からPython環境にインストールします(Python 3.11のtestes)。src/config.template.toml
名前をconfig.toml
に変更します。以下のすべての手順で、取得した認証情報をconfig.toml
に挿入します。python-roborock
ライブラリのドキュメントを参照してください。src/run.py
実行してワークフローを実行します。 このリポジトリが何を行うのか、また要素がどのように相互作用するのかを詳細に理解するには、アーキテクチャ図を使用するのが最善の方法です。
上記のようにrun.py
ファイルを実行すると、何が起こり、どのように機能するかが次のようになります。
システムは音声メッセージでユーザーに挨拶し、ユーザーが何をしたいかをシステムに伝えることを期待しています。たとえば、ユーザーはロボットが黄色い椅子に座っている人からコーヒーを受け取り、黒いソファに座っている別の人にコーヒーを運ぶことを望むかもしれません。次に、システムはこれらのアクションを実行する計画を作成します。
システムがユーザーのやりたいことをどのように実現できるかを理解するには何が必要でしょうか?システムは、その環境と、この環境で実行できるアクションを認識する必要があります。ここでは、物体検出を備えたコンピューター ビジョン モデルを使用して、環境に関する情報をシステムに提供します。掃除機自体は、前進する、回転する、何もしないという 3 つの単純なアクションを実行できます。環境内の別のアクションは、ユーザーが特定のアクションを実行するのを待っています。
ユーザー側の混乱を避けるためには、AI が環境をどのように認識しているかをユーザーが理解することが重要です。たとえば、オブジェクトがコンピューター ビジョン モデルで認識されない場合、AI はそれを計画に含めることができません。モデルの認識に関して不確実性があることをユーザーが認識していることも重要です。 OpenAI の GPT-4o 大型言語モデルと説明プロンプトを使用すると、システムは環境の説明を作成し、システムに何をしてほしいかをユーザーに尋ねる直前にそれをユーザーに読み上げます。
環境情報とユーザーのやりたいことに関する入力が与えられると、システムは計画を立てることができます。ここでは、ユーザーの入力と環境の説明を考慮して、LLM に計画を立てるように依頼します。プロンプト テンプレートはcontroller
ディレクトリにあります。ここでの興味深いトリックは、LLM がコンピューター ビジョン モデルの出力から生成された 2 つのテーブルを通じてのみその環境を認識しているということです。以下に例を示します。
Item locations:
| id | label | position | confidence | color_rgb |
|-----:|:-------------|:----------------|-------------:|:----------------|
| 0 | robot vacuum | (122.0, 140.0) | 0.23 | [205, 206, 210] |
| 1 | blanket | (1697.0, 923.0) | 0.59 | [60, 72, 90] |
| 2 | chair | (532.5, 210.0) | 0.39 | [177, 177, 171] |
| 3 | chair | (160.0, 521.5) | 0.24 | [99, 99, 98] |
| 4 | book | (1216.5, 601.0) | 0.2 | [137, 141, 155] |
Distances:
| id | 0 | 1 | 2 | 3 | 4 |
|-----:|-----:|-----:|-----:|-----:|-----:|
| 0 | 0 | 1758 | 416 | 383 | 1187 |
| 1 | 1758 | 0 | 1365 | 1588 | 578 |
| 2 | 416 | 1365 | 0 | 485 | 787 |
| 3 | 383 | 1588 | 485 | 0 | 1059 |
| 4 | 1187 | 578 | 787 | 1059 | 0 |
LLM は計画プロンプトを処理すると、推論と計画という 2 つの内容を出力します。システムは計画の実行を開始する前に、計画が要求された内容と一致することをユーザーから確認するために、説明プロンプトを使用して計画の短い概要を生成します。これは、人間参加型アプローチの精神に基づいており、実際のオープンな物理的環境では、人々が AI の行為によって潜在的に危害を及ぼす可能性があるため、人間の介入を求めるのは合理的であるという観点から当社が運営されています。 AI が自ら考え出した計画を実行する前に、フィードバックが行われます。
ユーザーが確認すると、システムは計画の実行を開始します。 LLM によって生成されるこのような計画は次のようになります。
[
{ "action" : " MOVE " , "location" : [ 1216.5 , 601.0 ]},
{ "action" : " WAIT_UNTIL " , "task_fulfilled" : " Please place the book on the robot vacuum so that the robot can transport it to the chair. " },
{ "action" : " MOVE " , "location" : [ 532.5 , 210.0 ]},
{ "action" : " END " }
]
executor
を使用して、システムは計画を段階的に実行します。必要なセットアップ時間を短縮するために、ロボット制御は単純で不正確ですが効果的なアルゴリズムに従います。
コンピュータービジョンシステムはロボットの位置を評価します。 navigator
モジュールのコードを通じて、ターゲット位置に対するロボットの位置、および最後に知られた位置に対するロボットの位置が分析および比較されます。このアプローチは、カメラの位置とレンズの歪みが考慮されていないため、不完全です。このアプローチで測定された角度は不正確です。ただし、システムは反復的であるため、エラーは頻繁に補正されます。ただし、これには速度が犠牲になることに注意してください。画像を分析し、経路を計算し、ロボットに次のステップを通知するのに時間がかかるため、システムは遅くなります。
ロボットが目標位置に到達すると、実行者は計画の次のステップに進みます。ユーザー入力が関係するアクションの場合、実行プログラムはテキスト読み上げおよび音声変換機能を使用してユーザーと対話します。
このシステムでは、主にローカル マシンまたはネットワーク上で実行されるサービスを使用します。例外は GPT-4o です。テキストデータをインターネット経由でOpenAIのモデルに送信します。テキスト データには、転写されたユーザー入力と認識されたオブジェクトのテーブルが含まれます。ここで GPT-4o を使用する唯一の理由は、これがハッカソンの時点で利用可能な最高のモデルの 1 つであるためです。また、ローカル LLM を実行して、インターネットに接続せずに完全に動作し、全体のフローでプライバシーを保護することもできます。操作。
このリポジトリに含まれるコンピューター ビジョン モデルはchair, book, candle, blanket, vase, bulb, robot vacuum, mug, glass, human
プロンプトを使用して、HuggingFace スペースの YOLO-World モデルによって生成されました。追加のオブジェクトを認識したい場合は、プロンプトを調整し、このスペースから ONNX モデルをダウンロードしてください。その後、 src/yoloworld/models/rev0
ディレクトリ内のモデルを置き換えることができます。
モデルを正しく抽出するには、モデルをエクスポートする前に、HuggingFace スペースのボックスの最大数とスコアしきい値パラメーターを手動で変更する必要があることに注意してください。
YOLO-World Web サイトでは、ビジョン言語モデリングの最近の進歩に基づいて構築されたエキサイティングな YOLO-World モデルについて詳しく知ることができます。
このプロジェクトは MIT ライセンスに基づいて公開されています。
このリポジトリは積極的に監視されておらず、拡張する意図もありません。これは何よりもまず学習演習です。ただし、インスピレーションを感じた場合は、GitHub のイシューまたはプル リクエストを開いて、遠慮なくプロジェクトに貢献してください。