
具身智能機器人人工智能大模型模型推理服務(wù)本地部署計算機視覺ROS【免費下載鏈接】IB_RobotSave the code of IB-Robot, an AI robot execution framework developed by openEuler Embedded for embodied intelligence scenarios. It includes references to the forked version of tensormsg, references to lerobot fork, code references to the lerobot_ros2:ros2_ws branch, as well as some code related to development usability.項目地址https://gitcode.com/openeuler/IB_Robot點擊查看免費下載本文聚焦 IB-RobotopenEuler Embedded 具身智能機器人執(zhí)行框架中機器人技能skill的description:契約。該契約是 Agent/Hermes 調(diào)用方與確定性規(guī)則解析器在近義技能之間做出正確選擇的核心依據(jù)也是robot_config加載器強制校驗的架構(gòu)級約束。讀完本文你將掌握description:塊的完整字段 Schema、近義技能消歧disambiguation的寫作規(guī)范、時長估算規(guī)則以及從 YAML 聲明到加載器校驗、再到robot-skillCLI 驗證的完整鏈路。1. 契約的定位為什么description:是架構(gòu)約束而非風格選擇在 IB-Robot 的技能體系里每個新增或修改的技能必須在其 SSOT YAML與primitive_sequence同處一個文件中攜帶description:塊。它描述了Agent/Hermes 調(diào)用方和規(guī)則解析器如何從一組近義技能中選中當前這個技能是整個技能選路邏輯的單一事實來源Single Source of TruthSSOT。省略這個塊不是一種風格選擇而是一種架構(gòu)違規(guī)architecture violation。原因在于上層調(diào)用方如 Hermes、CLI、LLM Agent依賴summary、when_to_use、do_not_use等字段在多個行為相近的技能之間做選擇確定性規(guī)則解析器依賴aliases_zh配合rule_entry開關(guān)完成中文觸發(fā)詞到技能名的固定短語匹配技能目錄catalog的文檔由description:塊自動合成不再需要人工維護每技能的介紹文字。因此在設(shè)計流程design flow中description:的編寫與校驗通常發(fā)生在第 5 步Step 5: Author the Description Contract而在第 7 步實現(xiàn)技能時同樣必須攜帶該塊任何模板都不能遺漏。2. 完整 Schemadescription 塊字段總覽契約的完整結(jié)構(gòu)如下該結(jié)構(gòu)由robot_config.loader._validate_skill_description校驗見 loader.pyskill_name: description: summary: 120 chars, intent-first, not a mechanical description category: observation|recovery|gripper|translation|rotation|dance|social_greeting|social_affirmation|social_emotion|... when_to_use: [short phrases describing when to pick this skill] do_not_use: # MANDATORY for any skill with near-synonyms - condition: when NOT to pick this one instead_use: existing_skill_name # must be a real skill in the same config aliases_zh: [中文觸發(fā)詞] # ALSO drives the rule parser (single keyword source) aliases_en: [english triggers] motion_scope: [base|shoulder|elbow|wrist|gripper|arm] anchor_pose: named pose | none # must exist in embodied.named_poses unless none intensity: subtle|moderate|large # safety-relevant: large motions near people need care duration_sec_estimate: float 0 requires_motion_params: bool # true if it needs motion_direction/distance from the caller rule_entry: bool # true exposes aliases_zh to the deterministic rule parser2.1 各字段的源碼級約束從加載器_validate_skill_description的實現(xiàn)可以提煉出每個字段的硬性校驗規(guī)則字段類型/取值約束源碼行為summary非空字符串去除首尾空白后不超過 120 字符為空或超長均報錯summary must be a non-empty string/at most 120 characterscategory非空字符串must be a non-empty stringwhen_to_use非空字符串列表每個元素必須是去除空白后非空的字符串a(chǎn)liases_zh/aliases_en/motion_scope字符串列表可選字段元素必須非空motion_scope的取值必須屬于_VALID_MOTION_SCOPES {base, shoulder, elbow, wrist, gripper, arm}loader.py未知 token 會被逐一點名報錯intensity可選字符串必須屬于_VALID_INTENSITIES {subtle, moderate, large}其他值報錯anchor_pose可選字符串若非none則必須存在于embodied.named_poses中引用未定義 pose 會報references undefined poseduration_sec_estimate有限數(shù)值且大于 0非有限數(shù)nan/inf、布爾值、字符串、負數(shù)都會被拒絕must be greater than zerorequires_motion_params可選布爾非布爾報錯rule_entry可選布爾非布爾報錯do_not_use可選列表每個 entry 必須是 mappingcondition非空字符串instead_use必須引用同配置中真實存在的技能名且不能指向技能自身must not reference the same skill值得一提的是加載器對description的校驗發(fā)生在加載階段而非調(diào)用階段源碼 docstring 明確寫道structural fields are enforced here rather than at call time這意味著配置不合法時技能在系統(tǒng)啟動/加載時就會被拒絕而不是等到運行時才暴露。2.2 技能目錄側(cè)的雙重校驗除robot_config.loader外技能目錄包skill_catalog/skill_catalog/validator.py也維護了一套DESCRIPTION_FIELDS白名單summary、category、when_to_use、motion_scope、intensity、aliases_zh、aliases_en、anchor_pose、duration_sec_estimate、requires_motion_params、rule_entry、do_not_use并做了更細的約束motion_scope不允許重復(fù)值len(set(motion_scope)) ! len(motion_scope)報錯aliases_zh/aliases_en必須是無重復(fù)的字符串列表aliases must be a unique string listdo_not_use每個 entry 的鍵集合必須嚴格等于{condition, instead_use}不能多也不能少duration_sec_estimate必須有限且為正。這套校驗與robot_config加載器形成互補前者面向技能目錄源樹后者面向機器人配置里的技能模板兩層一起保證了契約在任何消費入口都不會被繞過。3. 消歧規(guī)則近義技能如何互相讓路契約存在的全部意義就是消歧。三條核心規(guī)則必須同時遵守正向引用在最終確定一個新技能前先列出它與既有技能之間的近義關(guān)系并針對每個近義技能添加一條do_not_use記錄把調(diào)用方引向正確的替代技能反向引用當技能邊界發(fā)生變化時也應(yīng)在既有近義技能上添加指向新技能的反向重定向add反向 redirects on the existing synonym skills pointing at the new one單一關(guān)鍵詞源aliases_zh是中文觸發(fā)詞和目錄別名的唯一事實來源嚴禁在embodied_common.command_parser里再硬編碼一份平行關(guān)鍵詞表。3.1 aliases_zh 如何進入規(guī)則解析器extract_skill_aliases只在兩個條件同時滿足時把aliases_zh注入確定性規(guī)則解析器rule_entry: true AND requires_motion_params: false也就是說只有規(guī)則入口開啟且不需要調(diào)用方額外提供 motion 參數(shù)的技能其中文觸發(fā)詞才會被用于固定短語匹配。這避免了兩類誤用需要參數(shù)如方向、距離的技能不應(yīng)通過純關(guān)鍵詞直接觸發(fā)否則會因缺少參數(shù)而失敗未被rule_entry授權(quán)的技能關(guān)鍵詞不應(yīng)出現(xiàn)在規(guī)則路徑中。在技能目錄編譯階段compiler.pyaliases_zh與aliases_en會被一并取出并去空白組裝成該技能的別名元組aliases[skill_name] tuple( str(value).strip() for key in (aliases_zh, aliases_en) for value in description.get(key, []) )這印證了aliases_zh與aliases_en是同一份別名體系的組成部分只是分別面向中英文觸發(fā)場景。3.2 summary 必須意圖優(yōu)先summary的寫作準則是意圖驅(qū)動而非機械描述。例如正確示例Wave hello/goodbye with the wrist意圖用腕部打招呼/告別錯誤示例Sinusoidal joint-5 motion機械描述關(guān)節(jié) 5 正弦運動理由是 Agent/LLM 調(diào)用方依據(jù)意圖文本做語義選路機械的運動學(xué)描述既無法表達做什么也難以與近義技能區(qū)分。3.3 懸空引用必須為零do_not_use.instead_use指向的技能必須在同一份配置中真實存在加載器會拒絕懸空重定向dangling redirect。測試 test_skill_description_contract.py 驗證了兩種典型錯誤instead_use: ghost_skill不存在的技能→ 報references unknown skill ghost_skillinstead_use指向技能自身 → 報must not reference the same skill。同目錄下的集成測試還會遍歷 SO101 單臂配置啟用技能集合逐一斷言每個啟用技能都攜帶summary/category/when_to_use/motion_scope/intensity五個必備字段intensity取值必須落在{subtle, moderate, large}社交手勢類技能wave_hello、nod_yes、shake_no、celebrate、greet_observe_raise、act_cute、happy_spin_upright等必須聲明do_not_use消歧記錄每條do_not_use的instead_use目標必須是同一 profile 啟用的技能。4. 完整示例問候技能簇的消歧契約文檔給出了wave_hello揮手問候的完整寫法。該示例在倉庫中已經(jīng)落地為真實配置 wave_hello/manifest.yaml并擴展出了英文別名wave_hello: description: summary: Wave hello or goodbye with the wrist (casual greeting gesture). category: social_greeting when_to_use: [greet someone, say hi or bye, wave to a person] do_not_use: - condition: agree or say yes instead_use: nod_yes - condition: formal raise-hand greet at the observe pose instead_use: greet_observe_raise - condition: dance rhythmically instead_use: dance_basic aliases_zh: [打招呼, 揮手, 揮揮手, 再見, 嗨] aliases_en: [hello, hi, wave, goodbye, bye] motion_scope: [wrist] anchor_pose: home intensity: moderate duration_sec_estimate: 8.0 requires_motion_params: false rule_entry: true這個例子展示了消歧的完整形態(tài)三條do_not_use分別劃清邊界點頭同意→nod_yes、正式舉手問候→greet_observe_raise、有節(jié)奏的舞蹈→dance_basicaliases_zh覆蓋了中文口語變體打招呼 / 揮手 / 揮揮手 / 再見 / 嗨其中再見與嗨是問候場景的常見說法motion_scope: [wrist]表明動作局限于腕部與其wave_hand等近義技能形成區(qū)分維度anchor_pose: home引用的是機器人配置中真實存在的命名位姿見下節(jié)。4.1 anchor_pose 必須落在 embodied.named_poses以 SO101 單臂配置 so101_single_arm.yaml 為例embodied.named_poses下定義了三個命名位姿home安全/回位位姿observe_table觀察桌面位姿對應(yīng)設(shè)計流程中的觀察位置 / 看桌面 / 觀察位錨點zero零位。因此anchor_pose只有兩種合法取值none或這些已定義 pose 之一。任何未定義的名字都會觸發(fā)加載器報錯。4.2 duration_sec_estimate 的估算規(guī)則duration_sec_estimate不是拍腦袋而是有明確覆蓋口徑的確定性手臂運動時長 1.0 秒若存在 open/closed 的 initial_gripper_state 每一條顯式 open_gripper / close_gripper 原語 1.0 秒 余量margin也就是說只要技能涉及夾爪開合無論是初始夾爪狀態(tài)還是序列中途的顯式夾爪原語都必須在手臂運動估算之外為每段夾爪動作預(yù)留至少 1.0 秒并整體留出余量避免實際執(zhí)行超時或與上層任務(wù)預(yù)算沖突。5. 校驗與實測測試用例如何鎖定契約契約文檔引用的校驗函數(shù)_validate_skill_description由 test_skill_description_contract.py 全面覆蓋這些用例本身就是最好的字段取值速查表測試場景期望行為結(jié)構(gòu)完整的 description含do_not_use零錯誤通過instead_use指向不存在技能報unknown skillinstead_use指向自身報same skillmotion_scope: [knee]、intensity: extreme、負數(shù)時長、未定義 pose、rule_entry: yes全部被拒summary為 dict、category為布爾、anchor_pose為數(shù)字報必須是字符串類錯誤duration為nan/inf/-inf/超大數(shù)/布爾/字符串報must be a finite numberdescription缺失報description is required測試還特別斷言了 SO101 配置啟用的全部技能都必須攜帶完整契約以及社交手勢簇必須聲明消歧記錄——這與設(shè)計流程Step 5 強制的要求一致。6. 從 YAML 聲明到運行驗證的完整鏈路6.1 技能執(zhí)行的受控路徑IB-Robot 中任何真實機器人技能執(zhí)行都必須經(jīng)過安全守衛(wèi)路徑不得繞過直接調(diào)用硬件、/task_executor/*、MoveIt、ros2_control或控制器Hermes / Agent / CLI - /embodied/execute_skill - skill_executor - safety_guard - existing primitive executor6.2 通過 robot-skill CLI 驗證技能技能完成description:編寫后可用robot-skill命令行工具做驗證與執(zhí)行命令取自 ibrobot-robot-skill-design 技能說明robot-skill --config-name NAME validate SKILL ARGS robot-skill --config-name NAME execute SKILL --task-id ID robot-skill --config-name NAME execute recover_safe_pose --task-id ID其中validate子命令只校驗技能而不執(zhí)行定義于 cli.pyexecute需要顯式提供--task-id。真實機器人測試結(jié)束后除非用戶明確要求停在最終位姿否則應(yīng)當執(zhí)行recover_safe_pose讓機械臂回到安全位姿。6.3 實操中的驗證檢查清單結(jié)合契約與設(shè)計流程的 Validation Checklist新增/修改技能后應(yīng)逐項確認技能名位于planning_policy.allowed_skills若希望 planner 可生成它該 allowlist 不影響 catalog 暴露每個原語都在SUPPORTED_PRIMITIVES內(nèi)每個命名位姿都存在于embodied.named_posesdescription:塊包含summary/category/when_to_use/motion_scope/intensity加載器強制校驗并拒絕懸空的do_not_use.instead_use每個近義技能至少有一條do_not_use重定向如 wave_hello 與 greet_observe_raise、nod_yes 之間中文觸發(fā)詞只存在于description.aliases_zh不得在command_parser中硬編碼平行關(guān)鍵詞表catalog 文檔由description:塊自動合成不手工維護逐技能 prose。7. 小結(jié)description:契約把技能該在什么場景被選中、絕不該在什么場景被選中這件事從隱式的調(diào)用邏輯中剝離出來變成一份顯式、可校驗、可自動生成文檔的 YAML 聲明。它以robot_config.loader._validate_skill_description為強校驗入口以skill_catalog的目錄校驗為第二道防線以aliases_zh rule_entry為規(guī)則解析器的單一觸發(fā)詞來源最終通過robot-skill validate/execute完成端到端驗證。遵循這份契約Agent/Hermes 才能在wave_hello、nod_yes、greet_observe_raise、dance_basic等近義技能之間穩(wěn)定、準確地完成選路。贊分享具身智能機器人人工智能大模型模型推理服務(wù)本地部署計算機視覺ROS【免費下載鏈接】IB_RobotSave the code of IB-Robot, an AI robot execution framework developed by openEuler Embedded for embodied intelligence scenarios. It includes references to the forked version of tensormsg, references to lerobot fork, code references to the lerobot_ros2:ros2_ws branch, as well as some code related to development usability.項目地址https://gitcode.com/openeuler/IB_Robot點擊查看免費下載相關(guān)推薦IB-Robot 公共運行時接口綁定Interface Binding從邏輯接口到 ROS 契約的聲明式消費方案IB Robot 公共運行時接口綁定Interface Binding從邏輯接口到 ROS 契約的聲明式消費方案 導(dǎo)讀 本文面向 IB Robotope具身智能機器人人工智能大模型模型推理服務(wù)本地部署計算機視覺ROSopenEulerOpenHarmony深度學(xué)習(xí)語音AI AgentAscendexpress-validator 中的 Schema 校驗checkSchema 聲明式校驗完全指南express validator 中的 Schema 校驗checkSchema 聲明式校驗完全指南 本篇指南圍繞 express validator 的后端IB-Robot 機器人運行時契約層robot_runtime深度解析契約命名、運行時剖面、Facade 門面與一致性測試IB Robot 機器人運行時契約層robot_runtime深度解析契約命名、運行時剖面、Facade 門面與一致性測試 robot_runtime 是具身智能機器人人工智能大模型模型推理服務(wù)本地部署計算機視覺ROSopenEulerOpenHarmony深度學(xué)習(xí)語音AI AgentAscend創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考