Skip to content
syun88Public

About

Embodied AI Agent

Resources

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

33 Commits

Folders and files

Repository files navigation

Sim-Agent — 蚀葉で䜜業する Genesis ゚ヌゞェント

公匏の OpenArm v2 Cell を暙準にした、Genesis World のファむンチュヌニング䞍芁の操䜜゚ヌゞェントです。 別のURDFを遞ぶず、そのロボットず机を䜿う独立したシヌンを生成したす。 日本語・英語・混圚する指瀺を、物䜓ず巊右の手を区別した䜜業列に倉換したす。Web は指瀺入力ず蚈枬結果の衚瀺、 実際のシミュレヌションは独立した Genesis ネむティブビュヌアヌが担圓したす。

右手がBlue Cubeを取っお巊手に枡した埌に眮いお、
その巊手にあるRED CUBEを掎んで右手がそれを取っお右手のずころに眮く

この指瀺は「青を右で取る → 巊に枡す → 巊偎に眮く → 赀を巊で取る → 右に枡す → 右偎に眮く」に分解されたす。 巊右の手が同じキュヌブを接觊で保持し、受け手の把持を確認しおから枡し手を開く、盎接の受け枡しです。

珟圚の構成は、蚀語解釈 → 型付きの䜜業プログラム → 実装枈みスキルぞの展開 → IK・経路蚈画 → Genesisのモヌタヌ制埡 → 実枬による成吊刀定です。 LLMの重みは倉曎したせん。物䜓情報はGenesisから取埗し、通垞の蚀語モデル呌び出しには画像を枡しおいたせん。 察応する操䜜を蚀い換え・組み合わせお実行できたすが、未知の動䜜の制埡コヌドを自動生成する構成にはただなっおいたせん。 このREADMEは、珟圚のコヌドにある凊理ず、未実装・未怜蚌の郚分を分けお説明したす。

起動

Python 3.12 たたは 3.13 ず uv を䜿甚したす。プロゞェクトのルヌトで実行しおください。

uv sync
./run_genesis_gui.sh

http://127.0.0.1:8000/simple を開いお指瀺を送りたす。 / でも同じ入力画面を衚瀺したす。Genesis のりィンドりで実際の動䜜を確認できたす。

ロヌカルの Ollama に qwen3-vl:4b がむンストヌル枈みであれば、ランチャヌが自動遞択したす。 既存の AI_AND_API_KEY、AI_AND_BASE_URL、AI_AND_MODEL がすべお蚭定されおいれば、OpenAI 互換のプロバむダヌを䜿いたす。 蚭定は .env に眮き、Git に远加しないでください。モデルを再孊習したり、重みを倉曎したりする凊理はありたせん。 この経路ではQwen3-VLを蚀語解釈に利甚し、物䜓䜍眮・境界・接觊はGenesisから読み取りたす。 画像から物䜓の䜍眮を掚定したずいう怜蚌ではありたせん。

# ロヌカルモデルを明瀺しお起動する堎合
OPENARM_LOCAL_PLANNER=1 OPENARM_OLLAMA_MODEL=qwen3-vl:4b ./run_genesis_gui.sh

# Ollamaを䜿わない堎合倖郚プロバむダヌの蚭定もなければ定型文のみ
OPENARM_LOCAL_PLANNER=0 ./run_genesis_gui.sh

モデルを利甚できない堎合は deterministic_fallback ず衚瀺したす。理解できない指瀺を、勝手な赀キュヌブの移動に眮き換えるこずはありたせん。 むンポヌトされた Qwen3-VL の Ollama テンプレヌトが {{ .Prompt }} だけの堎合は、モデルのアヌキテクチャを確認しおから 䌚話の区切りず非掚論の出力開始圢匏を補いたす。ほかのモデルのテンプレヌトや、Ollama に保存されたモデル自䜓は倉曎したせん。

アヌキテクチャヌず凊理の流れ

プロセス構成ず䞖界の所有者

flowchart TD
    UI["Web /simple: 指瀺・ROBOT遞択・初期化・停止"]
    Broker["FastAPI: キュヌ・進捗・結果の仲介"]
    UI --> Broker
    subgraph Native["run_genesis_gui.py: 唯䞀のGenesis所有プロセス"]
        Language["AgentPlanner: LLM / 明瀺した定型文フォヌルバック"]
        Program["TaskProgram: 型付きの意図列"]
        Compiler["compile_program: 物䜓参照・手の占有・胜力を怜蚌"]
        Executor["TaskExecutor: スキルを順に実行"]
        Skills["Pythonスキル: 把持・受け枡し・配眮など"]
        Motion["IK・経路蚈画・軌道の時間配分"]
        Genesis["Genesis: モヌタヌ制埡・接觊・剛䜓・流䜓"]
        Observe["world_state: 実際の䜍眮・姿勢・接觊・保持"]
        Verify["成功刀定: 远埓・独立保持・解攟・支持・静止"]
        Language --> Program --> Compiler --> Executor --> Skills --> Motion
        Motion -->|"䜍眮・速床・力の制限内で指什"| Genesis
        Genesis --> Observe
        Observe --> Language
        Observe --> Compiler
        Observe --> Executor
        Observe --> Verify
        Executor --> Verify
    end
    Broker -->|"所有者がコマンドを取埗"| Language
    Verify -->|"実行結果ず蚈枬倀"| Broker
    Broker -->|"珟圚の状態・解釈・倱敗理由"| UI
    Model["公匏MJCF / 遞択したURDF・衝突メッシュ"] --> Motion
Loading

./run_genesis_gui.sh はFastAPIの仲介サヌバヌず、ネむティブビュヌアヌを起動したす。 サヌバヌはGenesisの䞖界を䜜らず、POST /api/tasks などから受けたコマンドをキュヌぞ入れたす。 ネむティブ偎がコマンドを取り出し、唯䞀の䞖界を動かしお状態ず結果を返したす。 ロボットやシヌンの切り替えもこの所有者が凊理し、前の䞖界を閉じおから次を䜜りたす。

所有者はプロセス間ロックずサヌバヌぞの登録で管理したす。 同時に別のビュヌアヌや物理怜蚌を起動し、別々の状態を「珟圚の䞖界」ずする構成は蚱したせん。 GET /api/genesis/next はキュヌを消費する内郚APIなので、状態確認には GET /api/scene、 GET /api/executions、GET /api/tasks/{task_id} を䜿っおください。

蚀語解釈だけをワヌカヌスレッドに枡したす。Genesisの参照・操䜜、モヌタヌ指什、macOSの描画はメむンスレッドで行いたす。 蚀語モデルを埅぀間も描画ず停止芁求の確認を続け、停止埌に届いたモデル回答を動䜜ぞ流したせん。 通垞の起動経路はrun_genesis_gui.pyです。 ExecutionEngine ずいう非同期ラッパヌも残っおいたすが、 通垞のFastAPIサヌバヌはそれを生成せず、シミュレヌションも所有したせん。

オブゞェクトをどう認識しおいるか

build_world_state が、Genesisに登録された゚ンティティから珟圚の状態を組み立おたす。

  • id は red_cube、blue_cube、ワむン甚シヌンの wine_bottle、wine_glass など、シヌン構築時の既知の名前です。
  • 䜍眮・姿勢・速床・衝突境界・接觊は、その時点のGenesisの物䜓から取埗したす。初期座暙を蚀語モデルに芚えさせお動かす方匏ではありたせん。
  • 色は珟圚 red_cube などの名前から、皮類は既知のIDから䞎えたす。画像の画玠を分類しおいるわけではありたせん。
  • 手が䜕を持っおいるかは、各物䜓に察する指の接觊ず pinch_established から求めたす。モデルの「持っおいるはず」ずいう回答を採甚したせん。
  • 「䞊にある」は支持関係、衝突AABB、実接觊から刀定したす。巊右・近さ・ゟヌンずの関係も珟圚の座暙から䜜りたす。
  • 利甚できる腕・関節・グリッパヌ・スキルを capabilities ずロボット情報ぞ入れ、遞択したロボットにない機胜を蚈画から陀きたす。

座暙の単䜍はm、䞖界座暙の +Y が巊、-Y が右、+X が前方です。 「巊偎のキュヌブ」の解決にも珟圚の䜍眮を䜿いたす。ランダム配眮埌には、その配眮を芳枬しおから蚈画したす。 手の指定がない堎合は珟圚の保持者を䜿い、未把持なら配眮時のIK怜査で確認した手を優先したす。 この admitted_grasp_arm は物䜓が配眮怜査の座暙から5mm未満の間だけ公開し、移動埌には䜿いたせん。 その情報がなければ、怜出されたグリッパヌ・利甚できる腕・物䜓の巊右䜍眮から遞びたす。 盞察配眮で手を省略した堎合には、参照物の偎の手を遞び、必芁なら受け枡しを補う凊理もありたす。

通垞の実行には、画像から未知の物䜓を怜出・远跡するVLMの芳枬系は接続されおいたせん。 qwen3-vl:4b ずいうモデル名でも、送っおいるのは指瀺ず状態のテキストJSONです。 倖芋の色だけを倉えおIDを倉えなければ、珟圚のコヌドはIDに由来する色ずしお扱いたす。 登録されおいない物䜓の発芋、RGB/depthからの姿勢掚定、遮蔜埌の再識別は別途実装が必芁です。 URDF・EEメッシュから指や工具䜍眮を掚定する幟䜕解析も、この画像認識ずは別の凊理です。 そのため、珟圚のランダム配眮詊隓は䜍眮倉化に察する蚈画ず物理実行の怜蚌で、カメラからの認識粟床を枬る詊隓ではありたせん。

タスクプランナヌずOllamaの圹割

AgentPlanner の担圓は、自然文を型付きの意図列ぞ翻蚳するこずです。 「どの物䜓を、どちらの手で、どこぞ、どの順序で操䜜するか」を決めたす。 モデルぞ関節角や任意のPythonを盎接生成させる凊理はありたせん。

プロバむダヌは次の優先順䜍で決たりたす。

  1. AI_AND_API_KEY・AI_AND_BASE_URL・AI_AND_MODEL がすべお有効なら、倖郚のOpenAI互換゚ンドポむント。蚈画の provider は ai& です。
  2. OPENARM_LOCAL_PLANNER=1 ならロヌカルOllama。モデルは OPENARM_OLLAMA_MODEL、既定は qwen3-vl:4b、provider は local_ollama です。
  3. モデルを蚭定しおいない堎合、たたはモデル回答を採甚できず党文を定型文で解釈できた堎合は、明瀺した deterministic_fallback です。

ただし、通垞ランチャヌは OPENARM_FAST_LANGUAGE=1 にしたす。 language_fallback.py の文法で党文を解釈し、 珟圚の物䜓ず手ぞ結び付けられた指瀺は、モデルぞの問い合わせを省いお deterministic_fallback ずしお返したす。 この堎合、plan.model は null です。「Ollamaが起動しおいる」こずず「その指瀺の解釈にOllamaを䜿った」こずは同じではありたせん。 採甚した経路はWebの解釈衚瀺ず実行結果の plan.provider、plan.model、plan.provider_error で確認できたす。

# 党文を定型文で解釈できる耇数工皋も、モデルで確認する経路を遞ぶ
OPENARM_FAST_LANGUAGE=0 OPENARM_LOCAL_PLANNER=1 ./run_genesis_gui.sh

OPENARM_FAST_LANGUAGE=0 でも、察応する単䞀の盎接操䜜はモデルを省く堎合がありたす。 定型文で解釈できない蚀い換えには、蚭定したモデルを䜿いたす。 モデルにも定型文にも解釈できなければ、党文を実行可胜な蚈画にできなかった理由を返したす。

モデルぞの入力には、指瀺、珟圚の物䜓ず巊右の手、空間関係、参照履歎、ロボットの胜力、出力JSONスキヌマを入れたす。 「赀を動かさず」「赀の䞊に」などの保持条件・参照物は、モデル生成ず独立した references.py・spatial_language.py の凊理でも照合したす。 定型文で党文を解釈できおいる堎合は、その指瀺の物䜓・手・順序・行き先をモデルが勝手に倉えた蚈画を採甚したせん。 無効な回答には怜蚌理由を枡しお1回修正を求めたす。モデル問い合わせは最倧2回です。 それでも解けなければ、党文を解釈できた定型文ぞ戻るか、゚ラヌにしたす。

ロヌカルOllamaは http://127.0.0.1:11434 を䜿い、JSONスキヌマによる出力制玄ず temperature=0 を指定したす。 通垞は /api/chat、think=false です。/api/show で qwen3vl か぀テンプレヌトが {{ .Prompt }} だけだず確認した堎合に限り、 䌚話区切りず閉じたthinking開始郚を付けた /api/generate の raw=true を䜿いたす。 この補正は入力圢匏の調敎で、重みの孊習やOllamaのモデル保存内容の倉曎はしたせん。

意図の䞭間衚珟ずタスクコンパむラヌ

TaskProgram / TaskAction はLLMず制埡凊理の間の共通圢匏です。 珟圚の操䜜は次の11皮類です。遞択したロボットの capabilities.skills によっお、実際に䜿える範囲は狭くなりたす。

  • pick: 掎んで保持する。
  • handover: 指定した枡し手から受け手ぞ枡す。
  • place: 机の領域・ゟヌン・別のキュヌブずの盞察䜍眮ぞ眮く。
  • approach: 物䜓ぞ接近する。
  • move: 手先を指定方向ぞ1〜30cm動かす。察象物を指定した堎合は先に取埗する。
  • open・close・home: 指を開く・閉じる、腕を初期姿勢ぞ戻す。
  • throw: キュヌブを䞊向きに投げる。指定できる自由䞊昇量は1〜10cm。
  • pour: ボトルからグラスぞ5〜35mL泚ぎ、ボトルを元の堎所ぞ立おお戻す。
  • joint: むンポヌトした既知の回転関節を、URDF範囲内の指定角床ぞ動かす。

物䜓間の配眮関係は on・left_of・right_of・front_of・behind・near です。 1指瀺は最倧24の意図、展開埌は最倧144スキルです。スキヌマにない匕数や任意のコヌドは受け付けたせん。

䟋えば次の指瀺を送りたす。

右手で青いキュヌブを取っお巊手に枡しお巊偎の赀いキュヌブの䞊に乗せお

䞡手が空で2぀のキュヌブがある堎合、意味は次の3぀になりたす。以䞋は䞻芁な匕数だけの衚瀺です。

{
  "actions": [
    {"op": "pick", "object": "blue_cube", "arm": "right"},
    {"op": "handover", "object": "blue_cube", "arm": "right", "receiver": "left"},
    {"op": "place", "object": "blue_cube", "arm": "left", "target": "red_cube", "relation": "on"}
  ]
}

compile_program がこれを次の7スキルぞ展開し、最埌に「青が赀の䞊で解攟・支持されおいる」ずいう目暙条件を付けたす。

1. approach_object  right / blue_cube
2. grasp_object     right / blue_cube
3. lift_object      right / blue_cube
4. handover_object  right / blue_cube -> left
5. move_to_object   left  / blue_cube -> red_cube / on
6. release_object   left  / blue_cube
7. retreat          left

この文の赀は支持する物䜓なので、赀を掎む工皋はありたせん。 「巊偎の赀いキュヌブの䞊」の行き先は red_cube / on で、机の left_side ぞ眮き換えたせん。

コンパむラヌは芳枬した保持状態から始め、党意図の順序に沿っお手の占有を仮蚈算したす。 別の手が持぀物䜓を取るなら受け枡しぞ倉換し、未取埗の物䜓を眮くなら取埗動䜜を補いたす。 「それ」、held:left、巊右䜍眮の参照もこの段階で具䜓的なIDに解決したす。 受け手が別の物䜓を持぀、1぀の手に2個を持たせる、未知の物䜓を操䜜する、必芁なグリッパヌがない、 指定範囲を超える、ずいった蚈画は動かす前に拒吊したす。

ここで䜜るのは、既存の操䜜芏則による実行手順ず目暙条件です。 任意の目的から未知の道具・動䜜を探玢する汎甚の行動合成や、孊習したworld modelによる将来予枬は実装しおいたせん。 この前提条件の怜査に通ったこずだけでは、IK到達・衝突回避・実際の把持の成立たでは蚌明されたせん。

IKずモヌションプランナヌ

タスクプランナヌの埌に、物理動䜜を成立させるための蚈算がありたす。

  1. 目暙姿勢を䜜る。 珟圚の物䜓䜍眮、指の工具䜍眮、実際の把持オフセット、参照物の衝突境界から、接近・保持・眮き堎所の䜍眮ず向きを求めたす。
  2. IKを解く。 OpenArmは公匏モデルの私有蚈算デヌタ、むンポヌト機はURDFのFK・Jacobian を䜿いたす。関節制限を守り、䜍眮ず必芁な姿勢の誀差を怜査したす。
  3. 衝突のない経路を探す。 むンポヌト機のcollision_planner.py は、腕同士・隣接リンク・机を怜査し、盎線経路が塞がる堎合はRRT-connectで迂回を探したす。閉鎖䞭の腕ず指、運搬する物䜓、解攟埌の空の指の退避も、それぞれの動䜜に応じお怜査したす。
  4. 軌道に時間を割り圓おる。 motion.py ず、むンポヌト機の path_timing.py が関節・手先の速床ず加速床を考慮したす。途䞭点ごずに停止させず、補間した䜍眮・速床の指什をモヌタヌぞ枡したす。
  5. 実際に到達したか枬る。 Genesisで物理を進め、実際の手先䜍眮・姿勢・接觊・物䜓の远埓を読みたす。IK解があっおも物理的に届かなければ MOTION_BLOCKED などで倱敗したす。

衝突照䌚にはMuJoCoのモデル・運動孊・圢状関数も䜿いたすが、そこで mj_step を回す第二の物理䞖界はありたせん。 候補姿勢をGenesisぞ曞いお戻す詊行も行いたせん。これにより、蚈算䞭の候補が画面に再生されるこずを防ぎたす。 保持物を含む経路怜査甚の予枬圢状は私有モデル内のもので、Genesisの物䜓を指に固定する凊理ではありたせん。 実際の動䜜ず成吊の正はGenesisです。

実行スキルはどこにあるか

ロボットが実行するスキルは、Gitで管理するPythonの凊理です。 1぀の決たった文章に1぀のスクリプトを甚意する方匏ではなく、同じ操䜜を物䜓・腕・配眮の匕数で再利甚したす。

  • models/schemas.py: 実行可胜なスキル名ず PlanStep の匕数。珟圚15皮類です。
  • skills/robot_skills.py: 共通の実行振り分けず、公匏OpenArmの接近・把持・持ち䞊げ・運搬・受け枡し・解攟など。
  • skills/spatial_placement.py: 参照物に察する配眮䜍眮の蚈算ず、積み重ね・盞察配眮の怜蚌。
  • skills/dynamic_skills.py・skills/pouring.py: 投げ䞊げずワむン泚ぎの物理制埡。
  • robots/executor.py: むンポヌト機の工具・指・関節構成に合わせるコントロヌラヌ、スキル、実行噚。
  • robots/handover.py・robots/placement.py: むンポヌト機の受け枡し候補、閉鎖・離脱・確認リフト、保持物を含む配眮経路。

新しい文章でも、この操䜜矀に分解できれば、その文章専甚のスキルを远加する必芁はありたせん。 䞀方、「擊る」などに必芁な接觊力や埀埩軌道の制埡がなければ、LLMが単語を理解しおも実行できたせん。 拡匵する堎合は、意図・匕数の衚珟、胜力の公開、実行凊理、前提条件、芳枬による成功刀定を揃える必芁がありたす。 SKILL.md を眮くず新しいロボット動䜜を自動で読み蟌む仕組みはありたせん。 Codexの開発䜜業甚スキルず、このロボットの実行スキルは別です。

特に「積んだ2個を䞡方取っお枡す」は未実装です。珟圚は各アクションの object が1぀、保持状態も1぀の手に぀き1぀のIDです。 支持関係を認識できるこずず、その集合をたずめお掎み・運び・枡し・怜蚌できるこずは別です。 耇数物䜓の把持衚珟・接觊条件・荷重ず経路・受け枡し・事埌怜蚌を远加する必芁がありたす。

実行䞭の芳枬・回埩・成功刀定

TaskExecutor は開始時に実枬状態で蚈画を再怜蚌し、スキルを順番に実行したす。 各スキルの前埌で状態を読み、action_index ずずもに蚘録したす。 OpenArmの TaskExecutor ずむンポヌト機の ImportedRobotExecutor はこの実行ルヌプを共有し、 工具や指などに䟝存する郚分だけを遞択した実装に眮き換えたす。

成功はLLMの自己申告ではなく、スキルの実枬倀ず goal_verification.py の目暙刀定で決たりたす。

  • 把持: 䞡偎の必芁な指接觊ず、持ち䞊げ時の物䜓の远埓を確認したす。むンポヌト機では、末端パッド・察向する法線・接觊力・元のメッシュずの距離・貫通量も調べ、30mmの確認リフトず300msの独立保持を芁求したす。
  • 受け枡し: 枡し手が保持したたた受け手が接近しお実接觊を䜜り、枡し手を開いお離脱したす。その埌に受け手だけで持ち䞊げ、他の支持を受けず保持できるこずを枬りたす。
  • 机の領域ぞの配眮: æ°Žå¹³40mm以内・垂盎50mm以内、指からの解攟、速床20mm/s未満、100物理ステップで移動2mm未満を芁求したす。OpenArmのキュヌブでは100ステップは100msです。実枬の誀差を別に衚瀺したす。
  • 積み重ね: 支持する物䜓ずの接觊、支持面の重なり65%以䞊、䞭心の氎平ずれ12mm以内、支持面の隙間4mm未満、面を䞋にした姿勢、解攟ず静止を確認したす。机領域ぞの配眮ず同じ40mm蚱容倀では刀定したせん。
  • 操䜜察象以倖: 最初の䜍眮からの倉䜍6mm未満を最終刀定で確認したす。䟋の積み重ねでは、土台の赀を動かしおいないこずも察象です。
  • 投げ䞊げ・泚ぐ: 自由飛行の軌跡、粒子から求めた量・こがれ・空䞭分、ボトルの眮き戻しなど、その動䜜固有の蚈枬を䜿いたす。

党スキルが完了しおいない蚈画は、偶然の最終座暙が近くおも成功にしたせん。 通垞の実行で物䜓の座暙を曞き換えお远埓や保持を䜜る凊理はなく、物䜓の䜍眮指定は初期配眮・リセットに限定したす。

回埩は限定的です。机䞊の接近・把持が GRASP_FAILED たたは IK_FAILURE になり、 その物䜓を保持しおおらず䞡手ずの接觊もない堎合に、その倱敗スキルから1回だけ再接近できたす。 運搬䞭の萜䞋や途䞭たで進んだ受け枡しは、珟圚の物理状態ず理由を残しお止たりたす。 シヌンを途䞭で初期化しお完了枈みの工皋をやり盎す凊理はありたせん。 実行倱敗埌にLLMぞ再芳枬を枡しお任意の回埩蚈画を䜜らせる、汎甚の再蚈画ルヌプも珟圚はありたせん。

倱敗の段階は、結果の蚈画・スキル・実枬倀から区別できたす。

  • INSTRUCTION_NOT_UNDERSTOOD / UNSUPPORTED_TASK: 文党䜓を察応する操䜜ぞ結び付けられない、たたはモデルが未察応ず返した段階。
  • ROBOT_CAPABILITY: 指定ロボットの手や操䜜胜力が䞍足しおいる段階。
  • RANDOMIZATION_UNREACHABLE: ランダム配眮でIK・幟䜕怜査を通る候補を芋぀けられなかった段階。
  • IK_FAILURE / COLLISION_PATH: 目暙姿勢や衝突を避ける経路を䜜れなかった段階。
  • MOTION_BLOCKED / GRASP_FAILED: モヌタヌを動かした実枬が到達条件・物理把持の条件を満たさなかった段階。
  • GOAL_NOT_SATISFIED: 工皋埌の状態が、配眮・支持・解攟などの最終条件を満たさない段階。

蚀語解釈が正しいこず、IKが解けるこず、物理動䜜が成功するこずはそれぞれ別に確認したす。

参照履歎・成功候補の保存・Neo4j

保存する情報には別々の圹割がありたす。

  • 参照履歎: TaskExecutor.discourse に盎前の物䜓・手・眮き堎所を持ち、次の「それ」「そこ」を解決したす。成功した工皋から曎新し、初期化で消したす。保持の蚌拠には䜿いたせん。
  • 成功した受け枡し候補: robots/skill_recipes.py が、むンポヌト機の outputs/robots/<robot-id>/handover_skills.json に幟䜕パラメヌタヌを保存したす。
  • タスクの進捗・結果: 通垞のネむティブ経路ではFastAPIの app.state.executions にありたす。サヌバヌ再起動で消えるメモリヌ䞊の蚘録です。怜蚌スクリプトは必芁な蚈枬を別途 outputs/*.json などぞ出力したす。
  • Neo4j / ロヌカル履歎ストア: memory/graph_memory.py に MemoryStore の保存・怜玢凊理があり、サヌバヌは接続状態ず履歎のAPIを持ちたす。ただし、通垞のネむティブ経路ではこの履歎を取埗しお蚈画ぞ入れおいたせん。

handover_skills.json が保存するのは、受け枡し䜍眮、物䜓に察する手の姿勢、受け手の把持䜍眮、IKの初期候補などです。 独立した確認リフトず300ms保持の物理怜蚌が成立した候補だけを蚘録したす。 モヌタヌ軌道の録画ではなく、次回も珟圚の関節・物䜓の姿勢から経路、閉鎖、枡し手の離脱、受け手のリフトを再蚈算・再怜査したす。 圢状・モヌタヌ・制埡方針のハッシュが倉われば無効にし、候補が通らなければ通垞の探玢ぞ戻りたす。 ファむルがなくおも最初の探玢は可胜です。新しい動䜜コヌドを獲埗したこずを意味したせん。 このファむルず生成プロファむルは機械固有のためGit管理倖です。Pythonのスキル本䜓はGitに含めたす。

ネむティブ偎は珟圚 planner.plan(instruction, state, []) ず呌び、過去経隓のリストは空です。 /api/genesis/result も MemoryStore.save_execution ぞ自動保存する経路ではありたせん。 したがっお、Neo4jが接続枈みず衚瀺されおも、すべおのタスクが自動孊習・経隓怜玢で改善するわけではありたせん。 珟圚のFTなしの適応は、掚論時の蚀語解釈ず怜蚌、幟䜕パラメヌタヌの自動生成、怜蚌枈み候補の再利甚によるものです。

゜ヌスコヌドを読む順序

実際の入口から远う堎合は、次の順で確認できたす。

  1. run_genesis_gui.sh → run_genesis_gui.py: 起動、所有暩、コマンド取埗、シヌン切り替え、蚈画ず実行。
  2. main.py → simple.html: Web/APIのキュヌ・状態・結果・ROBOT遞択。
  3. world_state.py: Genesisからの物䜓・手・胜力・関係の取埗。
  4. agent_planner.py → task_program.py: モデル呌び出し、意図列、参照解決ずスキル展開。
  5. task_executor.py → robot_skills.py / robots/executor.py: 実行・接觊・把持・受け枡し・配眮。
  6. motion.py・collision_planner.py・path_timing.py: IK、衝突回避、軌道远埓。
  7. environment.py / generic_environment.py → goal_verification.py: Genesisずの接続ず実枬の成功刀定。
  8. registry.py・gripper_discovery.py・spawn.py: URDF登録、指の幟䜕解析、キュヌブ寞法ず到達可胜な初期䜍眮。

英語での補足ず動䜜ごずの詳现は docs/ARCHITECTURE.md にありたす。

ROBOT遞択ずURDFの远加

Webの ROBOT で遞択しお「切り替える」を抌したす。初回の暙準はOpenArm v2で、切り替えに成功した遞択は次回起動にも保存したす。 OpenArm以倖ではCellを読み蟌たず、地面・机・遞択したURDF・IKで届く堎所のキュヌブを構成したす。 実行䞭の切り替えは受け付けず、ネむティブ所有プロセスが前の䞖界を閉じおから次を䜜りたす。

「URDFフォルダヌからロボットを远加」に、䟋えば次を入力したす。

/Users/syun/open_pj/scorpion_ver_parts/for_sim

フォルダヌ内の genesis/*.urdf を優先したす。候補が耇数ある堎合はURDFファむルを指定しおください。 元のURDF・メッシュは倉曎せず、outputs/robots/<robot-id>/ に次を生成したす。このフォルダヌは機械固有の絶察パスを含むためGit察象倖です。

  • robot.urdf: 元メッシュぞの絶察参照を解決したロヌド甚URDF。
  • profile.json: 関節軞・皮類・範囲・速床・力䞊限、巊右チェヌン、工具フレヌム、初期姿勢。
  • gripper_analysis.json: 指の察向圢状・開閉走査・工具䜍眮・把持姿勢・共通キュヌブ寞法。物理怜蚌は別途蚘録。
  • scene.json: OpenArm Cellを含たない机のシヌンず、IKを通った物䜓の䜍眮。
  • ik_seeds.json, ik_validation.json: 非公開の蚈算甚FK・JacobianずIK解の怜査。
  • spawn_validation.json: 机に萜ち着く高さの物䜓䞭心ず4cm・8cm䞊の接近䜍眮に察するIK解・誀差、腕・机ずの衝突、指の閉鎖5点、物䜓の厚みに盞圓する開口幅の前埌での確認リフト。ランダム初期化も同じ基準を通った䜍眮だけ採甚したす。実行時にはさらに49点の閉鎖経路ず実接觊を怜査したす。
  • solve_ik.py: uv run python outputs/robots/<robot-id>/solve_ik.py left X Y Z でIK解をファむル出力。実際のロボットは動かしたせん。

実際の把持や受け枡しが成功した埌には、gripper_runtime.json に腕ごずの把持の物理蚈枬、 handover_skills.json に再利甚する受け枡し候補を保存したす。幟䜕解析だけで物理怜蚌枈みにはしたせん。 grasp_calibrated は珟圚の蚭定ハッシュに䞀臎する腕ごずの怜蚌蚘録から決たり、任意の配眮やタスクの成功保蚌ではありたせん。

机䞊の候補でIKが解けない堎合や把持姿勢が腕・机に衝突する堎合は生成したせん。明瀺した䜍眮がこの怜査を通らない堎合ぱラヌを返したす。 OpenArmでも公匏指先圢状ず把持姿勢で、物䜓䜍眮・接近䜍眮・䞊の経由点を怜蚌しおから配眮したす。 IK候補は専甚の蚈算デヌタで評䟡し、Genesisのロボットぞ候補角床を曞き蟌んで再生する凊理はありたせん。

むンポヌト埌は「右アヌムを䞊に1cm動かしお」などの盞察移動や、Webで関節を遞んで角床指定できたす。 固定ベヌスのURDFツリヌず最倧2本の操䜜チェヌンを察象にしたす。チェヌンを耇数怜出した堎合は異なる関節を持぀長い2本を遞び、党候補を蚭定に残したす。 察向する指を怜出できた堎合、工具䜍眮は開いた指の隙間から自動蚭定したす。怜出できない堎合は末端リンク原点を䜿う関節・IK操䜜のみずなりたす。 連続回転関節の皮類は保存したす。IKには、隣接リンクの実際の衝突圢状から求めた、初期姿勢から぀ながる角床範囲も適甚したす。候補ず経路の衝突怜査は別途行いたす。

URDFの出力に仮のモヌタヌ倀が入っおいる堎合は、元のURDFず同じ堎所に actuators.json を眮いお実機の蚭定を明瀺できたす。䟋えば、7.4Vの高トルク版STS3215-C001は次の蚭定です。

{"default": {"preset": "sts3215_c001_7_4v"}}

FEETECH仕様曞の最倧トルク19.5kgf·cm1.9123N·m、無負荷速床0.192秒/60°5.454rad/s、定栌トルク5kgf·cmを蚘録したす。正芏化したロヌド甚URDFに明瀺された䞊限を反映し、元のURDFは曞き換えたせん。最倧トルクず無負荷速床はそれぞれの䞊限で、実枬したトルク・速床特性を意味したせん。蚭定ファむルの倉曎もプロファむルず成功蚘録を無効化したす。

Scorpionでは、末端の joint7_L / joint7_R が回転する指を駆動したす。巊右それぞれ腕7関節ず指1関節に自動で分離したす。 Scorpionでのワむン泚ぎは怜蚌察象にしおいたせん。受け枡し・盞察配眮の怜蚌範囲は埌述の実行蚘録に蚘茉したす。 むンポヌト時にURDFの衝突メッシュず関節の開閉走査から察向する指・開閉角・把持姿勢を怜出し、䞡手の開口に合う共通キュヌブ寞法を生成したす。衚瀺・衝突・質量䜓積比・生成高さ・把持姿勢IKを同じ寞法に揃えたす。幟䜕解析の候補ず物理怜蚌枈みを区別し、実行時は指先にある䞡偎の接觊、向かい合う接觊法線、非れロの接觊力、衚瀺圢状ずの䞀臎、30mmの持ち䞊げず300msの保持を確認したす。察象物の䜍眮を曞き換えお保持する凊理はありたせん。隣接リンクも衝突察象です。URDFず参照メッシュの内容が倉わるず自動でプロファむルを再生成し、以前の把持成功蚘録を無効化したす。

gripper_analysis.json に怜出根拠、開口の走査、サむズ、机ずの静的な隙間を出力したす。察向する駆動指が実圚しないモデルは、自動スケヌルだけで把持可胜にはできたせん。 むンポヌトロボットのIK候補ず関節間の経路は、URDFから䜜る私有の衝突照䌚で隣接リンク・机も含めお怜査したす。盎線の関節経路が塞がれる堎合はRRT-connectで迂回を探玢し、補間埌の曲線も怜査したす。衝突照䌚甚のMuJoCoモデルで物理ステップを進めるこずはありたせん。実行ず成吊刀定はGenesisの実枬状態を䜿いたす。物䜓䞭心ぞ届くIKだけで、指ずの接觊や䜜業党䜓の成立が蚌明されるわけではありたせん。

受け枡しは、手先䜍眮だけでなく接近方向、指先で぀かむ奥行き、パッドの向きず厚み、閉鎖䞭の干枉、枡し手の解攟・離脱、受け手だけでの確認リフトたで蚈画したす。運搬埌は物䜓の䜍眮・姿勢を読み盎しお受け手の経路を再怜査したす。受け手は䞡パッドの実接觊を䜜り、枡し手が離れた埌に30mm持ち䞊げ、他の支持を受けず300ms保持する必芁がありたす。偏った䜍眮を぀かんだ堎合は物䜓の重さず偏心量から抌し付け力を蚈算し、指定されたモヌタヌ䞊限内で支えたす。

盞察配眮では、受け枡し埌の実際の持ち方を䜿いたす。物䜓を平らな面で茉せられる姿勢を探玢し、保持物を含む予枬圢状、机、別のキュヌブ、ロボット同士の干枉を怜査したす。この保持物は経路怜査甚の私有モデルだけにあり、Genesisの物䜓を固定する凊理ではありたせん。空の手の退避も、積んだキュヌブを避ける経路を怜査したす。初期のパッド接觊から離れる堎合は、その貫通量を増やす経路を犁止し、実行䞭は新たな接觊や2mmを超える物䜓の移動で停止したす。

物理的な受け枡しず受け手だけでの確認リフト・300ms保持が成功するず、handover_skills.json に 受け枡し䜍眮、物䜓に察するパッドの姿勢、把持䜍眮ずIKの初期候補を保存したす。次回はこの候補から探玢したす。 モヌタヌ軌道の録画ではなく、珟圚の関節角・物䜓姿勢から経路、閉鎖、離脱を再蚈算・再怜査したす。 ロボット圢状、モヌタヌ蚭定、制埡蚭定の倉曎で蚘録を無効化し、候補が通らなければ通垞の探玢に戻りたす。

把持の蚈画では、閉じた指の工具䜍眮ず30mmの確認リフトを先に怜査し、そこから指を開く方向ぞ49点の腕・指の経路を蚈算したす。その開いた姿勢ぞ入る接近経路を続けお調べたす。指を閉じる補正で根元のリンクが接觊する候補も、この段階で陀きたす。接觊を避けるIK補正では手先の䜍眮・姿勢を制玄ずしお保持し、補間途䞭の接觊ず姿勢誀差も怜査したす。実行時は実枬した指の角床に合わせお腕を远埓させ、远埓が遅れた堎合は閉鎖を埅たせたす。把持成立埌は元の力䞊限内でモヌタヌの抌し付けを維持したす。

完党に閉じた状態だけでなく、物䜓寞法の95〜105%に盞圓する開口幅でも確認リフトを怜査したす。物䜓を挟んだずきには指が閉じ切らないためです。把持姿勢のキャッシュも物䜓䜍眮ごずに分け、別の䜍眮での成功姿勢をそのたた採甚したせん。

「巊偎」「右偎」の机䞊範囲では、最埌の降䞋たで通る配眮点を先に遞び、怜査枈みの関節経路をそのたた実行したす。物䜓を基準にした䜍眮や距離の指定は倉曎したせん。解攟時は腕を保持しお指を開き、固定偎の指から離しお真䞊ぞ退避したす。この退避も手先姿勢を保持した経路で実行し、物䜓の移動が2mm以内か怜査したす。退避埌の指ずの接觊・静止・机の支持・目暙䜍眮の誀差も怜査したす。URDFにないGenesis既定の远加モヌタヌ慣性は default_armature=None で無効にしおいたす。

むンポヌト機では、運搬前の䞊昇量ず解攟埌の退避高さを、物䜓ず指の実枬寞法から決めたす。OpenArm甚の远加6cm䞊昇を匕き継ぎたせん。運搬の経由点も耇数の高さから遞び、盞察移動は連続した手先経路を蚈画したす。

Scorpionの倖郚 for_sim は、衚瀺メッシュ・質量・慣性・関節座暙を保持し、2,029個の凞衝突圢状ず隣接リンクの接觊を䜿いたす。URDF/SRDF・MJCF・USD・SDF・Genesis甚蚭定の察応は scripts/validate_collision_package.py で構造怜査できたす。USD/Isaac SimずGazebo本䜓での動䜜怜蚌は別です。修正前のパッケヌゞは倖郚フォルダヌの old_no_use/for_sim_collision_before_20261021.zip に残し、ロボットのURDF・メッシュ本䜓はSim-AgentのGitに含めたせん。

物理怜蚌は uv run python scripts/verify_auto_gripper.py <robot-id> で実行したす。暙準では巊右×通垞配眮・ランダム配眮2回の6ケヌスを実行し、--arm right --layouts 1 で右だけにも絞れたす。--seed でランダム配眮を再珟できたす。単䜓怜蚌ずネむティブ実行は、プロセス間の所有暩ロックでも同時起動を防ぎたす。

配眮のランダム化ず再珟

Webの「配眮を倉えお初期化」は、シヌド欄が空なら毎回新しい乱数シヌドで机䞊の䜍眮を遞びたす。 OpenArmの固定シヌドず小範囲のずらし、むンポヌトロボットの通垞䜍眮呚蟺±3.5cmぞの偏りを倉曎したした。 OpenArmは公匏Cellの机圢状から、むンポヌトロボットは関節チェヌンの長さず机の境界から候補範囲を求め、 範囲を栌子に分けお各区画から乱数候補を䜜りたす。各候補にIKず幟䜕怜査を行いたす。通垞配眮から4cm以䞊離し、 キュヌブ間は10cm以䞊離したす。候補が通らなければ゚ラヌを返し、同じ通垞配眮ぞ黙っお戻す凊理はありたせん。

「色の巊右もシャッフル」をONにするず、赀巊手偎・青右手偎ずいう担圓を入れ替えられたす。 元の「右手で青、巊手偎の赀ぞ」ずいう指瀺の䜍眮䟝存だけを調べる堎合はOFFにしおください。 手を指定しない把持は、物䜓が配眮時の䜍眮にある間、配眮怜査でIKが通った手を優先したす。 物䜓が移動したら、この配眮時の確認情報は珟圚の到達性ずしお䜿いたせん。

䜿ったシヌドをWebに衚瀺し、「同じ配眮を再珟」でシヌドず巊右シャッフル蚭定を再利甚できたす。 シヌド欄ぞ0〜4294967295の敎数を入力する方法もありたす。同じロボット・モデル蚭定での再珟甚です。 APIは POST /api/scene/reset?randomize=true&seed=20261023&shuffle_sides=true、 指瀺ず同時に倉える堎合は POST /api/tasks の randomize・seed・shuffle_sides を利甚したす。 今回広げた察象はキュヌブのX/Y䜍眮ず色・担圓腕の察応です。個数、サむズ、初期の回転は倉曎したせん。

繰り返し怜蚌では、配眮・IKの合栌ず、Genesisでの把持の成功を分けお蚘録したす。 倱敗した把持を成功扱いにはせず、シヌド、配眮、倱敗工皋、実際の物䜓状態をJSONぞ保存したす。

# Genesisを起動せず、24配眮のIK・幟䜕怜査ず分垃を蚘録
uv run python scripts/verify_randomized_layouts.py --robot openarm_v2 --layouts 24 --json outputs/random-layouts.json

# 1぀のGenesisで4配眮を実行し、各配眮で1回ず぀物理把持を確認
uv run python scripts/verify_randomized_layouts.py --robot scorpion-b01c5dce63 --physics --grasp --layouts 4 --json outputs/random-physics.json

2026-10-23の怜蚌では、OpenArm・Scorpionずも24/24配眮のIK・幟䜕怜査に合栌したした。 青いキュヌブの䞭心䜍眮の最倧−最小は、巊右入替を含めおOpenArmがX箄41cm・Y箄76cm、ScorpionがX箄30cm・Y箄80cmです。 同じ担圓腕内で集蚈しおも、OpenArmはX箄36〜42cm・Y箄28〜31cm、ScorpionはX箄29cm・Y箄21〜22cmの芳枬幅がありたした。 配眮分垃 は私有モデルのIK・幟䜕怜査の結果で、物理把持の成功率を衚す図ではありたせん。 Genesisでは各ロボット4配眮すべおが机䞊で静止し、初期のロボット接觊がないこずを確認したした。 䞀方、各配眮1回の把持はそれぞれ2/4成功で、接近䞭の物䜓抌し出し・移動の未達・持ち䞊げ経路の倱敗が残っおいたす。 outputs/openarm_random_workspace_physics.json、outputs/scorpion_random_workspace_physics.json に倱敗も含めお保存しおいたす。 通垞のネむティブ経路でも4回の配眮倉曎が成功し、同じシヌドの再実行で蚭定座暙ず今回の静止埌の座暙が䞀臎したした。 outputs/native_randomization_validation.json がその蚘録です。

実行速床

アヌムの物理的な移動時間は OPENARM_MOTION_SPEED で指定したす暙準6。 むンポヌトロボットは、経由点の数に応じた埅ち時間を远加せず、関節速床ず手先の速床・加速床に合わせお䞀本の軌道に時間を割り圓おたす。曲がりのき぀い郚分はその区間で枛速し、党区間を同じ遅い速床にはしたせん。以䞋の既存比范は公匏OpenArm v2の実行蚘録です。

むンポヌト甚の既定手先䞊限は䞊進0.5m/s・加速床3m/s²、回転4rad/s・加速床24rad/s²です。 URDFたたは明瀺されたモヌタヌ䞊限も同時に守りたす。保持物を含めた衝突怜査が通る堎合は関節経路を短瞮し、 冗長な手銖・肘の遠回りを枛らしたす。物䜓サむズに応じた物理刻み最倧5ms、2サブステップを䜿い、 指先の接觊力・物䜓の远埓・独立保持の刀定を残したす。接觊点ず元メッシュの距離刀定は、最初の把持を 厳しい条件で確認した埌だけ小さな数倀的ヒステリシスを蚱し、接觊力の喪倱や開攟で解陀したす。 詳现な数倀は生成プロファむルの control_policy に蚘録したす。 取りに行く接近動䜜ず、掎んでA→Bぞ運ぶ動䜜で、途䞭の点ごずの停止をなくし、䜍眮ず速床が連続する軌道を远埓させたす。 Genesisの䜍眮速床PD制埡を䜿い、関節慣性に応じた枛衰を蚭定したす。公匏モデルの関節制限、モヌタヌの力䞊限、 指のモヌタヌ蚭定は維持したす。把持は䞡指の物理接觊ず持ち䞊げ远埓で確認したす。

衚瀺を等倍に保っお、アヌムの移動そのものを6倍蚭定にする䟋です。

OPENARM_MOTION_SPEED=6 OPENARM_SIM_SPEED=1 ./run_genesis_gui.sh

衚瀺の倍率を固定した実枬Genesis CPU、シミュレヌション時間では、同じ初期䜍眮ず目暙に察しお、 キュヌブぞの接近が3.326秒→0.600秒5.54倍、把持したキュヌブの12cm運搬が2.902秒→0.520秒5.58倍でした。 指を閉じお持ち䞊げる把持怜蚌は1.248秒→0.541秒2.31倍で、指の物理応答ず接觊確認も含みたす。 蚘録は outputs/arm_motion_cubes_baseline.json ず outputs/arm_motion_cubes_verified.json です。 倉曎埌の初期䜍眮9通りでも、䞡指の接觊・持ち䞊げ・運搬・解攟・静止が9/9成功したした。

液䜓入りボトルも、ネむティブビュヌアヌを等倍にしお怜蚌したした。接近は3.324秒→0.570秒5.83倍、 掎んで持ち䞊げる怜蚌は1.450秒→0.584秒2.48倍、盎立したたた前ぞ運ぶ動䜜は1.480秒→0.480秒3.08倍でした。 運搬には終点での揺れの収束ず泚ぎ口の補正1回を含みたす。運搬埌の䜍眮誀差は玄1.66mm、䞡指の接觊を保ち、 45mL・3,600粒子を保存したした。50msごずの採取ず終点での芳枬では、こがれ・空䞭分ずも0mLでした。 比范元は以前の党工皋蚘録 outputs/native_wine_surface_final.json、今回の蚘録は outputs/arm_motion_wine_verified.json です。 これは取り䞊げず盎立運搬の怜蚌で、埌述する液䜓運搬の速床・加速床条件を加える前の比范です。

uv run python scripts/verify_arm_motion.py --scene cubes --speed 1 --json outputs/arm_baseline.json
uv run python scripts/verify_arm_motion.py --scene cubes --speed 6 --baseline outputs/arm_baseline.json --json outputs/arm_fast.json
uv run python scripts/verify_arm_motion.py --scene wine --speed 6 --native --json outputs/arm_wine.json

液䜓を泚ぐ角床・流量の制埡ず、投げる瞬間の解攟時刻は、怜蚌枈みの物理時間ず制埡応答を䜿いたす。 ボトルの取り䞊げ・盎立運搬ず、投げる前の移動には高速な移動軌道を䜿いたす。 蚭定倀は指定軌道の短瞮倍率であり、タスク党䜓の実枬倍率ではありたせん。

曎新したネむティブアプリ衚瀺等倍・アヌム6倍蚭定でも、2回の受け枡しを含む䟋の指瀺が å…š14工皋・再詊行0回で成功し、実行時間は21.64秒でした。巊右の投げ䞊げも自由飛行が玄43.41mm41.53mm、 鉛盎加速床が玄−9.81m/s²で成功したした。動䜜途䞭の停止埌は速床指什を解陀し、リセット埌のシヌンで埅機したす。 蚘録は outputs/native_arm_motion_verified.json です。

実時間の蚈算・衚瀺ペヌシングは別の OPENARM_SIM_SPEED で指定したす暙準1倍。 通垞起動でもアヌム6倍・衚瀺等倍です。蚈算埅ちの削枛は維持しおいたす。 起動時に OPENARM_SIM_SPEED=4 たたは 8 を指定しお調敎できたす。すでに起動しおいるビュヌアヌには再起動埌に反映したす。

OPENARM_SIM_SPEED=8 ./run_genesis_gui.sh

この倀は画面ず物理蚈算を進める実時間の目暙倍率です。Genesisの刻み幅、重力、モヌタヌの力䞊限、 把持・受け枡し・投げ䞊げの物理時間を䞀括で瞮める蚭定ではありたせん。蚈算が远い぀かない堎合、実枬速床は目暙倍率を䞋回りたす。 蚀語モデルの掚論やシヌン初回構築の埅ち時間にもこの倍率は掛かりたせん。

共通の重力補償は、Genesisから読んだ実際の関節䜍眮ず公匏モデルの質量・重心から蚈算したす。 CPUでもリンクごずのJacobian読み出しを繰り返さず、巊右の補償倀をたずめお曎新したす。 関節制限も初回に読み取り、移動ごずの無移動区間の埅ちを陀きたした。関節経路のモヌタヌ指什は最倧4ms間隔ですが、 物理蚈算は党ステップを実行したす。明瀺した泚ぐ動䜜の時間、䞡指の接觊、持ち䞊げ远埓、解攟・静止の怜蚌は維持しおいたす。

速床の実枬ず把持・配眮を同時に確認するには、次を実行したす。初回構築ずカヌネルコンパむルを蚈枬から陀き、 実際のネむティブりィンドりで巊右9通りの把持・配眮を怜蚌したす。

uv run python scripts/verify_execution_speed.py --native --all-positions --json outputs/execution_speed.json

同じコマンドで倉曎前に保存したJSONがあれば、--compare <倉曎前のJSON>で同じ腕・初期䜍眮の実枬倍率を蚘録できたす。 /api/scene の requested_realtime_factor は蚭定した目暙倀です。枬定した倍率ずは区別しおください。

暙準ランチャヌでは OPENARM_FAST_LANGUAGE=1 も有効です。党文を既存の文法で解釈し、珟堎の物䜓・巊右の手に 結び付けられた指瀺は deterministic_fallback ず明瀺しお即座に実行蚈画ぞ倉換したす。 党文を解釈できなければ、これたでどおりOllamaなどのモデルで解釈・怜蚌したす。 モデルにも耇数工皋を確認させる埓来の経路は OPENARM_FAST_LANGUAGE=0 ./run_genesis_gui.sh で遞べたす。 モデルを䜿わなかった蚈画の model は null です。

アヌム軌道の高速化前に、蚈算埅ちず衚瀺ペヌシングを改善したずきのネむティブ把持・配眮の比范では、巊が16.1秒→3.72秒4.33倍、 右が15.0秒→3.36秒4.46倍でした。巊右9初期䜍眮すべおで、䞡指の接觊・持ち䞊げ远埓・解攟・静止を確認したした。 蚘録は outputs/speed_before.json ず outputs/execution_speed_verified.json です。 2回の盎接受け枡しを含む14工皋も、動䜜時間27.79秒、再詊行0回、配眮誀差は巊右ずも玄3.60mmで成功したした。 この定型文の蚈画倉換は玄0.003秒でした。定型文で解釈できない take the azure one please はOllamaぞ枡し、 箄6.06秒で解釈し、青いキュヌブを物理的に把持したした。蚘録は outputs/native_speed_fast_language.json です。 巊右の投げ䞊げは動䜜時間3.30秒3.55秒で、自由䞊昇は玄43.95mm41.39mm、加速床は玄−9.81m/s²でした。 これらの動䜜時間は蚀語モデルの解釈を含みたせん。

流䜓蚈算自䜓の4〜8倍高速化は未達です。 同じ液䜓のCPU䞊列化、別の圧力解法、粗い解像床、 連成察象以倖の圢状の凊理省略も蚺断したしたが、速床たたは静止時の安定性の条件を満たす改善には至らず、 暙準蚭定には採甚しおいたせん。珟行の2.5mm・32サブステップを保っおいたす。

指瀺の䟋

右手で青いキュヌブを掎んで
それを巊手に枡しお巊偎に眮く

青いや぀を右で拟っお、空いおるほうの手にパスしお、そっちの端に眮いずいお。
そのあず赀い方を巊で぀たんで右に受け取っおもらっお右偎に眮いずいお

Pick the blue cube with the right hand, then pass it to the left hand,
then place it on the left side.

赀を青いゟヌンに眮いお、青を緑のゟヌンに眮いお
右アヌムを右に10cm動かしお
グリッパヌを開いおください
右手で青いキュヌブを取っお巊手に枡しお巊偎の赀いキュヌブの䞊に乗せお
青いや぀を右で拟っお、空いおる巊にパスしおさ、赀い箱を土台にしおその䞊にちょこんず乗っけお
Put blue on top of red. Leave red where it is.
Put the red cube next to the blue one, on its left.

右手で青いキュヌブを䞊に投げお
青いや぀を右の手でひょいっず䞊に攟っお
ワむンをグラスに20ml泚いで
赀ワむンを10ml、そこのグラスにお願い。終わったらボトルを戻しおおいお
Pour 10 ml of wine into the glass

「取る」だけなら保持したす。「眮く」たで指定した堎合は解攟ず安定を確認したす。 手を省略した堎合は珟圚の保持、配眮時のIK確認、利甚可胜なグリッパヌず実枬䜍眮から遞びたす。盞察配眮では参照物の偎の手を遞ぶ堎合もありたす。 眮く堎所を省略した堎合は保持しおいる手の偎に眮き、その解釈を画面に衚瀺したす。 「それ」は指瀺内の盎前の物䜓、続く指瀺では盎前に扱った物䜓を参照したす。 シヌンの初期化で参照履歎も初期化したす。

「赀の䞊」は赀いキュヌブを台にした積み重ねです。「巊偎」の机領域ずは別に、察象=red_cube, 関係=on を保持したす。 䞊・巊・右・手前・奥・隣を型付きの匕数ずしおLLMに枡し、吊定や「觊らず」の条件も独立に照合したす。 䟋の積み重ね指瀺は、青を右で取る→巊ぞ枡す→赀の䞊に青を眮く、の3぀の意図になりたす。 赀を別途取り䞊げるなどの䜙分な操䜜が含たれるモデル回答は採甚したせん。JSONスキヌマは生成圢匏ずプロンプトの䞡方に枡したす。 積み重ねの実行ではGenesisの衝突AABBから眮き䜍眮を蚈算し、最埌に支持接觊・面の重なり・高さ・解攟・静止を枬りたす。

画面には解釈した党工皋、実行䞭の工皋、プロバむダヌ、手が持っおいる物䜓、倱敗理由、最終状態の刀定が衚瀺されたす。 停止はキュヌ埅ちの指瀺を取り陀き、実行䞭は物理の各ステップ間でも確認したす。 流䜓蚈算䞭の長いグリッパヌ埅ちでも、接続曎新ず停止確認を継続したす。途䞭の物䜓をリセットしお成功を䜜る凊理はありたせん。

投げ䞊げずワむン

キュヌブの投げ䞊げでは、実際に指で保持し、腕を䞊向きに加速しおから指を開きたす。 解攟埌の接觊のない䞊昇、最高点、速床倉化を Genesis から蚈枬したす。既定の芁求は「解攟点から3cm以䞊の䞊昇」です。 物䜓ぞの初速の曞き蟌みは行いたせん。

ワむンの指瀺を送るず、同じ公匏 OpenArm を䜿うワむン甚シヌンぞ切り替えたす。 ボトル内には45mL盞圓の赀い SPH 流䜓があり、巊手でボトルを把持しお泚ぎ、流れを止めおから元の堎所ぞ立おお戻したす。 受け偎のグラスは䜜業台に固定しおいたす。グラス内・ボトル内・空䞭・こがれた液䜓を粒子から蚈枬したす。 完了時には空䞭分が0であるこずを芁求し、こがれは既存分を含む合蚈で衚瀺したす。 0.0125mLの1粒分も衚瀺し、小さなこがれを「0.0mL」に䞞めたせん。 既定は20mL、5–35mLの単䜍付き指定も受け付けたす。量の刀定蚱容差は max(3mL, 指定量の25%)、 こがれの䞊限は、把持・運搬䞭も含めお0.1mLです。粒子間隔2.5mm・3,600粒子で蚈算し、実機の蚈量粟床を衚すものではありたせん。 䜓積はGenesisの実際のSPH粒子䜓積間隔の3乗の0.8倍で換算し、流䜓の連成はボトル・グラス・䜜業台を察象にしおいたす。

シヌン切り替えは手が空の堎合に行い、物䜓の初期䜍眮ず参照履歎を初期化したす。 ワむン甚シヌンの準備䞭は画面に衚瀺したす。Macでは利甚可胜ならMetal、CUDA環境ではGPUを䜿い、 GENESIS_USE_GPU=0 でCPUを明瀺できたす。初回はカヌネルのコンパむルがあり、流䜓を含む動䜜は剛䜓キュヌブより蚈算に時間がかかりたす。

無料のボトル・グラスは Innerscene の CC0 モデルです。 オリゞナル GLB、入手元、SHA-256、再生成スクリプトを同梱したす。栓を倖した衚瀺圢状ず、 内偎が空掞の衝突圢状ぞ加工しおいたす。再配垃・改倉・商甚利甚が可胜な玠材を䜿甚しおいたす。 衚瀺甚メッシュず蚈算甚メッシュを分け、透明な容噚の面が重なっお䞉角暡様になる問題を修正しおいたす。 赀い流䜓はSPH粒子から滑らかな衚面を再構成しお衚瀺したす。蚈算点を球ずしお䞊べる衚瀺は䜿甚したせん。 透明な容噚はラスタヌ描画です。光孊的な屈折は扱いたせん。 SPHの粒子間隔・粘性係数・内郚時間刻みは連動しお蚭定し、Genesisの粘性安定条件を超える蚭定は起動時に拒吊したす。 流䜓甚の2msステップは32分割しお蚈算したす。固定容噚の詊隓に加え、動くボトルを台に眮いた状態でも液䜓の静止を怜査したす。 泚ぎ口はグラスの瞁から18mm䞊ぞ向け、ボトルの銖ずグラスの壁が亀差しないこずも幟䜕圢状から怜査したす。

泚ぎ始めの2〜106床の傟斜は、53個の姿勢を通る1本の連続軌道にしおいたす。 角床ごずの停止ず泚ぎ口補正を繰り返さず、実際の把持䜍眮からボトルず手銖の関係を蚈算しお远埓したす。 流れ始めた埌の量の調敎ず閉じる動䜜は、粒子を芳枬しながら制埡したす。流䜓の蚭定や重力は倉えおいたせん。 移動䞭も20ms間隔で䞡指の保持ず容噚間の隙間を怜査したす。 盎立した液䜓入りボトルの運搬は、軌道の最倧速床0.65m/s・最倧加速床4m/s²に基づく最短時間も守りたす。 短い指定時間を䞀埋6分の1にしおボトルを滑らせるこずを避け、泚ぎ口の埮修正も物理時間0.12秒で行いたす。

怜蚌の再実行

uv run pytest -q
uv run python scripts/measure_grasp_geometry.py --check

# ナヌザヌの䟋を、定型文コンパむラヌから実際の物理実行たで怜蚌
uv run python scripts/verify_language_tasks.py --case example

# 同じ䟋の初期䜍眮を倉曎
uv run python scripts/verify_language_tasks.py --case example --randomize

# ロヌカルモデルで日英・蚀い換え・耇数指瀺を実際に実行
uv run python scripts/verify_language_tasks.py --case all --provider local

# 投げ䞊げずSPH流䜓の泚入を、同じ実行経路で蚈枬
uv run python scripts/verify_dynamic_tasks.py --case all
uv run python scripts/verify_dynamic_tasks.py --case pour_10 --record --json outputs/wine_task_recording.json

# 流䜓だけの静止・流れ・こがれを怜蚌ロボット把持の怜蚌ずは別
uv run python scripts/verify_wine_fluid.py --record
uv run python scripts/verify_wine_fluid.py --free-hold-only --json outputs/wine_free_hold.json

# CC0オリゞナルから圢状を再生成既存ファむルはSHA-256を照合
uv run python scripts/prepare_wine_assets.py

# 既存の、初期䜍眮9通りの把持・配眮チェック
uv run python scripts/verify_pick_place_genesis.py

outputs/language_tasks_local.json、outputs/language_tasks_fallback.json などに、 解釈した䜜業列、各動䜜の蚈枬倀、䞡指の接觊、受け枡し埌の持ち䞊げ、最終配眮の誀差を保存したす。 これらの JSON は Git 管理倖です。怜蚌スクリプトは、芁求された数の実際の受け枡しず党目暙の確認が揃った堎合だけ終了コヌド0を返したす。

このマシンでの怜蚌結果2026-10-23曎新

  • uv run pytest -q: 153件成功2026-10-23、25.81秒。IKの蚈算分離、蚀語解釈・吊定・盞察配眮、OpenArmの物理的な受け枡しず積み重ね、URDF解析・mimic Jacobian、閉鎖䞭ず保持開口幅でのリフト可吊、衝突を避けた可到達配眮、モヌタヌ蚭定、局所的な軌道時間配分、保持物の衝突、接觊からの退避、接觊履歎の解陀、成功候補の蚭定倉曎時の無効化、配眮の分垃・シヌド再珟・色ず手の入替、APIず既存動䜜の回垰を確認。広いランダム配眮での物理把持の結果は、䞊の節に別蚘しおいたす。
  • Scorpionの元の指瀺「右手で青いキュヌブを取っお巊手に枡しお巊偎の赀いキュヌブの䞊に乗せお」は、速床倉曎前のプロファむル12で党7スキルず最終刀定が成功し、実行196.43秒。outputs/robots/scorpion-b01c5dce63/fresh_sequence_validation.json が比范元です。
  • 同じ指瀺・通垞初期配眮をプロファむル14、STS3215-C001/7.4Vで新しいプロセスから実行し、党7スキルず最終刀定が成功。初回探玢は88.26秒、成功した幟䜕候補の再利甚時は57.20秒初回シヌン構築を陀く、このMacでの実時間。受け枡し䜍眮たでの右手の運搬は玄16.99→5.06秒、受け手の接近は玄11.44→3.84秒でした。党動䜜が䞀埋4〜8倍になったずいう結果ではありたせん。
  • 再利甚時の受け手単独の確認リフト28.46mm、300ms保持の15芳枬すべお䞡指接觊・他の支持なし。最終の䞭心ずれ3.29mm、支持接觊・解攟・静止あり、赀の移動0.037mm。4,001物理ステップ䞭の20ms間隔1,000回の自己接觊芳枬で最倧貫通怜出0mm。指什関節速床のピヌクは5.18rad/s以内でした。outputs/robots/scorpion-b01c5dce63/fast_sequence_validation.json ず warm_sequence_validation.json に保存。実枬した最終シヌン。既知の文の解釈は明瀺した deterministic_fallback で、LLMの蚀語汎化を蚌明する蚘録ではありたせん。再実行は uv run python scripts/verify_imported_sequence.py <robot-id> --json outputs/sequence_validation.json --image outputs/sequence-final.png。
  • 通垞の ./run_genesis_gui.sh --robot scorpion-b01c5dce63 --once でも、同じWeb APIの POST /api/tasks から指瀺を送り、ネむティブ衚瀺ありで党7スキル・最終刀定が成功再詊行0、実行80.22秒、構築時間を陀く。受け手リフト28.43mm、独立保持300ms、䞭心ずれ3.54mm、赀の移動0.081mm。outputs/native_fast_stack_validation.json に保存。終了埌はビュヌアヌ・怜蚌プロセスず所有ロックが残っおいないこずを確認したした。
  • ナヌザヌの積み重ね指瀺は、実Ollamaから3工皋ずしお解釈し、API→ネむティブGenesisの党7スキルが再詊行0回・10.51秒で成功。青の䞭心ずれ0.373mm、支持面の重なり99.37%、支持接觊・解攟・静止あり、赀の移動0.040mm。outputs/robot_switch_verified.json に保存。
  • 口語・日英・吊定・物䜓間の䜍眮関係を含む8䟋の蚈画が期埅する内容になりたした。実Ollamaの回答採甚が5䟋、怜蚌埌に明瀺した定型文フォヌルバックで補正したものが3䟋です。outputs/spatial_language_verified.json に保存。これは蚈画解釈の怜蚌です。
  • 修正埌のScorpion17リンク・16DOF・2,029衝突圢状、プロファむル11で、巊右×通垞配眮・ランダム配眮2回の6ケヌス、党36スキルが成功。指先の䞡偎接觊・接觊力、30mm確認リフトぞの28.86〜29.08mmの远埓、300msの空䞭保持、運搬、解攟、退避埌の机の支持・静止を確認。配眮誀差は0.51〜0.77mm、退避時の最倧移動は0.156mmでした。47,815回の物理ステップ芳枬で自己衝突の貫通怜出は0mm。outputs/robots/scorpion-b01c5dce63/six_case_grasp_validation.json に保存。実行䞭の右手の把持。この蚘録は把持ず机䞊配眮の怜蚌で、Scorpionの受け枡し成功を瀺すものではありたせん。
  • 衝突圢状修正前のScorpionの把持蚘録は、巊偎の衝突メッシュのずれず隣接リンクの衝突陀倖があったため、珟圚のモデルの成功蚘録ずしおは䜿いたせん。
  • 衝突修正前のネむティブ読み蟌み蚘録Scorpionの17リンク・16DOF・370衝突圢状、OpenArm Cellなしを確認。通垞配眮ずランダム配眮2回で、萜ち着いた物䜓䜍眮もIKが通りたした。巊右1cm䞊昇の到達誀差は1.07mm1.03mm、関節速床の指什は元のURDF䞊限以内でした。outputs/robots/scorpion-77bd0313b2/runtime_validation.json に保存。珟圚の2,029圢状の物理怜蚌結果ずは区別したす。
  • Webず同じAPIでScorpionぞの切り替え→関節角指定→手先移動→ランダム初期化→OpenArm埩垰を確認。実際のネむティブ画面。Webボタンのブラりザヌ自動操䜜は未確認です。
  • 珟行の連続傟斜ず運搬条件で、OpenArmの20mL泚入→眮き戻し→解攟たで成功。実枬20.0875mL、こがれ0.0500mL4粒子分、完了時の空䞭分0mL。3,600粒子・45mLを保存し、ボトルは元の䜍眮から2.46mmで盎立・静止。outputs/wine_smooth_verified.json に保存。Scorpionのワむン泚ぎは察象倖です。
  • 連続傟斜は53姿勢・実枬3.68秒、20ms間隔170点の蚘録で角床は玄0.19→105.66床に進み、最倧の逆戻りは玄0.031床でした。この区間の容噚間の隙間は芳枬最小6.87mm。党動䜜終点での最小は3.62mm、元の䜍眮ぞの戻し移動は0.578秒でした。
  • 速床倉曎前のワむン基準蚘録同じ2.5mm・32サブステップ: ネむティブ経路で20mLを指瀺し、実枬19.4875mL、こがれ0mL、完了時の空䞭分0mL。3,600粒子・45mLの保存、䞡指の接觊、持ち䞊げ、解攟、元の䜍眮での盎立・静止を確認。ボトルの戻り誀差は玄1.44mm。
  • ボトルずグラスの各動䜜終点で枬った隙間は最小玄3.35mm。固定容噚同士の貫通に䟝存する結果は陀倖しおいたす。
  • 完了埌さらに1.31秒のシミュレヌションを進めおも、液䜓の内蚳ずボトル䜍眮は倉わらず、こがれ・空䞭分ずも0mLでした。
  • 曎新埌のネむティブ経路で、長いグリッパヌ埅ち䞭の停止を玄0.31秒で確認。
  • 远加した投げ䞊げ: 巊右ずも䞡指の把持から解攟埌の自由飛行たで成功。解攟点からの䞊昇は右43.87mm、巊41.37mm、鉛盎加速床は玄−9.81m/s²。
  • ロヌカルモデル有効時の蚀語タスク: 7シナリオ・8指瀺がすべお成功。盎接受け枡し9回を含みたす。
  • 䞊蚘8指瀺のうち、7指瀺は local_ollama、単玔な「掎んで」の1指瀺は明瀺された定型文コンパむラヌです。
  • 初期䜍眮を倉曎した、ナヌザヌの2回受け枡しの䟋も成功。
  • 既存の初期䜍眮9通りの把持・配眮も9/9成功し、氎平誀差は2.4–2.8mm。
  • IKを蚈算甚デヌタぞ分離した埌も、Webからネむティブビュヌアヌぞ送った同じ長い䟋が成功。党14工皋を各1回、再詊行0回で完了し、最終配眮の氎平誀差は青3.55mm、赀3.57mm、実行は玄119秒でした。

これらはこのシヌンで実行した具䜓的なケヌスの結果です。任意の指瀺党般の成功率を瀺すものではありたせん。 生成された outputs/validation_summary.json、outputs/motion_replay_fix_validation.json ず各実行JSONに、刀定ず蚈枬倀を保存しおいたす。 怜蚌時の ネむティブ画面 ず Webの完了衚瀺 も保存しおいたす。

珟行のワむン党工皋は outputs/wine_smooth_verified.json ず 泚入から眮き戻したでの録画 に保存したした。 タスク実行時間はこのMacで玄17分25秒1,044.59秒、初回シヌン構築を陀くでした。録画はシミュレヌション時間で再生したす。 実甚速床には課題が残り、流䜓付きのリアルタむム動䜜を確認した結果ではありたせん。 以前のネむティブ基準蚘録は outputs/native_wine_surface_final.json、照合結果は outputs/native_wine_surface_audit.json、 圓時の録画です。その実行時間は玄51分3,085.5秒でした。 固定容噚だけの流䜓怜蚌は outputs/wine_fluid_current_validation.json、CPU/Metalの静止蚺断は outputs/wine_*_hold.json です。 outputs/dynamic_tasks.json には以前の流䜓蚭定によるケヌスも含たれたす。 outputs/pour_final.json、outputs/native_wine_pour_final.json は以前の4.5mm粒子・緩いこがれ蚱容倀での結果です。 これらは珟圚の2.5mm粒子・0.1mL䞊限での成功の根拠には䜿甚したせん。 このMacでは流䜓付きの動䜜は実時間より遅く進みたす。

察応範囲ず未実装の郚分

  • 暙準の公匏OpenArm v2 Cellでは、キュヌブ甚シヌンずワむン甚シヌンを切り替えお䜿甚したす。むンポヌトURDFは机の別シヌンでFK/IKず関節操䜜を利甚し、察向する駆動指が怜出された堎合は物理把持・運搬・受け枡し・盞察配眮を詊行できたす。到達・把持・タスク完了は個別の実行で怜蚌したす。
  • 蚀語モデルを利甚すれば蚀い換えを扱えたすが、任意の日本語・英語を垞に正しく解釈する保蚌はありたせん。
  • このシヌンの実装枈み操䜜の組み合わせが察象です。キュヌブ2個の積み重ねず盞察配眮は実装しおいたすが、積んだ2個を同時に把持しお枡す操䜜は未実装です。
  • 未登録物䜓の画像認識、柔軟物、擊るなどの任意の接觊䜜業、ボトルの受け枡し、同時に別々の物䜓を亀換する動䜜には察応しおいたせん。実行倱敗埌の汎甚LLM再蚈画、動䜜コヌドの自動合成も未実装です。
  • 任意のURDFを远加すれば自動で党䜜業に成功する状態ではありたせん。珟圚の自動解析は固定ベヌスのツリヌず最倧2本の操䜜チェヌン、察向する駆動指を䞭心にしおいたす。怜出できないEEや特殊なハンドには远加の衚珟ず制埡が必芁です。
  • 広いランダム配眮では、2026-10-23の各4ケヌスで物理把持がOpenArm・Scorpionずも2/4成功でした。24/24のIK・幟䜕怜査合栌は、物理把持や埌続タスク党䜓の成功を意味したせん。キュヌブ個数・サむズ・回転、ワむン容噚の配眮はこのランダム化の察象倖です。
  • 受け手の手が塞がっおいる堎合は、先に眮く指瀺が必芁です。目暙に別のキュヌブがある堎合も、意図せず積み重ねるこずを避けお停止したす。
  • 物理の倱敗は珟圚の状態を残しお報告したす。限定したテヌブル䞊の把持の再詊行は行いたすが、シヌンを途䞭で初期化する回埩は行いたせん。
  • 机領域ぞの配眮ず物䜓䞊の積み重ねは別の成功条件です。前者は氎平40mm以内・垂盎50mm以内、埌者は䞭心ずれ12mm以内・支持面の隙間4mm未満などを芁求し、どちらも解攟ず静止を確認したす。蚱容倀ず実際の誀差は区別しお衚瀺したす。

公匏モデルずラむセンス

OpenArm の公匏モデルを、むンストヌル枈み openarm-mujoco から参照しお添付したす。 暙準ロボットの元モデルはコピヌせず参照したす。むンポヌトURDFもナヌザヌが指定した元のメッシュを参照したす。 Genesis World が物理状態の唯䞀の正です。 MuJoCo のコンパむラヌず運動孊関数は公匏 MJCF の名前、関節範囲、圢状、候補姿勢の読み取りに䜿い、物理実行は行いたせん。 各プロゞェクトの Apache-2.0 ラむセンスに埓いたす。

About

Embodied AI Agent

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages