From 8235189d89b5ae545e37e761a4430794e9a8a870 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 13 Nov 2026 11:15:56 +0000 Subject: [PATCH] docs: rewrite onboarding prose for readers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop public WCE3 mentions, use 第五纪 for the FiveAges brand, and say the standard arms deb can run ocs2_wbc_controller without a source checkout. Day 6, Day 7, and the FaSim / lerobot mechanism pages now state the task, the check, and the result in plain sentences. Co-authored-by: HUANG ZHENBIAO --- .cursor/skills/docs-writing/SKILL.md | 5 +- .../LC_MESSAGES/0-overview/1-architecture.po | 32 +- .../LC_MESSAGES/0-overview/2-learning_path.po | 1000 +++++++++-------- .../LC_MESSAGES/0-overview/3-repo_map.po | 94 +- .../0-overview/4-public_vs_internal.po | 74 +- .../1-getting_started/3-open_deploy_ws.po | 153 +-- .../1-getting_started/4-fa_deploy_ws.po | 2 +- .../LC_MESSAGES/1-getting_started/5-faq.po | 52 +- .../1-basic_operations/1-run_mock_demo.po | 48 +- .../1-basic_operations/2-switch_robot.po | 52 +- .../2-how_to/2-simulation/4-isaac_sim.po | 542 ++++----- .../2-how_to/5-teleoperation/6-vr_teleop.po | 2 +- .../2-how_to/6-deployment/10-add_a_robot.po | 62 +- .../2-how_to/7-synthetic_data/0-index.po | 80 +- .../7-synthetic_data/1-isaac_scenes.po | 71 +- .../7-synthetic_data/2-orchestration.po | 49 +- .../3-concepts/4-fsm_and_topics.po | 92 +- .../LC_MESSAGES/3-concepts/5-source_vs_deb.po | 33 +- .../LC_MESSAGES/3-concepts/7-split_vs_wbc.po | 44 +- .../4-reference/controllers/3-ocs2_wbc.po | 141 ++- .../controllers/8-ros2_parameters.po | 29 +- .../4-reference/descriptions/0-index.po | 37 +- .../descriptions/1-robot_descriptions.po | 34 +- .../descriptions/3-brand_public.po | 14 +- .../descriptions/4-fiveages_umbrella.po | 202 ++-- .../python_apps/1-ros2_robot_interface.po | 51 +- .../4-reference/python_apps/4-lerobot_ros2.po | 143 +-- .../python_apps/5-robot_action_composer.po | 122 +- .../4-reference/simulation/2-fasim_isaac.po | 667 ++++++----- .../4-reference/simulation/3-robot_usds.po | 166 ++- .../simulation/4-usd_submodules.po | 99 +- .../5-developer/3-packaging_deb.po | 38 +- .../3-vla_collect_train_deploy.po | 22 +- scripts/check_zh_mix.py | 2 +- source/0-overview/1-architecture.md | 2 +- source/0-overview/2-learning_path.md | 100 +- source/0-overview/3-repo_map.md | 11 +- source/0-overview/4-public_vs_internal.md | 8 +- source/1-getting_started/3-open_deploy_ws.md | 10 +- source/1-getting_started/5-faq.md | 2 +- .../1-basic_operations/1-run_mock_demo.md | 2 +- .../1-basic_operations/2-switch_robot.md | 2 +- source/2-how_to/2-simulation/4-isaac_sim.md | 48 +- .../2-how_to/6-deployment/10-add_a_robot.md | 2 +- source/2-how_to/7-synthetic_data/0-index.md | 15 +- .../7-synthetic_data/1-isaac_scenes.md | 5 +- .../7-synthetic_data/2-orchestration.md | 2 +- source/3-concepts/4-fsm_and_topics.md | 4 +- source/3-concepts/5-source_vs_deb.md | 4 +- source/3-concepts/7-split_vs_wbc.md | 4 +- source/4-reference/controllers/3-ocs2_wbc.md | 10 +- .../controllers/8-ros2_parameters.md | 2 +- source/4-reference/descriptions/0-index.md | 4 +- .../descriptions/1-robot_descriptions.md | 2 +- .../descriptions/3-brand_public.md | 2 +- .../descriptions/4-fiveages_umbrella.md | 16 +- .../python_apps/1-ros2_robot_interface.md | 2 +- .../4-reference/python_apps/4-lerobot_ros2.md | 8 +- .../python_apps/5-robot_action_composer.md | 11 +- .../4-reference/simulation/2-fasim_isaac.md | 48 +- source/4-reference/simulation/3-robot_usds.md | 11 +- .../simulation/4-usd_submodules.md | 13 +- source/5-developer/3-packaging_deb.md | 2 +- .../3-vla_collect_train_deploy.md | 2 +- 64 files changed, 2389 insertions(+), 2219 deletions(-) diff --git a/.cursor/skills/docs-writing/SKILL.md b/.cursor/skills/docs-writing/SKILL.md index fedf9de..18e6d00 100644 --- a/.cursor/skills/docs-writing/SKILL.md +++ b/.cursor/skills/docs-writing/SKILL.md @@ -47,7 +47,7 @@ Do **not** document a hand-written `~/.bashrc` `source /opt/ros/...` chain as th ## Private repos -For `fa-deploy-ws`, remaining private FiveAges remotes (`fa-w2r-description`, `fa-s2r-description`, `fa-wce3-description`, `fiveages-gen3-robot-usds`), DexCap private workspace, `ocs2_wbc_controller`, and other 404-without-access remotes: +For `fa-deploy-ws`, remaining private FiveAges remotes (`fa-w2r-description`, `fa-s2r-description`), the DexCap private workspace, and other 404-without-access remotes: - Tell readers to follow **that repository’s README after access** - You may name the same **script name** as the public counterpart (`./init_repo.sh`) when that is the verified pattern @@ -69,7 +69,8 @@ Keep **reader-facing product facts**: - There is **no** `hardware:=mock`. Keys are `mock_components` / `gz` / `isaac` / `real`. - `/fsm_command` is `std_msgs/Int32`, not strings such as `stand` / `walk`. - Acone / AC One is **dual-arm** (双臂); Lift 2S is the **full-body** mobile manipulator. Do not call Acone arm-only / single-arm / 仅机械臂. -- Brand labels follow [robot_usds README_zh-CN.md §3.1](https://github.com/fiveages-sim/robot_usds/blob/main/README_zh-CN.md#31-中文简称与英文标识对照) (方舟无限 = ARX, never bare “Ark”; 高擎 = HighTorque / Panthera). On reader pages, use names naturally (quiet first-mention pairs such as **ARX** (方舟无限) are fine). Do not lecture “方舟无限 = ARX, not bare Ark” on every page. +- Brand labels follow [robot_usds README_zh-CN.md §3.1](https://github.com/fiveages-sim/robot_usds/blob/main/README_zh-CN.md#31-中文简称与英文标识对照) (方舟无限 = ARX, never bare “Ark”; 高擎 = HighTorque / Panthera). Reader Chinese for the FiveAges brand is **第五纪**. Do not rewrite repo URLs, `humanoid/FiveAges/`, or prim names such as `FiveAges_W2`. On reader pages, use names naturally (quiet first-mention pairs such as **ARX** (方舟无限) are fine). Do not lecture “方舟无限 = ARX, not bare Ark” on every page. +- `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning` ship in the GitHub Release package `ros-jazzy-arms-ros2-control`. Install with `./init_repo.sh` (arms = `d`) or `./scripts/install_core_debs.sh --only arms`. That script does not install `ros-jazzy-arms-ros2-control-full`, and the package is not on apt. Cloning the private repos is for reading or editing source. Do not claim other private descriptions or hardware repos are in this deb. Feishu 运控 glossary: Chinese **驱动层** is the ros2_control **hardware interface** layer. English reader titles, sidebar labels, and cross-link text use **Hardware Interface(s)** — not **Driver layer** as the primary EN name. zh `.po` msgstr for those titles stays **驱动层**. Do not treat 硬件接口 and 驱动层 as two product layers. Glossary: `source/3-concepts/8-terminology.md`. Keep `hardware:=`, ``, plugin class names, and `ros2 control list_hardware_interfaces` as code. diff --git a/locale/zh_CN/LC_MESSAGES/0-overview/1-architecture.po b/locale/zh_CN/LC_MESSAGES/0-overview/1-architecture.po index 7a06dc8..3ff51a6 100644 --- a/locale/zh_CN/LC_MESSAGES/0-overview/1-architecture.po +++ b/locale/zh_CN/LC_MESSAGES/0-overview/1-architecture.po @@ -78,9 +78,9 @@ msgstr "公开" msgid "`fa-deploy-ws`" msgstr "`fa-deploy-ws`" -#: ../../source/0-overview/1-architecture.md:7 a0ad6b97a1d24abdbcf791093528b5c1 +#: ../../source/0-overview/1-architecture.md:7 72a092f922544977bb9ad258627fdf1b msgid "Internal workspace for FA robots" -msgstr "面向 FA 机器人的内部工作空间" +msgstr "面向第五纪机器人的内部工作空间" #: ../../source/0-overview/1-architecture.md:7 3826d0d76b594228ac3daf7fe3ddf7a0 #: a01f842c8fa840028c24c96021f9ce53 @@ -129,20 +129,6 @@ msgid "" "launch utilities" msgstr "**robot-descriptions-common** — 共用夹爪、灵巧手、传感器与 launch 工具" -#: ../../source/0-overview/1-architecture.md:88 -#: 17032d5169504923a91d1cfc593c49c5 -msgid "" -"**humanoid/FiveAges** — Gitlink packages under that umbrella (not a " -"separate `robot-descriptions-fiveages` repo). **Public:** W1, W2, S2, " -"`fa-w2-components`. **Still private:** **W2R**, **S2R** (not open yet), " -"Gen3. Paths: [FiveAges robot " -"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)" -msgstr "" -"**humanoid/FiveAges** — 该伞形仓下的 gitlink 包(不是独立的 `robot-descriptions-fiveages`" -"仓库)。**公开:** W1、W2、S2、`fa-w2-components`。**仍为私有:**" -"**W2R**、**S2R**(尚未开放)、Gen3。路径:[FiveAges" -"机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)" - #: ../../source/0-overview/1-architecture.md:89 #: b78f5550154c41fa8a36c90643c97d00 msgid "**Brand packages** — Per-vendor descriptions (dobot, arx, galbot, etc.)" @@ -374,3 +360,17 @@ msgstr "Test in mock → simulation → real hardware" #~ msgid "L2: Driver layer" #~ msgstr "L2:驱动层" +#: ../../source/0-overview/1-architecture.md:88 +#: dc5874027d74457f9479a6ffde8b1bfc +msgid "" +"**humanoid/FiveAges** — Gitlink packages under that umbrella. There is no" +" separate `robot-descriptions-fiveages` repo. **Public:** W1, W2, S2, " +"`fa-w2-components`. **Still private:** **W2R** and **S2R**. Paths: " +"[FiveAges robot " +"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)" +msgstr "" +"**humanoid/FiveAges** 是这个伞形仓里的 gitlink,没有单独的 `robot-descriptions-" +"fiveages` 仓库。**公开:** W1、W2、S2、`fa-w2-components`。**仍私有:** **W2R** 和 " +"**S2R**。路径见 " +"[第五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" + diff --git a/locale/zh_CN/LC_MESSAGES/0-overview/2-learning_path.po b/locale/zh_CN/LC_MESSAGES/0-overview/2-learning_path.po index dd8d8fa..78a901c 100644 --- a/locale/zh_CN/LC_MESSAGES/0-overview/2-learning_path.po +++ b/locale/zh_CN/LC_MESSAGES/0-overview/2-learning_path.po @@ -719,57 +719,11 @@ msgstr "" "HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md)** — " "双臂:`git clone -b panthera-ht …` 然后 `./init_repo.sh` / `./quick_start.sh`" -#: ../../source/0-overview/2-learning_path.md:194 -#: 28285e5a89a040b59d3c1eecc0205327 -msgid "Internal Path (FA Robots)" -msgstr "内部路径(FA 机器人)" - -#: ../../source/0-overview/2-learning_path.md:196 -#: d3f7528fdeae4530b20c09fd2b44ba1e -msgid "Internal Access Required" -msgstr "需要内部访问权限" - -#: ../../source/0-overview/2-learning_path.md:199 -#: d710b549755843f3916158ad5b91cddc -msgid "" -"These links need repository access. Without it, GitHub does not open the " -"page. That is expected." -msgstr "这些链接需要仓库权限。没有权限时,GitHub 打不开页面。这是预期情况。" - -#: ../../source/0-overview/2-learning_path.md:201 -#: b1fe0d799fb747c68ec06c71808ae5f3 -msgid "" -"FA **deploy** (W1, W2, W2R, S2, S2R, dual-arm CCS) uses [fa-deploy-" -"ws](https://github.com/fiveages-sim/fa-deploy-ws) (default branch " -"`fa-w2`). W1/W2/S2 URDF and Gen1/Gen2 USD remotes are public; **W2R and " -"S2R are not open**. See [FiveAges robot " -"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)." -msgstr "" -"五纪 **部署**(W1、W2、W2R、S2、S2R、双臂 CCS)使用 [fa-deploy-ws](https://github.com" -"/fiveages-sim/fa-deploy-ws)(默认分支 `fa-w2`)。W1/W2/S2 的 URDF 与 Gen1/Gen2 的 " -"USD 远程仓库已公开;**W2R 与 S2R 仍未开放**。见 " -"[五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" - -#: ../../source/0-overview/2-learning_path.md:204 -#: d52fec16bd36406dba29c39a83362f1f -msgid "" -"Open the private checkout you were given, then follow **that repository’s" -" README**. The shared script name is `./init_repo.sh`. Flags and robot " -"IDs stay in that README." -msgstr "" -"打开已经授权给你的私有检出,然后按**该仓库 README** 操作。共用的脚本名是 " -"`./init_repo.sh`。启动参数和机器人编号只写在那份 README 里。" - #: ../../source/0-overview/2-learning_path.md:196 #: 3aac93ef75b04a5ba4c7c4148c9f4d64 msgid "Repository" msgstr "Repository" -#: ../../source/0-overview/2-learning_path.md:196 -#: 8b81c6711fbc4bac98bd3ec9b9e6e3c7 -msgid "What it is" -msgstr "用途" - #: ../../source/0-overview/2-learning_path.md:196 #: 866b46b6062641b8973d3df58600abc6 msgid "Access" @@ -780,19 +734,6 @@ msgstr "Access" msgid "[fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws)" msgstr "[fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws)" -#: ../../source/0-overview/2-learning_path.md:196 -#: 68d5ec55ca654f2093e77108ef27e3c7 -msgid "Internal workspace (`fa-w2`)" -msgstr "内部工作空间(`fa-w2`)" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 162c2cfe771247c4b05651e7e0e0f4db 1f71a2a79c3f44b8868d137c98ed2d05 -#: 3bde6c220d1845bfb27c152312108701 8b583d967c1641568266e5d315d0f1b7 -#: af11f8136fae4de5a9406cdd805198a1 b600edbb69a34145baae827fe4071ea7 -#: fabe7df63ef8460e8085cc0b8cac1148 -msgid "Required" -msgstr "Required" - #: ../../source/0-overview/2-learning_path.md:196 #: 389bd986d6c740d9936ffb4ae1b00c8c msgid "[fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)" @@ -813,419 +754,26 @@ msgstr "[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) msgid "S2R URDF" msgstr "S2R 的 URDF" -#: ../../source/0-overview/2-learning_path.md:196 -#: d47893da1ba04451a19e80266a3d26eb -msgid "[fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description)" -msgstr "[fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description)" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 68ad58ccc12544ebb20642c554d1786c -msgid "Gen3 URDF" -msgstr "Gen3 的 URDF" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 90653cee3461457bbd99783562dd9bfe -msgid "" -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)" -msgstr "" -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 7058b842db3445489cfb3238f439a5c8 -msgid "Gen3 USD" -msgstr "Gen3 的 USD" - #: ../../source/0-overview/2-learning_path.md:196 #: c4a8dece825a455b862ba803bcc24557 msgid "[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller)" msgstr "[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller)" -#: ../../source/0-overview/2-learning_path.md:196 -#: 847ebfa3498647a98fc16d62e9d31a3a -msgid "Whole-body controller" -msgstr "全身控制器" - #: ../../source/0-overview/2-learning_path.md:196 #: aeb41447b77a484ca9d12dc095963999 msgid "[ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid)" msgstr "[ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid)" -#: ../../source/0-overview/2-learning_path.md:196 -#: 591a538a41024d91a6d409e6b17821e8 -msgid "Wheeled-arm motion library" -msgstr "轮臂运动库" - -#: ../../source/0-overview/2-learning_path.md:216 -#: 3885f74fb9694a209edc39844398f068 -msgid "" -"More private descriptions, hardware interfaces, and teleop checkouts are " -"linked on the [Repository Map](3-repo_map.md). Public W1 / W2 / S2 URDF " -"stays on [FiveAges robot " -"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)." -msgstr "" -"其余私有描述、驱动层和遥操作仓库链在 [仓库地图](3-repo_map.md)。公开的 W1 / W2 / S2 URDF 见 " -"[五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" - -#: ../../source/0-overview/2-learning_path.md:219 -#: 513082baf9c84625b3f09956585ebfa6 -msgid "" -"Open [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) and run" -" the init / quick-start scripts named in that README." -msgstr "" -"打开 [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws),按该 README" -" 里的初始化 / 快速启动脚本执行。" - #: ../../source/0-overview/2-learning_path.md:220 #: a28c89643fef423c8fb7ef0864c28e0f msgid "Follow [fa-deploy-ws Setup](../1-getting_started/4-fa_deploy_ws.md)." msgstr "见 [fa-deploy-ws 配置](../1-getting_started/4-fa_deploy_ws.md)。" -#: ../../source/0-overview/2-learning_path.md:222 -#: 9ba7b3206e4a4e009fc3ef6447caf7a1 -msgid "" -"**Safety:** Verify in `mock_components` (or that workspace’s documented " -"sim path) before `hardware:=real`." -msgstr "**安全:** 先在 `mock_components`(或该工作区文档中的仿真路径)验证,再使用 `hardware:=real`。" - -#: ../../source/0-overview/2-learning_path.md:224 -#: 650bcee9390b4372a0d24ac7ab0e5db1 -msgid "Day 7: FaSim integration exam" -msgstr "第 7 天:FaSim 接入考核" - -#: ../../source/0-overview/2-learning_path.md:226 -#: c0f1e41fd758434a8fda2422bcae357e -msgid "" -"**Goal:** Bring **one new robot** into FaSim so Isaac and the ROS 2 运控 " -"stack move it. Pass by taking that robot through mock, then sim, until " -"you can see the joints move. Replaying the existing CR5 or W2 demo is " -"only a warm-up." -msgstr "" -"**目标:** 把**一款新机器人**接入 FaSim,让 Isaac 和 ROS 2 运控栈把它驱动起来。通过标准是这款机器人先过 " -"mock,再过仿真,直到能看见关节在动。重放现成的 CR5 或 W2 演示只算热身。" - -#: ../../source/0-overview/2-learning_path.md:228 -#: 58b34c828e95465a8a6e1a4d312a88de -msgid "" -"**You already need** Days 0–3: `./init_repo.sh`, a launch that reaches " -"HOLD with `hardware:=mock_components`, and FaSim `./init.sh` / " -"`./run.sh`. Isaac Sim is installed and `ISAACSIM_DIR` is set." -msgstr "" -"**你已经需要** 第 0–3 天:`./init_repo.sh`、一次能到 HOLD 的 " -"`hardware:=mock_components` 启动,以及 FaSim 的 `./init.sh` / `./run.sh`。Isaac " -"Sim 已安装,并且设置了 `ISAACSIM_DIR`。" - -#: ../../source/0-overview/2-learning_path.md:230 -#: ddacb09740124e8e8e1df8d1d5e29dac -msgid "" -"Pick one robot. Add odometry, Nav2, or a dexterous hand only when this " -"robot has them. Work through the steps below." -msgstr "选定一款机器人。只有这款机器人真有底盘、导航或灵巧手时,才补里程计、Nav2 或灵巧手。按下面的步骤做。" - -#: ../../source/0-overview/2-learning_path.md:232 -#: 93c647e5b96b4183b8c866ab8d8ae684 -msgid "" -"Procedure and file layout: [Add a " -"Robot](../2-how_to/6-deployment/10-add_a_robot.md). Isaac start and the " -"two connections: [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md). " -"Mechanism: [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md)." -msgstr "" -"步骤和文件布局:[添加机器人](../2-how_to/6-deployment/10-add_a_robot.md)。Isaac " -"启动和两种连接:[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md)。机制:[FaSim-" -"Isaac](../4-reference/simulation/2-fasim_isaac.md)。" - -#: ../../source/0-overview/2-learning_path.md:234 -#: 392dc4a5e39540e9b2ebd8aff0aafd01 -msgid "Required for every robot" -msgstr "每款机器人都要做" - -#: ../../source/0-overview/2-learning_path.md:236 -#: d4ee0fb8e60548db8a95e57ca836f1d8 -#, python-brace-format -msgid "" -"**Description.** A `{robot}_description` package whose xacro has a " -"`ros2_control` block. Simulation plugins come from " -"[`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" -"descriptions-" -"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)." -" `ros2 launch ocs2_arm_controller demo.launch.py robot:=` (omit " -"`hardware:=`) reaches HOLD before you open Isaac." -msgstr "" -"**描述包。** `{robot}_description` 的 xacro 里要有 `ros2_control` 块。仿真插件来自 " -"[`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" -"descriptions-" -"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)。`ros2" -" launch ocs2_arm_controller demo.launch.py robot:=`(省略 " -"`hardware:=`)应在打开 Isaac 之前进入 HOLD。" - -#: ../../source/0-overview/2-learning_path.md:237 -#: 4c640ef67d5c4bdf80b90a5e59b4077d -msgid "" -"**USD.** A stage `./run.sh` can open, with one ArticulationRoot for this " -"robot, under [robot_usds](https://github.com/fiveages-sim/robot_usds) or " -"a project scene you can access. There is no `./run.sh --robot`." -msgstr "" -"**USD。** `./run.sh` 能打开的舞台,且这款机器人有一个 ArticulationRoot,放在 " -"[robot_usds](https://github.com/fiveages-sim/robot_usds) " -"或你有权限的项目场景里。启动方式是打开 USD,而不是 `./run.sh --robot`。" - -#: ../../source/0-overview/2-learning_path.md:238 -#: 5817667b8ec24716817910653371b451 -msgid "**One sim connection** for those joints." -msgstr "**这些关节只用一种仿真连接。**" - -#: ../../source/0-overview/2-learning_path.md:239 -#: 4f301263c6974adbaf7c1030be00cb52 -msgid "" -"**Topic bridge:** `hardware:=isaac` → `TopicBasedSystem`. The xacro " -"`joint_commands_topic` / `joint_states_topic` equal that graph’s " -"`topicName`. The shared macro writes `/isaac/joint_command` and " -"`/isaac/joint_states`. A robot graph may use other names (W2 topic-bridge" -" payload: `/joint_command` and `/joint_states`). `demo.launch.py` has no " -"namespace argument." -msgstr "" -"**话题桥:** `hardware:=isaac` → `TopicBasedSystem`。xacro 里的 " -"`joint_commands_topic` / `joint_states_topic` 必须等于该图的 `topicName`。共享宏写入 " -"`/isaac/joint_command` 和 `/isaac/joint_states`。某台机器人的图可能用别的名字(W2 话题桥载荷是 " -"`/joint_command` 和 `/joint_states`)。`demo.launch.py` 没有命名空间参数。" - -#: ../../source/0-overview/2-learning_path.md:240 -#: 9f36513836e24ad2b34ecc4588f669d5 -msgid "" -"**In-process:** Play a payload that contains `ROS2ControlLaunch` (W2: " -"[`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/fiveages.usda)). The node sets " -"`hardware=isaac_sim` and `isaac_prim_path`. The description xacro must " -"accept `isaac_sim`." -msgstr "" -"**进程内:** 播放含 `ROS2ControlLaunch` " -"的载荷(W2:[`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2" -"-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda))。节点会设置 " -"`hardware=isaac_sim` 和 `isaac_prim_path`。描述 xacro 必须接受 `isaac_sim`。" - -#: ../../source/0-overview/2-learning_path.md:241 -#: 08f093d4481644c7a0b16e6749594309 -msgid "" -"**Controllers.** Arm or split body: `ocs2_arm_controller` (`demo` or " -"`split_body`). Whole body only when this robot’s planner model includes " -"the mobile base: `full_body.launch.py` and, with access, [ocs2-wbc-" -"controller](https://github.com/fiveages-sim/ocs2-wbc-controller). Leave " -"`infoFile` empty to keep the description default. To lock a mobile base, " -"use `mobile_base_tcp` and `BASE_LOCK`. `full_body` together with a " -"`fixed_base` info file has no virtual chassis joint for that lock, and " -"arm enable can stay waiting." -msgstr "" -"**控制器。** 机械臂或分体:`ocs2_arm_controller`(`demo` 或 " -"`split_body`)。只有规划模型包含移动底盘时才做全身:`full_body.launch.py`,以及有权限时的 [ocs2-wbc-" -"controller](https://github.com/fiveages-sim/ocs2-wbc-" -"controller)。`infoFile` 留空则用描述包默认值。要锁住移动底盘,用 `mobile_base_tcp` 和 " -"`BASE_LOCK`。`full_body` 再配一份 `fixed_base` 的 info " -"时,这次锁定没有虚拟底盘关节,手臂使能会一直等待。" - -#: ../../source/0-overview/2-learning_path.md:242 -#: 664bc4a0d4724e42965c8638b00c8feb -msgid "" -"**Motion you can see.** A small FSM home or joint target changes the same" -" joints in Isaac." -msgstr "**能看见的运动。** 一次小的 FSM 回零或关节目标,会让 Isaac 里同一批关节动起来。" - -#: ../../source/0-overview/2-learning_path.md:244 -#: 4a096772ea7d480bb5f33460e6ea1a3b -msgid "Only if this robot has it" -msgstr "仅当这款机器人具备时" - -#: ../../source/0-overview/2-learning_path.md:196 -#: c4cc94b953da4e8a94ff9c3859a83e25 -msgid "Piece" -msgstr "Piece" - -#: ../../source/0-overview/2-learning_path.md:196 -#: d61a7b785c6f45b18cc596170d160fe1 -msgid "When" -msgstr "When" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 25d6c4437d0547a9bdf018a921004e97 -msgid "What to wire" -msgstr "要接上什么" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 77211c0759b3490ab3d9a7d6bfb92e60 -msgid "Chassis / odom" -msgstr "底盘 / 里程计" - -#: ../../source/0-overview/2-learning_path.md:196 -#: dacc4014514e4a99a9b1b6598541e179 -msgid "It has a mobile base" -msgstr "有移动底盘" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 92e2e9671f7f46d8a9a15f4b01fa4ad1 -msgid "" -"Isaac publishes `world → odom → base_*`. `robot_state_publisher` " -"publishes the URDF tree (`base_footprint → base_link` when both exist). " -"OCS2 `baseFrame` is that same link. One publisher per TF edge. A ROS " -"namespace does not rename `frame_id`." -msgstr "" -"Isaac 发布 `world → odom → base_*`。`robot_state_publisher` 发布 URDF " -"树(两边都有时包括 `base_footprint → base_link`)。OCS2 的 `baseFrame` 就是这同一个连杆。每条 TF" -" 边只有一个发布者。ROS 命名空间不会改写 `frame_id`。" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 5ce8e6e5d00948c880fb9e17b147bdb9 -msgid "Gripper or hand" -msgstr "夹爪或手" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 4f3e80258f3943399564662f69615518 -msgid "It has one" -msgstr "这款机器人有一个" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 53905533b9564177a59f1fde4362eac5 -msgid "Launch `type` / `left_type` / `right_type`. There is no `gripper:=`." -msgstr "Launch `type` / `left_type` / `right_type`. There is no `gripper:=`." - -#: ../../source/0-overview/2-learning_path.md:196 -#: 184d02a0c37b4ca2b8f2303106576be7 -msgid "Navigation" -msgstr "Navigation" - -#: ../../source/0-overview/2-learning_path.md:196 -#: b8ea3061f87f41faaa40cf76ec0ac63a -msgid "The scene drives the base on a map" -msgstr "场景要让底盘按地图行驶" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 71ea1b0b2aee4ff38553209e7290a61c -msgid "" -"`NavigationLaunch` on the USD. `map` is a path relative to the opened " -"`env/` layer. It starts `navigation_isaac_gt.launch.py`. Composer " -"`ros2-stack` is a separate host process." -msgstr "" -"USD 上的 `NavigationLaunch`。`map` 是相对已打开 `env/` 层的路径。它启动 " -"`navigation_isaac_gt.launch.py`。编排器的 `ros2-stack` 是另一个宿主机进程。" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 34c56748733f40b48624861d680fabbd -msgid "Second robot" -msgstr "第二台机器人" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 81ad0fc480e740cb9089fd3ac3b21dd5 -msgid "Two articulations in one stage" -msgstr "同一舞台里有两个关节体" - -#: ../../source/0-overview/2-learning_path.md:196 -#: 717ac2977e3e45a3b76f05e00aa4bb19 -msgid "" -"Each root has its own graph and `ROS2ControlLaunch` `namespace`. Topics " -"live under `//`. Frame names stay `world`, `odom`, `base_link`." -msgstr "" -"每个根有自己的图和 `ROS2ControlLaunch` 的 `namespace`。话题在 `//` 下。帧名仍是 " -"`world`、`odom`、`base_link`。" - -#: ../../source/0-overview/2-learning_path.md:253 -#: e7a018c35d0f4c478c3bc370dd6b1668 -msgid "Phases" -msgstr "Phases" - -#: ../../source/0-overview/2-learning_path.md:255 -#: 9ca0d9ad79ec40b1ab87b14bbf3bd0dc -msgid "Mock: the demo launch above, FSM HOLD, joint names from the xacro." -msgstr "Mock:上面的演示启动,FSM 停在 HOLD,关节名来自 xacro。" - -#: ../../source/0-overview/2-learning_path.md:256 -#: e471bdf2277b4e40b3c08e5b7b271ca3 -msgid "`./run.sh`, open your USD, Play runs physics." -msgstr "`./run.sh`,打开你的 USD,播放后物理在跑。" - -#: ../../source/0-overview/2-learning_path.md:257 -#: da3f1b3fb5334a1c885bdea7894f8936 -msgid "" -"Topic bridge **or** in-process graph. `ros2 topic echo` the joint-state " -"topic, or `ros2 control list_controllers`." -msgstr "" -"话题桥**或**进程内图。对关节状态话题做 `ros2 topic echo`,或执行 `ros2 control " -"list_controllers`。" - -#: ../../source/0-overview/2-learning_path.md:258 -#: 19bd634df45942d2a25479c591a288c4 -msgid "" -"Command a small motion. The sim joints move. On the in-process graph, " -"`ros2 topic hz /clock` tracks the physics step." -msgstr "发一个小运动。仿真关节会动。进程内图上,`ros2 topic hz /clock` 跟着物理步走。" - #: ../../source/0-overview/2-learning_path.md:260 #: dd217448cfdd4fcbbc0c8ec920e45ba7 msgid "What you hand in" msgstr "要交什么" -#: ../../source/0-overview/2-learning_path.md:262 -#: e7e45de1031249daaf44cc0d09327bea -msgid "The description package (or branch) and the USD path you opened." -msgstr "描述包(或分支),以及你打开的 USD 路径。" - -#: ../../source/0-overview/2-learning_path.md:263 -#: a6b83566fb7444edbb19a6044cacbc6a -msgid "The launch line **or** the `ROS2ControlLaunch` prim you played." -msgstr "启动命令行,**或**你播放的 `ROS2ControlLaunch` 图元。" - -#: ../../source/0-overview/2-learning_path.md:264 -#: 80628069538945d0ae80776fbd3b996b -msgid "" -"The joint-state topic or controller list you saw, and the motion you " -"commanded." -msgstr "你看到的关节状态话题或控制器列表,以及你下发的运动。" - -#: ../../source/0-overview/2-learning_path.md:266 -#: b47515e587b84409ba544f0b8a7536ec -msgid "Pass when you can show" -msgstr "能演示这些就通过" - -#: ../../source/0-overview/2-learning_path.md:268 -#: 0e06963efbfc4c5aa09d3bf24fabc9f5 -msgid "Mock HOLD, then sim Play, on **this** robot." -msgstr "先 mock 到 HOLD,再仿真播放,对象是**这款**机器人。" - -#: ../../source/0-overview/2-learning_path.md:269 -#: ec1c79d2d79e4aa7b14037444c6e28bb -msgid "" -"Joint state or the controller state interfaces match the xacro joint " -"names." -msgstr "关节状态或控制器状态接口与 xacro 关节名一致。" - -#: ../../source/0-overview/2-learning_path.md:270 -#: 3e8961712cec48f68911bc4984cd4761 -msgid "A command moves those joints in Isaac." -msgstr "一条指令让这些关节在 Isaac 里动起来。" - -#: ../../source/0-overview/2-learning_path.md:271 -#: b2653b9e233842f3a1552850435a9696 -msgid "" -"If the payload publishes odometry: `world → odom → base_*` from Isaac, " -"URDF tree from `robot_state_publisher`, and no second node on the same " -"edge." -msgstr "" -"若载荷发布里程计:`world → odom → base_*` 来自 Isaac,URDF 树来自 " -"`robot_state_publisher`,同一条边没有第二个节点。" - -#: ../../source/0-overview/2-learning_path.md:272 -#: 1354bd31e7844908922cfc195552a619 -msgid "" -"In-process: `/robot_description` comes from `robot_state_publisher`. The " -"controller manager is started with robot-description publishing off." -msgstr "进程内:`/robot_description` 来自 `robot_state_publisher`。控制器管理器启动时关闭了机器人描述发布。" - -#: ../../source/0-overview/2-learning_path.md:274 -#: f1ba326bc1344b6d9af2a3c503934306 -msgid "" -"A motion that finishes too fast is a `/clock` problem (physics-step clock" -" versus playback tick). The FaSim reference describes that clock. It is " -"not fixed by editing joint gains." -msgstr "运动结束得过快,是 `/clock` 的问题(物理步时钟相对播放节拍)。FaSim 参考页说明了这套时钟。改关节增益解决不了。" - #: ../../source/0-overview/2-learning_path.md:276 #: 1026d30fe8ce4605b075e43c02fcb51a msgid "Optional: Synthetic data (Isaac)" @@ -1553,3 +1101,551 @@ msgstr "**提出问题** — 遇到缺陷或文档不清时,请在相应仓库 #~ "generator` 与 `feature/sim-grasp-" #~ "datagen`。停在录制/导出;跳过训练。" +#: ../../source/0-overview/2-learning_path.md:194 +#: 28285e5a89a040b59d3c1eecc0205327 +msgid "Internal path (FiveAges robots)" +msgstr "内部路径(第五纪机器人)" + +#: ../../source/0-overview/2-learning_path.md:196 +#: b1fe0d799fb747c68ec06c71808ae5f3 +msgid "" +"FiveAges robots (W1, W2, W2R, S2, S2R, and the dual-arm CCS) use [fa-" +"deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws), default branch " +"`fa-w2`. W1, W2, and S2 URDF, plus the Gen1 and Gen2 USD remotes, are " +"public. W2R and S2R are not. The description map is [FiveAges robot " +"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)." +msgstr "" +"第五纪机器人(W1、W2、W2R、S2、S2R,以及双臂 CCS)使用 [fa-deploy-ws](https://github.com" +"/fiveages-sim/fa-deploy-ws),默认分支 `fa-w2`。W1、W2、S2 的 URDF,以及 Gen1、Gen2 的 " +"USD 远端,都是公开的。W2R 和 S2R 不是。描述对照见 " +"[第五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" + +#: ../../source/0-overview/2-learning_path.md:198 +#: d52fec16bd36406dba29c39a83362f1f +msgid "" +"Open the checkout you were given and follow that repository’s README. The" +" script name shared with the public workspace is `./init_repo.sh`." +msgstr "打开分给你的检出,按那个仓库的 README 做。和公开工作区共用的脚本名是 `./init_repo.sh`。" + +#: ../../source/0-overview/2-learning_path.md:200 +#: cb8ed22063474cbb9169b6de6666f6e6 +msgid "" +"GitHub hides a private repository from anyone without access. That does " +"not block every binary." +msgstr "没有权限时,GitHub 打不开私有仓库。这不妨碍你使用已经打进 deb 的程序。" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 9017a4c585824ec9aa33de8440f5a677 +msgid "Use it for" +msgstr "用来做什么" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 68d5ec55ca654f2093e77108ef27e3c7 +msgid "The internal workspace (`fa-w2`)" +msgstr "内部工作区(`fa-w2`)" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 9927ac7431e34716a0ae8b2640335d95 +msgid "Clone and follow its README" +msgstr "克隆后按它的 README 做" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 4fabecbc28424ddab27d2db8f85aa68c 9f3be60411844eafaa7382e33de03465 +msgid "Read or change that description" +msgstr "阅读或修改这份描述" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 847ebfa3498647a98fc16d62e9d31a3a +msgid "Whole-body controller source" +msgstr "全身控制器源码" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 94b06e731cff4247bc33967a86716338 e253be4a983848dd8678a10fd36703c7 +msgid "Read or change the source" +msgstr "阅读或修改源码" + +#: ../../source/0-overview/2-learning_path.md:161 +#: 591a538a41024d91a6d409e6b17821e8 +msgid "Wheeled-arm motion library source" +msgstr "轮臂运动库源码" + +#: ../../source/0-overview/2-learning_path.md:210 +#: 1427851209a040bcb3e5f765c0cb1842 +msgid "" +"You can run whole-body control without those two source checkouts. The " +"standard GitHub Release package `ros-jazzy-arms-ros2-control` already " +"contains `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning` " +"([arms deb notes](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md)). In `open-deploy-ws` or " +"`fa-deploy-ws`, choose `d` for arms in `./init_repo.sh`, or run " +"`./scripts/install_core_debs.sh --only arms`. The script installs that " +"standard package. It does not install `ros-jazzy-arms-ros2-control-full`," +" and the package is not on Ubuntu or ROS apt. Private descriptions, other" +" hardware interfaces, and teleop trees are separate repositories. They " +"stay on the [Repository Map](3-repo_map.md). Public W1, W2, and S2 URDF " +"stays on [FiveAges robot " +"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)." +msgstr "" +"跑全身控制不必检出这两个源码仓。标准 GitHub Release 包 `ros-jazzy-arms-ros2-control` 里已经有 " +"`ocs2_wbc_controller`、`ocs2_humanoid` 和 `lina_planning`([arms 的 deb " +"说明](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md))。在 `open-deploy-ws` 或 `fa-" +"deploy-ws` 里,`./init_repo.sh` 给 arms 选 `d`,或运行 " +"`./scripts/install_core_debs.sh --only arms`。脚本装的是这个标准包,不会装 `ros-jazzy-" +"arms-ros2-control-full`,也不在 Ubuntu 或 ROS 的 apt " +"源里。私有描述、其他驱动层和遥操作仓是另外的仓库,仍列在 [仓库地图](3-repo_map.md)。公开的 W1、W2、S2 URDF 见 " +"[第五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" + +#: ../../source/0-overview/2-learning_path.md:214 +#: 513082baf9c84625b3f09956585ebfa6 +msgid "" +"Open [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) and run" +" the init and quick-start scripts named in that README." +msgstr "" +"打开 [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws),运行该 " +"README 里写的初始化和快速启动脚本。" + +#: ../../source/0-overview/2-learning_path.md:217 +#: 9ba7b3206e4a4e009fc3ef6447caf7a1 +msgid "" +"**Safety:** Prove the motion in `mock_components`, or in the sim path " +"that workspace documents, before you set `hardware:=real`." +msgstr "**安全:** 先在 `mock_components`,或该工作区文档里的仿真路径上把动作跑通,再设 `hardware:=real`。" + +#: ../../source/0-overview/2-learning_path.md:219 +#: 791cf8878e0e4f179244d658c9c2e3cf +msgid "Day 7: Bring one new robot into FaSim" +msgstr "第 7 天:把一台新机器人接入 FaSim" + +#: ../../source/0-overview/2-learning_path.md:221 +#: c0f1e41fd758434a8fda2422bcae357e +msgid "" +"**Goal:** Connect a robot that is not already a demo, so Isaac and the " +"ROS 2 stack move it. You are done when a command moves that robot’s " +"joints in the viewport. Replaying CR5 or W2 is practice, not the task." +msgstr "" +"**目标:** 接上一台还不是现成 demo 的机器人,让 Isaac 和 ROS 2 " +"运控把它动起来。一条指令能在视口里带动这台机器人的关节,这一天就算完成。再跑一遍 CR5 或 W2 只是练习,不是任务。" + +#: ../../source/0-overview/2-learning_path.md:223 +#: 58b34c828e95465a8a6e1a4d312a88de +msgid "" +"**Before you start.** Finish Days 0–3. You can reach HOLD with " +"`hardware:=mock_components`, Isaac Sim is installed, `ISAACSIM_DIR` is " +"set, and you have run FaSim `./init.sh` and `./run.sh`." +msgstr "" +"**开始之前。** 做完第 0 到第 3 天。你能用 `hardware:=mock_components` 进到 HOLD,Isaac Sim " +"已安装,`ISAACSIM_DIR` 已设置,并且跑过 FaSim 的 `./init.sh` 和 `./run.sh`。" + +#: ../../source/0-overview/2-learning_path.md:225 +#: 93c647e5b96b4183b8c866ab8d8ae684 +msgid "" +"File layout: [Add a Robot](../2-how_to/6-deployment/10-add_a_robot.md). " +"Starting Isaac and choosing a connection: [Isaac " +"Sim](../2-how_to/2-simulation/4-isaac_sim.md). What the two connections " +"do: [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md)." +msgstr "" +"文件怎么放:[添加机器人](../2-how_to/6-deployment/10-add_a_robot.md)。怎么启动 " +"Isaac、选哪一种连接:[Isaac " +"Sim](../2-how_to/2-simulation/4-isaac_sim.md)。两种连接各自做什么:[FaSim-" +"Isaac](../4-reference/simulation/2-fasim_isaac.md)。" + +#: ../../source/0-overview/2-learning_path.md:227 +#: d569ef5e0f6c44ca96922e076ca866f3 +msgid "Build these four pieces" +msgstr "准备这四样" + +#: ../../source/0-overview/2-learning_path.md:229 +#: d4ee0fb8e60548db8a95e57ca836f1d8 +#, python-brace-format +msgid "" +"**A description.** Add a `{robot}_description` package whose xacro " +"includes a `ros2_control` block. Simulation plugins come from " +"[`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)." +" Before you open Isaac, `ros2 launch ocs2_arm_controller demo.launch.py " +"robot:=` reaches HOLD. Leave `hardware` at the default." +msgstr "" +"**描述包。** 增加 `{robot}_description`,xacro 里要有 `ros2_control` 块。仿真插件来自 " +"[`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)。打开" +" Isaac 之前,`ros2 launch ocs2_arm_controller demo.launch.py robot:=` " +"应能进到 HOLD。`hardware` 保持默认。" + +#: ../../source/0-overview/2-learning_path.md:231 +#: 4c640ef67d5c4bdf80b90a5e59b4077d +msgid "" +"**A USD stage.** `./run.sh` opens it, and the stage has one " +"ArticulationRoot for this robot. Put it under " +"[robot_usds](https://github.com/fiveages-sim/robot_usds), or in a project" +" scene you can open. There is no `./run.sh --robot`." +msgstr "" +"**一份 USD。** `./run.sh` 能打开它,舞台上这台机器人有一个 ArticulationRoot。放在 " +"[robot_usds](https://github.com/fiveages-sim/robot_usds) " +"下,或放进你能打开的项目场景。没有 `./run.sh --robot`。" + +#: ../../source/0-overview/2-learning_path.md:233 +#: 5817667b8ec24716817910653371b451 +msgid "**One connection for those joints.**" +msgstr "**给这些关节接上一种连接。**" + +#: ../../source/0-overview/2-learning_path.md:234 +#: 4f301263c6974adbaf7c1030be00cb52 +msgid "" +"**Topic bridge.** `hardware:=isaac` uses " +"`topic_based_ros2_control/TopicBasedSystem`. The xacro " +"`joint_commands_topic` / `joint_states_topic` and the graph `topicName` " +"are the same strings. The shared macro writes `/isaac/joint_command` and " +"`/isaac/joint_states`. W2’s topic-bridge payload uses `/joint_command` " +"and `/joint_states`. `demo.launch.py` has no namespace argument." +msgstr "" +"**话题桥。** `hardware:=isaac` 使用 " +"`topic_based_ros2_control/TopicBasedSystem`。xacro 的 " +"`joint_commands_topic` / `joint_states_topic` 和图里的 `topicName` " +"是同一组字符串。共享宏写成 `/isaac/joint_command` 和 `/isaac/joint_states`。W2 的话题桥载荷用的是" +" `/joint_command` 和 `/joint_states`。`demo.launch.py` 没有 namespace 参数。" + +#: ../../source/0-overview/2-learning_path.md:235 +#: 9f36513836e24ad2b34ecc4588f669d5 +msgid "" +"**In-process.** Press Play on a payload that contains " +"`ROS2ControlLaunch`. W2’s in-process payload is " +"[`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-" +"usds/blob/main/W2/payloads/ROS/fiveages.usda). The node sets " +"`hardware=isaac_sim` and `isaac_prim_path`. The description xacro must " +"accept `isaac_sim`." +msgstr "" +"**进程内。** 对含有 `ROS2ControlLaunch` 的载荷按 Play。W2 的进程内载荷是 " +"[`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-" +"usds/blob/main/W2/payloads/ROS/fiveages.usda)。节点会设置 `hardware=isaac_sim` " +"和 `isaac_prim_path`。描述 xacro 必须接受 `isaac_sim`。" + +#: ../../source/0-overview/2-learning_path.md:237 +#: 08f093d4481644c7a0b16e6749594309 +msgid "" +"**Controllers that match the body.** An arm, or a split-body robot, uses " +"`ocs2_arm_controller` (`demo` or `split_body`). A planner model that " +"includes the mobile base uses `full_body.launch.py` and " +"`ocs2_wbc_controller`. That controller is already in the `ros-jazzy-arms-" +"ros2-control` deb from Day 6. Cloning [ocs2-wbc-" +"controller](https://github.com/fiveages-sim/ocs2-wbc-controller) is how " +"you read or edit the source. Leave `infoFile` empty to keep the " +"description default. Lock a mobile base with the `mobile_base_tcp` info " +"file and `BASE_LOCK`. `full_body` together with a `fixed_base` info file " +"has no virtual chassis joint for that lock, and arm enable can stay in " +"`WAITING_FOR_ENABLE_POLICY`." +msgstr "" +"**控制器跟身体对得上。** 机械臂或分体机器人用 `ocs2_arm_controller`(`demo` 或 " +"`split_body`)。规划模型里包含移动底盘时,用 `full_body.launch.py` 和 " +"`ocs2_wbc_controller`。这个控制器已经在第六天的 `ros-jazzy-arms-ros2-control` deb 里。克隆" +" [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-" +"controller) 是为了读源码或改源码。`infoFile` 留空,就用描述包的默认 info。锁住移动底盘时用 " +"`mobile_base_tcp` 这份 info,并发送 `BASE_LOCK`。`full_body` 再配一份 `fixed_base` " +"info 时,没有这把锁能用的虚拟底盘关节,手臂使能会停在 `WAITING_FOR_ENABLE_POLICY`。" + +#: ../../source/0-overview/2-learning_path.md:239 +#: 4a096772ea7d480bb5f33460e6ea1a3b +msgid "Work in this order" +msgstr "按这个顺序做" + +#: ../../source/0-overview/2-learning_path.md:241 +#: 9ca0d9ad79ec40b1ab87b14bbf3bd0dc +msgid "" +"In mock, the launch above reaches HOLD, and the joint names match the " +"xacro." +msgstr "在 mock 里,上面的 launch 能进到 HOLD,关节名和 xacro 一致。" + +#: ../../source/0-overview/2-learning_path.md:242 +#: e471bdf2277b4e40b3c08e5b7b271ca3 +msgid "Run `./run.sh`, open your USD, and press Play so physics runs." +msgstr "运行 `./run.sh`,打开你的 USD,按 Play,让物理开始跑。" + +#: ../../source/0-overview/2-learning_path.md:243 +#: da3f1b3fb5334a1c885bdea7894f8936 +msgid "" +"Connect with the topic bridge or the in-process graph. Read the joint-" +"state topic with `ros2 topic echo`, or run `ros2 control " +"list_controllers`." +msgstr "" +"用话题桥或进程内的图接上。用 `ros2 topic echo` 看关节状态话题,或运行 `ros2 control " +"list_controllers`。" + +#: ../../source/0-overview/2-learning_path.md:244 +#: 19bd634df45942d2a25479c591a288c4 +msgid "" +"Send a small joint target. The same joints move in Isaac. On the in-" +"process graph, `ros2 topic hz /clock` follows the physics step." +msgstr "发一个小的关节目标。Isaac 里同一组关节会动。进程内的图上,`ros2 topic hz /clock` 跟着物理步走。" + +#: ../../source/0-overview/2-learning_path.md:248 +#: e7e45de1031249daaf44cc0d09327bea +msgid "The description package, or the branch, and the USD path you opened." +msgstr "描述包或分支,以及你打开的 USD 路径。" + +#: ../../source/0-overview/2-learning_path.md:249 +#: a6b83566fb7444edbb19a6044cacbc6a +msgid "The launch line, or the `ROS2ControlLaunch` prim you played." +msgstr "launch 命令,或你播放的那个 `ROS2ControlLaunch` 图元。" + +#: ../../source/0-overview/2-learning_path.md:250 +#: 80628069538945d0ae80776fbd3b996b +msgid "The joint-state topic or the controller list, and the motion you sent." +msgstr "你看到的关节状态话题或控制器列表,以及你发出的动作。" + +#: ../../source/0-overview/2-learning_path.md:252 +#: 94a7b25435244fd7a598009356f5aeaf +msgid "How you know it works" +msgstr "怎样算做完" + +#: ../../source/0-overview/2-learning_path.md:254 +#: d55b318fc9df419c94a0836212d39c9e +msgid "" +"Check joint control, base motion, the end effector, and sensor data " +"against the robot you chose." +msgstr "按你选的这台机器人,核对关节控制、底盘运动、末端执行器和传感器数据。" + +#: ../../source/0-overview/2-learning_path.md:256 +#: 16d92b16311d40a6a399b11fa3f13d4e +msgid "" +"**Joints.** Mock reaches HOLD, Play runs, and the joint names in the " +"state topic or in `ros2 control list_controllers` match the xacro. A " +"command moves those joints in the viewport. On an in-process graph, " +"`/robot_description` comes from `robot_state_publisher`, and the " +"controller manager starts with robot-description publishing turned off." +msgstr "" +"**关节。** mock 能进到 HOLD,Play 在跑,状态话题或 `ros2 control list_controllers` " +"里的关节名和 xacro 一致。发一条指令后,视口里这些关节会动。进程内的图上,`/robot_description` 来自 " +"`robot_state_publisher`,控制器管理器启动时不再自己发布机器人描述。" + +#: ../../source/0-overview/2-learning_path.md:258 +#: 5c7365d60a094b7eab19f5ef33e602b8 +msgid "" +"**Base.** Isaac publishes `world → odom → base_*`. " +"`robot_state_publisher` publishes the URDF tree, including " +"`base_footprint → base_link` when both links exist. OCS2 `baseFrame` is " +"that same link. One node publishes each TF edge. A ROS namespace does not" +" rename `frame_id`. A base that drives on a map uses `NavigationLaunch` " +"on the USD. `map` is a path relative to the opened `env/` layer, and the " +"node starts `navigation_isaac_gt.launch.py`. Composer `ros2-stack` is a " +"separate process on the host." +msgstr "" +"**底盘。** Isaac 发布 `world → odom → base_*`。`robot_state_publisher` 发布 URDF " +"树;两根连杆都在时,其中包含 `base_footprint → base_link`。OCS2 的 `baseFrame` 就是这根连杆。一条 " +"TF 边只由一个节点发布。ROS 命名空间不会改 `frame_id`。底盘要在地图上走时,USD 上放 " +"`NavigationLaunch`。`map` 是相对已打开 `env/` 层的路径,节点启动的是 " +"`navigation_isaac_gt.launch.py`。composer 的 `ros2-stack` 是主机上的另一个进程。" + +#: ../../source/0-overview/2-learning_path.md:260 +#: fe2a8e0178aa4966ae18d801deb21210 +msgid "" +"**End effector.** The launch arguments `type`, `left_type`, or " +"`right_type` name this gripper or hand, and you can see it open or close." +" There is no `gripper:=` argument." +msgstr "" +"**末端。** launch 参数 `type`、`left_type` 或 `right_type` 对上这只夹爪或手,能看见它张开或闭合。没有" +" `gripper:=` 参数。" + +#: ../../source/0-overview/2-learning_path.md:262 +#: b6e4f6aef2c149cc98b4fdc73b741834 +msgid "" +"**Sensors.** While Play is running, the camera or lidar topics from the " +"scene are publishing. Camera rigs stay on the scene USD." +msgstr "**传感器。** Play 期间,场景里的相机或雷达话题在发数据。相机装在场景 USD 上。" + +#: ../../source/0-overview/2-learning_path.md:264 +#: 717ac2977e3e45a3b76f05e00aa4bb19 +msgid "" +"**A second robot on the same stage.** Each ArticulationRoot has its own " +"graph and its own `ROS2ControlLaunch` `namespace`. Topics live under " +"`//`. Frame names stay `world`, `odom`, and `base_link`." +msgstr "" +"**同一场景里的第二台机器人。** 每个 ArticulationRoot 有自己的图,也有自己的 `ROS2ControlLaunch` " +"`namespace`。话题在 `//` 下。坐标系名仍是 `world`、`odom` 和 `base_link`。" + +#: ../../source/0-overview/2-learning_path.md:266 +#: 411f3100092e4a7c8e8994669fe15363 +msgid "" +"A motion that finishes much too fast is a `/clock` problem. The in-" +"process W2 payload takes the clock from the physics step. The topic-" +"bridge payload still takes it from the playback tick. The [FaSim " +"reference](../4-reference/simulation/2-fasim_isaac.md) describes that " +"clock. Changing joint gains does not fix it." +msgstr "" +"动作结束得特别快,是 `/clock` 的问题。进程内的 W2 载荷从物理步取时钟。话题桥载荷仍从播放节拍取时钟。[FaSim " +"参考](../4-reference/simulation/2-fasim_isaac.md) 写了这个时钟。改关节增益修不好。" + +#~ msgid "Internal Access Required" +#~ msgstr "需要内部访问权限" + +#~ msgid "" +#~ "These links need repository access. " +#~ "Without it, GitHub does not open " +#~ "the page. That is expected." +#~ msgstr "这些链接需要仓库权限。没有权限时,GitHub 打不开页面。这是预期情况。" + +#~ msgid "What it is" +#~ msgstr "用途" + +#~ msgid "Required" +#~ msgstr "Required" + +#~ msgid "Gen3 URDF" +#~ msgstr "Gen3 的 URDF" + +#~ msgid "Gen3 USD" +#~ msgstr "Gen3 的 USD" + +#~ msgid "" +#~ "More private descriptions, hardware " +#~ "interfaces, and teleop checkouts are " +#~ "linked on the [Repository Map](3-repo_map.md)." +#~ " Public W1 / W2 / S2 URDF " +#~ "stays on [FiveAges robot " +#~ "descriptions](../4-reference/descriptions/4-fiveages_umbrella.md)." +#~ msgstr "" +#~ "其余私有描述、驱动层和遥操作仓库链在 [仓库地图](3-repo_map.md)。公开的 W1 /" +#~ " W2 / S2 URDF 见 " +#~ "[五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" + +#~ msgid "Day 7: FaSim integration exam" +#~ msgstr "第 7 天:FaSim 接入考核" + +#~ msgid "" +#~ "**Goal:** Bring **one new robot** into" +#~ " FaSim so Isaac and the ROS 2" +#~ " 运控 stack move it. Pass by " +#~ "taking that robot through mock, then " +#~ "sim, until you can see the joints" +#~ " move. Replaying the existing CR5 or" +#~ " W2 demo is only a warm-up." +#~ msgstr "" +#~ "**目标:** 把**一款新机器人**接入 FaSim,让 Isaac 和 " +#~ "ROS 2 运控栈把它驱动起来。通过标准是这款机器人先过 " +#~ "mock,再过仿真,直到能看见关节在动。重放现成的 CR5 或 W2 演示只算热身。" + +#~ msgid "" +#~ "**You already need** Days 0–3: " +#~ "`./init_repo.sh`, a launch that reaches " +#~ "HOLD with `hardware:=mock_components`, and " +#~ "FaSim `./init.sh` / `./run.sh`. Isaac " +#~ "Sim is installed and `ISAACSIM_DIR` is" +#~ " set." +#~ msgstr "" +#~ "**你已经需要** 第 0–3 天:`./init_repo.sh`、一次能到 HOLD" +#~ " 的 `hardware:=mock_components` 启动,以及 FaSim " +#~ "的 `./init.sh` / `./run.sh`。Isaac Sim " +#~ "已安装,并且设置了 `ISAACSIM_DIR`。" + +#~ msgid "" +#~ "Pick one robot. Add odometry, Nav2, " +#~ "or a dexterous hand only when this" +#~ " robot has them. Work through the " +#~ "steps below." +#~ msgstr "选定一款机器人。只有这款机器人真有底盘、导航或灵巧手时,才补里程计、Nav2 或灵巧手。按下面的步骤做。" + +#~ msgid "Required for every robot" +#~ msgstr "每款机器人都要做" + +#~ msgid "" +#~ "**Motion you can see.** A small " +#~ "FSM home or joint target changes " +#~ "the same joints in Isaac." +#~ msgstr "**能看见的运动。** 一次小的 FSM 回零或关节目标,会让 Isaac 里同一批关节动起来。" + +#~ msgid "Only if this robot has it" +#~ msgstr "仅当这款机器人具备时" + +#~ msgid "Piece" +#~ msgstr "Piece" + +#~ msgid "When" +#~ msgstr "When" + +#~ msgid "What to wire" +#~ msgstr "要接上什么" + +#~ msgid "Chassis / odom" +#~ msgstr "底盘 / 里程计" + +#~ msgid "It has a mobile base" +#~ msgstr "有移动底盘" + +#~ msgid "Gripper or hand" +#~ msgstr "夹爪或手" + +#~ msgid "It has one" +#~ msgstr "这款机器人有一个" + +#~ msgid "Launch `type` / `left_type` / `right_type`. There is no `gripper:=`." +#~ msgstr "Launch `type` / `left_type` / `right_type`. There is no `gripper:=`." + +#~ msgid "Navigation" +#~ msgstr "Navigation" + +#~ msgid "The scene drives the base on a map" +#~ msgstr "场景要让底盘按地图行驶" + +#~ msgid "" +#~ "`NavigationLaunch` on the USD. `map` is" +#~ " a path relative to the opened " +#~ "`env/` layer. It starts " +#~ "`navigation_isaac_gt.launch.py`. Composer `ros2-stack` " +#~ "is a separate host process." +#~ msgstr "" +#~ "USD 上的 `NavigationLaunch`。`map` 是相对已打开 `env/`" +#~ " 层的路径。它启动 `navigation_isaac_gt.launch.py`。编排器的 " +#~ "`ros2-stack` 是另一个宿主机进程。" + +#~ msgid "Second robot" +#~ msgstr "第二台机器人" + +#~ msgid "Two articulations in one stage" +#~ msgstr "同一舞台里有两个关节体" + +#~ msgid "Phases" +#~ msgstr "Phases" + +#~ msgid "Pass when you can show" +#~ msgstr "能演示这些就通过" + +#~ msgid "Mock HOLD, then sim Play, on **this** robot." +#~ msgstr "先 mock 到 HOLD,再仿真播放,对象是**这款**机器人。" + +#~ msgid "" +#~ "Joint state or the controller state " +#~ "interfaces match the xacro joint names." +#~ msgstr "关节状态或控制器状态接口与 xacro 关节名一致。" + +#~ msgid "A command moves those joints in Isaac." +#~ msgstr "一条指令让这些关节在 Isaac 里动起来。" + +#~ msgid "" +#~ "If the payload publishes odometry: " +#~ "`world → odom → base_*` from " +#~ "Isaac, URDF tree from `robot_state_publisher`," +#~ " and no second node on the same" +#~ " edge." +#~ msgstr "" +#~ "若载荷发布里程计:`world → odom → base_*` 来自 " +#~ "Isaac,URDF 树来自 `robot_state_publisher`,同一条边没有第二个节点。" + +#~ msgid "" +#~ "In-process: `/robot_description` comes from" +#~ " `robot_state_publisher`. The controller manager" +#~ " is started with robot-description " +#~ "publishing off." +#~ msgstr "" +#~ "进程内:`/robot_description` 来自 " +#~ "`robot_state_publisher`。控制器管理器启动时关闭了机器人描述发布。" + +#~ msgid "" +#~ "A motion that finishes too fast is" +#~ " a `/clock` problem (physics-step " +#~ "clock versus playback tick). The FaSim" +#~ " reference describes that clock. It " +#~ "is not fixed by editing joint " +#~ "gains." +#~ msgstr "运动结束得过快,是 `/clock` 的问题(物理步时钟相对播放节拍)。FaSim 参考页说明了这套时钟。改关节增益解决不了。" + diff --git a/locale/zh_CN/LC_MESSAGES/0-overview/3-repo_map.po b/locale/zh_CN/LC_MESSAGES/0-overview/3-repo_map.po index 18279bf..e34abc0 100644 --- a/locale/zh_CN/LC_MESSAGES/0-overview/3-repo_map.po +++ b/locale/zh_CN/LC_MESSAGES/0-overview/3-repo_map.po @@ -128,7 +128,7 @@ msgstr "[I]" #: ../../source/0-overview/3-repo_map.md f81ceeb416154fb1957b69e58287a0a6 msgid "Internal deployment for FA robots (default branch `fa-w2`)" -msgstr "五纪机器人的内部部署(默认分支 `fa-w2`)" +msgstr "第五纪机器人的内部部署(默认分支 `fa-w2`)" #: ../../source/0-overview/3-repo_map.md 3b8c8894b2ff4cb398011b0a2a9e5c55 msgid "[dexcap_teleop_ws](https://github.com/fiveages-sim/dexcap_teleop_ws)" @@ -384,21 +384,6 @@ msgstr "[fa-w2-components](https://github.com/fiveages-sim/fa-w2-components)" msgid "`humanoid/FiveAges/fiveages_w2_common_description`" msgstr "`humanoid/FiveAges/fiveages_w2_common_description`" -#: ../../source/0-overview/3-repo_map.md:62 7cfa4d19722846f18a5a150805e1cb81 -msgid "" -"[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) " -"(`fiveages_s2r_description`, **still private — not open**) and [fa-" -"wce3-description](https://github.com/fiveages-sim/fa-wce3-description) " -"(`fiveages_wce3_description`, still private) appear only on " -"`robot_descriptions` **`feature/agilex`** (`Gen2` / `Gen3`). Both links " -"need access." -msgstr "" -"[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-" -"description)(`fiveages_s2r_description`,**仍私有,尚未开放**)和 [fa-" -"wce3-description](https://github.com/fiveages-sim/fa-" -"wce3-description)(`fiveages_wce3_description`,仍私有)只出现在 " -"`robot_descriptions` 的 **`feature/agilex`**(`Gen2` / `Gen3`)。两个链接都需要权限。" - #: ../../source/0-overview/3-repo_map.md:64 1c0a14a14fd84dab90c4eefbab319fb8 msgid "L2: Hardware Interfaces" msgstr "L2:驱动层" @@ -580,26 +565,14 @@ msgstr "OCS2 MPC 库(分支:ros2)" msgid "[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller)" msgstr "[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller)" -#: ../../source/0-overview/3-repo_map.md 370d965dea494f40b80bfb82e23545b6 -msgid "Whole-body control" -msgstr "全身控制" - #: ../../source/0-overview/3-repo_map.md 3de285447157437b9a2a48bce45b7a3e msgid "[ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid)" msgstr "[ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid)" -#: ../../source/0-overview/3-repo_map.md 7ca36407ab4441ac8a7bc252e3f51c03 -msgid "Wheeled-arm humanoid library" -msgstr "轮臂人形库" - #: ../../source/0-overview/3-repo_map.md 33a262cca117484680c720c92fa60ab5 msgid "[lina_planning](https://github.com/fiveages-sim/lina_planning)" msgstr "[lina_planning](https://github.com/fiveages-sim/lina_planning)" -#: ../../source/0-overview/3-repo_map.md b453f8fa3f594e49b53fa8c27d843739 -msgid "Trajectory primitives" -msgstr "轨迹原语" - #: ../../source/0-overview/3-repo_map.md:101 8aff62beacd448088d01c28f85aab1d2 msgid "L4: Simulation" msgstr "L4: 仿真" @@ -652,18 +625,6 @@ msgstr "" msgid "Gen2 USD (W2 / S2; not W2R / S2R)" msgstr "Gen2 USD(W2 / S2;不含 W2R / S2R)" -#: ../../source/0-overview/3-repo_map.md f007f150e09049c88bc7d4a5d46c186f -msgid "" -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)" -msgstr "" -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)" - -#: ../../source/0-overview/3-repo_map.md 555efbf8b1014dd8b92d9611bcc4d732 -msgid "Gen3 USD (WCE3)" -msgstr "Gen3 USD(WCE3)" - #: ../../source/0-overview/3-repo_map.md 9e5237c035b2423ca7b529eecfcc116e msgid "[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd)" msgstr "[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd)" @@ -969,9 +930,6 @@ msgstr "" #~ msgid "lina_planning" #~ msgstr "lina_planning" -#~ msgid "fiveages-gen3-robot-usds" -#~ msgstr "fiveages-gen3-robot-usds" - #~ msgid "fa-project-usd" #~ msgstr "fa-project-usd" @@ -993,3 +951,53 @@ msgstr "" #~ msgid "HUG" #~ msgstr "HUG" +#: ../../source/0-overview/3-repo_map.md:62 7cfa4d19722846f18a5a150805e1cb81 +msgid "" +"[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) " +"(`fiveages_s2r_description`) is still private and appears on " +"`robot_descriptions` **`feature/agilex`** under Gen2. The link needs " +"access." +msgstr "" +"[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-" +"description)(`fiveages_s2r_description`)仍是私有的,出现在 `robot_descriptions` 的 " +"**`feature/agilex`** 分支、Gen2 下面。打开链接需要权限。" + +#: ../../source/0-overview/3-repo_map.md 8c65f290d3dc4d12b2897a57d796ef7d +msgid "" +"Whole-body controller source. The binary is in `ros-jazzy-arms-" +"ros2-control`" +msgstr "全身控制器源码。二进制在 `ros-jazzy-arms-ros2-control` 里" + +#: ../../source/0-overview/3-repo_map.md 12395ec6d4544ad3b3ccf5122f126dec +msgid "Motion-library source. Same standard deb" +msgstr "运动库源码。在同一个标准 deb 里" + +#: ../../source/0-overview/3-repo_map.md c57af23955ab4d58958a0583153a65a4 +msgid "Trajectory-primitive source. Same standard deb" +msgstr "轨迹原语源码。在同一个标准 deb 里" + +#: ../../source/0-overview/3-repo_map.md:101 bb54593f323446058658a66c0e984db5 +msgid "" +"The standard package is the one `./scripts/install_core_debs.sh --only " +"arms` installs ([arms deb notes](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md)). It is a GitHub Release " +"deb, not an apt package, and it is not `ros-jazzy-arms-ros2-control-" +"full`. Clone the three repositories above to read or change the source. " +"Private descriptions and the hardware interfaces in L2 are not in this " +"package." +msgstr "" +"`./scripts/install_core_debs.sh --only arms` 安装的就是这个标准包([arms 的 deb " +"说明](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md))。它是 GitHub Release 上的 " +"deb,不是 apt 包,也不是 `ros-jazzy-arms-ros2-control-" +"full`。要读或改源码时再克隆上面三个仓库。私有描述和 L2 里的驱动层不在这个包里。" + +#~ msgid "Whole-body control" +#~ msgstr "全身控制" + +#~ msgid "Wheeled-arm humanoid library" +#~ msgstr "轮臂人形库" + +#~ msgid "Trajectory primitives" +#~ msgstr "轨迹原语" + diff --git a/locale/zh_CN/LC_MESSAGES/0-overview/4-public_vs_internal.po b/locale/zh_CN/LC_MESSAGES/0-overview/4-public_vs_internal.po index 06217a9..957dbc6 100644 --- a/locale/zh_CN/LC_MESSAGES/0-overview/4-public_vs_internal.po +++ b/locale/zh_CN/LC_MESSAGES/0-overview/4-public_vs_internal.po @@ -92,11 +92,6 @@ msgstr "**机器人**" msgid "Dobot, ARX, Galbot, HighTorque, quadruped" msgstr "越疆、方舟无限、银河通用、高擎、四足" -#: ../../source/0-overview/4-public_vs_internal.md -#: ad2c5ae2f5714d1abfd086abb6301c84 -msgid "FA W2/W2R/S2/S2R, dual-arm CCS" -msgstr "FA W2/W2R/S2/S2R、双臂 CCS" - #: ../../source/0-overview/4-public_vs_internal.md #: 69dcf6a030a54025be47c6832ea8a943 msgid "**Real Hardware**" @@ -107,11 +102,6 @@ msgstr "**真实硬件**" msgid "ARX Lift 2S (full-body), Acone (dual-arm), HighTorque Panthera HT" msgstr "方舟无限 Lift 2S(全身)、Acone(双臂)、高擎 Panthera HT" -#: ../../source/0-overview/4-public_vs_internal.md -#: 51d1b36e92cb488c9360ff6dce7ab31a -msgid "All FA robots" -msgstr "全部 FA 机器人" - #: ../../source/0-overview/4-public_vs_internal.md #: 2e81746d1b63476a985f9e4209616b1f msgid "**Submodules**" @@ -391,28 +381,6 @@ msgid "" "and dual-arm CCS" msgstr "面向 FiveAges 轮臂人形(W2、W2R、S2、S2R)和双臂 CCS 的内部工作区" -#: ../../source/0-overview/4-public_vs_internal.md:89 -#: 83e7846a32694984afa1f6c55acad661 -msgid "" -"Description remotes live as gitlinks under [robot_descriptions " -"`humanoid/FiveAges/`](../4-reference/descriptions/4-fiveages_umbrella.md)" -" — not a separate `robot-descriptions-fiveages` umbrella. **Public:** W1," -" W2, S2, `fa-w2-components`, plus Gen1/Gen2 USD. **Still private:** " -"**W2R**, **S2R** (not open yet), Gen3. There is no `open-deploy-ws` Gen1 " -"or Gen2 branch." -msgstr "" -"描述远端是[robot_descriptions " -"`humanoid/FiveAges/`](../4-reference/descriptions/4-fiveages_umbrella.md)下的" -" gitlink — 不是独立的 `robot-descriptions-" -"fiveages`伞形仓。**公开:**W1、W2、S2、`fa-w2-components`,以及 Gen1/Gen2 " -"USD。**仍为私有:****W2R**、**S2R**(尚未开放)、Gen3。没有 `open-deploy-ws`的 Gen1 或 Gen2 " -"分支。" - -#: ../../source/0-overview/4-public_vs_internal.md:90 -#: 63f37e2e8b0a4a878bb437864a7c0fd5 -msgid "Full OCS2 + WBC source when that workspace’s README says so" -msgstr "完整的 OCS2 + WBC 源码集成" - #: ../../source/0-overview/4-public_vs_internal.md:92 #: a91d6117871741d09b6f688013c64bd3 msgid "Source of truth" @@ -848,3 +816,45 @@ msgstr "请始终确认你的 Domain ID 与目标机器人的配置一致。ID #~ "cd fa-deploy-ws\n" #~ "./init_repo.sh\n" +#: ../../source/0-overview/4-public_vs_internal.md +#: ad2c5ae2f5714d1abfd086abb6301c84 +msgid "FiveAges W2, W2R, S2, S2R, dual-arm CCS" +msgstr "第五纪 W2、W2R、S2、S2R,双臂 CCS" + +#: ../../source/0-overview/4-public_vs_internal.md +#: effbfa959e024495af6ed101ee34068a +msgid "FiveAges robots on that workspace" +msgstr "该工作区里的第五纪机器人" + +#: ../../source/0-overview/4-public_vs_internal.md:89 +#: 83e7846a32694984afa1f6c55acad661 +msgid "" +"Description remotes live as gitlinks under [robot_descriptions " +"`humanoid/FiveAges/`](../4-reference/descriptions/4-fiveages_umbrella.md)." +" There is no separate `robot-descriptions-fiveages` umbrella. **Public:**" +" W1, W2, S2, `fa-w2-components`, plus Gen1 and Gen2 USD. **Still " +"private:** **W2R** and **S2R**. There is no `open-deploy-ws` Gen1 or Gen2" +" branch." +msgstr "" +"描述远端是 [robot_descriptions " +"`humanoid/FiveAges/`](../4-reference/descriptions/4-fiveages_umbrella.md)" +" 下的 gitlink。没有单独的 `robot-descriptions-fiveages` 伞形仓。**公开:** " +"W1、W2、S2、`fa-w2-components`,以及 Gen1、Gen2 USD。**仍私有:** **W2R** 和 " +"**S2R**。没有 `open-deploy-ws` 的 Gen1 或 Gen2 分支。" + +#: ../../source/0-overview/4-public_vs_internal.md:90 +#: 754fbc3eded142ab818146878914e49c +msgid "" +"Running `ocs2_wbc_controller` uses the `ros-jazzy-arms-ros2-control` deb." +" A full source checkout of OCS2 or WBC is what that workspace’s README " +"describes when you are changing the code." +msgstr "" +"运行 `ocs2_wbc_controller` 用的是 `ros-jazzy-arms-ros2-control` 这个 " +"deb。要改代码时,那个工作区的 README 才会让你做 OCS2 或 WBC 的完整源码检出。" + +#~ msgid "All FA robots" +#~ msgstr "全部 FA 机器人" + +#~ msgid "Full OCS2 + WBC source when that workspace’s README says so" +#~ msgstr "完整的 OCS2 + WBC 源码集成" + diff --git a/locale/zh_CN/LC_MESSAGES/1-getting_started/3-open_deploy_ws.po b/locale/zh_CN/LC_MESSAGES/1-getting_started/3-open_deploy_ws.po index ea69aa8..1a02a8b 100644 --- a/locale/zh_CN/LC_MESSAGES/1-getting_started/3-open_deploy_ws.po +++ b/locale/zh_CN/LC_MESSAGES/1-getting_started/3-open_deploy_ws.po @@ -693,40 +693,6 @@ msgstr "" "`*_gripper_joint`,URDF 里另一侧爪为 mimic)。网格在 " "`meshes/{chassis,body,head,arm,dynaclaw}/`。" -#: ../../source/1-getting_started/3-open_deploy_ws.md:155 -#: 61faec18901e40f2b432f47bad8561fd -msgid "" -"colcon build --packages-up-to ocs2_arm_controller taku_description\n" -"source install/setup.bash\n" -"# 分体 — public mock path (arm MPC + body/head basic + grippers)\n" -"ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku\n" -"# 全身 — needs the private ocs2_wbc_controller submodule\n" -"ros2 launch ocs2_arm_controller full_body.launch.py robot:=taku" -msgstr "" -"colcon build --packages-up-to ocs2_arm_controller taku_description\n" -"source install/setup.bash\n" -"# 分体 — public mock path (arm MPC + body/head basic + grippers)\n" -"ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku\n" -"# 全身 — needs the private ocs2_wbc_controller submodule\n" -"ros2 launch ocs2_arm_controller full_body.launch.py robot:=taku" - -#: ../../source/1-getting_started/3-open_deploy_ws.md:164 -#: 06aac030dfcc45a2a21641e59dde6d8e -msgid "Public mock vs private WBC" -msgstr "公开 mock 与私有 WBC" - -#: ../../source/1-getting_started/3-open_deploy_ws.md:167 -#: 4fbf64390eaf4b11817eee0feda6ed8c -msgid "" -"Shipping `config/ocs2/fixed_base_tcp.info` in the public description does" -" **not** mean public mock can run `ocs2_wbc_controller`. Public mock uses" -" **`split_body.launch.py`**. **`full_body.launch.py`** needs the private " -"WBC submodule." -msgstr "" -"公开描述里有 `config/ocs2/fixed_base_tcp.info` **并不表示**公开 mock 能跑 " -"`ocs2_wbc_controller`。公开 mock 用 " -"**`split_body.launch.py`**。**`full_body.launch.py`** 需要私有 WBC 子模块。" - #: ../../source/1-getting_started/3-open_deploy_ws.md:164 #: 007a9a00f51b4358b570823999907787 msgid "Launch" @@ -765,22 +731,6 @@ msgid "" "fixed_base_tcp`) + grippers" msgstr "`ocs2_wbc_controller`(身体 + 双臂 + 头,`info_file_name: fixed_base_tcp`)+ 夹爪" -#: ../../source/1-getting_started/3-open_deploy_ws.md:175 -#: e420735fed194bcf87fe5e2dd0fcfb75 -msgid "" -"When that config and the private module are present, full-body default " -"`headMode` is **`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). " -"`target_manager.yaml` has `enable_head_control: false`, so the head " -"follows OCS2 rather than a joint-space marker. Split-body still teleops " -"the head through `head_joint_controller` (RViz joint panel). Taku body-" -"relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`." -msgstr "" -"当该配置和私有模块都在时,全身默认 `headMode` 是 **`HEAD_GAZE`**(注视 " -"`head_camera_mid_optical_frame`)。`target_manager.yaml` 里 " -"`enable_head_control: false`,因此头跟随 OCS2,而不是关节空间 marker。分体仍通过 " -"`head_joint_controller`(RViz 关节面板)遥操头部。Taku 身体相对静止位大约在 x≈−0.21,不是 Bot2 的 " -"`[0, 0.25]`。" - #: ../../source/1-getting_started/3-open_deploy_ws.md:177 #: d2cc90f163334d6386d8b44dd70523bd msgid "" @@ -825,19 +775,6 @@ msgstr "该描述是**推断**的(公开的 Dyna 运动学;不是官方 Dyna msgid "Empty private directories and `COLCON_IGNORE`" msgstr "空的私有目录与 `COLCON_IGNORE`" -#: ../../source/1-getting_started/3-open_deploy_ws.md:185 -#: c310d37614204c4cb31346f2d798ea5b -msgid "" -"In **public** mode, `./init_repo.sh` skips private nested modules listed " -"in [`submodules_visibility.conf`](https://github.com/fiveages-sim/open-" -"deploy-ws/blob/main/submodules_visibility.conf). Under " -"`src/arms_ros2_control` those placeholders stay empty, including:" -msgstr "" -"**public** 模式下,`./init_repo.sh` 会跳过 " -"[`submodules_visibility.conf`](https://github.com/fiveages-sim/open-" -"deploy-ws/blob/main/submodules_visibility.conf) 里列出的私有嵌套模块。在 " -"`src/arms_ros2_control` 下这些占位目录会保持为空,包括:" - #: ../../source/1-getting_started/3-open_deploy_ws.md:187 #: c182cedc426b4c4890474bb0e2097092 msgid "`controller/ocs2_wbc_controller`" @@ -1857,3 +1794,93 @@ msgstr "[Gazebo 仿真](../2-how_to/2-simulation/3-gazebo_sim.md)" #~ msgid "Driver layer" #~ msgstr "驱动层" +#: ../../source/1-getting_started/3-open_deploy_ws.md:155 +#: 36bdd0fc99f24ff49cb2d0030fd02161 +msgid "" +"colcon build --packages-up-to ocs2_arm_controller taku_description\n" +"source install/setup.bash\n" +"# 分体 — public mock path (arm MPC + body/head basic + grippers)\n" +"ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku\n" +"# 全身 — needs ocs2_wbc_controller from the arms deb, or from a source " +"checkout\n" +"ros2 launch ocs2_arm_controller full_body.launch.py robot:=taku" +msgstr "" +"colcon build --packages-up-to ocs2_arm_controller taku_description\n" +"source install/setup.bash\n" +"# 分体 — public mock path (arm MPC + body/head basic + grippers)\n" +"ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku\n" +"# 全身 — needs ocs2_wbc_controller from the arms deb, or from a source " +"checkout\n" +"ros2 launch ocs2_arm_controller full_body.launch.py robot:=taku" + +#: ../../source/1-getting_started/3-open_deploy_ws.md:164 +#: 12e7a31466fc4eabb2f9e596c62221c7 +msgid "Public mock and the WBC package" +msgstr "公开 mock 和 WBC 包" + +#: ../../source/1-getting_started/3-open_deploy_ws.md:167 +#: a508090abba54973a8c8fdee2aefae61 +msgid "" +"Shipping `config/ocs2/fixed_base_tcp.info` in the public description does" +" not make mock start `ocs2_wbc_controller`. Public mock uses " +"`split_body.launch.py`. `full_body.launch.py` needs the " +"`ocs2_wbc_controller` package. Install it with the arms GitHub Release " +"deb (`ros-jazzy-arms-ros2-control`: arms = `d` in `./init_repo.sh`, or " +"`./scripts/install_core_debs.sh --only arms`), or build it from the " +"source checkout. The info file alone is not the controller." +msgstr "" +"公开描述里带了 `config/ocs2/fixed_base_tcp.info`,并不表示 mock 会启动 " +"`ocs2_wbc_controller`。公开 mock 用 " +"`split_body.launch.py`。`full_body.launch.py` 需要 `ocs2_wbc_controller` " +"这个包。用 arms 的 GitHub Release deb 安装(`ros-jazzy-arms-" +"ros2-control`:`./init_repo.sh` 里 arms 选 `d`,或 " +"`./scripts/install_core_debs.sh --only arms`),或者从源码检出编译。info 文件本身不是控制器。" + +#: ../../source/1-getting_started/3-open_deploy_ws.md:175 +#: 100fc4442b4448718c3a4405055cb4f2 +msgid "" +"When that config and `ocs2_wbc_controller` are installed, full-body " +"default `headMode` is **`HEAD_GAZE`** (gaze on " +"`head_camera_mid_optical_frame`). `target_manager.yaml` has " +"`enable_head_control: false`, so the head follows OCS2 rather than a " +"joint-space marker. Split-body still teleops the head through " +"`head_joint_controller` (RViz joint panel). Taku body-relative rest is " +"around x≈−0.21, not Bot2 `[0, 0.25]`." +msgstr "" +"这份配置和 `ocs2_wbc_controller` 都装上之后,全身模式默认 `headMode` 是 **`HEAD_GAZE`**(注视 " +"`head_camera_mid_optical_frame`)。`target_manager.yaml` 里 " +"`enable_head_control: false`,头跟随 OCS2,而不是关节空间里的标记。分体模式仍通过 " +"`head_joint_controller` 遥操作头部(RViz 关节面板)。Taku 相对身体的静止位置大约在 x≈−0.21,不是 " +"Bot2 的 `[0, 0.25]`。" + +#: ../../source/1-getting_started/3-open_deploy_ws.md:185 +#: 3773101d80a544f285c22df122c6d95e +msgid "" +"In **public** mode, `./init_repo.sh` skips private nested modules listed " +"in [`submodules_visibility.conf`](https://github.com/fiveages-sim/open-" +"deploy-ws/blob/main/submodules_visibility.conf). If you chose the arms " +"deb, you do not need these directories to run: `ocs2_wbc_controller`, " +"`ocs2_humanoid`, and `lina_planning` are already in `ros-jazzy-arms-" +"ros2-control`. If you chose source, the placeholders under " +"`src/arms_ros2_control` stay empty until you can clone them, including:" +msgstr "" +"**公开**模式下,`./init_repo.sh` 会跳过 " +"[`submodules_visibility.conf`](https://github.com/fiveages-sim/open-" +"deploy-ws/blob/main/submodules_visibility.conf) 里列出的私有嵌套模块。如果 arms 选的是 " +"deb,运行时不需要这些目录:`ocs2_wbc_controller`、`ocs2_humanoid` 和 `lina_planning` " +"已经在 `ros-jazzy-arms-ros2-control` " +"里。如果选的是源码,在你能克隆之前,`src/arms_ros2_control` 下的占位目录保持为空,其中包括:" + +#~ msgid "" +#~ "Shipping `config/ocs2/fixed_base_tcp.info` in the" +#~ " public description does **not** mean " +#~ "public mock can run `ocs2_wbc_controller`. " +#~ "Public mock uses **`split_body.launch.py`**. " +#~ "**`full_body.launch.py`** needs the private " +#~ "WBC submodule." +#~ msgstr "" +#~ "公开描述里有 `config/ocs2/fixed_base_tcp.info` **并不表示**公开 " +#~ "mock 能跑 `ocs2_wbc_controller`。公开 mock 用 " +#~ "**`split_body.launch.py`**。**`full_body.launch.py`** 需要私有 " +#~ "WBC 子模块。" + diff --git a/locale/zh_CN/LC_MESSAGES/1-getting_started/4-fa_deploy_ws.po b/locale/zh_CN/LC_MESSAGES/1-getting_started/4-fa_deploy_ws.po index eab4522..4c41fed 100644 --- a/locale/zh_CN/LC_MESSAGES/1-getting_started/4-fa_deploy_ws.po +++ b/locale/zh_CN/LC_MESSAGES/1-getting_started/4-fa_deploy_ws.po @@ -34,7 +34,7 @@ msgid "" "does not open the page." msgstr "" "内部工作空间 [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) " -"的安装说明,用于五纪机器人部署。链接需要仓库权限(默认分支 `fa-w2`)。没有权限时,GitHub 打不开页面。" +"的安装说明,用于第五纪机器人部署。链接需要仓库权限(默认分支 `fa-w2`)。没有权限时,GitHub 打不开页面。" #: ../../source/1-getting_started/4-fa_deploy_ws.md:5 #: 697dfc9e993c49fca77192425b90361e diff --git a/locale/zh_CN/LC_MESSAGES/1-getting_started/5-faq.po b/locale/zh_CN/LC_MESSAGES/1-getting_started/5-faq.po index 4e2f972..1f10b7b 100644 --- a/locale/zh_CN/LC_MESSAGES/1-getting_started/5-faq.po +++ b/locale/zh_CN/LC_MESSAGES/1-getting_started/5-faq.po @@ -271,30 +271,6 @@ msgstr "" msgid "Q: Where is Taku?" msgstr "问:Taku 在哪里?" -#: ../../source/1-getting_started/5-faq.md:91 f1635db1c275463a8afdcab11f0d96d6 -msgid "" -"On `robot_descriptions` branch **`feature/agilex`** at " -"`humanoid/Dyna/taku_description` — not on the default `main` submodule " -"pin. Visualize: `ros2 launch robot_common_launch humanoid.launch.py " -"robot:=taku`. Control: `split_body.launch.py` / `full_body.launch.py` " -"with `robot:=taku` ([package README](https://github.com/fiveages-" -"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" -" §3.1 / §3.2). Public mock is **`split_body.launch.py`**; " -"**`full_body.launch.py`** needs the private `ocs2_wbc_controller` " -"submodule. There is no lean `open-deploy-ws` Taku branch. Checkout steps:" -" [open-deploy-ws Setup](3-open_deploy_ws.md)." -msgstr "" -"在 `robot_descriptions` 分支 **`feature/agilex`** 的 " -"`humanoid/Dyna/taku_description` — 不在默认钉住的 `main` 子模块上。可视化:`ros2 launch " -"robot_common_launch humanoid.launch.py " -"robot:=taku`。控制:`split_body.launch.py` / `full_body.launch.py`,并传 " -"`robot:=taku`([包 README](https://github.com/fiveages-" -"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" -" §3.1 / §3.2)。公开 mock 是 " -"**`split_body.launch.py`**;**`full_body.launch.py`** 需要私有 " -"`ocs2_wbc_controller` 子模块。没有精简的 `open-deploy-ws` Taku 分支。检出步骤:[open-" -"deploy-ws 配置](3-open_deploy_ws.md)。" - #: ../../source/1-getting_started/5-faq.md:93 2df4d278c0ef41c8909b43f676637f7a msgid "Q: colcon build fails with missing dependency" msgstr "问:colcon build 因缺少依赖而失败" @@ -841,3 +817,31 @@ msgstr "" #~ msgid "Required hardware interfaces are initialized" #~ msgstr "所需硬件接口已初始化" +#: ../../source/1-getting_started/5-faq.md:91 784ec47c804a462aaa55842871373a43 +msgid "" +"On `robot_descriptions` branch **`feature/agilex`** at " +"`humanoid/Dyna/taku_description` — not on the default `main` submodule " +"pin. Visualize: `ros2 launch robot_common_launch humanoid.launch.py " +"robot:=taku`. Control: `split_body.launch.py` / `full_body.launch.py` " +"with `robot:=taku` ([package README](https://github.com/fiveages-" +"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" +" §3.1 / §3.2). Public mock is **`split_body.launch.py`**. " +"**`full_body.launch.py`** needs `ocs2_wbc_controller` from the `ros-" +"jazzy-arms-ros2-control` deb, or from a source checkout. See [OCS2 WBC " +"Controller](../4-reference/controllers/3-ocs2_wbc.md). There is no lean " +"`open-deploy-ws` Taku branch. Checkout steps: [open-deploy-ws " +"Setup](3-open_deploy_ws.md)." +msgstr "" +"在 `robot_descriptions` 的 **`feature/agilex`** 分支,路径是 " +"`humanoid/Dyna/taku_description`,不在默认 `main` 的子模块钉选上。可视化:`ros2 launch " +"robot_common_launch humanoid.launch.py " +"robot:=taku`。控制:`split_body.launch.py` / " +"`full_body.launch.py`,`robot:=taku`([包 README](https://github.com" +"/fiveages-" +"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" +" §3.1 / §3.2)。公开 mock 是 " +"**`split_body.launch.py`**。**`full_body.launch.py`** 需要 `ros-jazzy-arms-" +"ros2-control` 这个 deb 里的 `ocs2_wbc_controller`,或一份源码检出。见 [OCS2 WBC " +"控制器](../4-reference/controllers/3-ocs2_wbc.md)。没有精简的 `open-deploy-ws` " +"Taku 分支。检出步骤见 [open-deploy-ws 安装](3-open_deploy_ws.md)。" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/1-run_mock_demo.po b/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/1-run_mock_demo.po index 1bbdd95..dfa324a 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/1-run_mock_demo.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/1-run_mock_demo.po @@ -194,30 +194,6 @@ msgstr "" "source install/setup.bash\n" "ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku\n" -#: ../../source/2-how_to/1-basic_operations/1-run_mock_demo.md:57 -#: 442dfddb9a41417c85eb6d829ba976d5 -msgid "" -"Public mock is **`split_body.launch.py`**: `ocs2_arm_controller` (dual-" -"arm MPC) plus `body_joint_controller` / `head_joint_controller` and " -"Dynaclaw via `adaptive_gripper_controller` (`*_gripper_joint`; mimic jaw " -"in URDF). There is no chassis or per-arm basic controller. " -"**`full_body.launch.py robot:=taku`** needs the private " -"`ocs2_wbc_controller` submodule; shipping " -"`config/ocs2/fixed_base_tcp.info` is not enough. When that config and the" -" private module are present, full-body default `headMode` is " -"**`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). " -"`target_manager.yaml` has `enable_head_control: false`. Split-body still " -"uses `head_joint_controller`." -msgstr "" -"公开 mock 是 **`split_body.launch.py`**:`ocs2_arm_controller`(双臂 MPC)加上 " -"`body_joint_controller` / `head_joint_controller`,以及通过 " -"`adaptive_gripper_controller` 控制的 Dynaclaw(`*_gripper_joint`;URDF 里另一侧爪为 " -"mimic)。没有底盘或单臂 basic 控制器。**`full_body.launch.py robot:=taku`** 需要私有 " -"`ocs2_wbc_controller` 子模块;描述里有 `config/ocs2/fixed_base_tcp.info` " -"并不够。当该配置和私有模块都在时,全身默认 `headMode` 是 **`HEAD_GAZE`**(注视 " -"`head_camera_mid_optical_frame`)。`target_manager.yaml` 里 " -"`enable_head_control: false`。分体仍使用 `head_joint_controller`。" - #: ../../source/2-how_to/1-basic_operations/1-run_mock_demo.md:59 #: 185f783c6ed345f3819c4c5782f6880b msgid "" @@ -568,3 +544,27 @@ msgstr "source install/setup.bash # Must source after building\n" #~ " 声明了 `enable_gripper`(默认 `true`)。Taku 现场路径使用 " #~ "`enable_gripper:=false`。" +#: ../../source/2-how_to/1-basic_operations/1-run_mock_demo.md:57 +#: 993a9312674d4447b5c01b3f79a45225 +msgid "" +"Public mock is **`split_body.launch.py`**: `ocs2_arm_controller` (dual-" +"arm MPC) plus `body_joint_controller` / `head_joint_controller` and " +"Dynaclaw via `adaptive_gripper_controller` (`*_gripper_joint`; mimic jaw " +"in URDF). There is no chassis or per-arm basic controller. " +"**`full_body.launch.py robot:=taku`** needs `ocs2_wbc_controller` from " +"the `ros-jazzy-arms-ros2-control` deb, or from a source checkout. " +"Shipping `config/ocs2/fixed_base_tcp.info` is not enough. When that " +"config and the controller are installed, full-body default `headMode` is " +"**`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). " +"`target_manager.yaml` has `enable_head_control: false`. Split-body still " +"uses `head_joint_controller`." +msgstr "" +"公开 mock 是 **`split_body.launch.py`**:`ocs2_arm_controller`(双臂 MPC),加上 " +"`body_joint_controller` / `head_joint_controller`,以及经 " +"`adaptive_gripper_controller` 控制的 Dynaclaw(`*_gripper_joint`;URDF 里有 " +"mimic 下颌)。没有底盘,也没有每条手臂单独的基础控制器。**`full_body.launch.py robot:=taku`** 需要 " +"`ros-jazzy-arms-ros2-control` 这个 deb 里的 `ocs2_wbc_controller`,或一份源码检出。只带 " +"`config/ocs2/fixed_base_tcp.info` 不够。配置和控制器都装上之后,全身模式默认 `headMode` 是 " +"**`HEAD_GAZE`**(注视 `head_camera_mid_optical_frame`)。`target_manager.yaml`" +" 里 `enable_head_control: false`。分体模式仍使用 `head_joint_controller`。" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/2-switch_robot.po b/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/2-switch_robot.po index c7afaea..14c949e 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/2-switch_robot.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/1-basic_operations/2-switch_robot.po @@ -217,31 +217,6 @@ msgstr "" "# After init has ARX descriptions, launch Acone (dual-arm, not Lift 2S)\n" "ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone\n" -#: ../../source/2-how_to/1-basic_operations/2-switch_robot.md:53 -#: ed6d353ea9184cad9d3d82c8c95e4355 -msgid "" -"`arx_acone` is **Acone** (dual-arm). Full-body **ARX Lift 2S** " -"(`arx_lift2s`) uses `split_body.launch.py` / `full_body.launch.py` on the" -" `arx-lift2s` branch — see [ARX Lift " -"2S](../6-deployment/9-go_real_hardware/1-arx_lift2s.md). **Taku** " -"(`taku`) uses the same split / full launches after descriptions are on " -"`feature/agilex`: public mock is `split_body.launch.py`; " -"`full_body.launch.py` needs the private `ocs2_wbc_controller` submodule —" -" [Taku / `feature/agilex`](../../1-getting_started/3-open_deploy_ws.md). " -"HighTorque Panthera HT launch name is `panthera_ht` — see [HighTorque " -"Panthera HT](../6-deployment/9-go_real_hardware/2-panthera_ht.md). Keep " -"`demo.launch.py` for `cr5` / `arx_acone` / `panthera_ht`." -msgstr "" -"`arx_acone` 是 **Acone**(双臂)。全身 **ARX Lift 2S**(`arx_lift2s`)在 `arx-" -"lift2s` 分支上使用 `split_body.launch.py` / `full_body.launch.py` — 见 [ARX " -"Lift 2S](../6-deployment/9-go_real_hardware/1-arx_lift2s.md)。**Taku**" -"(`taku`)在描述切到 `feature/agilex` 后使用同一套分体 / 全身启动:公开 mock 是 " -"`split_body.launch.py`;`full_body.launch.py` 需要私有 `ocs2_wbc_controller` " -"子模块 — [Taku / `feature/agilex`](../../1-getting_started/3-open_deploy_ws.md)。" -"高擎 Panthera HT 的启动名是 `panthera_ht` — 见 [高擎 Panthera " -"HT](../6-deployment/9-go_real_hardware/2-panthera_ht.md)。`cr5` / " -"`arx_acone` / `panthera_ht` 仍用 `demo.launch.py`。" - #: ../../source/2-how_to/1-basic_operations/2-switch_robot.md:55 #: 61857933790940219d1e9a6e021e5033 msgid "End-effectors (`type` / `left_type` / `right_type`)" @@ -524,3 +499,30 @@ msgstr "每台机器人在 URDF 中都有自己的关节限位。请确认目标 #~ "ros2 launch ocs2_arm_controller demo.launch.py " #~ "robot:=arx_acone hardware:=mock\n" +#: ../../source/2-how_to/1-basic_operations/2-switch_robot.md:53 +#: 7c04907fcbd34f68b1b26c885620e912 +msgid "" +"`arx_acone` is **Acone** (dual-arm). Full-body **ARX Lift 2S** " +"(`arx_lift2s`) uses `split_body.launch.py` / `full_body.launch.py` on the" +" `arx-lift2s` branch — see [ARX Lift " +"2S](../6-deployment/9-go_real_hardware/1-arx_lift2s.md). **Taku** " +"(`taku`) uses the same split / full launches after descriptions are on " +"`feature/agilex`: public mock is `split_body.launch.py`; " +"`full_body.launch.py` needs `ocs2_wbc_controller` from the `ros-jazzy-" +"arms-ros2-control` deb, or from a source checkout — [Taku / " +"`feature/agilex`](../../1-getting_started/3-open_deploy_ws.md). " +"HighTorque Panthera HT launch name is `panthera_ht` — see [HighTorque " +"Panthera HT](../6-deployment/9-go_real_hardware/2-panthera_ht.md). Keep " +"`demo.launch.py` for `cr5` / `arx_acone` / `panthera_ht`." +msgstr "" +"`arx_acone` 是 **Acone**(双臂)。全身的 **ARX Lift 2S**(`arx_lift2s`)在 `arx-" +"lift2s` 分支上使用 `split_body.launch.py` / `full_body.launch.py`,见 [ARX Lift " +"2S](../6-deployment/9-go_real_hardware/1-arx_lift2s.md)。**Taku**(`taku`)在描述切到" +" `feature/agilex` 之后用同一套分体 / 全身 launch:公开 mock 是 " +"`split_body.launch.py`;`full_body.launch.py` 需要 `ros-jazzy-arms-" +"ros2-control` 这个 deb 里的 `ocs2_wbc_controller`,或一份源码检出,见 [Taku / " +"`feature/agilex`](../../1-getting_started/3-open_deploy_ws.md)。高擎 " +"Panthera HT 的 launch 名是 `panthera_ht`,见 [高擎 Panthera " +"HT](../6-deployment/9-go_real_hardware/2-panthera_ht.md)。`cr5` / " +"`arx_acone` / `panthera_ht` 继续用 `demo.launch.py`。" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/4-isaac_sim.po b/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/4-isaac_sim.po index ad4e1f2..7e5e795 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/4-isaac_sim.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/4-isaac_sim.po @@ -25,35 +25,6 @@ msgstr "" msgid "Isaac Sim" msgstr "Isaac Sim" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:3 -#: eec398ec68b34345a1c27c79c9049a9b -msgid "" -"Run a robot in NVIDIA Isaac Sim and connect it to the same ROS 2 运控 stack" -" used on hardware." -msgstr "在 NVIDIA Isaac Sim 里运行机器人,并接到与真机相同的 ROS 2 运控栈。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:5 -#: 38e6265491964a8998963e0b0ea9261c -msgid "" -"FaSim-Isaac is the asset workspace: `./init.sh` then `./run.sh` (or " -"`./run_headless.sh`). Robot choice is which USD you open, not a `./run.sh" -" --robot` flag. Path and Isaac version live in `config/fa_sim.conf` / " -"`config/fa_sim.local.conf`." -msgstr "" -"FaSim-Isaac 是资产工作空间:先 `./init.sh`,再 `./run.sh`(或 " -"`./run_headless.sh`)。选哪台机器人取决于你打开哪份 USD,而不是 `./run.sh --robot`。路径和 Isaac " -"版本写在 `config/fa_sim.conf` / `config/fa_sim.local.conf`。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:7 -#: 1ca72c8d18ec4975b1dba5eb1dd78f7d -msgid "There are two ROS 2 connections. Pick one for a given stage." -msgstr "有两种 ROS 2 连接。同一舞台只选一种。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: d4aea684c761469295aa4ee82c0f8561 -msgid "Launch / graph" -msgstr "启动 / 图" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md #: 6b4a32b60adc47ba85764eaf3be0fde2 msgid "Plugin" @@ -79,11 +50,6 @@ msgstr "`topic_based_ros2_control/TopicBasedSystem`" msgid "OmniGraph joint topics" msgstr "OmniGraph 关节话题" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: 7181f54367e344a4a7180b0d4b8b0e06 -msgid "In-process `ROS2ControlLaunch` (Play)" -msgstr "进程内 `ROS2ControlLaunch`(播放)" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md #: d767d3346fad4cdf97e26fad98fe2d82 msgid "" @@ -91,54 +57,6 @@ msgid "" "node)" msgstr "`isaacsim_ros2_control/IsaacSimSystem`(节点内部的 `hardware=isaac_sim`)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: e87ba36b4f6040dc8778d365f18bf1d2 -msgid "Controller manager in the Isaac process" -msgstr "Isaac 进程里的控制器管理器" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:14 -#: dd4bcafb7ac345edb24b38cc2101e4d9 -msgid "" -"`isaac_sim` is a ros2_control hardware interface, not a second robot " -"body. Details, clock, and TF: [FaSim-Isaac " -"reference](../../4-reference/simulation/2-fasim_isaac.md)." -msgstr "" -"`isaac_sim` 是 ros2_control 的驱动层,不是第二套机器人本体。时钟和 TF 见 [FaSim-Isaac " -"参考](../../4-reference/simulation/2-fasim_isaac.md)。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:16 -#: 7b15f783b57748b4bc1a820b27bf10ea -msgid "Prerequisites" -msgstr "前提条件" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:18 -#: d819eb90c0a8425d8092cbac20e33137 -msgid "" -"NVIDIA Isaac Sim, GPU, and a matching driver. Default directory " -"`ISAACSIM_DIR` (`~/isaacsim` unless you override it)." -msgstr "NVIDIA Isaac Sim、GPU,以及匹配的驱动。默认目录 `ISAACSIM_DIR`(未覆盖时为 `~/isaacsim`)。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:19 -#: 6d0a1399cc7b4f919052d6bea3930496 -msgid "" -"ROS 2 Jazzy workspace that already builds the robot (`open-deploy-ws` or," -" with access, [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-" -"ws))." -msgstr "" -"已经能编过该机器人的 ROS 2 Jazzy 工作空间(`open-deploy-ws`,或有权限时的 [fa-deploy-" -"ws](https://github.com/fiveages-sim/fa-deploy-ws))。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:20 -#: f89d94db728c41eeab649686e97d658c -msgid "" -"For the topic bridge, the workspace includes `topic_based_ros2_control`. " -"For the in-process graph, `./init.sh` operation 5 has installed " -"`fasim.ros2.nodes` into this Isaac, and the description xacro accepts " -"`hardware` `isaac_sim`." -msgstr "" -"话题桥要求工作空间里有 `topic_based_ros2_control`。进程内图要求 `./init.sh` 的第 5 项已经把 " -"`fasim.ros2.nodes` 装进这份 Isaac,并且描述 xacro 接受 `hardware` `isaac_sim`。" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:22 #: 103da11ebb3544a68d6b395b571f0ba0 msgid "Start FaSim" @@ -157,62 +75,11 @@ msgstr "" "./init.sh\n" "./run.sh" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:31 -#: f981f214b9a74e37907d0be1c9abd32f -msgid "" -"`./init.sh` menu ([README](https://github.com/fiveages-sim/FaSim-" -"Isaac/blob/main/README.md)):" -msgstr "" -"`./init.sh` 菜单([README](https://github.com/fiveages-sim/FaSim-" -"Isaac/blob/main/README.md)):" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:33 -#: 201ad5c9213e4636b1e93526b4bbf368 -msgid "" -"Init selected submodules (`.gitmodules` / `submodules_visibility.conf`). " -"Public entries start checked. Private entries (including [fa-project-" -"usd](https://github.com/fiveages-sim/fa-project-usd)) stay unchecked " -"until you have access. Re-runs only add what you check." -msgstr "" -"初始化选中的子模块(`.gitmodules` / `submodules_visibility.conf`)。公开项默认勾选。私有项(包括 " -"[fa-project-usd](https://github.com/fiveages-sim/fa-project-" -"usd))在你有权限之前保持不勾。再次运行只追加你勾选的项。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:34 -#: fdac0c8d24544704ac390b495b0e9eb2 -msgid "" -"Update submodules already checked out (`./init.sh --update`). The FaSim " -"repo itself is not pulled." -msgstr "更新已经检出的子模块(`./init.sh --update`)。FaSim 仓库本身不会被拉取。" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:35 #: 771b023704c540408b68243af8551a89 msgid "Download ArtVIP into `environment/ArtVIP/` (`tools/artvip_kitchen.py`)." msgstr "把 ArtVIP 下载到 `environment/ArtVIP/`(`tools/artvip_kitchen.py`)。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:36 -#: 79f7d4e9a4c04531ba259ac55d855534 -msgid "" -"Optional Isaac ROS 2 Jazzy overlay under `isaac_jazzy_ws/`. The menu asks" -" GitHub for stable tags. If that query fails, `config/fa_sim.conf` falls " -"back to `6.2.0` / `6.1.0` / `6.0.1`. Override with `ISAAC_SIM_VERSION=… " -"./init.sh`." -msgstr "" -"可选的 Isaac ROS 2 Jazzy 叠加层,放在 `isaac_jazzy_ws/`。菜单会向 GitHub " -"查询稳定标签。查询失败时,`config/fa_sim.conf` 回退到 `6.2.0` / `6.1.0` / `6.0.1`。可用 " -"`ISAAC_SIM_VERSION=… ./init.sh` 覆盖。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:37 -#: 678d48302cfd4e009843f629a092bc42 -msgid "" -"Install FaSim extensions into this Isaac (`exts/fasim.steering.nodes`, " -"`exts/fasim.ros2.nodes`) and silence script warnings. Re-run after you " -"reinstall Isaac. Restart Isaac so the extensions load." -msgstr "" -"把 FaSim 扩展装进这份 " -"Isaac(`exts/fasim.steering.nodes`、`exts/fasim.ros2.nodes`),并关掉脚本警告。重装 " -"Isaac 后要再跑一次。重启 Isaac 后扩展才会加载。" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:39 #: 4ef86350d22341f1a1ed4ecbfd14911a msgid "" @@ -294,19 +161,6 @@ msgstr "" "`robot:=` 是描述包键(`_description`)。`demo.launch.py` " "没有命名空间参数。这条启动命令上不要再加 `namespace:=…`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:63 -#: 6151d105f627487a82302991b1402293 -msgid "" -"The shared macro [`simulation_hardware.xacro`](https://github.com" -"/fiveages-sim/robot-descriptions-" -"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)" -" writes:" -msgstr "" -"共享宏 [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" -"descriptions-" -"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)" -" 会写入:" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:65 #: 5270f899463a40e398e39d13f0d23fb7 msgid "`joint_commands_topic` = `/isaac/joint_command`" @@ -317,25 +171,6 @@ msgstr "`joint_commands_topic` = `/isaac/joint_command`" msgid "`joint_states_topic` = `/isaac/joint_states`" msgstr "`joint_states_topic` = `/isaac/joint_states`" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:68 -#: 380774563cb04f3ea8563061e44124c7 -msgid "" -"Those names have to be the OmniGraph `topicName` on **this** robot. W2’s " -"topic-bridge payload [`W2/payloads/ROS/ros2.usda`](https://github.com" -"/fiveages-sim/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/ros2.usda) publishes `/joint_command` and " -"`/joint_states` instead. If the two sides differ, retarget the xacro " -"`` (or the graph) until `ros2 topic echo` shows the same " -"`sensor_msgs/JointState` names the controller claims. Plugin parameters: " -"[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)." -msgstr "" -"这些名字必须是**这台**机器人 OmniGraph 上的 `topicName`。W2 的话题桥载荷 " -"[`W2/payloads/ROS/ros2.usda`](https://github.com/fiveages-sim/fiveages-" -"gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda) 发布的是 " -"`/joint_command` 和 `/joint_states`。两边不一致时,改 xacro 的 ``(或改图),直到 " -"`ros2 topic echo` 看到控制器认领的同一组 `sensor_msgs/JointState` " -"名字。插件参数:[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)。" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:70 #: bd4d8ca3041446c989c9c3a4824765b3 msgid "" @@ -366,53 +201,6 @@ msgid "" "There is no stack-wide `/target_pose`." msgstr "匹配的指令话题上的关节指令会驱动关节体。整栈没有统一的 `/target_pose`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:81 -#: f20f7bc97ff440e09a350089d7740c63 -msgid "In-process driver (`isaac_sim`)" -msgstr "进程内驱动(`isaac_sim`)" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:83 -#: b049d9a09e244815a1be9bbc20122fd8 -msgid "" -"Use this when the USD contains `fasim.ros2.nodes.ROS2ControlLaunch` (W2 " -"in-process payload: [`W2/payloads/ROS/fiveages.usda`](https://github.com" -"/fiveages-sim/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/fiveages.usda)). Play runs the graph. The " -"node calls `emit_control`, which sets `hardware=isaac_sim`, passes the " -"ArticulationRoot as `isaac_prim_path`, and starts the controller manager " -"inside Isaac." -msgstr "" -"USD 含有 `fasim.ros2.nodes.ROS2ControlLaunch` 时用这条(W2 " -"进程内载荷:[`W2/payloads/ROS/fiveages.usda`](https://github.com/fiveages-sim" -"/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/fiveages.usda))。播放会跑这张图。节点调用 " -"`emit_control`,把 `hardware` 设为 `isaac_sim`,把 ArticulationRoot 传成 " -"`isaac_prim_path`,并在 Isaac 内部启动控制器管理器。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:85 -#: b35c19dc5ca74eeca2e63b16dc62fd1b -msgid "" -"You still need a description package whose ros2_control xacro includes " -"`simulation_hardware_plugin` for `isaac_sim` ([robot_common_launch " -"README](https://github.com/fiveages-sim/robot-descriptions-" -"common/blob/main/robot_common_launch/README.md)). The graph inputs are " -"`robot`, `mode` (`demo`, `split_body`, `full_body`), `type`, and optional" -" `namespace`, `infoFile`, `arms`. Empty `robot` reads the USD `Robot` " -"variant; that string must be the description package stem." -msgstr "" -"描述包的 ros2_control xacro 仍须为 `isaac_sim` 包含 " -"`simulation_hardware_plugin`([robot_common_launch " -"README](https://github.com/fiveages-sim/robot-descriptions-" -"common/blob/main/robot_common_launch/README.md))。图的输入是 " -"`robot`、`mode`(`demo`、`split_body`、`full_body`)、`type`,以及可选的 " -"`namespace`、`infoFile`、`arms`。`robot` 为空时读取 USD 的 `Robot` " -"变体;该字符串必须是描述包名去掉 `_description` 的词干。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:87 -#: 1dc5843e037a43ee81473e5c64544453 -msgid "On Play, confirm:" -msgstr "播放后确认:" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 #: 620f72fd424a42cfa12fa8d6998adf64 msgid "" @@ -447,22 +235,6 @@ msgstr "" "`demo.launch.py` 的参数。帧 id 仍是 `world`、`odom`,以及 `base_link` / " "`base_footprint`。TF 和 `infoFile` 见参考页。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:99 -#: 8a33165605924d36928ee29fead83cf8 -msgid "" -"Whole-body mode needs the private [ocs2-wbc-" -"controller](https://github.com/fiveages-sim/ocs2-wbc-controller) " -"submodule. To hold a mobile base, keep the description’s " -"`mobile_base_tcp` info and send `BASE_LOCK`. A `full_body` graph with " -"`infoFile` set to a `fixed_base` info file has no virtual chassis degree " -"of freedom for that lock, and arm enable can sit in " -"`WAITING_FOR_ENABLE_POLICY`." -msgstr "" -"全身模式需要私有子模块 [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2" -"-wbc-controller)。要按住移动底盘,保留描述包的 `mobile_base_tcp` info,并发送 " -"`BASE_LOCK`。`full_body` 图把 `infoFile` 设成 `fixed_base` info " -"时,这次锁定没有虚拟底盘自由度,手臂使能可能停在 `WAITING_FOR_ENABLE_POLICY`。" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:101 #: c71c8d6d190142cfb05a58ce57bb1847 msgid "What to open" @@ -547,34 +319,6 @@ msgstr "" "sim.newton.streaming.sh`)。`nvidia-smi` 能看到 GPU。日志在 `~/.nvidia-" "omniverse/logs/`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:116 -#: d6a3afc4b83a4bfc8024e00dcc21ce27 -msgid "" -"**No ROS 2 topics after Play.** Domain id and `RMW_IMPLEMENTATION` match " -"the sourced workspace. Topic bridge: the graph’s `topicName` matches the " -"xacro. In-process: operation 5 is installed and Isaac was restarted; the " -"stage’s `ROS` variant is the fiveages payload, not the topic-bridge " -"payload." -msgstr "" -"**播放后没有 ROS 2 话题。** 域 id 和 `RMW_IMPLEMENTATION` 要与已 source 的工作空间一致。话题桥:图的" -" `topicName` 与 xacro 一致。进程内:第 5 项已安装并且 Isaac 已重启;舞台的 `ROS` 变体是 fiveages " -"载荷,而不是话题桥载荷。" - -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:118 -#: 6bfd06c9d34d49d3a5239c07c5abbce7 -msgid "" -"**Motion finishes much too fast.** On the in-process payload, `/clock` " -"comes from the on-demand `ROS_Clock` graph (`OnPhysicsStep`), which is " -"already how W2 `fiveages.usda` is wired. The topic-bridge `ros2.usda` " -"still publishes the clock from `OnPlaybackTick`. Fix the clock source " -"before editing joint gains. Mechanism: [FaSim-Isaac " -"reference](../../4-reference/simulation/2-fasim_isaac.md)." -msgstr "" -"**运动结束得太快。** 进程内载荷上,`/clock` 来自按需的 `ROS_Clock` 图(`OnPhysicsStep`),W2 的 " -"`fiveages.usda` 已经这样接。话题桥的 `ros2.usda` 仍从 `OnPlaybackTick` " -"发时钟。先改时钟来源,再考虑关节增益。机制:[FaSim-Isaac " -"参考](../../4-reference/simulation/2-fasim_isaac.md)。" - #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:120 #: 0b75e41d73054ee99f4d59d334032786 msgid "Next" @@ -1009,3 +753,289 @@ msgstr "[Synthetic Data](../7-synthetic_data/0-index.md)" #~ msgid "Next Steps" #~ msgstr "下一步" +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:3 +#: eec398ec68b34345a1c27c79c9049a9b +msgid "" +"Open a robot in NVIDIA Isaac Sim and drive it with the same ROS 2 stack " +"you use on the real machine." +msgstr "在 NVIDIA Isaac Sim 里打开一台机器人,用和真机同一套 ROS 2 运控把它驱动起来。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:5 +#: 38e6265491964a8998963e0b0ea9261c +msgid "" +"FaSim-Isaac holds the assets. Run `./init.sh`, then `./run.sh` or " +"`./run_headless.sh`. You choose the robot by opening its USD. There is no" +" `./run.sh --robot`. The Isaac path and version are in " +"`config/fa_sim.conf`, with a machine override in " +"`config/fa_sim.local.conf`." +msgstr "" +"FaSim-Isaac 放的是资产。先 `./init.sh`,再 `./run.sh` 或 `./run_headless.sh`。打开哪份 " +"USD,就是选哪台机器人。没有 `./run.sh --robot`。Isaac 的路径和版本在 " +"`config/fa_sim.conf`,单机覆盖写在 `config/fa_sim.local.conf`。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:7 +#: 1ca72c8d18ec4975b1dba5eb1dd78f7d +msgid "Connect ROS 2 in one of two ways. Use one of them for a given stage." +msgstr "ROS 2 有两种接法。一个舞台用其中一种。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md +#: c2192d3e070b4957a43f2c29673a9c1b +msgid "What you start" +msgstr "你启动的是什么" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md +#: 7181f54367e344a4a7180b0d4b8b0e06 +msgid "Play on an in-process `ROS2ControlLaunch`" +msgstr "在进程内的 `ROS2ControlLaunch` 上按 Play" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md +#: e87ba36b4f6040dc8778d365f18bf1d2 +msgid "The controller manager inside the Isaac process" +msgstr "Isaac 进程里的控制器管理器" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:14 +#: dd4bcafb7ac345edb24b38cc2101e4d9 +msgid "" +"`isaac_sim` is the hardware interface for that in-process controller. It " +"is not a second robot. Clock, TF, and the rest of the mechanism: [FaSim-" +"Isaac reference](../../4-reference/simulation/2-fasim_isaac.md)." +msgstr "" +"`isaac_sim` 是这套进程内控制器的驱动层,不是第二台机器人。时钟、TF 和其余机制见 [FaSim-Isaac " +"参考](../../4-reference/simulation/2-fasim_isaac.md)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:16 +#: 7c0e9a611c4e434d9c9b14310b70b02c +msgid "Before you start" +msgstr "开始之前" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:18 +#: 960288be4553446e89776e2ffa78f5d6 +msgid "" +"Isaac Sim is installed, the GPU driver matches it, and `ISAACSIM_DIR` " +"points at that install (`~/isaacsim` unless you set another path)." +msgstr "Isaac Sim 已安装,显卡驱动与之匹配,`ISAACSIM_DIR` 指向这次安装(除非你另设路径,否则是 `~/isaacsim`)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:19 +#: 6d0a1399cc7b4f919052d6bea3930496 +msgid "" +"A ROS 2 Jazzy workspace already builds this robot: `open-deploy-ws`, or " +"[fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) once you can" +" open that repository." +msgstr "" +"一个已经能编译这台机器人的 ROS 2 Jazzy 工作区:`open-deploy-ws`,或者你能打开的 [fa-deploy-" +"ws](https://github.com/fiveages-sim/fa-deploy-ws)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:20 +#: f89d94db728c41eeab649686e97d658c +msgid "" +"The topic bridge needs `topic_based_ros2_control` in that workspace. The " +"in-process graph needs `./init.sh` operation 5, which installs " +"`fasim.ros2.nodes` into this Isaac, and a description xacro that accepts " +"`hardware` `isaac_sim`." +msgstr "" +"话题桥需要工作区里有 `topic_based_ros2_control`。进程内的图需要 `./init.sh` 的第 5 项,它会把 " +"`fasim.ros2.nodes` 装进这次 Isaac,并且描述 xacro 要接受 `hardware` 取值 `isaac_sim`。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:31 +#: f981f214b9a74e37907d0be1c9abd32f +msgid "" +"`./init.sh` asks you to ([README](https://github.com/fiveages-sim/FaSim-" +"Isaac/blob/main/README.md)):" +msgstr "" +"`./init.sh` 会请你做这些事([README](https://github.com/fiveages-sim/FaSim-" +"Isaac/blob/main/README.md)):" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:33 +#: 201ad5c9213e4636b1e93526b4bbf368 +msgid "" +"Check out the submodules you select (`.gitmodules` and " +"`submodules_visibility.conf`). Public entries start checked. Private " +"entries, including [fa-project-usd](https://github.com/fiveages-sim/fa-" +"project-usd), stay unchecked until you can open them. A later run only " +"adds what you check." +msgstr "" +"检出你勾选的子模块(`.gitmodules` 和 `submodules_visibility.conf`)。公开项默认勾上。私有项,包括 " +"[fa-project-usd](https://github.com/fiveages-sim/fa-project-" +"usd),在你能打开之前保持不勾。以后再跑只会补上新勾的项。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:34 +#: fdac0c8d24544704ac390b495b0e9eb2 +msgid "" +"Update submodules you already checked out (`./init.sh --update`). This " +"does not pull the FaSim repository itself." +msgstr "更新已经检出的子模块(`./init.sh --update`)。这一步不会拉取 FaSim 仓库本身。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:36 +#: 79f7d4e9a4c04531ba259ac55d855534 +msgid "" +"Optionally add an Isaac ROS 2 Jazzy overlay under `isaac_jazzy_ws/`. The " +"menu asks GitHub for stable tags. If that query fails, " +"`config/fa_sim.conf` falls back to `6.2.0`, `6.1.0`, and `6.0.1`. " +"Override with `ISAAC_SIM_VERSION=… ./init.sh`." +msgstr "" +"可以在 `isaac_jazzy_ws/` 下加一层 Isaac ROS 2 Jazzy 叠加。菜单会向 GitHub " +"查询稳定标签。查询失败时,`config/fa_sim.conf` 回退到 `6.2.0`、`6.1.0` 和 `6.0.1`。用 " +"`ISAAC_SIM_VERSION=… ./init.sh` 覆盖。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:37 +#: 678d48302cfd4e009843f629a092bc42 +msgid "" +"Install the FaSim extensions into this Isaac " +"(`exts/fasim.steering.nodes`, `exts/fasim.ros2.nodes`) and quiet the " +"script warnings. Run this again after you reinstall Isaac, then restart " +"Isaac so the extensions load." +msgstr "" +"把 FaSim 扩展装进这次 " +"Isaac(`exts/fasim.steering.nodes`、`exts/fasim.ros2.nodes`),并压低脚本警告。重装 " +"Isaac 之后再做一次,然后重启 Isaac,扩展才会加载。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:63 +#: 6151d105f627487a82302991b1402293 +msgid "" +"The shared macro [`simulation_hardware.xacro`](https://github.com" +"/fiveages-sim/robot-descriptions-" +"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)" +" sets:" +msgstr "" +"共享宏 [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)" +" 写成:" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:68 +#: 380774563cb04f3ea8563061e44124c7 +msgid "" +"Those strings have to match the OmniGraph `topicName` on this robot. W2’s" +" topic-bridge payload [`W2/payloads/ROS/ros2.usda`](https://github.com" +"/fiveages-sim/fiveages-gen2-robot-" +"usds/blob/main/W2/payloads/ROS/ros2.usda) publishes `/joint_command` and " +"`/joint_states` instead. If the two sides differ, change the xacro " +"`` or the graph until `ros2 topic echo` shows the same " +"`sensor_msgs/JointState` names the controller is using. Plugin " +"parameters: " +"[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)." +msgstr "" +"这些字符串必须和这台机器人上 OmniGraph 的 `topicName` 一致。W2 的话题桥载荷 " +"[`W2/payloads/ROS/ros2.usda`](https://github.com/fiveages-sim/fiveages-" +"gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda) 发布的是 " +"`/joint_command` 和 `/joint_states`。两边不一致时,改 xacro 的 `` 或改图,直到 " +"`ros2 topic echo` 看到的 `sensor_msgs/JointState` 名字和控制器正在用的一致。插件参数见 " +"[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:81 +#: f20f7bc97ff440e09a350089d7740c63 +msgid "In-process hardware interface (`isaac_sim`)" +msgstr "进程内驱动层(`isaac_sim`)" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:83 +#: b049d9a09e244815a1be9bbc20122fd8 +msgid "" +"Use this when the USD contains `fasim.ros2.nodes.ROS2ControlLaunch`. W2’s" +" in-process payload is " +"[`W2/payloads/ROS/fiveages.usda`](https://github.com/fiveages-sim" +"/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda). Press" +" Play. The node calls `emit_control`, which sets `hardware=isaac_sim`, " +"passes the ArticulationRoot as `isaac_prim_path`, and starts the " +"controller manager inside Isaac." +msgstr "" +"USD 里有 `fasim.ros2.nodes.ROS2ControlLaunch` 时用这条。W2 的进程内载荷是 " +"[`W2/payloads/ROS/fiveages.usda`](https://github.com/fiveages-sim" +"/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)。按 " +"Play。节点调用 `emit_control`,设置 `hardware=isaac_sim`,把 ArticulationRoot 传成 " +"`isaac_prim_path`,并在 Isaac 里启动控制器管理器。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:85 +#: b35c19dc5ca74eeca2e63b16dc62fd1b +msgid "" +"The description package still has to exist. Its ros2_control xacro " +"includes `simulation_hardware_plugin` for `isaac_sim` " +"([robot_common_launch README](https://github.com/fiveages-sim/robot-" +"descriptions-common/blob/main/robot_common_launch/README.md)). The graph " +"inputs are `robot`, `mode` (`demo`, `split_body`, `full_body`), `type`, " +"and the optional `namespace`, `infoFile`, and `arms`. An empty `robot` " +"reads the USD `Robot` variant. That string is the description package " +"stem." +msgstr "" +"描述包仍然要有。它的 ros2_control xacro 要为 `isaac_sim` 包含 " +"`simulation_hardware_plugin`([robot_common_launch " +"README](https://github.com/fiveages-sim/robot-descriptions-" +"common/blob/main/robot_common_launch/README.md))。图的输入是 " +"`robot`、`mode`(`demo`、`split_body`、`full_body`)、`type`,以及可选的 " +"`namespace`、`infoFile`、`arms`。`robot` 为空时读取 USD 的 `Robot` " +"变体,这个字符串就是描述包名去掉 `_description` 之前的那一段。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:87 +#: 1dc5843e037a43ee81473e5c64544453 +msgid "After Play, check:" +msgstr "Play 之后检查:" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:99 +#: ff552b3cb6424fceb507f7f7d988ef71 +msgid "" +"Whole-body mode (`mode` `full_body`) loads `ocs2_wbc_controller`. That " +"package is already in the GitHub Release deb `ros-jazzy-arms-" +"ros2-control`. Choose `d` for arms in `./init_repo.sh`, or run " +"`./scripts/install_core_debs.sh --only arms`. Cloning [ocs2-wbc-" +"controller](https://github.com/fiveages-sim/ocs2-wbc-controller) is how " +"you read or edit the source. To hold a mobile base, keep the " +"description’s `mobile_base_tcp` info and send `BASE_LOCK`. A `full_body` " +"graph whose `infoFile` points at a `fixed_base` info file has no virtual " +"chassis joint for that lock, and arm enable can stay in " +"`WAITING_FOR_ENABLE_POLICY`." +msgstr "" +"全身模式(`mode` 为 `full_body`)会加载 `ocs2_wbc_controller`。这个包已经在 GitHub Release" +" 的 deb `ros-jazzy-arms-ros2-control` 里。`./init_repo.sh` 给 arms 选 `d`,或运行 " +"`./scripts/install_core_debs.sh --only arms`。克隆 [ocs2-wbc-" +"controller](https://github.com/fiveages-sim/ocs2-wbc-controller) " +"是为了读源码或改源码。要按住移动底盘,保留描述里的 `mobile_base_tcp` info,并发送 " +"`BASE_LOCK`。`full_body` 的图把 `infoFile` 指到一份 `fixed_base` info " +"时,没有这把锁能用的虚拟底盘关节,手臂使能会停在 `WAITING_FOR_ENABLE_POLICY`。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:116 +#: d6a3afc4b83a4bfc8024e00dcc21ce27 +msgid "" +"**Play starts, but no ROS 2 topics appear.** The domain id and " +"`RMW_IMPLEMENTATION` match the workspace you sourced. For the topic " +"bridge, the graph `topicName` matches the xacro. For the in-process " +"graph, operation 5 is installed and Isaac was restarted, and the stage’s " +"`ROS` variant is the fiveages payload rather than the topic-bridge " +"payload." +msgstr "" +"**Play 起来了,但没有 ROS 2 话题。** 域 ID 和 `RMW_IMPLEMENTATION` 要和你 source " +"的工作区一致。话题桥:图的 `topicName` 和 xacro 一致。进程内:第 5 项已安装,Isaac 已重启,场景里的 `ROS` 变体是" +" fiveages 载荷,而不是话题桥载荷。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:118 +#: 6bfd06c9d34d49d3a5239c07c5abbce7 +msgid "" +"**A motion finishes much too fast.** On the in-process payload, `/clock` " +"comes from the on-demand `ROS_Clock` graph (`OnPhysicsStep`). That is how" +" W2 `fiveages.usda` is already wired. The topic-bridge `ros2.usda` still " +"publishes the clock from `OnPlaybackTick`. Fix the clock before you edit " +"joint gains. The mechanism is on the [FaSim-Isaac " +"reference](../../4-reference/simulation/2-fasim_isaac.md)." +msgstr "" +"**动作结束得特别快。** 进程内载荷上,`/clock` 来自按物理步更新的 `ROS_Clock` 图(`OnPhysicsStep`)。W2 的 " +"`fiveages.usda` 已经是这样接的。话题桥的 `ros2.usda` 仍从 `OnPlaybackTick` " +"发布时钟。先改时钟,再考虑关节增益。机制见 [FaSim-Isaac " +"参考](../../4-reference/simulation/2-fasim_isaac.md)。" + +#~ msgid "There are two ROS 2 connections. Pick one for a given stage." +#~ msgstr "有两种 ROS 2 连接。同一舞台只选一种。" + +#~ msgid "Launch / graph" +#~ msgstr "启动 / 图" + +#~ msgid "Prerequisites" +#~ msgstr "前提条件" + +#~ msgid "" +#~ "NVIDIA Isaac Sim, GPU, and a " +#~ "matching driver. Default directory " +#~ "`ISAACSIM_DIR` (`~/isaacsim` unless you " +#~ "override it)." +#~ msgstr "NVIDIA Isaac Sim、GPU,以及匹配的驱动。默认目录 `ISAACSIM_DIR`(未覆盖时为 `~/isaacsim`)。" + +#~ msgid "On Play, confirm:" +#~ msgstr "播放后确认:" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/6-vr_teleop.po b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/6-vr_teleop.po index 9914309..5259a7e 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/6-vr_teleop.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/6-vr_teleop.po @@ -525,7 +525,7 @@ msgid "" "Setup](../../1-getting_started/4-fa_deploy_ws.md). Extra robot IDs and " "launch flags are in that workspace README after access." msgstr "" -"使用天玑 / 珞石臂的内部 FA 机器人见 [fa-deploy-ws " +"使用天玑 / 珞石臂的内部第五纪机器人见 [fa-deploy-ws " "配置](../../1-getting_started/4-fa_deploy_ws.md)。额外机器人 ID 和 launch " "参数在开通后的该仓库 README。" diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/6-deployment/10-add_a_robot.po b/locale/zh_CN/LC_MESSAGES/2-how_to/6-deployment/10-add_a_robot.po index a1fd313..7662ea8 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/6-deployment/10-add_a_robot.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/6-deployment/10-add_a_robot.po @@ -385,35 +385,6 @@ msgstr "" "Aloha(`manipulator/AgileX/agilex_aloha_description`),并且**没有** " "`.cursor/skills` 目录。" -#: ../../source/2-how_to/6-deployment/10-add_a_robot.md:72 -#: 7fc92ab785aa4a3e9e65284f12cf2415 -msgid "" -"**Taku** (Dyna / DVT1) is also in-tree on `feature/agilex` at " -"[`humanoid/Dyna/taku_description`](https://github.com/fiveages-" -"sim/robot_descriptions/tree/feature/agilex/humanoid/Dyna/taku_description)." -" Visualize with `robot_common_launch humanoid.launch.py robot:=taku`. " -"Control is `split_body.launch.py` / `full_body.launch.py` with " -"`robot:=taku` ([package README](https://github.com/fiveages-" -"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" -" §3.1 / §3.2) — not `demo.launch.py`. Public mock is " -"**`split_body.launch.py`**; **`full_body.launch.py`** needs the private " -"`ocs2_wbc_controller` submodule. It is **not** a row in that branch’s " -"README brand tables. There is no lean `open-deploy-ws` Taku branch — " -"[open-deploy-ws Setup](../../1-getting_started/3-open_deploy_ws.md)." -msgstr "" -"**Taku**(Dyna / DVT1)也在 `feature/agilex` 仓内 " -"[`humanoid/Dyna/taku_description`](https://github.com/fiveages-" -"sim/robot_descriptions/tree/feature/agilex/humanoid/Dyna/taku_description)。可视化用" -" `robot_common_launch humanoid.launch.py robot:=taku`。控制用 " -"`split_body.launch.py` / `full_body.launch.py`,并传 `robot:=taku`([包 " -"README](https://github.com/fiveages-" -"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" -" §3.1 / §3.2)— 不是 `demo.launch.py`。公开 mock 是 " -"**`split_body.launch.py`**;**`full_body.launch.py`** 需要私有 " -"`ocs2_wbc_controller` 子模块。它**不是**该分支 README 品牌表中的一行。没有精简的 `open-deploy-" -"ws` Taku 分支 — [open-deploy-ws " -"配置](../../1-getting_started/3-open_deploy_ws.md)。" - #: ../../source/2-how_to/6-deployment/10-add_a_robot.md:74 #: 090b1f35b9db4dc395c5a1b384a27a5c msgid "2. Wire it into a deploy workspace" @@ -1193,3 +1164,36 @@ msgstr "" #~ "PhysX 与 Newton/MuJoCo 层分开;主机侧 " #~ "`topic_based_ros2_control` + `hardware:=isaac`。" +#: ../../source/2-how_to/6-deployment/10-add_a_robot.md:72 +#: 7fc92ab785aa4a3e9e65284f12cf2415 +msgid "" +"**Taku** (Dyna / DVT1) is also in-tree on `feature/agilex` at " +"[`humanoid/Dyna/taku_description`](https://github.com/fiveages-" +"sim/robot_descriptions/tree/feature/agilex/humanoid/Dyna/taku_description)." +" Visualize with `robot_common_launch humanoid.launch.py robot:=taku`. " +"Control is `split_body.launch.py` / `full_body.launch.py` with " +"`robot:=taku` ([package README](https://github.com/fiveages-" +"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" +" §3.1 / §3.2) — not `demo.launch.py`. Public mock is " +"**`split_body.launch.py`**. **`full_body.launch.py`** needs " +"`ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or from" +" a source checkout. See [OCS2 WBC " +"Controller](../../4-reference/controllers/3-ocs2_wbc.md). It is **not** a" +" row in that branch’s README brand tables. There is no lean `open-deploy-" +"ws` Taku branch — [open-deploy-ws " +"Setup](../../1-getting_started/3-open_deploy_ws.md)." +msgstr "" +"**Taku**(Dyna / DVT1)也在 `feature/agilex` 的树里,路径是 " +"[`humanoid/Dyna/taku_description`](https://github.com/fiveages-" +"sim/robot_descriptions/tree/feature/agilex/humanoid/Dyna/taku_description)。用" +" `robot_common_launch humanoid.launch.py robot:=taku` 可视化。控制用 " +"`split_body.launch.py` / `full_body.launch.py`,`robot:=taku`([包 " +"README](https://github.com/fiveages-" +"sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md)" +" §3.1 / §3.2),不是 `demo.launch.py`。公开 mock 是 " +"**`split_body.launch.py`**。**`full_body.launch.py`** 需要 `ros-jazzy-arms-" +"ros2-control` 这个 deb 里的 `ocs2_wbc_controller`,或一份源码检出。见 [OCS2 WBC " +"控制器](../../4-reference/controllers/3-ocs2_wbc.md)。它不在该分支 README " +"的品牌表里。没有精简的 `open-deploy-ws` Taku 分支,见 [open-deploy-ws " +"安装](../../1-getting_started/3-open_deploy_ws.md)。" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/0-index.po b/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/0-index.po index 5d80510..ae40b22 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/0-index.po @@ -42,48 +42,6 @@ msgstr "" "这是操作指南中的合成数据大类,讲的是 Isaac 数据采集流水线,不是 Gazebo 或遥操作。API " "仍以参考页为准;本章只说明**各部分如何衔接**。" -#: ../../source/2-how_to/7-synthetic_data/0-index.md:7 -#: c0f317f17f654157b9fb27b6af2aca28 -msgid "Documented revisions" -msgstr "文档修订" - -#: ../../source/2-how_to/7-synthetic_data/0-index.md:10 -#: 562b9d8d29364a04a05338cce02c82b9 -msgid "" -"[robot_action_composer](https://github.com/fiveages-" -"sim/robot_action_composer) `main`" -msgstr "" -"[robot_action_composer](https://github.com/fiveages-" -"sim/robot_action_composer) 的 `main`" - -#: ../../source/2-how_to/7-synthetic_data/0-index.md:11 -#: d10c9020628a4a418ba88b196833b134 -msgid "" -"[lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main` " -"(`feature/sim-grasp-datagen` merged in [#10](https://github.com/fiveages-" -"sim/lerobot_ros2/pull/10))" -msgstr "" -"[lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) 的 " -"`main`(`feature/sim-grasp-datagen` 已在 [#10](https://github.com/fiveages-" -"sim/lerobot_ros2/pull/10) 合入)" - -#: ../../source/2-how_to/7-synthetic_data/0-index.md:13 -#: f75947455c7a4bc6af85baccab11a6e5 -msgid "`feature/dex-grasp-generator` is no longer a branch." -msgstr "`feature/dex-grasp-generator` 已不再是分支。" - -#: ../../source/2-how_to/7-synthetic_data/0-index.md:16 -#: 2017ae15295f410b8ef0e4f3033c0c5b -msgid "Terminology" -msgstr "术语" - -#: ../../source/2-how_to/7-synthetic_data/0-index.md:19 -#: 239791eaab3f462694e57746f2251e11 -msgid "" -"**Humanoid** here means a **wheeled-arm humanoid** (mobile base + arms, " -"e.g. FiveAges W2). It does **not** mean a bipedal or footed humanoid." -msgstr "这里的 **humanoid** 指 **轮臂人形**(移动底盘 + 手臂,例如 FiveAges W2)。**不是**双足 / 腿足人形。" - #: ../../source/2-how_to/7-synthetic_data/0-index.md:22 #: 8acac0b07b7b41c3a6206794badc45db msgid "Pipeline" @@ -263,3 +221,41 @@ msgstr "" #~ msgid "Those branches are newer than `main`. Follow them, not `main`." #~ msgstr "这些分支比 `main` 新。请跟它们,不要跟 `main`。" +#: ../../source/2-how_to/7-synthetic_data/0-index.md:7 +#: fa64c04bf6194abdadb201cf4776161d +msgid "" +"Follow [robot_action_composer](https://github.com/fiveages-" +"sim/robot_action_composer) `main` and [lerobot_ros2](https://github.com" +"/fiveages-sim/lerobot_ros2) `main`. Simulation grasp datagen is included " +"there ([#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10)). " +"There is no `feature/dex-grasp-generator` branch." +msgstr "" +"按 [robot_action_composer](https://github.com/fiveages-" +"sim/robot_action_composer) 的 `main` 和 [lerobot_ros2](https://github.com" +"/fiveages-sim/lerobot_ros2) 的 " +"`main`。仿真抓取数据生成已经在这里([#10](https://github.com/fiveages-" +"sim/lerobot_ros2/pull/10))。没有 `feature/dex-grasp-generator` 分支。" + +#: ../../source/2-how_to/7-synthetic_data/0-index.md:9 +#: 239791eaab3f462694e57746f2251e11 +msgid "" +"**Humanoid** on these pages means a wheeled-arm robot: a mobile base plus" +" arms, for example FiveAges W2. It does not mean a biped." +msgstr "这些页面里的 **humanoid** 指轮臂机器人:移动底盘加上手臂,例如第五纪 W2。不是双足。" + +#~ msgid "Documented revisions" +#~ msgstr "文档修订" + +#~ msgid "" +#~ "[robot_action_composer](https://github.com/fiveages-" +#~ "sim/robot_action_composer) `main`" +#~ msgstr "" +#~ "[robot_action_composer](https://github.com/fiveages-" +#~ "sim/robot_action_composer) 的 `main`" + +#~ msgid "`feature/dex-grasp-generator` is no longer a branch." +#~ msgstr "`feature/dex-grasp-generator` 已不再是分支。" + +#~ msgid "Terminology" +#~ msgstr "术语" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/1-isaac_scenes.po b/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/1-isaac_scenes.po index ca3fe1d..f114e49 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/1-isaac_scenes.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/1-isaac_scenes.po @@ -246,16 +246,6 @@ msgstr "`humanoid/FiveAges/Gen2`" msgid "fiveages-gen2-robot-usds" msgstr "fiveages-gen2-robot-usds" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 87954f3b083d42c9b4482c7f9def3e93 -msgid "`humanoid/FiveAges/Gen3`" -msgstr "`humanoid/FiveAges/Gen3`" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 320aa28444f74419bda0219f0e478569 -msgid "fiveages-gen3-robot-usds" -msgstr "fiveages-gen3-robot-usds" - #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 #: d022eac72ee641ac8f5cf8d2ff2ec3ae msgid "`humanoid/Ubtech`" @@ -276,36 +266,6 @@ msgstr "`humanoid/Galbot`" msgid "galbot-usds" msgstr "galbot-usds" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:70 -#: 003f8396fd404e63b4bccdbe1f6be6fa -msgid "" -"FaSim `submodules_visibility.conf` marks Galbot **public** and the " -"FiveAges Gen\\* / Ubtech trees **private**, so `./init.sh` does not " -"select FiveAges by default. The **remotes** for Gen1 (`fiveages-gen1" -"-robot-usds`) and Gen2 (`fiveages-gen2-robot-usds`) are now public; Gen3 " -"is still private. **W2R and S2R are not in the Gen2 USD repo.** In-tree " -"(not submodule) categories on robot_usds include grippers, dexhands, " -"manipulators, mobile bases, mobile manipulators, and sensors — browse the" -" repo for the current roots." -msgstr "" -"FaSim `submodules_visibility.conf`把 Galbot 标成 **public**,FiveAges Gen\\* " -"/Ubtech 树标成 **private**,因此 `./init.sh`默认不勾选FiveAges。Gen1(`fiveages-gen1" -"-robot-usds`)与Gen2(`fiveages-gen2-robot-usds`)的**远端**现已公开;Gen3 仍为私有。**W2R" -" 与 S2R 不在 Gen2USD 仓库中。** robot_usds 树内(非子模块)类别包括夹爪、灵巧手、机械臂、移动底盘、移动机械臂和传感器" -" — 以仓库当前根目录为准。" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:72 -#: e9432363d485456182fb898ea9231f78 -msgid "" -"FiveAges **Gen1 / Gen2 / Gen3** are wheeled-arm USD generations under " -"`humanoid/FiveAges/` (README maps Gen1→W1, Gen2→W2/S2). They are not " -"bipedal humanoids. URDF status: [FiveAges robot " -"descriptions](../../4-reference/descriptions/4-fiveages_umbrella.md)." -msgstr "" -"FiveAges **Gen1 / Gen2 / Gen3** 是 `humanoid/FiveAges/`下的轮臂 " -"USD世代(README:Gen1→W1,Gen2→W2/S2)。它们不是双足人形。URDF " -"状态:[FiveAges机器人描述](../../4-reference/descriptions/4-fiveages_umbrella.md)。" - #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:74 #: 42dc6b5acb5f4587b423bb60d350debe msgid "" @@ -483,3 +443,34 @@ msgstr "" #~ "`config/fa_sim.local.conf`)。菜单为 PhysX / Newton " #~ "/ Headless Streaming。" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:69 +#: 003f8396fd404e63b4bccdbe1f6be6fa +msgid "" +"FaSim `submodules_visibility.conf` marks Galbot public and the FiveAges " +"and Ubtech trees private, so `./init.sh` does not select FiveAges by " +"default. The Gen1 remote (`fiveages-gen1-robot-usds`) and the Gen2 remote" +" (`fiveages-gen2-robot-usds`) are public. W2R and S2R are not in the Gen2" +" USD repo. robot_usds also keeps grippers, dexterous hands, manipulators," +" mobile bases, mobile manipulators, and sensors in the tree itself. " +"Browse the repo for the current roots." +msgstr "" +"FaSim 的 `submodules_visibility.conf` 把 Galbot 标成公开,把第五纪和优必选的树标成私有,所以 " +"`./init.sh` 默认不选第五纪。Gen1 远端(`fiveages-gen1-robot-usds`)和 Gen2 远端" +"(`fiveages-gen2-robot-usds`)是公开的。W2R 和 S2R 不在 Gen2 的 USD 仓库里。robot_usds " +"自己的树里还有夹爪、灵巧手、机械臂、移动底盘、移动操作臂和传感器。当前目录以仓库为准。" + +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:71 +#: e9432363d485456182fb898ea9231f78 +msgid "" +"Gen1 and Gen2 under `humanoid/FiveAges/` are wheeled-arm USD. The README " +"maps Gen1 to W1 and Gen2 to W2 and S2. They are not bipeds. URDF status: " +"[FiveAges robot " +"descriptions](../../4-reference/descriptions/4-fiveages_umbrella.md)." +msgstr "" +"`humanoid/FiveAges/` 下的 Gen1 和 Gen2 是轮臂 USD。README 把 Gen1 对应到 W1,把 Gen2 " +"对应到 W2 和 S2。它们不是双足。URDF 状态见 " +"[第五纪机器人描述](../../4-reference/descriptions/4-fiveages_umbrella.md)。" + +#~ msgid "`humanoid/FiveAges/Gen3`" +#~ msgstr "`humanoid/FiveAges/Gen3`" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/2-orchestration.po b/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/2-orchestration.po index 95ef4b7..6d3cc14 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/2-orchestration.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/7-synthetic_data/2-orchestration.po @@ -260,31 +260,6 @@ msgstr "" "`robot.cache_ee_pose`, `robot.send_mode_command`, " "`env.randomize_object_local_xyz`, …" -#: ../../source/2-how_to/7-synthetic_data/2-orchestration.md:44 -#: 18c2d73f48884bed9bf8740232970ea2 -msgid "" -"Datagen workspace used in the README is **`examples/IsaacSim`** inside " -"lerobot_ros2 (contains `robots/`). Robot-specific notes, including " -"wheeled-arm **FiveAges W2** dual-arm tasks, are next to those trees (e.g." -" [`robots/FiveAges_W2/README.md`](https://github.com/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/FiveAges_W2/README.md))." -" A [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) " -"project directory can be the workspace instead (`LEROBOT_ROOT` plus that " -"project’s `robot.yaml`). End-effector poses use one of the two frame " -"paths in " -"[robot_action_composer](../../4-reference/python_apps/5-robot_action_composer.md):" -" live TF when `robot.yaml` has no `ee_tip`, or a USD tip→parent chain " -"when `ee_tip` is set." -msgstr "" -"README 里的数采工作区是 lerobot_ros2 内的 **`examples/IsaacSim`**(含 " -"`robots/`)。各机器人说明,包括轮臂 **五纪 W2** 的双臂任务,写在这些目录旁边(例如 " -"[`robots/FiveAges_W2/README.md`](https://github.com/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/FiveAges_W2/README.md" -"))。[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) " -"的项目目录也可以当工作区(`LEROBOT_ROOT` 加上该项目的 `robot.yaml`)。末端位姿走 " -"[robot_action_composer](../../4-reference/python_apps/5-robot_action_composer.md)" -" 的两条路径之一:`robot.yaml` 没有 `ee_tip` 时用实时 TF;设置了 `ee_tip` 时用 USD 的尖端到父级链。" - #: ../../source/2-how_to/7-synthetic_data/2-orchestration.md:46 #: e9bf6b7301274401be574b0e2d8dc066 msgid "Official Nav2, not a custom nav stack" @@ -458,3 +433,27 @@ msgstr "" "录制是叠在这条队列上的 extra:同一套 YAML `task_queue`,再加上 LeRobot 插件。继续看 [LeRobot " "录制与导出](3-record_export.md)。" +#: ../../source/2-how_to/7-synthetic_data/2-orchestration.md:44 +#: 18c2d73f48884bed9bf8740232970ea2 +msgid "" +"The README runs this from **`examples/IsaacSim`** inside lerobot_ros2, " +"which contains `robots/`. Notes for each robot, including dual-arm tasks " +"on FiveAges W2, sit next to those trees, for example " +"[`robots/FiveAges_W2/README.md`](https://github.com/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/FiveAges_W2/README.md)." +" A [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) " +"project directory can be the workspace instead: set `LEROBOT_ROOT` and " +"use that project’s `robot.yaml`. End-effector poses follow " +"[robot_action_composer](../../4-reference/python_apps/5-robot_action_composer.md)." +" Without `ee_tip`, the pose comes from live TF. With `ee_tip`, it walks " +"the USD chain from the tip to its parent first." +msgstr "" +"README 从 lerobot_ros2 里的 **`examples/IsaacSim`** 跑,这里有 " +"`robots/`。各机器人的说明,包括第五纪 W2 的双臂任务,就写在这些目录旁边,例如 " +"[`robots/FiveAges_W2/README.md`](https://github.com/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/FiveAges_W2/README.md)。也可以改用" +" [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) " +"的项目目录当工作区:设置 `LEROBOT_ROOT`,并用该项目的 `robot.yaml`。末端位姿见 " +"[robot_action_composer](../../4-reference/python_apps/5-robot_action_composer.md)。没有" +" `ee_tip` 时,位姿来自实时 TF。有 `ee_tip` 时,先沿 USD 从尖端走到它的父连杆。" + diff --git a/locale/zh_CN/LC_MESSAGES/3-concepts/4-fsm_and_topics.po b/locale/zh_CN/LC_MESSAGES/3-concepts/4-fsm_and_topics.po index 8ebd962..3747ebb 100644 --- a/locale/zh_CN/LC_MESSAGES/3-concepts/4-fsm_and_topics.po +++ b/locale/zh_CN/LC_MESSAGES/3-concepts/4-fsm_and_topics.po @@ -315,16 +315,6 @@ msgstr "[OCS2 WBC Controller](../4-reference/controllers/3-ocs2_wbc.md)" msgid "全身 stack" msgstr "全身栈" -#: ../../source/3-concepts/4-fsm_and_topics.md:5 -#: fc6d10c7a05544f38e586d07e7b186d1 -msgid "" -"Private package; extra states are in that README after access. Public " -"Python still uses the same `/fsm_command` integers plus `/mode_command` " -"strings" -msgstr "" -"私有软件包;额外状态见开通后的该 README。公开 Python 仍使用同一套 `/fsm_command` 整数以及 " -"`/mode_command` 字符串" - #: ../../source/3-concepts/4-fsm_and_topics.md:39 #: 72c3ab7247574667a861c0a2f725ffa2 msgid "" @@ -691,41 +681,6 @@ msgstr "" "`ocs2_wbc_controller/Ocs2WbcController` 时用 `full_body.launch.py`)。默认 mock" " 演示(`demo.launch.py`)和分体(`split_body.launch.py`)**并不表示**这些能力可用。" -#: ../../source/3-concepts/4-fsm_and_topics.md:95 -#: f3b3106e77584471bf4e391ff45513ac -msgid "" -"The controller is a **private** submodule; extra FSM states stay in that " -"README after access. Which constraints are live is machine-dependent " -"(`WbcCapability` in the [msgs README](https://github.com/fiveages-" -"sim/arms_ros2_control/blob/9a1da3ba3747b3042866422c2269c1d49bb02f48/command/arms_ros2_control_msgs/README.md):" -" mobile base, body relative, head 6D, midpoint gaze, …). Public Taku mock" -" uses `split_body.launch.py robot:=taku` (arm MPC + body/head " -"`basic_joint_controller` + `adaptive_gripper_controller`) — that is " -"**not** WBC. `full_body.launch.py robot:=taku` needs the private " -"`ocs2_wbc_controller` submodule; shipping " -"`config/ocs2/fixed_base_tcp.info` in the public description is not " -"enough. When that config and the private module are present, Taku full-" -"body default `headMode` is `HEAD_GAZE` (gaze on " -"`head_camera_mid_optical_frame`); `target_manager.yaml` has " -"`enable_head_control: false` so the head follows OCS2 rather than a " -"joint-space marker. Split-body still teleops the head through " -"`head_joint_controller`. Taku body-relative rest is around x≈−0.21, not " -"Bot2 `[0, 0.25]`. Head 6D tracking (`HEAD_TRACKING`) is only there when " -"the controller reports `head_tracking_ee_enabled`." -msgstr "" -"该控制器是**私有**子模块;额外 FSM 状态开通后见该仓库 README。哪些约束真正生效取决于机型([msgs " -"README](https://github.com/fiveages-" -"sim/arms_ros2_control/blob/9a1da3ba3747b3042866422c2269c1d49bb02f48/command/arms_ros2_control_msgs/README.md)" -" 中的 `WbcCapability`:移动底盘、身体相对、头部 6D、中点注视等)。公开的 Taku mock 使用 " -"`split_body.launch.py robot:=taku`(臂 MPC + 身体/头的 `basic_joint_controller`" -" + `adaptive_gripper_controller`)— **不是** WBC。`full_body.launch.py " -"robot:=taku` 需要私有 `ocs2_wbc_controller` 子模块;公开描述里有 " -"`config/ocs2/fixed_base_tcp.info` 并不够。当该配置和私有模块都在时,Taku 全身默认 `headMode` 是" -" `HEAD_GAZE`(注视 `head_camera_mid_optical_frame`);`target_manager.yaml` 里 " -"`enable_head_control: false`,因此头跟随 OCS2,而不是关节空间 marker。分体仍通过 " -"`head_joint_controller` 遥操头部。Taku 身体相对静止位大约在 x≈−0.21,不是 Bot2 的 `[0, " -"0.25]`。头部 6D 跟踪(`HEAD_TRACKING`)只有控制器报出 `head_tracking_ee_enabled` 时才有。" - #: ../../source/3-concepts/4-fsm_and_topics.md:98 #: 1c65b4f408f54b07a8112716084d85b2 #, # @@ -2408,3 +2363,50 @@ msgstr "" #~ msgid "Whole-body stack" #~ msgstr "全身栈" +#: ../../source/3-concepts/4-fsm_and_topics.md:5 +#: d540be30c6eb4d039ae17d6af6df2f3e +msgid "" +"Binary in `ros-jazzy-arms-ros2-control`. Extra states are in the source " +"README. Public Python still uses the same `/fsm_command` integers plus " +"`/mode_command` strings" +msgstr "" +"二进制在 `ros-jazzy-arms-ros2-control` 里。多出来的状态写在源码 README。公开的 Python 仍使用同一组 " +"`/fsm_command` 整数,外加 `/mode_command` 字符串。" + +#: ../../source/3-concepts/4-fsm_and_topics.md:95 +#: 4959e6efb0b6499aa84385c2fce768ee +msgid "" +"`ocs2_wbc_controller` runs from the `ros-jazzy-arms-ros2-control` deb. " +"Extra FSM states stay in the source README. Which constraints are live " +"depends on the robot (`WbcCapability` in the [msgs " +"README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/9a1da3ba3747b3042866422c2269c1d49bb02f48/command/arms_ros2_control_msgs/README.md):" +" mobile base, body relative, head 6D, midpoint gaze, …). Public Taku mock" +" uses `split_body.launch.py robot:=taku` (arm MPC + body/head " +"`basic_joint_controller` + `adaptive_gripper_controller`). That is not " +"WBC. `full_body.launch.py robot:=taku` needs `ocs2_wbc_controller` from " +"that deb or from a source checkout. Shipping " +"`config/ocs2/fixed_base_tcp.info` in the public description is not " +"enough. When that config and the controller are installed, Taku full-body" +" default `headMode` is `HEAD_GAZE` (gaze on " +"`head_camera_mid_optical_frame`); `target_manager.yaml` has " +"`enable_head_control: false` so the head follows OCS2 rather than a " +"joint-space marker. Split-body still teleops the head through " +"`head_joint_controller`. Taku body-relative rest is around x≈−0.21, not " +"Bot2 `[0, 0.25]`. Head 6D tracking (`HEAD_TRACKING`) is only there when " +"the controller reports `head_tracking_ee_enabled`." +msgstr "" +"`ocs2_wbc_controller` 从 `ros-jazzy-arms-ros2-control` 这个 deb 运行。多出来的 FSM " +"状态留在源码 README。哪些约束在生效取决于这台机器人([消息 README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/9a1da3ba3747b3042866422c2269c1d49bb02f48/command/arms_ros2_control_msgs/README.md)" +" 里的 `WbcCapability`:移动底盘、身体相对、头部 6D、中点注视等)。公开的 Taku mock 用 " +"`split_body.launch.py robot:=taku`(手臂 MPC + 身体/头部 " +"`basic_joint_controller` + `adaptive_gripper_controller`)。那不是 " +"WBC。`full_body.launch.py robot:=taku` 需要这个 deb 里的 " +"`ocs2_wbc_controller`,或一份源码检出。公开描述里带 `config/ocs2/fixed_base_tcp.info` " +"不够。配置和控制器都装上之后,Taku 全身模式默认 `headMode` 是 `HEAD_GAZE`(注视 " +"`head_camera_mid_optical_frame`);`target_manager.yaml` 里 " +"`enable_head_control: false`,头跟随 OCS2,而不是关节空间里的标记。分体模式仍通过 " +"`head_joint_controller` 遥操作头部。Taku 相对身体的静止位置大约在 x≈−0.21,不是 Bot2 的 `[0, " +"0.25]`。头部 6D 跟踪(`HEAD_TRACKING`)只在控制器报告 `head_tracking_ee_enabled` 时才有。" + diff --git a/locale/zh_CN/LC_MESSAGES/3-concepts/5-source_vs_deb.po b/locale/zh_CN/LC_MESSAGES/3-concepts/5-source_vs_deb.po index 6cac0c6..1a01b40 100644 --- a/locale/zh_CN/LC_MESSAGES/3-concepts/5-source_vs_deb.po +++ b/locale/zh_CN/LC_MESSAGES/3-concepts/5-source_vs_deb.po @@ -119,10 +119,6 @@ msgstr "" "[fiveages-sim/arms_ros2_control](https://github.com/fiveages-" "sim/arms_ros2_control/releases)" -#: ../../source/3-concepts/5-source_vs_deb.md e1d2e154b80b4cc2abdc1a43b0e39fb2 -msgid "Controllers (optional)" -msgstr "控制器(可选)" - #: ../../source/3-concepts/5-source_vs_deb.md:15 #: 481a00550a4247ea899fd872bb1daec9 msgid "" @@ -855,3 +851,32 @@ msgstr "ros2 pkg list | grep ocs2\n" #~ msgid "Shared components" #~ msgstr "共享组件" + + +#: ../../source/3-concepts/5-source_vs_deb.md 642b45f8a76740d89c2c2fdc9e401ec0 +msgid "" +"Controllers, including `ocs2_wbc_controller`, `ocs2_humanoid`, and " +"`lina_planning`" +msgstr "控制器,包括 `ocs2_wbc_controller`、`ocs2_humanoid` 和 `lina_planning`" + +#: ../../source/3-concepts/5-source_vs_deb.md:15 +#: 7c24077e093f4496aeabc51f5d8362a2 +msgid "" +"The standard arms package contains `ocs2_wbc_controller`, " +"`ocs2_humanoid`, and `lina_planning` ([arms deb notes](https://github.com" +"/fiveages-sim/arms_ros2_control/blob/main/README.deb.md)). " +"`./scripts/install_core_debs.sh --only arms` installs `ros-jazzy-arms-" +"ros2-control` and skips `ros-jazzy-arms-ros2-control-full`. You can run " +"those three libraries without cloning their private repositories. Cloning" +" is for reading or changing the source. Other private descriptions and " +"hardware interfaces are not in this package." +msgstr "" +"标准 arms 包里有 `ocs2_wbc_controller`、`ocs2_humanoid` 和 `lina_planning`([arms" +" 的 deb 说明](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md))。`./scripts/install_core_debs.sh" +" --only arms` 安装 `ros-jazzy-arms-ros2-control`,会跳过 `ros-jazzy-arms-ros2" +"-control-full`。这三个库不用克隆私有仓库也能运行。克隆是为了读源码或改源码。其他私有描述和驱动层不在这个包里。" + +#~ msgid "Controllers (optional)" +#~ msgstr "控制器(可选)" + diff --git a/locale/zh_CN/LC_MESSAGES/3-concepts/7-split_vs_wbc.po b/locale/zh_CN/LC_MESSAGES/3-concepts/7-split_vs_wbc.po index 86f09f7..133d685 100644 --- a/locale/zh_CN/LC_MESSAGES/3-concepts/7-split_vs_wbc.po +++ b/locale/zh_CN/LC_MESSAGES/3-concepts/7-split_vs_wbc.po @@ -151,15 +151,6 @@ msgstr "" "**OCS2 Arm Controller**(`ocs2_arm_controller`)— 机械臂 MPC 的 FSM:HOME / OCS2" " / HOLD(包 README)。" -#: ../../source/3-concepts/7-split_vs_wbc.md:18 -#: 48773177a72b4040a0745cdd70abfc36 -msgid "" -"**OCS2 WBC Controller** (`ocs2_wbc_controller`) — private submodule; 全身 " -"MPC. States and topics are in that package README after access." -msgstr "" -"**OCS2 WBC Controller**(`ocs2_wbc_controller`)— 私有子模块;全身 MPC。状态与话题见开通后该包 " -"README。" - #: ../../source/3-concepts/7-split_vs_wbc.md:20 #: e3d9ca79f63b4743aae27a9d93f1f9d3 #, # @@ -171,24 +162,35 @@ msgstr "" "FSM 命令取值、Action / Service 表以及 WBC 笛卡尔话题:[FSM " "与话题](4-fsm_and_topics.md)。控制器索引:[控制器参考](../4-reference/controllers/0-index.md)。" +#~ msgid "Packages (do not invent)" +#~ msgstr "软件包(不要编造)" + +#: ../../source/3-concepts/7-split_vs_wbc.md:18 +#: 526984333e7e4352b1c4506889758c9e +msgid "" +"**OCS2 WBC Controller** (`ocs2_wbc_controller`) — 全身 MPC. The binary is " +"in the `ros-jazzy-arms-ros2-control` deb. The private repository is the " +"source. States and topics that are only in that package README stay " +"there." +msgstr "" +"**OCS2 WBC 控制器**(`ocs2_wbc_controller`):全身 MPC。二进制在 `ros-jazzy-arms-" +"ros2-control` 这个 deb 里。私有仓库是源码。只写在那个包 README 里的状态和话题,仍以那份 README 为准。" + #: ../../source/3-concepts/7-split_vs_wbc.md:22 -#: 1854c36644c544558ea1b68dfbb50674 +#: 6f0bf73e1dad42098544a2bea0e498fb msgid "" "`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` " "need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default" " mock demos (`demo.launch.py`) and 分体 do **not** imply those features are" " present; capability bits are machine-dependent. Public Taku mock uses " "`split_body.launch.py robot:=taku`; `full_body.launch.py robot:=taku` " -"still needs the private `ocs2_wbc_controller` submodule (shipping " -"`config/ocs2/fixed_base_tcp.info` is not enough)." +"needs `ocs2_wbc_controller` from that deb or from a source checkout. " +"Shipping `config/ocs2/fixed_base_tcp.info` is not enough." msgstr "" -"`/body_target*`、`/head_target*`、`/mode_command` 以及 `WbcCurrentState` 需要 " -"**`ocs2_wbc_controller`** 以及该机型的全身启动/配置。默认 mock " -"演示(`demo.launch.py`)和分体**并不表示**这些能力可用;能力位取决于机型。公开的 Taku mock 使用 " -"`split_body.launch.py robot:=taku`;`full_body.launch.py robot:=taku` " -"仍需要私有 `ocs2_wbc_controller` 子模块(描述里有 `config/ocs2/fixed_base_tcp.info` " -"并不够)。" - -#~ msgid "Packages (do not invent)" -#~ msgstr "软件包(不要编造)" +"`/body_target*`、`/head_target*`、`/mode_command` 和 `WbcCurrentState` 需要 " +"**`ocs2_wbc_controller`**,以及这台机器人的全身 launch 和配置。默认 " +"mock(`demo.launch.py`)和分体不会带上这些功能;能力位取决于这台机器人。公开的 Taku mock 用 " +"`split_body.launch.py robot:=taku`;`full_body.launch.py robot:=taku` 需要这个" +" deb 里的 `ocs2_wbc_controller`,或一份源码检出。只带 " +"`config/ocs2/fixed_base_tcp.info` 不够。" diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/controllers/3-ocs2_wbc.po b/locale/zh_CN/LC_MESSAGES/4-reference/controllers/3-ocs2_wbc.po index f0554a7..36fe68a 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/controllers/3-ocs2_wbc.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/controllers/3-ocs2_wbc.po @@ -32,27 +32,6 @@ msgid "" "robots, using `ocs2_wheel_humanoid`." msgstr "全身 MPC — **全身控制**(`ocs2_wbc_controller`)— 面向轮式双臂,使用 `ocs2_wheel_humanoid`。" -#: ../../source/4-reference/controllers/3-ocs2_wbc.md:5 -#: a6cd5f663dd44c908d2d30ede52b1ab9 -msgid "Access Required" -msgstr "需要访问权限" - -#: ../../source/4-reference/controllers/3-ocs2_wbc.md:8 -#: 6800a55a98c1472e89eecf3b313d98d1 -msgid "" -"`controller/ocs2_wbc_controller` in " -"[arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control) is" -" the private submodule [ocs2-wbc-controller](https://github.com/fiveages-" -"sim/ocs2-wbc-controller). The link needs repository access. Topics, FSM " -"values, and launch names are in that package README after access. The in-" -"tree loader on the public side is `full_body.launch.py`." -msgstr "" -"[arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control) 里的" -" `controller/ocs2_wbc_controller` 是私有子模块 [ocs2-wbc-" -"controller](https://github.com/fiveages-sim/ocs2-wbc-" -"controller)。链接需要仓库权限。话题、FSM 取值和启动名在开通后见该包 README。公开侧的加载入口是 " -"`full_body.launch.py`。" - #: ../../source/4-reference/controllers/3-ocs2_wbc.md:11 #: 4b20573b389145d1adb66bd16ed7f77b msgid "Role" @@ -185,34 +164,6 @@ msgstr "" msgid "Whole-body (WBC) availability" msgstr "全身控制(WBC)可用性" -#: ../../source/4-reference/controllers/3-ocs2_wbc.md:43 -#: 67fbbd8585614478a1f6471918bd919c -msgid "" -"These topics need **`ocs2_wbc_controller`** and that robot’s 全身 " -"launch/config. Default mock demos (`demo.launch.py`) and 分体 " -"(`split_body.launch.py`) do **not** imply they are present. Capability " -"bits (`WbcCapability`) are machine-dependent. Public Taku mock uses " -"`split_body.launch.py robot:=taku` (arm MPC + body/head basic + " -"grippers), not WBC. `full_body.launch.py robot:=taku` needs the private " -"WBC submodule; shipping `config/ocs2/fixed_base_tcp.info` is not enough. " -"When that config and the private module are present, Taku full-body " -"default `headMode` is `HEAD_GAZE` (gaze on " -"`head_camera_mid_optical_frame`); `target_manager.yaml` has " -"`enable_head_control: false`. Head 6D tracking (`HEAD_TRACKING`) is only " -"there when `head_tracking_ee_enabled` is true. Taku body-relative rest is" -" around x≈−0.21, not Bot2 `[0, 0.25]`. Full tables: [FSM and " -"Topics](../../3-concepts/4-fsm_and_topics.md)." -msgstr "" -"这些话题需要 **`ocs2_wbc_controller`** 以及该机型的全身启动/配置。默认 mock " -"演示(`demo.launch.py`)和分体(`split_body.launch.py`)**并不表示**它们可用。能力位(`WbcCapability`)取决于机型。公开的" -" Taku mock 使用 `split_body.launch.py robot:=taku`(臂 MPC + 身体/头 basic + " -"夹爪),不是 WBC。`full_body.launch.py robot:=taku` 需要私有 WBC 子模块;描述里有 " -"`config/ocs2/fixed_base_tcp.info` 并不够。当该配置和私有模块都在时,Taku 全身默认 `headMode` 是" -" `HEAD_GAZE`(注视 `head_camera_mid_optical_frame`);`target_manager.yaml` 里 " -"`enable_head_control: false`。头部 6D 跟踪(`HEAD_TRACKING`)只有 " -"`head_tracking_ee_enabled` 为真时才有。Taku 身体相对静止位大约在 x≈−0.21,不是 Bot2 的 `[0, " -"0.25]`。完整表格:[FSM 与话题](../../3-concepts/4-fsm_and_topics.md)。" - #: ../../source/4-reference/controllers/3-ocs2_wbc.md:46 #: 72fd2893685f4c19b76c92f3096fa724 msgid "Related" @@ -573,3 +524,95 @@ msgstr "[分体控制 vs 全身控制](../../3-concepts/7-split_vs_wbc.md)" #~ msgid "Do not treat `split_body.launch.py` as whole-body control." #~ msgstr "不要把 `split_body.launch.py` 当成全身控制。" +#: ../../source/4-reference/controllers/3-ocs2_wbc.md:5 +#: a2540d3745b8480ea827a35b78182467 +msgid "Run the deb, clone the source to edit it" +msgstr "用 deb 运行,要改代码再克隆源码" + +#: ../../source/4-reference/controllers/3-ocs2_wbc.md:8 +#: f02af7f427154064a18e4c7cd2cfb3c6 +msgid "" +"You can run `ocs2_wbc_controller` without opening the private repository." +" It ships in the GitHub Release package `ros-jazzy-arms-ros2-control`, " +"together with `ocs2_humanoid` and `lina_planning` ([arms deb " +"notes](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md)). In `open-deploy-ws` or " +"`fa-deploy-ws`, choose `d` for arms in `./init_repo.sh`, or run " +"`./scripts/install_core_debs.sh --only arms`. That script installs the " +"standard package. It does not install `ros-jazzy-arms-ros2-control-full`," +" and the package is not on Ubuntu or ROS apt." +msgstr "" +"运行 `ocs2_wbc_controller` 不必打开私有仓库。它在 GitHub Release 包 `ros-jazzy-arms-" +"ros2-control` 里,一起的还有 `ocs2_humanoid` 和 `lina_planning`([arms 的 deb " +"说明](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/README.deb.md))。在 `open-deploy-ws` 或 `fa-" +"deploy-ws` 里,`./init_repo.sh` 给 arms 选 `d`,或运行 " +"`./scripts/install_core_debs.sh --only arms`。脚本装的是标准包,不会装 `ros-jazzy-" +"arms-ros2-control-full`,也不在 Ubuntu 或 ROS 的 apt 源里。" + +#: ../../source/4-reference/controllers/3-ocs2_wbc.md:10 +#: 6800a55a98c1472e89eecf3b313d98d1 +msgid "" +"[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-" +"controller) is the source checkout under `controller/ocs2_wbc_controller`" +" in [arms_ros2_control](https://github.com/fiveages-" +"sim/arms_ros2_control). Open it when you need to read or change the " +"source. Topics and FSM values that are only written in that README stay " +"there. The public loader is `full_body.launch.py`." +msgstr "" +"[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-" +"controller) 是 [arms_ros2_control](https://github.com/fiveages-" +"sim/arms_ros2_control) 里 `controller/ocs2_wbc_controller` " +"的源码检出。要读源码或改源码时再打开它。只写在那份 README 里的话题和 FSM 取值,仍以那份 README 为准。公开侧的加载入口是 " +"`full_body.launch.py`。" + +#: ../../source/4-reference/controllers/3-ocs2_wbc.md:45 +#: 67fbbd8585614478a1f6471918bd919c +msgid "" +"These topics need `ocs2_wbc_controller` and that robot’s 全身 launch and " +"config. `demo.launch.py` and 分体 (`split_body.launch.py`) do not start " +"them. Capability bits (`WbcCapability`) depend on the robot. Public Taku " +"mock uses `split_body.launch.py robot:=taku` (arm MPC, body and head " +"basic controllers, and grippers). `full_body.launch.py robot:=taku` needs" +" `ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or " +"from a source checkout. Shipping `config/ocs2/fixed_base_tcp.info` is not" +" enough. With that config and the controller installed, Taku full-body " +"default `headMode` is `HEAD_GAZE` (gaze on " +"`head_camera_mid_optical_frame`), and `target_manager.yaml` has " +"`enable_head_control: false`. Head 6D tracking (`HEAD_TRACKING`) is there" +" when `head_tracking_ee_enabled` is true. Taku’s body-relative rest is " +"around x≈−0.21, not Bot2 `[0, 0.25]`. Full tables: [FSM and " +"Topics](../../3-concepts/4-fsm_and_topics.md)." +msgstr "" +"这些话题需要 `ocs2_wbc_controller`,以及这台机器人的全身 launch 和配置。`demo.launch.py` " +"和分体(`split_body.launch.py`)不会启动它们。能力位(`WbcCapability`)取决于这台机器人。公开的 Taku " +"mock 用 `split_body.launch.py robot:=taku`(手臂 " +"MPC、身体和头部的基础控制器,以及夹爪)。`full_body.launch.py robot:=taku` 需要 `ros-jazzy-" +"arms-ros2-control` 这个 deb 里的 `ocs2_wbc_controller`,或一份源码检出。只带 " +"`config/ocs2/fixed_base_tcp.info` 不够。配置和控制器都装上之后,Taku 全身模式默认 `headMode` 是" +" `HEAD_GAZE`(注视 `head_camera_mid_optical_frame`),`target_manager.yaml` 里 " +"`enable_head_control: false`。`head_tracking_ee_enabled` 为真时才有头部 6D " +"跟踪(`HEAD_TRACKING`)。Taku 相对身体的静止位置大约在 x≈−0.21,不是 Bot2 的 `[0, 0.25]`。完整表见 " +"[FSM 与话题](../../3-concepts/4-fsm_and_topics.md)。" + +#~ msgid "Access Required" +#~ msgstr "需要访问权限" + +#~ msgid "" +#~ "`controller/ocs2_wbc_controller` in " +#~ "[arms_ros2_control](https://github.com/fiveages-" +#~ "sim/arms_ros2_control) is the private " +#~ "submodule [ocs2-wbc-controller](https://github.com" +#~ "/fiveages-sim/ocs2-wbc-controller). The link " +#~ "needs repository access. Topics, FSM " +#~ "values, and launch names are in " +#~ "that package README after access. The" +#~ " in-tree loader on the public " +#~ "side is `full_body.launch.py`." +#~ msgstr "" +#~ "[arms_ros2_control](https://github.com/fiveages-" +#~ "sim/arms_ros2_control) 里的 `controller/ocs2_wbc_controller`" +#~ " 是私有子模块 [ocs2-wbc-controller](https://github.com" +#~ "/fiveages-sim/ocs2-wbc-controller)。链接需要仓库权限。话题、FSM " +#~ "取值和启动名在开通后见该包 README。公开侧的加载入口是 `full_body.launch.py`。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/controllers/8-ros2_parameters.po b/locale/zh_CN/LC_MESSAGES/4-reference/controllers/8-ros2_parameters.po index 0e77699..669a051 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/controllers/8-ros2_parameters.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/controllers/8-ros2_parameters.po @@ -1582,19 +1582,6 @@ msgstr "是否启用 VR 处理。Launch YAML 会覆盖 C++ 默认值" msgid "OCS2 WBC Controller" msgstr "OCS2 WBC Controller" -#: ../../source/4-reference/controllers/8-ros2_parameters.md:212 -#: 0606e2554b394e3faaf16a567ecff353 -msgid "" -"`controller/ocs2_wbc_controller` is a **private** submodule. Parameter " -"names after access: that package README. Public launch: `ros2 launch " -"ocs2_arm_controller full_body.launch.py` — [OCS2 WBC " -"Controller](3-ocs2_wbc.md). Extra frame `body_frame` is **Startup only** " -"per the target-manager notes in #120." -msgstr "" -"`controller/ocs2_wbc_controller` 是**私有**子模块。开通后的参数名见该包 README。公开启动:`ros2 " -"launch ocs2_arm_controller full_body.launch.py` — [OCS2 WBC " -"Controller](3-ocs2_wbc.md)。额外坐标系 `body_frame` 按 #120 的 target-manager 说明为" - #: ../../source/4-reference/controllers/8-ros2_parameters.md:214 #: 101f047176404978b78082b8305a6089 msgid "" @@ -2194,3 +2181,19 @@ msgstr "[FSM 与话题](../../3-concepts/4-fsm_and_topics.md)" #~ "`body_frame`)见上方 OCS2 表;它们属于**控制器**节点,不是这个 marker" #~ " 节点。" +#: ../../source/4-reference/controllers/8-ros2_parameters.md:211 +#: 0d7c41cab81e4e589523f5c9e253407a +msgid "" +"`ocs2_wbc_controller` runs from the `ros-jazzy-arms-ros2-control` deb. " +"Parameter names that are only in the source README stay in [ocs2-wbc-" +"controller](https://github.com/fiveages-sim/ocs2-wbc-controller). Public " +"launch: `ros2 launch ocs2_arm_controller full_body.launch.py` — [OCS2 WBC" +" Controller](3-ocs2_wbc.md). Extra frame `body_frame` is **Startup only**" +" per the target-manager notes in #120." +msgstr "" +"`ocs2_wbc_controller` 从 `ros-jazzy-arms-ros2-control` 这个 deb 运行。只在源码 " +"README 里的参数名,见 [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2" +"-wbc-controller)。公开 launch:`ros2 launch ocs2_arm_controller " +"full_body.launch.py`,见 [OCS2 WBC 控制器](3-ocs2_wbc.md)。额外坐标系 `body_frame` 按" +" #120 里目标管理器的说明,**仅启动时**生效。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/0-index.po b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/0-index.po index 4869f74..6e587d6 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/0-index.po @@ -37,16 +37,6 @@ msgstr "本节介绍机器人描述软件包——URDF/xacro 模型、网格模 msgid "Terminology" msgstr "术语" -#: ../../source/4-reference/descriptions/0-index.md:8 -#: 20678e2a5a09496e88c35f6bcf76f61d -msgid "" -"FiveAges **humanoid** descriptions (W1, W2, W2R, S2, S2R, WCE3) are " -"**wheeled-arm humanoids** (mobile base + arms). They are **not** bipedal " -"or footed humanoids." -msgstr "" -"FiveAges 的 **humanoid / 人形** 描述(W1、W2、W2R、S2、S2R、WCE3)是 **轮臂人形**(移动底盘 + " -"臂),**不是** 双足或足式人形。" - #: ../../source/4-reference/descriptions/0-index.md:11 #: 705e833500ba4473bc43474fdb57af8b msgid "Overview" @@ -142,16 +132,6 @@ msgstr "越疆、方舟无限、银河通用、高擎" msgid "[FiveAges descriptions](4-fiveages_umbrella.md)" msgstr "[FiveAges 描述](4-fiveages_umbrella.md)" -#: ../../source/4-reference/descriptions/0-index.md:25 -#: 0e0422cd855b411191b2e6e1e61dea2e -msgid "`humanoid/FiveAges/*` URDF gitlinks + Gen1/2/3 USD" -msgstr "`humanoid/FiveAges/*` 的 URDF gitlink + Gen1/2/3 USD" - -#: ../../source/4-reference/descriptions/0-index.md:25 -#: c87ee5ee7bd24011bd263aecd1c0afb0 -msgid "Public W1/W2/S2 + components + Gen1/Gen2 USD; W2R, S2R, Gen3 still private" -msgstr "公开:W1/W2/S2 + 组件 + Gen1/Gen2 USD;W2R、S2R、Gen3 仍为私有" - #: ../../source/4-reference/descriptions/0-index.md:25 #: 1459f5fc04434fc3adad021d3dbd6468 msgid "[Vendor arms](6-vendor_arms.md)" @@ -229,3 +209,20 @@ msgstr "公开远端 + 私有远端" #~ msgid "Private" #~ msgstr "私有" +#: ../../source/4-reference/descriptions/0-index.md:8 +#: 8a5d013b3c894371b4386b73061909ce +msgid "" +"FiveAges humanoid descriptions in this set (W1, W2, W2R, S2, S2R) are " +"wheeled-arm robots: a mobile base plus arms. They are not bipeds." +msgstr "本文档里的第五纪人形描述(W1、W2、W2R、S2、S2R)是轮臂机器人:移动底盘加上手臂。不是双足。" + +#: ../../source/4-reference/descriptions/0-index.md:25 +#: edfb624921aa47f597f0ec416fbb7263 +msgid "`humanoid/FiveAges/*` URDF gitlinks + Gen1/Gen2 USD" +msgstr "`humanoid/FiveAges/*` 的 URDF gitlink,外加 Gen1/Gen2 USD" + +#: ../../source/4-reference/descriptions/0-index.md:25 +#: eb491511159d41338b04972511eed34e +msgid "Public W1/W2/S2 + components + Gen1/Gen2 USD; W2R and S2R still private" +msgstr "公开的 W1/W2/S2、组件,以及 Gen1/Gen2 USD;W2R 和 S2R 仍私有" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/1-robot_descriptions.po b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/1-robot_descriptions.po index f1ab5ba..3450842 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/1-robot_descriptions.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/1-robot_descriptions.po @@ -379,23 +379,6 @@ msgid "" "humanoids. Brand folders are those listed there." msgstr "README 还用表格列出了**仓内**轮式人形、移动操作臂、操作臂(含上面的高擎 Panthera HT 路径)和足式人形。品牌目录以该表为准。" -#: ../../source/4-reference/descriptions/1-robot_descriptions.md:54 -#: eb0b8ef40154475bb4129b2bf6cb4975 -msgid "" -"FiveAges URDF packages are gitlinks under `humanoid/FiveAges/` in " -"[`.gitmodules`](https://github.com/fiveages-" -"sim/robot_descriptions/blob/main/.gitmodules). They are **not** in the " -"README brand tables and are **not** a separate `robot-descriptions-" -"fiveages` umbrella. **Public:** W1, W2, S2, `fa-w2-components`. **Still " -"private:** **W2R**, **S2R** (not open yet), Gen3. Paths and remotes: " -"[FiveAges robot descriptions](4-fiveages_umbrella.md)." -msgstr "" -"FiveAges 的 URDF 包是[`.gitmodules`](https://github.com/fiveages-" -"sim/robot_descriptions/blob/main/.gitmodules)里 `humanoid/FiveAges/`下的 " -"gitlink。它们**不在** README 品牌表中,也**不是**独立的`robot-descriptions-" -"fiveages`伞形仓。**公开:**W1、W2、S2、`fa-w2-components`。**仍为私有:****W2R**、**S2R**(尚未开放)、Gen3。路径与远端:[FiveAges" -" 机器人描述](4-fiveages_umbrella.md)。" - #: ../../source/4-reference/descriptions/1-robot_descriptions.md:56 #: ffa80fc2bd904e19928c660aa9adc0d1 msgid "" @@ -637,3 +620,20 @@ msgstr "[添加机器人](../../2-how_to/6-deployment/10-add_a_robot.md)" #~ "[agibot-g2-description](https://github.com/fiveages-" #~ "sim/agibot-g2-description) (private)" +#: ../../source/4-reference/descriptions/1-robot_descriptions.md:54 +#: fe415ed06fbf4fc6b171fd69a8c7003c +msgid "" +"FiveAges URDF packages are gitlinks under `humanoid/FiveAges/` in " +"[`.gitmodules`](https://github.com/fiveages-" +"sim/robot_descriptions/blob/main/.gitmodules). They are not in the README" +" brand tables, and there is no separate `robot-descriptions-fiveages` " +"umbrella. **Public:** W1, W2, S2, `fa-w2-components`. **Still private:** " +"**W2R** and **S2R**. Paths and remotes: [FiveAges robot " +"descriptions](4-fiveages_umbrella.md)." +msgstr "" +"第五纪的 URDF 包是 [`.gitmodules`](https://github.com/fiveages-" +"sim/robot_descriptions/blob/main/.gitmodules) 里 `humanoid/FiveAges/` 下的 " +"gitlink。它们不在 README 的品牌表里,也没有单独的 `robot-descriptions-fiveages` " +"伞形仓。**公开:** W1、W2、S2、`fa-w2-components`。**仍私有:** **W2R** 和 **S2R**。路径和远端见" +" [第五纪机器人描述](4-fiveages_umbrella.md)。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/3-brand_public.po b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/3-brand_public.po index f3060f7..28cea24 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/3-brand_public.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/3-brand_public.po @@ -93,14 +93,9 @@ msgid "HighTorque, Panthera" msgstr "HighTorque、Panthera" #: ../../source/4-reference/descriptions/3-brand_public.md -#: 8ef67afa036f4c0b83c2768a22851158 -msgid "中科第五纪" -msgstr "中科第五纪" - -#: ../../source/4-reference/descriptions/3-brand_public.md -#: be0a2d86e9014545ba1f576611d088aa +#: 3be14a5436c24b23a17d62cedc5c2a2b msgid "FiveAges" -msgstr "中科第五纪" +msgstr "第五纪" #: ../../source/4-reference/descriptions/3-brand_public.md #: 721a49efcd2c488690043f2294a057af @@ -766,3 +761,8 @@ msgstr "" #~ msgid "**Arm only**" #~ msgstr "**仅机械臂**" +#: ../../source/4-reference/descriptions/3-brand_public.md +#: 064fa1f6237e428fbd6f7b8cf61d88b0 +msgid "第五纪" +msgstr "第五纪" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/4-fiveages_umbrella.po b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/4-fiveages_umbrella.po index 03eea40..c1fcfce 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/4-fiveages_umbrella.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/descriptions/4-fiveages_umbrella.po @@ -25,13 +25,6 @@ msgstr "" msgid "FiveAges robot descriptions" msgstr "FiveAges 机器人描述" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:3 -#: 75b031eae4fe4ca18f296bb536e9d428 -msgid "" -"One page for FiveAges (中科第五纪) wheeled-arm humanoid **URDF** packages and " -"their **USD** mapping." -msgstr "中科第五纪轮臂人形 **URDF** 包及其 **USD** 对照的单页。" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:5 #: f1c2031ee6f14d74a5c146c3cfd0dd78 msgid "Public now (Gen1 W1 + Gen2 W2 / S2 + components + USD)" @@ -85,28 +78,6 @@ msgstr "Launch 名和 xacro 细节见那些**公开包 README**。没有 `open-d msgid "Still private — W2R and S2R are not open" msgstr "仍为私有 — W2R 与 S2R 尚未开放" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:19 -#: 9db3791d04bd44e985417238fbd8616d -msgid "" -"These remotes need repository access (without it, GitHub does not open " -"the page): **W2R** ([fa-w2r-description](https://github.com/fiveages-sim" -"/fa-w2r-description)), **S2R** ([fa-s2r-description](https://github.com" -"/fiveages-sim/fa-s2r-description)), **Gen3** ([fa-" -"wce3-description](https://github.com/fiveages-sim/fa-wce3-description), " -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)), and [fa-deploy-ws](https://github.com/fiveages-sim/fa-" -"deploy-ws). There is **no** public `robot-descriptions-fiveages` " -"umbrella. After access, follow **those package READMEs**." -msgstr "" -"这些远程仓库需要权限(没有权限时 GitHub 打不开页面):**W2R**([fa-w2r-" -"description](https://github.com/fiveages-sim/fa-w2r-description))、**S2R" -"**([fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-" -"description))、**Gen3**([fa-wce3-description](https://github.com/fiveages-" -"sim/fa-wce3-description)、[fiveages-gen3-robot-usds](https://github.com" -"/fiveages-sim/fiveages-gen3-robot-usds)),以及 [fa-deploy-" -"ws](https://github.com/fiveages-sim/fa-deploy-ws)。没有公开的 `robot-" -"descriptions-fiveages` 伞仓。开通后按**那些包的 README** 操作。" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 #: 4af44c08ae0c44b6b60d6e0c31665fd1 msgid "Source of truth" @@ -182,13 +153,6 @@ msgstr "" "Public launch / `hardware:=`: [robot_common_launch](2-common.md) " "(`mock_components` / `gz` / `isaac` / `isaac_sim` / `real`)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:33 -#: c4310296372542bea618102c56aeb175 -msgid "" -"FiveAges **humanoid** platforms in this docs set (W1, W2, W2R, S2, S2R, " -"WCE3) are **wheeled-arm humanoids** (mobile base + arms), not bipedal." -msgstr "本文档里的 FiveAges **人形**平台(W1、W2、W2R、S2、S2R、WCE3)是**轮臂人形**(底盘 + 臂),不是双足。" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:35 #: c676b51091274557aec6d940b3c5f374 msgid "URDF packages (`robot_descriptions`)" @@ -229,13 +193,6 @@ msgstr "" " 复用天机 `m6_ccs_description`([robot-descriptions-tianji](https://github.com" "/fiveages-sim/robot-descriptions-tianji))。这些厂商远端已**公开**。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:41 -#: 29f1d4720de7487db9699732b4178503 -msgid "" -"**Still private remotes** (**W2R**, **S2R**, Gen3): 404 without access. " -"**W2R and S2R are not open yet.**" -msgstr "**仍为私有的远端**(**W2R**、**S2R**、Gen3):无权限 404。**W2R 与 S2R 尚未开放。**" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:43 #: c62971f06f9f45dcb1d6245662e8484d msgid "" @@ -366,20 +323,6 @@ msgstr "`fiveages_w2_common_description`" msgid "[fa-w2-components](https://github.com/fiveages-sim/fa-w2-components)" msgstr "[fa-w2-components](https://github.com/fiveages-sim/fa-w2-components)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:55 -#: 6607de652d1f4227b0aac175ad0e20e5 -msgid "" -"`main` has **no** `fiveages_s2r_description` and **no** " -"`fiveages_wce3_description` gitlink." -msgstr "" -"`main` **没有** `fiveages_s2r_description`,也**没有** " -"`fiveages_wce3_description` gitlink。" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:57 -#: 488e5d5ed5fb46a0b2f6e04f7b7014ab -msgid "`feature/agilex` (grouped like USD: Gen1 / Gen2 / Gen3)" -msgstr "`feature/agilex`(按 USD 一样分代:Gen1 / Gen2 / Gen3)" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 #: b2cb839e4c2e4aa1a415aab0cc87f828 msgid "Gen" @@ -437,38 +380,6 @@ msgstr "[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) msgid "`humanoid/FiveAges/Gen2/fiveages_w2_common_description`" msgstr "`humanoid/FiveAges/Gen2/fiveages_w2_common_description`" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: f7d8538bd7954a00b5668c40d0ca978c -msgid "Gen3" -msgstr "Gen3" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 0c6f0a7d79e3424dba8c97736d69d0c1 -msgid "`humanoid/FiveAges/Gen3/fiveages_wce3_description`" -msgstr "`humanoid/FiveAges/Gen3/fiveages_wce3_description`" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 64920d84786a42f386bdb248b38b501c -msgid "`fiveages_wce3_description`" -msgstr "`fiveages_wce3_description`" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 7b6a51885337471298302296c5a28bfd -msgid "[fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description)" -msgstr "[fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description)" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 1dd1330bb41442c593ec9c9d538c3021 4ddcf852c51c4d1b8890b65274e5c86e -msgid "Private" -msgstr "私有" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:69 -#: e2ea987d2d9c4765908b4a503de614aa -msgid "" -"`feature/agilex` adds Gen2 **W2R** and **S2R** gitlinks; those remotes " -"stay private." -msgstr "`feature/agilex` 增加了 Gen2 **W2R** 与 **S2R** gitlink;这些远端仍为私有。" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:71 #: b999c7b28b4c43e59ae3cd83baacfaee msgid "" @@ -545,25 +456,6 @@ msgstr "" msgid "W2 / S2 / Gen2 (`W2/`, `S2/`, `components/`)" msgstr "W2 / S2 / Gen2(`W2/`、`S2/`、`components/`)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 3e3f8fe280ad42789d98007fa8b57f82 -msgid "`humanoid/FiveAges/Gen3`" -msgstr "`humanoid/FiveAges/Gen3`" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 6ae63c06c5154d2db8db6ad65f01c906 -msgid "" -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)" -msgstr "" -"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" -"-robot-usds)" - -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: e8898926c0634af6bbebec9055bc1ba9 -msgid "WCE3 / Gen3" -msgstr "WCE3 / Gen3" - #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:83 #: 957c575f168549bb95b1c9943f8fe53f msgid "Gen2 USD is **W2 and S2** only. It does **not** publish W2R or S2R." @@ -966,32 +858,84 @@ msgstr "[WBC 控制器](../controllers/3-ocs2_wbc.md)" #~ " **`./run.sh`**。见 " #~ "[robot_usds](../simulation/3-robot_usds.md)。" -#~ msgid "" -#~ "These remotes are **not** public (GitHub" -#~ " 404 without access): **W2R** (`fa-" -#~ "w2r-description`), **S2R** (`fa-s2r-" -#~ "description`), **Gen3** (`fa-wce3-description`, " -#~ "`fiveages-gen3-robot-usds`), and `fa-" -#~ "deploy-ws`. There is **no** public " -#~ "`robot-descriptions-fiveages` umbrella. Contact" -#~ " your team lead. After access, follow" -#~ " **those package READMEs**." -#~ msgstr "" -#~ "这些远端**尚未公开**(无权限 GitHub404):**W2R**(`fa-w2r-" -#~ "description`)、**S2R**(`fa-s2r-description`)、**Gen3" -#~ "**(`fa-wce3-description`、`fiveages-gen3-robot-usds`),以及" -#~ "`fa-deploy-ws`。**没有**公开的 `robot-descriptions-" -#~ "fiveages`伞形仓。请联系组长开通。开通后以**那些包README** 为准。" - #~ msgid "`fa-w2r-description`" #~ msgstr "`fa-w2r-description`" #~ msgid "`fa-s2r-description`" #~ msgstr "`fa-s2r-description`" -#~ msgid "`fa-wce3-description`" -#~ msgstr "`fa-wce3-description`" +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:3 +#: e3ac778f5362458ba0bab1cca73b4723 +msgid "URDF packages and USD mapping for FiveAges (第五纪) wheeled-arm robots." +msgstr "第五纪轮臂机器人的 URDF 包和 USD 对照。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:19 +#: 9db3791d04bd44e985417238fbd8616d +msgid "" +"These remotes need repository access. Without it, GitHub does not open " +"the page: **W2R** ([fa-w2r-description](https://github.com/fiveages-sim" +"/fa-w2r-description)), **S2R** ([fa-s2r-description](https://github.com" +"/fiveages-sim/fa-s2r-description)), and [fa-deploy-ws](https://github.com" +"/fiveages-sim/fa-deploy-ws). There is no public `robot-descriptions-" +"fiveages` umbrella. After you can open a repository, follow that package " +"README." +msgstr "" +"这些远端需要仓库权限。没有权限时 GitHub 打不开页面:**W2R**([fa-w2r-" +"description](https://github.com/fiveages-sim/fa-w2r-description))、**S2R" +"**([fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-" +"description)),以及 [fa-deploy-ws](https://github.com/fiveages-sim/fa-" +"deploy-ws)。没有公开的 `robot-descriptions-fiveages` 伞形仓。能打开仓库之后,按那个包的 README " +"做。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:33 +#: c4310296372542bea618102c56aeb175 +msgid "" +"FiveAges platforms in this docs set (W1, W2, W2R, S2, S2R) are wheeled-" +"arm robots: a mobile base plus arms. They are not bipeds." +msgstr "本文档里的第五纪平台(W1、W2、W2R、S2、S2R)是轮臂机器人:移动底盘加上手臂。不是双足。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:41 +#: a0b38df6395f4d49bce2075853b0cf9d +msgid "" +"**W2R** and **S2R** stay private. Without access, GitHub does not open " +"those pages. They are not open yet." +msgstr "**W2R** 和 **S2R** 仍是私有的。没有权限时 GitHub 打不开这些页面。它们还没有公开。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:55 +#: 6607de652d1f4227b0aac175ad0e20e5 +msgid "`main` has no `fiveages_s2r_description` gitlink." +msgstr "`main` 上没有 `fiveages_s2r_description` 这个 gitlink。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:57 +#: 488e5d5ed5fb46a0b2f6e04f7b7014ab +msgid "`feature/agilex` (grouped like the USD tree: Gen1 / Gen2)" +msgstr "`feature/agilex`(和 USD 树一样按 Gen1 / Gen2 分组)" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:68 +#: e2ea987d2d9c4765908b4a503de614aa +msgid "" +"`feature/agilex` adds the Gen2 **W2R** and **S2R** gitlinks. Those " +"remotes stay private." +msgstr "`feature/agilex` 增加了 Gen2 的 **W2R** 和 **S2R** gitlink。这些远端仍是私有的。" + +#~ msgid "" +#~ "One page for FiveAges (中科第五纪) " +#~ "wheeled-arm humanoid **URDF** packages and" +#~ " their **USD** mapping." +#~ msgstr "中科第五纪轮臂人形 **URDF** 包及其 **USD** 对照的单页。" + +#~ msgid "" +#~ "**Still private remotes** (**W2R**, **S2R**," +#~ " Gen3): 404 without access. **W2R and" +#~ " S2R are not open yet.**" +#~ msgstr "**仍为私有的远端**(**W2R**、**S2R**、Gen3):无权限 404。**W2R 与 S2R 尚未开放。**" + +#~ msgid "Gen3" +#~ msgstr "Gen3" + +#~ msgid "Private" +#~ msgstr "私有" -#~ msgid "`fiveages-gen3-robot-usds`" -#~ msgstr "`fiveages-gen3-robot-usds`" +#~ msgid "`humanoid/FiveAges/Gen3`" +#~ msgstr "`humanoid/FiveAges/Gen3`" diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/1-ros2_robot_interface.po b/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/1-ros2_robot_interface.po index ca72e8f..8226de1 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/1-ros2_robot_interface.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/1-ros2_robot_interface.po @@ -408,30 +408,6 @@ msgstr "WBC 约束快照;确认 `/mode_command`" msgid "Whole-body (WBC) availability" msgstr "全身控制(WBC)可用性" -#: ../../source/4-reference/python_apps/1-ros2_robot_interface.md:58 -#: 42f946fdfc1e45118185508f2b811716 -msgid "" -"`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` " -"need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default" -" mock demos (`demo.launch.py`) and 分体 (`split_body.launch.py`) do **not**" -" imply these features are present. The controller is a **private** " -"submodule; capability bits are machine-dependent (`WbcCapability`). " -"Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC + " -"body/head basic + grippers), not WBC. `full_body.launch.py robot:=taku` " -"needs the private WBC submodule; shipping " -"`config/ocs2/fixed_base_tcp.info` is not enough. When that config and the" -" private module are present, Taku full-body default `headMode` is " -"`HEAD_GAZE`. Details: [FSM and " -"Topics](../../3-concepts/4-fsm_and_topics.md)." -msgstr "" -"`/body_target*`、`/head_target*`、`/mode_command` 以及 `WbcCurrentState` 需要 " -"**`ocs2_wbc_controller`** 以及该机型的全身启动/配置。默认 mock " -"演示(`demo.launch.py`)和分体(`split_body.launch.py`)**并不表示**这些能力可用。该控制器是**私有**子模块;能力位取决于机型(`WbcCapability`)。公开的" -" Taku mock 使用 `split_body.launch.py robot:=taku`(臂 MPC + 身体/头 basic + " -"夹爪),不是 WBC。`full_body.launch.py robot:=taku` 需要私有 WBC 子模块;描述里有 " -"`config/ocs2/fixed_base_tcp.info` 并不够。当该配置和私有模块都在时,Taku 全身默认 `headMode` 是" -" `HEAD_GAZE`。细节:[FSM 与话题](../../3-concepts/4-fsm_and_topics.md)。" - #: ../../source/4-reference/python_apps/1-ros2_robot_interface.md:61 #: 61db6b77cda24f8a94534078c5d60c01 msgid "FSM and WBC mode" @@ -1727,3 +1703,30 @@ msgstr "" #~ msgid "Center of Mass" #~ msgstr "" +#: ../../source/4-reference/python_apps/1-ros2_robot_interface.md:58 +#: 8e622b1e98e641d8992a791e61a836c7 +msgid "" +"`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` " +"need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default" +" mock demos (`demo.launch.py`) and 分体 (`split_body.launch.py`) do **not**" +" imply these features are present. The controller runs from the `ros-" +"jazzy-arms-ros2-control` deb. Capability bits depend on the robot " +"(`WbcCapability`). Public Taku mock uses `split_body.launch.py " +"robot:=taku` (arm MPC, body and head basic controllers, and grippers). " +"That is not WBC. `full_body.launch.py robot:=taku` needs " +"`ocs2_wbc_controller` from that deb or from a source checkout. Shipping " +"`config/ocs2/fixed_base_tcp.info` is not enough. When that config and the" +" controller are installed, Taku full-body default `headMode` is " +"`HEAD_GAZE`. Details: [FSM and " +"Topics](../../3-concepts/4-fsm_and_topics.md)." +msgstr "" +"`/body_target*`、`/head_target*`、`/mode_command` 和 `WbcCurrentState` 需要 " +"**`ocs2_wbc_controller`**,以及这台机器人的全身 launch 和配置。默认 " +"mock(`demo.launch.py`)和分体(`split_body.launch.py`)不会带上这些功能。控制器从 `ros-" +"jazzy-arms-ros2-control` 这个 deb 运行。能力位取决于这台机器人(`WbcCapability`)。公开的 Taku " +"mock 用 `split_body.launch.py robot:=taku`(手臂 MPC、身体和头部的基础控制器,以及夹爪)。那不是 " +"WBC。`full_body.launch.py robot:=taku` 需要这个 deb 里的 " +"`ocs2_wbc_controller`,或一份源码检出。只带 `config/ocs2/fixed_base_tcp.info` " +"不够。配置和控制器都装上之后,Taku 全身模式默认 `headMode` 是 `HEAD_GAZE`。细节见 [FSM " +"与话题](../../3-concepts/4-fsm_and_topics.md)。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/4-lerobot_ros2.po b/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/4-lerobot_ros2.po index 4bfbe55..a1df084 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/4-lerobot_ros2.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/4-lerobot_ros2.po @@ -26,19 +26,6 @@ msgid "" " 2 topics." msgstr "LeRobot 与 ROS 2 的集成单体仓库。LeRobot 通过 ROS 2 话题与机器人通信。" -#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:5 -#: 9c9ba4de6e9048e58a58dd95b0776bb6 -msgid "" -"**Repository:** [fiveages-sim/lerobot_ros2](https://github.com/fiveages-" -"sim/lerobot_ros2) `main` (`f750af76`). `feature/sim-grasp-datagen` was " -"merged in [#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10) " -"(`147ea78d`, 2026-10-23) and is no longer a branch." -msgstr "" -"**仓库:** [fiveages-sim/lerobot_ros2](https://github.com/fiveages-" -"sim/lerobot_ros2) 的 `main`(`f750af76`)。`feature/sim-grasp-datagen` 已在 " -"[#10](https://github.com/fiveages-" -"sim/lerobot_ros2/pull/10)(`147ea78d`,2026-10-23)合入,该分支已不存在。" - #: ../../source/4-reference/python_apps/4-lerobot_ros2.md:7 #: 2fe7b9ef4b354471bbc422c7b6cfd8f0 msgid "" @@ -233,23 +220,6 @@ msgstr "`./init.sh set-backend uv`" msgid "Write `backend` in `.fa-env.toml` (`uv` or `conda`)" msgstr "写入 `.fa-env.toml` 中的 `backend`(`uv` 或 `conda`)" -#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:52 -#: 875fa5ce89294201967eb05d28339e2f -msgid "" -"Orchestration and dexterous grasp share one environment on NumPy 1.x so " -"they match ROS 2’s system OpenCV / `cv_bridge`. Recording and policy " -"inference install NumPy 2 for `lerobot` 0.5. Use a separate environment " -"for that step. `./init.sh install-lerobot` in the grasp environment " -"upgrades NumPy and then head-camera capture through `cv_bridge` no longer" -" matches the system build. Dexterous grasp is optional (the reference " -"robot is FiveAges W2 with Wuji Hand2). A robot without that grasp config " -"still runs `all-motion`." -msgstr "" -"编排和灵巧手抓取共用一个 NumPy 1.x 环境,以便和 ROS 2 的系统 OpenCV / `cv_bridge` 一致。录制和策略推理为 " -"`lerobot` 0.5 安装 NumPy 2。这一步用另一个环境。在抓取环境里执行 `./init.sh install-lerobot` " -"会把 NumPy 升上去,之后经 `cv_bridge` 采头相机就和系统编译版本对不上。灵巧手抓取是可选项(参考机型是五纪 W2 加 Wuji " -"Hand2)。没有这份抓取配置的机器人仍然跑 `all-motion`。" - #: ../../source/4-reference/python_apps/4-lerobot_ros2.md:54 #: 14b642f1c08e43f8bcb7608c33e693a0 msgid "" @@ -493,21 +463,6 @@ msgstr "" "Isaac Sim 6.0。本栈的版本菜单是 FaSim 的 `config/fa_sim.conf`(回退 `6.2.0` / `6.1.0` " "/ `6.0.1`)。" -#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:122 -#: 293b0fc5819d4db78f0baaa5651cb631 -msgid "" -"`motion-generation` runs in any directory that contains `robots/` or a " -"project `robot.yaml`. A [fa-project-usd](https://github.com/fiveages-sim" -"/fa-project-usd) project directory (private; needs access) can be that " -"workspace when `LEROBOT_ROOT` points at this checkout and `robot.yaml` " -"`extends` a profile under `examples/IsaacSim/robots/`. The public example" -" in that README is:" -msgstr "" -"`motion-generation` 可以在任何含 `robots/` 或项目 `robot.yaml` 的目录里运行。[fa-project-" -"usd](https://github.com/fiveages-sim/fa-project-usd) " -"的项目目录(私有,需要权限)可以当这个工作区:`LEROBOT_ROOT` 指向本检出,且 `robot.yaml` 的 `extends` 指向" -" `examples/IsaacSim/robots/` 下的一份配置。该 README 里的公开例子是:" - #: ../../source/4-reference/python_apps/4-lerobot_ros2.md:124 #: 6384c661c7a844a1aaaef642cf2a7833 msgid "" @@ -533,30 +488,6 @@ msgstr "" "`map/`)在 `fa-project-usd` 分支 `feature/sinopec-test-tube-picking` " "上,该分支领先于该仓库的 `main`。" -#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:132 -#: d739495a7d204c599c4f6dad7875cddd -#, python-brace-format -msgid "" -"Public G1D profile " -"[`examples/IsaacSim/robots/Unitree/G1D/robot.yaml`](https://github.com" -"/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml):" -" `ee_target_frame` is `{arm}_eef`, `ee_command_frame` is `{arm}_tcp`, and" -" there is no `ee_tip`. `ros2_stack.motion.required` is `false` with " -"`args.hardware: isaac`, because the scene USD already starts in-process " -"control on Play. That YAML `hardware: isaac` is the composer stack " -"preset. It is not the in-process plugin name `isaac_sim`. Leaving " -"`required: true` would start a second controller manager." -msgstr "" -"公开的 G1D 配置 " -"[`examples/IsaacSim/robots/Unitree/G1D/robot.yaml`](https://github.com" -"/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml):`ee_target_frame`" -" 是 `{arm}_eef`,`ee_command_frame` 是 `{arm}_tcp`,没有 " -"`ee_tip`。`ros2_stack.motion.required` 为 `false`,`args.hardware` 为 " -"`isaac`,因为场景 USD 在播放时已经拉起进程内运控。这份 YAML 里的 `hardware: isaac` " -"是编排器的栈预设,不是进程内插件名 `isaac_sim`。若把 `required` 留成 true,会再启动一套控制器管理器。" - #: ../../source/4-reference/python_apps/4-lerobot_ros2.md:134 #: ec94463b33aa4ea9ab8e0fb125335408 msgid "Camera plugin" @@ -739,3 +670,77 @@ msgstr "[wuji-retargeting](7-wuji_retargeting.md)" #~ " this branch." #~ msgstr "仿真抓取交接 / 末端对齐说明也在本分支的 `docs/SIM_GRASP_*.md`。" +#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:5 +#: 9c9ba4de6e9048e58a58dd95b0776bb6 +msgid "" +"**Repository:** [fiveages-sim/lerobot_ros2](https://github.com/fiveages-" +"sim/lerobot_ros2) `main` (`f750af76`). Simulation grasp datagen is on " +"this branch ([#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10)," +" `147ea78d`, 2026-10-23). There is no separate `feature/sim-grasp-" +"datagen` branch to check out." +msgstr "" +"**仓库:** [fiveages-sim/lerobot_ros2](https://github.com/fiveages-" +"sim/lerobot_ros2) 的 " +"`main`(`f750af76`)。仿真抓取数据生成在这个分支上([#10](https://github.com/fiveages-" +"sim/lerobot_ros2/pull/10),`147ea78d`,2026-10-23)。没有单独的 `feature/sim-" +"grasp-datagen` 分支可检出。" + +#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:52 +#: 875fa5ce89294201967eb05d28339e2f +msgid "" +"Keep orchestration and dexterous grasp in one environment on NumPy 1.x. " +"That matches the OpenCV and `cv_bridge` that come with ROS 2. Recording " +"and policy inference use NumPy 2 because `lerobot` 0.5 does. Put that " +"step in a second environment. If you run `./init.sh install-lerobot` " +"inside the grasp environment, NumPy moves to 2 and head-camera frames " +"through `cv_bridge` no longer match the system build. Dexterous grasp is " +"optional. The reference robot for it is FiveAges W2 with Wuji Hand2. A " +"robot that has no grasp config still uses `all-motion`." +msgstr "" +"编排和灵巧手抓取放在同一个环境里,NumPy 保持 1.x,这样才和 ROS 2 自带的 OpenCV、`cv_bridge` " +"一致。录制和策略推理用 NumPy 2,因为 `lerobot` 0.5 需要它。这一步放到另一个环境。如果在抓取环境里运行 `./init.sh" +" install-lerobot`,NumPy 会升到 2,之后经 `cv_bridge` " +"采的头相机帧就和系统编译版本对不上。灵巧手抓取是可选项。参考机型是第五纪 W2 加 Wuji Hand2。没有这套抓取配置的机器人仍然用 " +"`all-motion`。" + +#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:122 +#: 293b0fc5819d4db78f0baaa5651cb631 +msgid "" +"`motion-generation` runs in any directory that contains `robots/` or a " +"project `robot.yaml`. A [fa-project-usd](https://github.com/fiveages-sim" +"/fa-project-usd) project directory can be that workspace when you can " +"open the repository, `LEROBOT_ROOT` points at this checkout, and " +"`robot.yaml` `extends` a profile under `examples/IsaacSim/robots/`. The " +"public example in that README is:" +msgstr "" +"`motion-generation` 可以在任何包含 `robots/` 或项目 `robot.yaml` 的目录里跑。你能打开 [fa-" +"project-usd](https://github.com/fiveages-sim/fa-project-usd) 时,只要 " +"`LEROBOT_ROOT` 指向这次检出,并且 `robot.yaml` 用 `extends` 指向 " +"`examples/IsaacSim/robots/` 下的一份配置,项目目录就可以当工作区。该 README 里的公开例子是:" + +#: ../../source/4-reference/python_apps/4-lerobot_ros2.md:132 +#: d739495a7d204c599c4f6dad7875cddd +#, python-brace-format +msgid "" +"The public G1D profile " +"[`examples/IsaacSim/robots/Unitree/G1D/robot.yaml`](https://github.com" +"/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml)" +" sets `ee_target_frame` to `{arm}_eef` and `ee_command_frame` to " +"`{arm}_tcp`. It has no `ee_tip`. `ros2_stack.motion.required` is `false`," +" and `args.hardware` is `isaac`, because the scene USD already starts in-" +"process control when you press Play. That YAML value `hardware: isaac` is" +" the composer stack preset. It is not the in-process plugin name " +"`isaac_sim`. If you leave `required: true`, a second controller manager " +"starts." +msgstr "" +"公开的 G1D 配置 " +"[`examples/IsaacSim/robots/Unitree/G1D/robot.yaml`](https://github.com" +"/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml)" +" 把 `ee_target_frame` 设为 `{arm}_eef`,把 `ee_command_frame` 设为 " +"`{arm}_tcp`。没有 `ee_tip`。`ros2_stack.motion.required` 是 " +"`false`,`args.hardware` 是 `isaac`,因为场景 USD 在你按 Play 时已经启动了进程内运控。YAML 里的 " +"`hardware: isaac` 是编排器的栈预设,不是进程内插件名 `isaac_sim`。如果留成 `required: " +"true`,会再启动一个控制器管理器。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/5-robot_action_composer.po b/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/5-robot_action_composer.po index 974f3a3..58f9226 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/5-robot_action_composer.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/python_apps/5-robot_action_composer.po @@ -30,17 +30,6 @@ msgstr "" "运动生成与 **task_queue** YAML 编排:技能注册表把 YAML 块变成 **`StageTarget`** 序列,再通过 " "**`ROS2RobotInterface`** 执行。可选的 LeRobot 数据集录制是 extra,不是核心路径。" -#: ../../source/4-reference/python_apps/5-robot_action_composer.md:5 -#: 9d1e16d1aed34eec913778d4b8cb05f9 -msgid "" -"**Repository:** [fiveages-sim/robot_action_composer](https://github.com" -"/fiveages-sim/robot_action_composer) `main` (`5c94cc08`). `feature/dex-" -"grasp-generator` is no longer a branch; follow `main`." -msgstr "" -"**仓库:** [fiveages-sim/robot_action_composer](https://github.com/fiveages-" -"sim/robot_action_composer) 的 `main`(`5c94cc08`)。`feature/dex-grasp-" -"generator` 已不再是分支,以 `main` 为准。" - #: ../../source/4-reference/python_apps/5-robot_action_composer.md:7 #: b154926ffb184c56a7ba9196cbc3af56 msgid "" @@ -495,56 +484,6 @@ msgstr "" msgid "End-effector frames" msgstr "末端坐标系" -#: ../../source/4-reference/python_apps/5-robot_action_composer.md:114 -#: a973ad30ea9348cdb3c94a1d14953474 -msgid "" -"[`stages_in_command_ee_frame`](https://github.com/fiveages-" -"sim/robot_action_composer/blob/main/robot_action_composer/task_runtime/placement/frames.py)" -" rewrites a stage pose into the link OCS2 tracks. The two paths are not " -"the same source:" -msgstr "" -"[`stages_in_command_ee_frame`](https://github.com/fiveages-" -"sim/robot_action_composer/blob/main/robot_action_composer/task_runtime/placement/frames.py)" -" 把阶段位姿改写成 OCS2 跟踪的连杆。两条路径不是同一个来源:" - -#: ../../source/4-reference/python_apps/5-robot_action_composer.md:116 -#: 32361dd521d540d4885f860475fac91a -#, python-brace-format -msgid "" -"**No `ee_tip` in `robot.yaml`.** Live TF from `ee_target_frame` to " -"`ee_command_frame`. Public G1D ([`robot.yaml`](https://github.com" -"/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml))" -" sets `{arm}_eef` → `{arm}_tcp`." -msgstr "" -"**`robot.yaml` 没有 `ee_tip`。** 用实时 TF,从 `ee_target_frame` 到 " -"`ee_command_frame`。公开的 G1D([`robot.yaml`](https://github.com/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml))是" -" `{arm}_eef` → `{arm}_tcp`。" - -#: ../../source/4-reference/python_apps/5-robot_action_composer.md:117 -#: 897b39210b5d41e88b87976fa2574e38 -#, python-brace-format -msgid "" -"**`ee_tip` set.** First the USD local chain tip → parent (`parent_prim` /" -" `tip_prim`), then an optional live TF from that parent frame to " -"`ee_command_frame`. On W2, OCS2 often tracks `{arm}_eef`, not " -"`{arm}_tcp`. A project `robot.yaml` on [fa-project-" -"usd](https://github.com/fiveages-sim/fa-project-usd) `feature/sinopec-" -"test-tube-picking` uses this path (needs access). The prim paths stay in " -"that file." -msgstr "" -"**设置了 `ee_tip`。** 先走 USD 局部链,尖端到父级(`parent_prim` / `tip_prim`),再可选地用实时 TF" -" 从该父级帧到 `ee_command_frame`。W2 上 OCS2 常常跟踪 `{arm}_eef`,而不是 `{arm}_tcp" -"`。[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) 分支 " -"`feature/sinopec-test-tube-picking` 上的项目 `robot.yaml` " -"走这条路径(需要权限)。图元路径留在那个文件里。" - -#: ../../source/4-reference/python_apps/5-robot_action_composer.md:119 -#: a69a7cf08d87463198a4565c1fb11efb -msgid "Empty frame names send the pose unchanged." -msgstr "坐标系名字都空着时,位姿原样下发。" - #: ../../source/4-reference/python_apps/5-robot_action_composer.md:121 #: 7eabab56cdd440c7be46b14f4fa6efa3 msgid "In-repo docs (`main`)" @@ -712,3 +651,64 @@ msgstr "[合成数据](../../2-how_to/7-synthetic_data/0-index.md) — Isaac 数 #~ "/ infer)\n" #~ "# or once: ./init.sh all" +#: ../../source/4-reference/python_apps/5-robot_action_composer.md:5 +#: 9d1e16d1aed34eec913778d4b8cb05f9 +msgid "" +"**Repository:** [fiveages-sim/robot_action_composer](https://github.com" +"/fiveages-sim/robot_action_composer) `main` (`5c94cc08`). Follow `main`. " +"There is no `feature/dex-grasp-generator` branch." +msgstr "" +"**仓库:** [fiveages-sim/robot_action_composer](https://github.com/fiveages-" +"sim/robot_action_composer) 的 `main`(`5c94cc08`)。以 `main` 为准。没有 `feature" +"/dex-grasp-generator` 分支。" + +#: ../../source/4-reference/python_apps/5-robot_action_composer.md:114 +#: a973ad30ea9348cdb3c94a1d14953474 +msgid "" +"[`stages_in_command_ee_frame`](https://github.com/fiveages-" +"sim/robot_action_composer/blob/main/robot_action_composer/task_runtime/placement/frames.py)" +" rewrites a stage pose into the link OCS2 is tracking. Which frames it " +"uses depends on `robot.yaml`." +msgstr "" +"[`stages_in_command_ee_frame`](https://github.com/fiveages-" +"sim/robot_action_composer/blob/main/robot_action_composer/task_runtime/placement/frames.py)" +" 把阶段位姿改写到 OCS2 正在跟踪的那根连杆。用哪些坐标系,由 `robot.yaml` 决定。" + +#: ../../source/4-reference/python_apps/5-robot_action_composer.md:116 +#: 32361dd521d540d4885f860475fac91a +#, python-brace-format +msgid "" +"Without `ee_tip`, it reads live TF from `ee_target_frame` to " +"`ee_command_frame`. Public G1D ([`robot.yaml`](https://github.com" +"/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml))" +" goes from `{arm}_eef` to `{arm}_tcp`." +msgstr "" +"没有 `ee_tip` 时,它读取从 `ee_target_frame` 到 `ee_command_frame` 的实时 TF。公开的 " +"G1D([`robot.yaml`](https://github.com/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml))是从" +" `{arm}_eef` 到 `{arm}_tcp`。" + +#: ../../source/4-reference/python_apps/5-robot_action_composer.md:118 +#: 897b39210b5d41e88b87976fa2574e38 +#, python-brace-format +msgid "" +"With `ee_tip`, it first walks the USD chain from the tip prim to its " +"parent (`tip_prim` to `parent_prim`), then can apply a live TF from that " +"parent frame to `ee_command_frame`. On W2, OCS2 usually tracks " +"`{arm}_eef`, not `{arm}_tcp`. A project `robot.yaml` on [fa-project-" +"usd](https://github.com/fiveages-sim/fa-project-usd) branch `feature" +"/sinopec-test-tube-picking` uses this second path. Open that file for the" +" prim paths. You need access to the repository." +msgstr "" +"有 `ee_tip` 时,它先沿 USD 从尖端图元走到父图元(`tip_prim` 到 " +"`parent_prim`),然后还可以再加一段从该父坐标系到 `ee_command_frame` 的实时 TF。在 W2 上,OCS2 " +"通常跟踪 `{arm}_eef`,不是 `{arm}_tcp`。[fa-project-usd](https://github.com" +"/fiveages-sim/fa-project-usd) 分支 `feature/sinopec-test-tube-picking` 上的项目" +" `robot.yaml` 走的是第二条。图元路径在那个文件里。打开仓库需要权限。" + +#: ../../source/4-reference/python_apps/5-robot_action_composer.md:120 +#: a69a7cf08d87463198a4565c1fb11efb +msgid "Empty frame names leave the pose unchanged." +msgstr "坐标系名为空时,位姿原样发送。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/2-fasim_isaac.po b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/2-fasim_isaac.po index afc62bf..cac2164 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/2-fasim_isaac.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/2-fasim_isaac.po @@ -25,32 +25,6 @@ msgstr "" msgid "FaSim-Isaac" msgstr "FaSim-Isaac" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:3 -#: 959b1549a92e41d1ae1c4d7d41648a57 -msgid "" -"NVIDIA Isaac Sim workspace for FiveAges Sim: robot and scene USD, an " -"optional Isaac ROS 2 Jazzy overlay, and the extensions that start 运控 " -"inside Sim." -msgstr "" -"面向五纪仿真的 NVIDIA Isaac Sim 工作空间:机器人和场景 USD、可选的 Isaac ROS 2 Jazzy " -"叠加层,以及在仿真里启动运控的扩展。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:5 -#: 225346d5571c44ddb9705578cd780d6d -msgid "" -"**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-" -"sim/FaSim-Isaac) `main` (`3606dc89`, 2026-11-13). In-process ros2_control" -" landed on `main` in [#7](https://github.com/fiveages-sim/FaSim-" -"Isaac/pull/7) (`1a4193a3`). `feature/ros2-control-node` has since " -"diverged (Replicator capture under `exts/fasim.replicator.sdg` is on that" -" branch, not on `main`)." -msgstr "" -"**仓库:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-sim/FaSim-" -"Isaac) 的 `main`(`3606dc89`,2026-11-13)。进程内 ros2_control 已随 " -"[#7](https://github.com/fiveages-sim/FaSim-Isaac/pull/7)(`1a4193a3`)进入 " -"`main`。`feature/ros2-control-node` 此后继续分叉(`exts/fasim.replicator.sdg` 下的 " -"Replicator 采集在该分支,不在 `main`)。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:7 #: b474fb23f02b4df5a3c1a92b809c1007 msgid "" @@ -60,13 +34,6 @@ msgstr "" "**README:** [README.md](https://github.com/fiveages-sim/FaSim-" "Isaac/blob/main/README.md)" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:9 -#: 1c05a0553e8a4688992c8da21e2285d5 -msgid "" -"How to start Sim and which launch to use: [Isaac " -"Sim](../../2-how_to/2-simulation/4-isaac_sim.md)." -msgstr "如何启动仿真、用哪条启动:见 [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md)。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:11 #: 8d699bec8c44401cb0b0f93ee0ff2848 msgid "Two hardware interfaces" @@ -117,120 +84,11 @@ msgstr "`sensor_msgs/JointState` 话题" msgid "`isaac_sim`" msgstr "`isaac_sim`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 694275c5e7e54159a1fef5785ae7a0b1 -msgid "`emit_control` inside `ROS2ControlLaunch` (not a `demo.launch.py` flag)" -msgstr "`ROS2ControlLaunch` 内部的 `emit_control`(不是 `demo.launch.py` 的参数)" - #: ../../source/4-reference/simulation/2-fasim_isaac.md #: 3f44cad103ed402f9101fcd67813bda2 msgid "`isaacsim_ros2_control/IsaacSimSystem`" msgstr "`isaacsim_ros2_control/IsaacSimSystem`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 73f84d4f33a9416b95efdc65efe13bc3 -msgid "In-process articulation" -msgstr "进程内关节体" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:18 -#: 396773ca851249658fca9165bd0b6fe0 -msgid "" -"Shared xacro: [`simulation_hardware.xacro`](https://github.com/fiveages-" -"sim/robot-descriptions-" -"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)." -" `hardware:=isaac` writes `/isaac/joint_command` and " -"`/isaac/joint_states`. `hardware:=isaac_sim` writes `` from launch `isaac_prim_path` (ArticulationRoot). " -"[`robot_common_launch` README](https://github.com/fiveages-sim/robot-" -"descriptions-common/blob/main/robot_common_launch/README.md) lists both " -"keys. `use_sim_time` is true for `gz`, `isaac`, and `isaac_sim` unless " -"the launch argument is explicitly `true` or `false` " -"([`launch_arg_utils.py`](https://github.com/fiveages-sim/robot-" -"descriptions-" -"common/blob/main/robot_common_launch/robot_common_launch/common/launch_arg_utils.py))." -msgstr "" -"共享 xacro:[`simulation_hardware.xacro`](https://github.com/fiveages-sim" -"/robot-descriptions-" -"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)。`hardware:=isaac`" -" 写入 `/isaac/joint_command` 和 `/isaac/joint_states`。`hardware:=isaac_sim` " -"从启动参数 `isaac_prim_path`(ArticulationRoot)写入 ``。[`robot_common_launch` README](https://github.com" -"/fiveages-sim/robot-descriptions-" -"common/blob/main/robot_common_launch/README.md) " -"列出了这两个键。`gz`、`isaac`、`isaac_sim` 的 `use_sim_time` 为 true,除非启动参数显式写成 " -"`true` 或 `false`([`launch_arg_utils.py`](https://github.com/fiveages-sim" -"/robot-descriptions-" -"common/blob/main/robot_common_launch/robot_common_launch/common/launch_arg_utils.py))。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:20 -#: 3c95ae98d36f423c9a20be39dbaff416 -msgid "" -"A robot xacro that whitelists `validated_hardware_type` must include " -"`isaac_sim` or that xacro fails on purpose." -msgstr "" -"若机器人 xacro 白名单了 `validated_hardware_type`,必须包含 `isaac_sim`,否则该 xacro " -"会故意失败。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:22 -#: dba4d4055b86440c92b48f426dc599fa -#, python-brace-format -msgid "" -"`{hardware}.yaml` overlays merge only when the file exists. " -"`load_robot_config` order is common → type yaml → `{variant}.yaml` → end-" -"effector compose → `{hardware}.yaml` → `control.patch` " -"([`robot_utils.py`](https://github.com/fiveages-sim/robot-descriptions-" -"common/blob/main/robot_common_launch/robot_common_launch/common/robot_utils.py))." -" Hardware overlay runs after compose so a later compose pass does not " -"drop gripper keys from `isaac.yaml` ([robot-descriptions-common " -"#41](https://github.com/fiveages-sim/robot-descriptions-common/pull/41))." -" `isaac_sim` can reuse `isaac.yaml`; emit passes `hardware_yaml=isaac`. A" -" file named `isaac_sim.yaml` is loaded when the launch hardware string is" -" `isaac_sim`." -msgstr "" -"`{hardware}.yaml` 仅在文件存在时合并。`load_robot_config` 的顺序是 common → 类型 yaml → " -"`{variant}.yaml` → 末端执行器组合 → `{hardware}.yaml` → " -"`control.patch`([`robot_utils.py`](https://github.com/fiveages-sim/robot-" -"descriptions-" -"common/blob/main/robot_common_launch/robot_common_launch/common/robot_utils.py))。硬件覆盖在组合之后,后面的组合步骤不会丢掉" -" `isaac.yaml` 里的夹爪键([robot-descriptions-common #41](https://github.com" -"/fiveages-sim/robot-descriptions-common/pull/41))。`isaac_sim` 可以复用 " -"`isaac.yaml`;emit 传入 `hardware_yaml=isaac`。当启动的硬件字符串是 `isaac_sim` 时,会加载名为" -" `isaac_sim.yaml` 的文件。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:24 -#: 45749d7f47384eea927215344f5a92ad -msgid "Topic names are per robot" -msgstr "话题名按机器人区分" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:26 -#: b20d1bdacb4d4be3ad01ab23b080488e -msgid "" -"The shared macro’s `/isaac/joint_*` pair is the topic-bridge default " -"(Acone uses that macro). W2’s topic-bridge graph publishes " -"`/joint_command` and `/joint_states` ([`ros2.usda`](https://github.com" -"/fiveages-sim/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/ros2.usda)). The xacro `` and the " -"graph `topicName` are the same strings. `demo.launch.py` does not take a " -"namespace that rewrites them." -msgstr "" -"共享宏的 `/isaac/joint_*` 一对是话题桥默认值(Acone 用这个宏)。W2 的话题桥图发布 `/joint_command` 和" -" `/joint_states`([`ros2.usda`](https://github.com/fiveages-sim/fiveages-" -"gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda))。xacro 的 `` " -"和图的 `topicName` 是同一组字符串。`demo.launch.py` 没有能改写它们的命名空间参数。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:28 -#: e5f9ad7abdc84480a60c8a2de91b701d -msgid "" -"In-process W2 ([`fiveages.usda`](https://github.com/fiveages-sim" -"/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)) does " -"not bridge body or arm `JointState` topics. The controller manager owns " -"those degrees of freedom. Chassis `cmd_vel` / `odom` stay on the child " -"ROS graph." -msgstr "" -"进程内 W2([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2" -"-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda))不桥接身体或手臂的 " -"`JointState` 话题。这些自由度归控制器管理器。底盘的 `cmd_vel` / `odom` 留在子 ROS 图上。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:30 #: 1d63cc7f177c4f2ba721c98bf969edcb msgid "In-process launch" @@ -342,111 +200,16 @@ msgstr "`publishRobotDescription`" msgid "Latch the same xacro on `/robot_description` (default true)" msgstr "把同一份 xacro 锁存到 `/robot_description`(默认 true)" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:45 -#: 63205b39d102436192a2b13b7ebe71fd -msgid "" -"`emit_control` builds one xacro URDF and pins both the controller manager" -" and `/robot_description` to it. `Ros2ControlManager.setup` is called " -"with `publish_robot_description=False`, so the manager does not publish " -"that topic again. `robot_state_publisher` (host process) publishes " -"`/robot_description` and the URDF TF tree. If that process does not " -"start, a latched `fasim_robot_description` publisher is the fallback. " -"Resource Manager therefore loads the description once." -msgstr "" -"`emit_control` 生成一份 xacro URDF,并把控制器管理器和 `/robot_description` " -"都钉在它上面。`Ros2ControlManager.setup` 以 `publish_robot_description=False` " -"调用,因此管理器不会再发这个话题。`robot_state_publisher`(宿主机进程)发布 `/robot_description` 和 " -"URDF 的 TF 树。若该进程没起来,回退是锁存的 `fasim_robot_description` 发布者。资源管理器因此只加载一次描述。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:47 -#: c48d65450e85491b803ddc039a8f4bb0 -msgid "" -"That xacro path is also why Play does not synthesize a fresh URDF from " -"the stage on every start: the node reuses the description xacro and only " -"falls back to USD synthesis for an unexpected prim." -msgstr "也正因为走这条 xacro,播放时不会每次从舞台重新合成一份 URDF:节点复用描述 xacro,只在遇到意外图元时才回退到 USD 合成。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:49 #: 9655b69ace2d45f48d8fb4c970b7221d msgid "CppAD cache" msgstr "CppAD 缓存" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:51 -#: e6e3c839b32e431c89d92472ba9f3956 -#, python-brace-format -msgid "" -"`ocs2_arm_controller` declares `recompile_libraries` with default " -"**true** when `task.info` does not set `recompileLibraries` " -"([`CtrlComponent.h`](https://github.com/fiveages-" -"sim/arms_ros2_control/blob/main/controller/ocs2_arm_controller/include/ocs2_arm_controller/control/CtrlComponent.h))." -" The library folder is " -"`${OCS2_PLANNING_URDF_DIR:-/tmp}/ocs2_ros2//ocs2/`." -msgstr "" -"`ocs2_arm_controller` 声明 `recompile_libraries`,当 `task.info` 没有设置 " -"`recompileLibraries` 时默认 **true**([`CtrlComponent.h`](https://github.com" -"/fiveages-" -"sim/arms_ros2_control/blob/main/controller/ocs2_arm_controller/include/ocs2_arm_controller/control/CtrlComponent.h))。库目录是" -" `${OCS2_PLANNING_URDF_DIR:-/tmp}/ocs2_ros2//ocs2/`。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:53 -#: 2f4e210903654dbe8d3270d78105c0ef -msgid "" -"`emit_control` then sets `recompile_libraries: false` on the **main** " -"controller only: `ocs2_arm_controller` for `demo` / `split_body`, " -"`ocs2_wbc_controller` for `full_body`. That force applies to the in-" -"process `isaac_sim` path. A topic-bridge `hardware:=isaac` launch does " -"not run `emit_control`, so it keeps the controller default (true unless " -"that robot’s info or YAML already says false)." -msgstr "" -"`emit_control` 接着只把**主**控制器的 `recompile_libraries` 设为 false:`demo` / " -"`split_body` 是 `ocs2_arm_controller`,`full_body` 是 " -"`ocs2_wbc_controller`。这次强制只作用于进程内 `isaac_sim`。话题桥的 `hardware:=isaac` 启动不跑" -" `emit_control`,因此保留控制器默认值(true,除非该机器人的 info 或 YAML 已经写成 false)。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:55 -#: f9e51420a28347619f16678ebdf1f3c4 -msgid "" -"Reusing the xacro URDF and reusing the CppAD cache are the two startup " -"shortcuts for a simulated robot that runs 运控 inside Isaac." -msgstr "复用 xacro URDF 和复用 CppAD 缓存,是仿真机器人在 Isaac 里跑运控时的两项启动加速。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:57 #: 1b3121de271140bb938b3b0d786c7599 msgid "`infoFile` and `BASE_LOCK`" msgstr "`infoFile` 与 `BASE_LOCK`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:59 -#: 4e70afe87b62425cb579e3fcfcdfdfe4 -msgid "" -"`infoFile` overrides `info_file_name` on the main controller. " -"`fixed_base_tcp` drops the virtual chassis degrees of freedom " -"(`manipulatorModelType` 0) so whole-body planning is body and arms." -msgstr "" -"`infoFile` 覆盖主控制器的 `info_file_name`。`fixed_base_tcp` " -"去掉虚拟底盘自由度(`manipulatorModelType` 0),全身规划只含身体和手臂。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:61 -#: f5256f78d9994b0bae343d1cca7ab63f -msgid "" -"`emit_control` warns when `mode` is `full_body` and the override name " -"contains `fixed_base`: the planner has `basePlan=0`, so a runtime " -"`BASE_LOCK` has nothing to constrain, and the arm enable policy can stay " -"in `WAITING_FOR_ENABLE_POLICY`. Locking the base uses `mobile_base_tcp` " -"plus `BASE_LOCK`." -msgstr "" -"当 `mode` 为 `full_body` 且覆盖名含 `fixed_base` 时,`emit_control` 会警告:规划器 " -"`basePlan=0`,运行时的 `BASE_LOCK` 没有可约束的量,手臂使能策略可能停在 " -"`WAITING_FOR_ENABLE_POLICY`。锁底盘用 `mobile_base_tcp` 加 `BASE_LOCK`。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:63 -#: 03630ed81d1d4030ae8f2dacc3e24ecc -msgid "" -"Whole-body control needs [ocs2-wbc-controller](https://github.com" -"/fiveages-sim/ocs2-wbc-controller) (private; open it after access)." -msgstr "" -"全身控制需要 [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-" -"controller)(私有;开通后打开)。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:65 #: 063e6171adf4462d8c2a8fb2f8d66a14 msgid "Clock" @@ -465,12 +228,12 @@ msgid "" " it. `ROS_Control` still uses `OnPlaybackTick` to start " "`ROS2ControlLaunch` once." msgstr "" -"进程内 W2 用单独的按需图 `ROS_Clock` 发布 " +"进程内的 W2 用旁边单独的 `ROS_Clock` 图发布 " "`/clock`:`evaluationMode=OnDemand`,`pipelineStage=pipelineStageOnDemand`,`OnPhysicsStep`" " → `PublishClock`,`IsaacReadSimulationTime` 的 " "`resetOnStop=1`([`fiveages.usda`](https://github.com/fiveages-sim" "/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/fiveages.usda))。`OnPhysicsStep` 不会在自动的 " +"usds/blob/main/W2/payloads/ROS/fiveages.usda`))。`OnPhysicsStep` 不会在自动的 " "`ROS_Control` 图里跑,所以时钟图放在旁边。`ROS_Control` 仍用 `OnPlaybackTick` 把 " "`ROS2ControlLaunch` 启动一次。" @@ -486,22 +249,6 @@ msgstr "" "-robot-usds/blob/main/W2/payloads/ROS/ros2.usda))仍从 `OnPlaybackTick` 驱动 " "`PublishClock`,并把 `resetOnStop` 设为 0。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:71 -#: b36c6a79eaac495cb19a3d0332fd8ee6 -msgid "" -"`/clock` is the controller’s time base when `use_sim_time` is true. A " -"render-frame clock advances several physics steps in one tick, so a timed" -" move finishes early. The repair is the physics-step clock, not a joint-" -"parameter change. The same `ROS_Clock` pattern is what new fiveages in-" -"process payloads follow; this page verifies it on W2. Odometry graphs " -"keep their own `ReadSimTime` (`resetOnStop=1`) so `odom` stamps stay " -"valid. Camera prims belong on the scene payload, not on this clock graph." -msgstr "" -"`use_sim_time` 为 true 时,`/clock` " -"是控制器的时间基准。渲染帧时钟会在一个节拍里推进好几个物理步,于是限时运动提前结束。修的是物理步时钟,而不是关节参数。新的 fiveages " -"进程内载荷也跟这套 `ROS_Clock`;本页在 W2 上核对过。里程计图保留自己的 " -"`ReadSimTime`(`resetOnStop=1`),这样 `odom` 时间戳仍然有效。相机图元放在场景载荷上,不放在这张时钟图上。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:73 #: aae16aa6d37c41da96b19915fe94f62c msgid "" @@ -526,26 +273,6 @@ msgstr "" "树。`robot_state_publisher` 发布 `base_footprint → " "base_link`(两个连杆都存在时)以及手臂树,包括 `right_eef` 这类固定帧。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:79 -#: 39ac1bc5fafe40ee8def356db84a68f3 -msgid "" -"W2’s in-process ArticulationRoot is `base_link` " -"(`/FiveAges_W2/base_link`). The odometry chain on that payload is `world " -"→ odom → base_footprint`; `robot_state_publisher` publishes " -"`base_footprint → base_link`. OCS2 `baseFrame` is the same link the " -"planner’s `task.info` names. `base_footprint` is the ground link; " -"`base_link` may sit above it. Two publishers on one edge fight. A " -"standing model with no `base_footprint` uses `base_link` for that chain. " -"Confirm the link in that robot’s USD and `task.info` before copying the " -"W2 names." -msgstr "" -"W2 进程内的 ArticulationRoot 是 " -"`base_link`(`/FiveAges_W2/base_link`)。该载荷上的里程计链是 `world → odom → " -"base_footprint`;`robot_state_publisher` 发布 `base_footprint → " -"base_link`。OCS2 的 `baseFrame` 就是规划器 `task.info` 点名的那个连杆。`base_footprint` " -"是贴地连杆;`base_link` 可以高出地面。一条边两个发布者会抢。没有 `base_footprint` 的站立模型用 " -"`base_link` 接这条链。抄 W2 的名字之前,先在该机器人的 USD 和 `task.info` 里核对连杆。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:81 #: 2bb160eb89c84d6b929a1e0475b165bf msgid "Several robots" @@ -637,42 +364,6 @@ msgstr "" msgid "Project scenes" msgstr "项目场景" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:102 -#: 630086b536694d4ab497fe286b8d14fb -msgid "" -"[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) is " -"private. On `main`, a project is `scene.usd(a)`, `objects/`, and runnable" -" `env/` ([README](https://github.com/fiveages-sim/fa-project-" -"usd/blob/main/README.md))." -msgstr "" -"[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) 是私有仓库。在 " -"`main` 上,一个项目是 `scene.usd(a)`、`objects/` 和可运行的 " -"`env/`([README](https://github.com/fiveages-sim/fa-project-" -"usd/blob/main/README.md))。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:104 -#: e88786b0fbcb4cd198461943d13ac3d0 -msgid "" -"Orchestration files next to those scenes (`robot.yaml`, `task_configs/`, " -"`maps/` or `map/`) are on branch `feature/sinopec-test-tube-picking`, " -"which is ahead of `main` and not merged (compared 2026-11-13). Three " -"projects on that branch have this layout: `Fiveages/2026-11 Standard " -"Moving Boxes`, `Siemens/2026-06 Wind Turbine Blade Detection`, and " -"`Aimbo/2026-04 Bosch German&Poland POC`. Open the branch after you have " -"access. The public entry for running a project directory is [lerobot_ros2" -" `examples/IsaacSim/README.md`](https://github.com/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md) (`motion-" -"generation` with `LEROBOT_ROOT` set). Camera rigs stay in the scene USD." -msgstr "" -"这些场景旁边的编排文件(`robot.yaml`、`task_configs/`、`maps/` 或 `map/`)在分支 `feature" -"/sinopec-test-tube-picking` 上,该分支领先 `main` 且尚未合入(2026-11-13 " -"对比)。该分支上有这份布局的三个项目:`Fiveages/2026-11 Standard Moving " -"Boxes`、`Siemens/2026-06 Wind Turbine Blade Detection`、`Aimbo/2026-04 " -"Bosch German&Poland POC`。有权限后再打开该分支。从项目目录运行的公开入口是 [lerobot_ros2 " -"`examples/IsaacSim/README.md`](https://github.com/fiveages-" -"sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md)(设置 `LEROBOT_ROOT`" -" 后执行 `motion-generation`)。相机机位留在场景 USD 里。" - #: ../../source/4-reference/simulation/2-fasim_isaac.md:106 #: 77cf179e888945fea11685a88ccb0db4 msgid "Layout" @@ -1197,3 +888,357 @@ msgstr "[Environment assets](5-env_assets.md)" #~ msgid "[Synthetic Data](../../2-how_to/7-synthetic_data/0-index.md)" #~ msgstr "[合成数据](../../2-how_to/7-synthetic_data/0-index.md)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:3 +#: 959b1549a92e41d1ae1c4d7d41648a57 +msgid "" +"FaSim-Isaac is the Isaac Sim workspace: robot and scene USD, an optional " +"Isaac ROS 2 Jazzy overlay, and the extensions that start 运控 inside Sim." +msgstr "" +"FaSim-Isaac 是 Isaac Sim 工作区:机器人和场景 USD、可选的 Isaac ROS 2 Jazzy 叠加,以及在 Sim " +"里启动运控的扩展。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:5 +#: fd0f842d70654d8db0593c0925ff2e0d +msgid "" +"Use this page when you need to see why a joint topic, a clock, or a TF " +"edge behaves the way it does. To start Sim and pick a launch, follow " +"[Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md)." +msgstr "" +"想看清一条关节话题、时钟或 TF 边为什么是这样时,读这一页。要启动 Sim 并选择 launch,按 [Isaac " +"Sim](../../2-how_to/2-simulation/4-isaac_sim.md)。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:7 +#: 225346d5571c44ddb9705578cd780d6d +msgid "" +"**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-" +"sim/FaSim-Isaac) `main` (`3606dc89`, 2026-11-13). In-process ros2_control" +" is on `main` ([#7](https://github.com/fiveages-sim/FaSim-Isaac/pull/7), " +"`1a4193a3`). Replicator capture (`exts/fasim.replicator.sdg`) is on " +"`feature/ros2-control-node`, not on `main`." +msgstr "" +"**仓库:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-sim/FaSim-" +"Isaac) 的 `main`(`3606dc89`,2026-11-13)。进程内 ros2_control 在 `main` " +"上([#7](https://github.com/fiveages-sim/FaSim-" +"Isaac/pull/7),`1a4193a3`)。Replicator 采集(`exts/fasim.replicator.sdg`)在 " +"`feature/ros2-control-node`,不在 `main`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:13 +#: f6d46350ba0943c2aa1bc4652f2387b4 +msgid "" +"One stage uses one of these. `isaac` is the topic bridge you pass on a " +"ROS 2 launch. `isaac_sim` is set inside Isaac when Play starts the in-" +"process node. It is not a `demo.launch.py` flag, and it is not a second " +"robot body." +msgstr "" +"一个舞台用下面两种之一。`isaac` 是你在 ROS 2 launch 上传的话题桥。`isaac_sim` 是 Play 启动进程内节点时在 " +"Isaac 里设置的。它不是 `demo.launch.py` 的参数,也不是第二台机器人。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 694275c5e7e54159a1fef5785ae7a0b1 +msgid "`emit_control` inside `ROS2ControlLaunch`" +msgstr "`ROS2ControlLaunch` 内部的 `emit_control`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 3aad5e809d61412ea0396e692a649dd9 +msgid "The articulation in the Isaac process" +msgstr "Isaac 进程里的关节体" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:20 +#: 396773ca851249658fca9165bd0b6fe0 +msgid "" +"Both keys are in the shared " +"[`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)" +" and in the [`robot_common_launch` README](https://github.com/fiveages-" +"sim/robot-descriptions-common/blob/main/robot_common_launch/README.md). " +"`hardware:=isaac` writes `/isaac/joint_command` and " +"`/isaac/joint_states`. `hardware:=isaac_sim` writes `` from the launch argument `isaac_prim_path`, which is" +" the ArticulationRoot. `use_sim_time` is true for `gz`, `isaac`, and " +"`isaac_sim` unless you pass the launch argument as `true` or `false` " +"([`launch_arg_utils.py`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/robot_common_launch/common/launch_arg_utils.py))." +msgstr "" +"两个键都在共享的 [`simulation_hardware.xacro`](https://github.com/fiveages-sim" +"/robot-descriptions-" +"common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro)" +" 和 [`robot_common_launch` README](https://github.com/fiveages-sim/robot-" +"descriptions-common/blob/main/robot_common_launch/README.md) " +"里。`hardware:=isaac` 写成 `/isaac/joint_command` 和 " +"`/isaac/joint_states`。`hardware:=isaac_sim` 把 `` 写成 launch 参数 `isaac_prim_path`,也就是 " +"ArticulationRoot。除非你把 launch 参数明确写成 `true` 或 `false`,否则 `gz`、`isaac` 和 " +"`isaac_sim` 的 `use_sim_time` 都是 " +"true([`launch_arg_utils.py`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/robot_common_launch/common/launch_arg_utils.py))。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:22 +#: 3c95ae98d36f423c9a20be39dbaff416 +msgid "" +"If a robot xacro whitelists `validated_hardware_type`, include " +"`isaac_sim`. Otherwise that xacro fails on purpose when the in-process " +"node starts." +msgstr "" +"如果机器人 xacro 用白名单限制了 `validated_hardware_type`,要把 `isaac_sim` " +"写进去。否则进程内节点启动时,这份 xacro 会故意失败。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:24 +#: dba4d4055b86440c92b48f426dc599fa +#, python-brace-format +msgid "" +"`{hardware}.yaml` is merged only when the file exists. " +"`load_robot_config` applies files in this order: common, type yaml, " +"`{variant}.yaml`, end-effector compose, `{hardware}.yaml`, then " +"`control.patch` ([`robot_utils.py`](https://github.com/fiveages-sim" +"/robot-descriptions-" +"common/blob/main/robot_common_launch/robot_common_launch/common/robot_utils.py))." +" The hardware file comes after compose so a later compose pass does not " +"drop gripper keys from `isaac.yaml` ([robot-descriptions-common " +"#41](https://github.com/fiveages-sim/robot-descriptions-common/pull/41))." +" `isaac_sim` can reuse `isaac.yaml`. `emit_control` passes " +"`hardware_yaml=isaac`. A file named `isaac_sim.yaml` is loaded when the " +"launch hardware string is `isaac_sim`." +msgstr "" +"`{hardware}.yaml` 只在文件存在时才合并。`load_robot_config` 按这个顺序套用:common、类型 " +"yaml、`{variant}.yaml`、末端组合、`{hardware}.yaml`,然后是 " +"`control.patch`([`robot_utils.py`](https://github.com/fiveages-sim/robot-" +"descriptions-" +"common/blob/main/robot_common_launch/robot_common_launch/common/robot_utils.py))。硬件文件放在组合之后,这样后面的组合不会丢掉" +" `isaac.yaml` 里的夹爪键([robot-descriptions-common #41](https://github.com" +"/fiveages-sim/robot-descriptions-common/pull/41))。`isaac_sim` 可以复用 " +"`isaac.yaml`。`emit_control` 传入 `hardware_yaml=isaac`。launch 的硬件字符串是 " +"`isaac_sim` 时,才会加载名为 `isaac_sim.yaml` 的文件。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:26 +#: 45749d7f47384eea927215344f5a92ad +msgid "Topic names follow the robot" +msgstr "话题名跟这台机器人走" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:28 +#: b20d1bdacb4d4be3ad01ab23b080488e +msgid "" +"The shared macro’s `/isaac/joint_*` pair is the topic-bridge default. " +"Acone uses that macro. W2’s topic-bridge graph publishes `/joint_command`" +" and `/joint_states` ([`ros2.usda`](https://github.com/fiveages-sim" +"/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda)). The " +"xacro `` and the graph `topicName` are the same strings. " +"`demo.launch.py` has no namespace argument that rewrites them." +msgstr "" +"共享宏的 `/isaac/joint_*` 是话题桥的默认值。Acone 用的就是这个宏。W2 的话题桥图发布 `/joint_command` " +"和 `/joint_states`([`ros2.usda`](https://github.com/fiveages-sim/fiveages-" +"gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda))。xacro 的 `` " +"和图的 `topicName` 是同一组字符串。`demo.launch.py` 没有能改写它们的 namespace 参数。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:30 +#: e5f9ad7abdc84480a60c8a2de91b701d +msgid "" +"In-process W2 ([`fiveages.usda`](https://github.com/fiveages-sim" +"/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)) does " +"not bridge body or arm `JointState` topics. The controller manager owns " +"those joints. Chassis `cmd_vel` and `odom` stay on the child ROS graph." +msgstr "" +"进程内的 W2([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda))不桥接身体或手臂的 " +"`JointState` 话题。这些关节归控制器管理器。底盘的 `cmd_vel` 和 `odom` 仍在子 ROS 图上。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:47 +#: 63205b39d102436192a2b13b7ebe71fd +msgid "" +"`emit_control` builds one xacro URDF and points both the controller " +"manager and `/robot_description` at it. `Ros2ControlManager.setup` is " +"called with `publish_robot_description=False`, so the manager does not " +"publish that topic a second time. `robot_state_publisher` on the host " +"publishes `/robot_description` and the URDF TF tree. If that process does" +" not start, a latched `fasim_robot_description` publisher is the " +"fallback. The resource manager therefore loads the description once." +msgstr "" +"`emit_control` 生成一份 xacro URDF,并让控制器管理器和 `/robot_description` " +"都指向它。`Ros2ControlManager.setup` 以 `publish_robot_description=False` " +"调用,所以管理器不会再发一次这个话题。主机上的 `robot_state_publisher` 发布 `/robot_description` 和" +" URDF 的 TF 树。这个进程没起来时,锁存的 `fasim_robot_description` " +"发布者作为后备。资源管理器因此只加载一次描述。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:49 +#: c48d65450e85491b803ddc039a8f4bb0 +msgid "" +"Play does not rebuild a URDF from the stage on every start. The node " +"reuses the description xacro, and it falls back to synthesizing a URDF " +"from the USD only for an unexpected prim." +msgstr "Play 不会在每次启动时从舞台重新生成 URDF。节点复用描述 xacro,只有遇到意外图元时才退回去从 USD 合成 URDF。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:53 +#: e6e3c839b32e431c89d92472ba9f3956 +#, python-brace-format +msgid "" +"`ocs2_arm_controller` declares `recompile_libraries` with default true " +"when `task.info` does not set `recompileLibraries` " +"([`CtrlComponent.h`](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/controller/ocs2_arm_controller/include/ocs2_arm_controller/control/CtrlComponent.h))." +" The library folder is " +"`${OCS2_PLANNING_URDF_DIR:-/tmp}/ocs2_ros2//ocs2/`." +msgstr "" +"`ocs2_arm_controller` 在 `task.info` 没有设置 `recompileLibraries` 时,把 " +"`recompile_libraries` 的默认值声明为 true([`CtrlComponent.h`](https://github.com" +"/fiveages-" +"sim/arms_ros2_control/blob/main/controller/ocs2_arm_controller/include/ocs2_arm_controller/control/CtrlComponent.h))。库目录是" +" `${OCS2_PLANNING_URDF_DIR:-/tmp}/ocs2_ros2//ocs2/`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:55 +#: 2f4e210903654dbe8d3270d78105c0ef +msgid "" +"On the in-process path, `emit_control` then sets `recompile_libraries: " +"false` on the main controller only: `ocs2_arm_controller` for `demo` and " +"`split_body`, `ocs2_wbc_controller` for `full_body`. A topic-bridge " +"launch (`hardware:=isaac`) does not run `emit_control`, so it keeps the " +"controller default. That default stays true unless that robot’s info file" +" or YAML already says false." +msgstr "" +"在进程内这条路径上,`emit_control` 接着只把主控制器的 `recompile_libraries` 设为 false:`demo` " +"和 `split_body` 是 `ocs2_arm_controller`,`full_body` 是 " +"`ocs2_wbc_controller`。话题桥 launch(`hardware:=isaac`)不跑 " +"`emit_control`,所以保留控制器默认值。除非这台机器人的 info 或 YAML 已经写成 false,否则默认仍是 true。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:57 +#: c48d65450e85491b803ddc039a8f4bb0 +msgid "" +"A simulated robot that runs 运控 inside Isaac starts faster for two " +"reasons: the node reuses the description xacro, and it reuses this CppAD " +"cache." +msgstr "仿真机器人在 Isaac 里跑运控时,启动更快有两个原因:节点复用描述 xacro,并且复用这份 CppAD 缓存。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:61 +#: 4e70afe87b62425cb579e3fcfcdfdfe4 +msgid "" +"`infoFile` overrides `info_file_name` on the main controller. " +"`fixed_base_tcp` drops the virtual chassis degrees of freedom " +"(`manipulatorModelType` 0), so whole-body planning covers the body and " +"the arms." +msgstr "" +"`infoFile` 覆盖主控制器上的 `info_file_name`。`fixed_base_tcp` " +"去掉虚拟底盘自由度(`manipulatorModelType` 为 0),全身规划就只覆盖身体和手臂。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:63 +#: f5256f78d9994b0bae343d1cca7ab63f +msgid "" +"`emit_control` warns when `mode` is `full_body` and the override name " +"contains `fixed_base`. The planner then has `basePlan=0`, so a runtime " +"`BASE_LOCK` has nothing to constrain, and arm enable can stay in " +"`WAITING_FOR_ENABLE_POLICY`. Lock the base with `mobile_base_tcp` and " +"`BASE_LOCK`." +msgstr "" +"`mode` 是 `full_body` 且覆盖文件名含有 `fixed_base` 时,`emit_control` 会警告。此时规划器 " +"`basePlan=0`,运行时的 `BASE_LOCK` 没有东西可约束,手臂使能会停在 " +"`WAITING_FOR_ENABLE_POLICY`。锁底盘用 `mobile_base_tcp` 和 `BASE_LOCK`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:65 +#: 11db776e7ed4467d914252d571dc4b88 +msgid "" +"`full_body` loads `ocs2_wbc_controller` from the GitHub Release package " +"`ros-jazzy-arms-ros2-control` (`./init_repo.sh` with arms set to `d`, or " +"`./scripts/install_core_debs.sh --only arms`). The same package contains " +"`ocs2_humanoid` and `lina_planning`. It is not an apt package, and it is " +"not `ros-jazzy-arms-ros2-control-full`. Open [ocs2-wbc-" +"controller](https://github.com/fiveages-sim/ocs2-wbc-controller) when you" +" need to read or change the source." +msgstr "" +"`full_body` 从 GitHub Release 包 `ros-jazzy-arms-ros2-control` 加载 " +"`ocs2_wbc_controller`(`./init_repo.sh` 里 arms 选 `d`,或 " +"`./scripts/install_core_debs.sh --only arms`)。同一个包里还有 `ocs2_humanoid` 和 " +"`lina_planning`。它不是 apt 包,也不是 `ros-jazzy-arms-ros2-control-" +"full`。要读源码或改源码时再打开 [ocs2-wbc-controller](https://github.com/fiveages-" +"sim/ocs2-wbc-controller)。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:73 +#: b36c6a79eaac495cb19a3d0332fd8ee6 +msgid "" +"`/clock` is the controller’s time base when `use_sim_time` is true. A " +"clock that ticks once per rendered frame jumps several physics steps, so " +"a timed move finishes early. Use the physics-step clock. Changing joint " +"gains does not fix that. New in-process payloads follow the same " +"`ROS_Clock` pattern. This page checks it on W2. Odometry graphs keep " +"their own `ReadSimTime` (`resetOnStop=1`) so `odom` stamps stay valid. " +"Put cameras on the scene payload, not on this clock graph." +msgstr "" +"`use_sim_time` 为 true 时,`/clock` " +"是控制器的时间基准。每渲染一帧跳一次的时钟会一次跨过好几个物理步,定时动作就会提前结束。改用按物理步走的时钟。改关节增益修不好。新的进程内载荷沿用同一套" +" `ROS_Clock`。本页在 W2 上核对过。里程计图保留自己的 `ReadSimTime`(`resetOnStop=1`),这样 " +"`odom` 的时间戳仍然有效。相机放在场景载荷上,不要放在这个时钟图上。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:81 +#: 39ac1bc5fafe40ee8def356db84a68f3 +msgid "" +"On in-process W2 the ArticulationRoot is `base_link` " +"(`/FiveAges_W2/base_link`). That payload’s odometry chain is `world → " +"odom → base_footprint`, and `robot_state_publisher` publishes " +"`base_footprint → base_link`. OCS2 `baseFrame` is the link named in that " +"planner’s `task.info`. `base_footprint` sits on the ground. `base_link` " +"can sit above it. Two publishers on one edge fight. A standing model with" +" no `base_footprint` uses `base_link` for that chain. Read the link names" +" in the robot’s USD and `task.info` before you copy the W2 names." +msgstr "" +"进程内 W2 的 ArticulationRoot 是 " +"`base_link`(`/FiveAges_W2/base_link`)。这份载荷的里程计链是 `world → odom → " +"base_footprint`,`robot_state_publisher` 发布 `base_footprint → " +"base_link`。OCS2 的 `baseFrame` 是这份规划器 `task.info` 里写的那根连杆。`base_footprint`" +" 贴地。`base_link` 可以在它上方。一条边上有两个发布者就会抢。没有 `base_footprint` 的站立模型,这条链用 " +"`base_link`。抄 W2 的名字之前,先看这台机器人 USD 和 `task.info` 里的连杆名。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:104 +#: 630086b536694d4ab497fe286b8d14fb +msgid "" +"[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) is a " +"private repository. On `main`, a project is `scene.usd(a)`, `objects/`, " +"and a runnable `env/` ([README](https://github.com/fiveages-sim/fa-" +"project-usd/blob/main/README.md))." +msgstr "" +"[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) 是私有仓库。在 " +"`main` 上,一个项目是 `scene.usd(a)`、`objects/` 和可运行的 " +"`env/`([README](https://github.com/fiveages-sim/fa-project-" +"usd/blob/main/README.md))。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:106 +#: e88786b0fbcb4cd198461943d13ac3d0 +msgid "" +"The files the orchestrator reads next to those scenes (`robot.yaml`, " +"`task_configs/`, and `maps/` or `map/`) are on branch `feature/sinopec-" +"test-tube-picking`. That branch was ahead of `main` and not merged when " +"these pages were checked on 2026-11-13. Three projects there use this " +"layout: `Fiveages/2026-11 Standard Moving Boxes`, `Siemens/2026-06 Wind " +"Turbine Blade Detection`, and `Aimbo/2026-04 Bosch German&Poland POC`. " +"You need access to open the branch. The public way to run a project " +"directory is [lerobot_ros2 " +"`examples/IsaacSim/README.md`](https://github.com/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md): `motion-" +"generation` with `LEROBOT_ROOT` set. Keep camera rigs in the scene USD." +msgstr "" +"编排器在这些场景旁边读取的文件(`robot.yaml`、`task_configs/`,以及 `maps/` 或 `map/`)在分支 " +"`feature/sinopec-test-tube-picking` 上。这些页面核对时(2026-11-13),该分支领先 `main` " +"且尚未合入。那里有三个项目用了这套布局:`Fiveages/2026-11 Standard Moving " +"Boxes`、`Siemens/2026-06 Wind Turbine Blade Detection` 和 `Aimbo/2026-04 " +"Bosch German&Poland POC`。打开这个分支需要权限。公开的跑法是 [lerobot_ros2 的 " +"`examples/IsaacSim/README.md`](https://github.com/fiveages-" +"sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md):设置 `LEROBOT_ROOT`" +" 后运行 `motion-generation`。相机安装保持在场景 USD 里。" + +#~ msgid "In-process articulation" +#~ msgstr "进程内关节体" + +#~ msgid "" +#~ "Reusing the xacro URDF and reusing " +#~ "the CppAD cache are the two " +#~ "startup shortcuts for a simulated robot" +#~ " that runs 运控 inside Isaac." +#~ msgstr "复用 xacro URDF 和复用 CppAD 缓存,是仿真机器人在 Isaac 里跑运控时的两项启动加速。" + +#~ msgid "" +#~ "Whole-body control needs [ocs2-wbc-" +#~ "controller](https://github.com/fiveages-sim/ocs2-wbc-" +#~ "controller) (private; open it after " +#~ "access)." +#~ msgstr "" +#~ "全身控制需要 [ocs2-wbc-controller](https://github.com" +#~ "/fiveages-sim/ocs2-wbc-controller)(私有;开通后打开)。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/3-robot_usds.po b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/3-robot_usds.po index b719087..83d9a2e 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/3-robot_usds.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/3-robot_usds.po @@ -39,20 +39,6 @@ msgstr "" "**仓库:** [fiveages-sim/robot_usds](https://github.com/fiveages-" "sim/robot_usds)" -#: ../../source/4-reference/simulation/3-robot_usds.md:7 -#: d944440cd69046e5a183b29a717f79aa -msgid "" -"Brand **EN/ZH** labels in this docs set follow [README_zh-CN.md " -"§3.1](https://github.com/fiveages-sim/robot_usds/blob/main/README_zh-" -"CN.md#31-中文简称与英文标识对照) (English folder names match that table). Examples: " -"方舟无限 = **ARX**; 高擎 = **HighTorque** / Panthera; 越疆 = **Dobot**; 银河通用 = " -"**Galbot**; 中科第五纪 = **FiveAges**." -msgstr "" -"本文档的品牌中英对照遵循 [README_zh-CN.md §3.1](https://github.com/fiveages-" -"sim/robot_usds/blob/main/README_zh-" -"CN.md#31-中文简称与英文标识对照)(英文目录名与该表一致)。例如:方舟无限 = **ARX**;高擎 = **HighTorque** /" -" Panthera;越疆 = **Dobot**;银河通用 = **Galbot**;中科第五纪 = **FiveAges**。" - #: ../../source/4-reference/simulation/3-robot_usds.md:9 #: b685a006a190457291f95294eb86bba3 msgid "Purpose" @@ -83,35 +69,6 @@ msgstr "按品牌管理的资产子模块" msgid "Structure" msgstr "结构" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: e8ee1d797fd94c73aa41a6210dad99a3 -msgid "" -"robot_usds/\n" -"├── humanoid/\n" -"│ ├── FiveAges/\n" -"│ │ ├── Gen1/ # → fiveages-gen1-robot-usds\n" -"│ │ ├── Gen2/ # → fiveages-gen2-robot-usds\n" -"│ │ └── Gen3/ # → fiveages-gen3-robot-usds\n" -"│ ├── Galbot/ # → galbot-usds\n" -"│ └── Ubtech/ # → ubtech-usds\n" -"├── manipulators/ # Arm USD assets\n" -"├── mobile_manipulators/\n" -"├── grippers/\n" -"└── sensors/" -msgstr "" -"robot_usds/\n" -"├── humanoid/\n" -"│ ├── FiveAges/\n" -"│ │ ├── Gen1/ # → fiveages-gen1-robot-usds\n" -"│ │ ├── Gen2/ # → fiveages-gen2-robot-usds\n" -"│ │ └── Gen3/ # → fiveages-gen3-robot-usds\n" -"│ ├── Galbot/ # → galbot-usds\n" -"│ └── Ubtech/ # → ubtech-usds\n" -"├── manipulators/ # Arm USD assets\n" -"├── mobile_manipulators/\n" -"├── grippers/\n" -"└── sensors/" - #: ../../source/4-reference/simulation/3-robot_usds.md:33 #: 5235ee7a7d1b49558d9fb6d23bd84b6d msgid "Submodules" @@ -185,16 +142,6 @@ msgstr "" msgid "Public (`W2/`, `S2/`, `components/`)" msgstr "公开(`W2/`、`S2/`、`components/`)" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 3b5a8e1d13264e04bab2c3cce356b7da -msgid "`humanoid/FiveAges/Gen3`" -msgstr "`humanoid/FiveAges/Gen3`" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: f585b7d18f7a441a9c98cd7764e05ee9 -msgid "fiveages-gen3-robot-usds" -msgstr "fiveages-gen3-robot-usds" - #: ../../source/4-reference/simulation/3-robot_usds.md:18 #: 2a7b871864664bed95fbaee336f37ca4 66e6e26603954e3fb50b7cde937ebaa7 msgid "Private" @@ -329,11 +276,6 @@ msgstr "相机、激光雷达模型" msgid "Asset Naming" msgstr "资产命名" -#: ../../source/4-reference/simulation/3-robot_usds.md:79 -#: fd7d8162d30e431786073ac8c323383c -msgid "Gen1/Gen2/Gen3" -msgstr "Gen1/Gen2/Gen3" - #: ../../source/4-reference/simulation/3-robot_usds.md:81 #: 20b7a950baab4f86a9581874c8e76135 msgid "" @@ -353,24 +295,6 @@ msgstr "" "[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds)" ",公开)" -#: ../../source/4-reference/simulation/3-robot_usds.md:84 -#: 9b7f321dbc17472f897b63e4d857c538 -msgid "" -"**Gen2** — W2 / S2 (`humanoid/FiveAges/Gen2` → [fiveages-gen2-robot-" -"usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds), public)." -" Tree: `W2/`, `S2/`, `components/`. **W2R and S2R are not in this repo.**" -msgstr "" -"**Gen2** — W2 / S2(`humanoid/FiveAges/Gen2` →" -"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds)" -",公开)。目录:`W2/`、`S2/`、`components/`。**W2R 与 S2R 不在此仓库。**" - -#: ../../source/4-reference/simulation/3-robot_usds.md:85 -#: d763def1ad33414c83183c4facaa3e15 -msgid "" -"**Gen3** — WCE3 (`humanoid/FiveAges/Gen3` → `fiveages-gen3-robot-usds`, " -"still private)" -msgstr "**Gen3** — WCE3(`humanoid/FiveAges/Gen3` → `fiveages-gen3-robot-usds`,仍为私有)" - #: ../../source/4-reference/simulation/3-robot_usds.md:87 #: cd76c293e5954f648f0f589f94d2609f msgid "" @@ -411,33 +335,6 @@ msgstr "[FaSim-Isaac](2-fasim_isaac.md)" msgid "[Synthetic Data](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)" msgstr "[合成数据](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)" -#~ msgid "" -#~ "robot_usds/\n" -#~ "├── humanoid/\n" -#~ "│ ├── FiveAges/\n" -#~ "│ │ ├── Gen1/ # → fiveages-gen1-robot-usds\n" -#~ "│ │ ├── Gen2/ # → fiveages-gen2-robot-usds\n" -#~ "│ │ └── Gen3/ # → fiveages-gen3-robot-usds\n" -#~ "│ ├── Galbot/ # → galbot-usds\n" -#~ "│ └── Ubtech/ # → ubtech-usds\n" -#~ "├── manipulators/ # Arm USD assets\n" -#~ "├── mobile_manipulators/\n" -#~ "├── grippers/\n" -#~ "└── sensors/\n" -#~ msgstr "" -#~ "robot_usds/\n" -#~ "├── humanoid/\n" -#~ "│ ├── FiveAges/\n" -#~ "│ │ ├── Gen1/ # → fiveages-gen1-robot-usds\n" -#~ "│ │ ├── Gen2/ # → fiveages-gen2-robot-usds\n" -#~ "│ │ └── Gen3/ # → fiveages-gen3-robot-usds\n" -#~ "│ ├── Galbot/ # → galbot-usds\n" -#~ "│ └── Ubtech/ # → ubtech-usds\n" -#~ "├── manipulators/ # Arm USD assets\n" -#~ "├── mobile_manipulators/\n" -#~ "├── grippers/\n" -#~ "└── sensors/\n" - #~ msgid "Initialize" #~ msgstr "初始化" @@ -503,3 +400,66 @@ msgstr "[合成数据](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)" #~ "robot’s USDA." #~ msgstr "通过 FaSim-Isaac(`./init.sh` / `./run.sh`)和该机器人的 USDA 加载资产。" +#: ../../source/4-reference/simulation/3-robot_usds.md:7 +#: 77d34037b495411a8ad3594f8362d39c +msgid "" +"Brand labels in this docs set follow [README_zh-CN.md " +"§3.1](https://github.com/fiveages-sim/robot_usds/blob/main/README_zh-" +"CN.md#31-中文简称与英文标识对照). English folder names match that table. Examples: " +"方舟无限 = **ARX**; 高擎 = **HighTorque** / Panthera; 越疆 = **Dobot**; 银河通用 = " +"**Galbot**; 第五纪 = **FiveAges**." +msgstr "" +"本文档的品牌中英文对照遵循 [README_zh-CN.md §3.1](https://github.com/fiveages-" +"sim/robot_usds/blob/main/README_zh-" +"CN.md#31-中文简称与英文标识对照)。英文目录名与该表一致。例如:方舟无限 = **ARX**;高擎 = **HighTorque** / " +"Panthera;越疆 = **Dobot**;银河通用 = **Galbot**;第五纪 = **FiveAges**。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:18 +#: 9295c9bbeef04a6b87e047f3a9366941 +msgid "" +"robot_usds/\n" +"├── humanoid/\n" +"│ ├── FiveAges/\n" +"│ │ ├── Gen1/ # → fiveages-gen1-robot-usds\n" +"│ │ └── Gen2/ # → fiveages-gen2-robot-usds\n" +"│ ├── Galbot/ # → galbot-usds\n" +"│ └── Ubtech/ # → ubtech-usds\n" +"├── manipulators/ # Arm USD assets\n" +"├── mobile_manipulators/\n" +"├── grippers/\n" +"└── sensors/" +msgstr "" +"robot_usds/\n" +"├── humanoid/\n" +"│ ├── FiveAges/\n" +"│ │ ├── Gen1/ # → fiveages-gen1-robot-usds\n" +"│ │ └── Gen2/ # → fiveages-gen2-robot-usds\n" +"│ ├── Galbot/ # → galbot-usds\n" +"│ └── Ubtech/ # → ubtech-usds\n" +"├── manipulators/ # Arm USD assets\n" +"├── mobile_manipulators/\n" +"├── grippers/\n" +"└── sensors/" + +#: ../../source/4-reference/simulation/3-robot_usds.md:77 +#: b6d6938ddfb34e6a8f9c0b507643ace2 +msgid "Gen1 and Gen2" +msgstr "Gen1 和 Gen2" + +#: ../../source/4-reference/simulation/3-robot_usds.md:82 +#: 86098a4a6ea5437db4e45ad8c785a4e3 +msgid "" +"**Gen2** — W2 / S2 (`humanoid/FiveAges/Gen2` → [fiveages-gen2-robot-" +"usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds), public)." +" Tree: `W2/`, `S2/`, `components/`. W2R and S2R are not in this repo." +msgstr "" +"**Gen2**:W2 / S2(`humanoid/FiveAges/Gen2` → [fiveages-gen2-robot-" +"usds](https://github.com/fiveages-sim/fiveages-gen2-robot-" +"usds),公开)。目录:`W2/`、`S2/`、`components/`。W2R 和 S2R 不在这个仓库里。" + +#~ msgid "`humanoid/FiveAges/Gen3`" +#~ msgstr "`humanoid/FiveAges/Gen3`" + +#~ msgid "Gen1/Gen2/Gen3" +#~ msgstr "Gen1/Gen2/Gen3" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/4-usd_submodules.po b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/4-usd_submodules.po index cbb1a41..16e02d6 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/4-usd_submodules.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/4-usd_submodules.po @@ -93,21 +93,6 @@ msgstr "" msgid "W2 / S2 / Gen2 (public; `W2/`, `S2/`, `components/`)" msgstr "W2 / S2 / Gen2(公开;`W2/`、`S2/`、`components/`)" -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 8415e98ab57748b5bba088a462fbdee1 -msgid "`humanoid/FiveAges/Gen3`" -msgstr "`humanoid/FiveAges/Gen3`" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 32345e1f2a52418181fbf28d2e46dcb9 -msgid "fiveages-gen3-robot-usds" -msgstr "fiveages-gen3-robot-usds" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 7a384554663d4ffc89c81bc84f71f47b -msgid "WCE3 / Gen3 (private remote)" -msgstr "WCE3 / Gen3(私有远端)" - #: ../../source/4-reference/simulation/4-usd_submodules.md #: 47c364e73ca447178768a60f177435ed msgid "`humanoid/Galbot`" @@ -138,25 +123,6 @@ msgstr "ubtech-usds" msgid "Ubtech humanoid" msgstr "Ubtech 人形机器人" -#: ../../source/4-reference/simulation/4-usd_submodules.md:17 -#: d98045822c2c4082af65373f31ed6cf5 -msgid "Gen1/Gen2/Gen3" -msgstr "Gen1/Gen2/Gen3" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:19 -#: 29ae225de347444ea9a9ae0679b9de2e -msgid "" -"FiveAges robot USD assets organized by generation. Names below are from " -"the [robot_usds README](https://github.com/fiveages-" -"sim/robot_usds/blob/main/README.md) Humanoid → FiveAges table. **Gen1 and" -" Gen2 remotes are public; Gen3 is still private.** URDF gitlinks: " -"[FiveAges robot descriptions](../descriptions/4-fiveages_umbrella.md)." -msgstr "" -"FiveAges 机器人 USD 按代划分。下列名称来自" -"[robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md)" -"Humanoid → FiveAges 表。**Gen1 与 Gen2 远端已公开;Gen3 仍为私有。** URDF" -"gitlink:[FiveAges 机器人描述](../descriptions/4-fiveages_umbrella.md)。" - #: ../../source/4-reference/simulation/4-usd_submodules.md:21 #: b3a4ca7208c84f628ae45fc5ba6394d3 msgid "Gen1" @@ -190,32 +156,6 @@ msgstr "" "**仓库:**" "[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds)" -#: ../../source/4-reference/simulation/4-usd_submodules.md:31 -#: 331d9d05d94b4a32bf1d00bc54ae8b64 -msgid "" -"README names: **W2 / S2**. Path: `humanoid/FiveAges/Gen2`. Public tree: " -"`W2/`, `S2/`, `components/`. **W2R and S2R are not open** (not in this " -"repo; URDF remotes stay private)." -msgstr "" -"README 名称:**W2 /" -"S2**。路径:`humanoid/FiveAges/Gen2`。公开目录:`W2/`、`S2/`、`components/`。**W2R 与 S2R" -"尚未开放**(不在此仓库;URDF 远端仍为私有)。" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:33 -#: 683f7f881fb74ca78947f6246cc541d1 -msgid "Gen3" -msgstr "Gen3" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:35 -#: 652c5be862204b7798b53e84322fbe4a -msgid "**Repository:** fiveages-gen3-robot-usds" -msgstr "**仓库:** fiveages-gen3-robot-usds" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:37 -#: 7316079485a948dd82fd598e38f54c2a -msgid "README name: **WCE3**. Path: `humanoid/FiveAges/Gen3`. Private remote." -msgstr "README 名称:**WCE3**。路径:`humanoid/FiveAges/Gen3`。私有远端。" - #: ../../source/4-reference/simulation/4-usd_submodules.md:39 #: 4a0e2f07ec9242f298ccb49c528868fe msgid "Galbot" @@ -407,3 +347,42 @@ msgstr "[FaSim-Isaac](2-fasim_isaac.md)" #~ msgid "README names: **W2 / S2**. Path: `humanoid/FiveAges/Gen2`." #~ msgstr "README 名称:**W2 / S2**。路径:`humanoid/FiveAges/Gen2`。" +#: ../../source/4-reference/simulation/4-usd_submodules.md:16 +#: 309b00a7a5094b27a4ed84d1e95448d6 +msgid "Gen1 and Gen2" +msgstr "Gen1 和 Gen2" + +#: ../../source/4-reference/simulation/4-usd_submodules.md:18 +#: 01bdc5dfd73d46c2be419dc87e61c5b1 +msgid "" +"FiveAges robot USD, by generation. Names below are from the [robot_usds " +"README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) " +"Humanoid → FiveAges table. The Gen1 and Gen2 remotes are public. URDF " +"gitlinks: [FiveAges robot " +"descriptions](../descriptions/4-fiveages_umbrella.md)." +msgstr "" +"第五纪机器人的 USD,按代划分。下面的名称来自 [robot_usds README](https://github.com/fiveages-" +"sim/robot_usds/blob/main/README.md) 的 Humanoid → FiveAges 表。Gen1 和 Gen2 " +"的远端是公开的。URDF gitlink 见 " +"[第五纪机器人描述](../descriptions/4-fiveages_umbrella.md)。" + +#: ../../source/4-reference/simulation/4-usd_submodules.md:30 +#: cdaae5e7a54746dd843760def7e1581f +msgid "" +"README names: **W2 / S2**. Path: `humanoid/FiveAges/Gen2`. Public tree: " +"`W2/`, `S2/`, `components/`. W2R and S2R are not in this repo. Their URDF" +" remotes stay private." +msgstr "" +"README 名称:**W2 / " +"S2**。路径:`humanoid/FiveAges/Gen2`。公开目录:`W2/`、`S2/`、`components/`。W2R 和 S2R" +" 不在这个仓库里。它们的 URDF 远端仍是私有的。" + +#~ msgid "`humanoid/FiveAges/Gen3`" +#~ msgstr "`humanoid/FiveAges/Gen3`" + +#~ msgid "Gen1/Gen2/Gen3" +#~ msgstr "Gen1/Gen2/Gen3" + +#~ msgid "Gen3" +#~ msgstr "Gen3" + diff --git a/locale/zh_CN/LC_MESSAGES/5-developer/3-packaging_deb.po b/locale/zh_CN/LC_MESSAGES/5-developer/3-packaging_deb.po index 1a591d9..b67b657 100644 --- a/locale/zh_CN/LC_MESSAGES/5-developer/3-packaging_deb.po +++ b/locale/zh_CN/LC_MESSAGES/5-developer/3-packaging_deb.po @@ -64,17 +64,6 @@ msgstr "" "[fiveages-sim/robot-descriptions-common 发行版](https://github.com/fiveages-" "sim/robot-descriptions-common/releases)" -#: ../../source/5-developer/3-packaging_deb.md:10 -#: 8bab2bccbcd44830aa3d05b7ed5b4fd3 -msgid "" -"arms_ros2_control (`ros-jazzy-arms-ros2-control`, optional) — [fiveages-" -"sim/arms_ros2_control releases](https://github.com/fiveages-" -"sim/arms_ros2_control/releases)" -msgstr "" -"arms_ros2_control(`ros-jazzy-arms-ros2-control`,可选)— [fiveages-" -"sim/arms_ros2_control 发行版](https://github.com/fiveages-" -"sim/arms_ros2_control/releases)" - #: ../../source/5-developer/3-packaging_deb.md:12 #: 3a716c34a44549b2b386b3ead02cff36 msgid "Package Documentation" @@ -368,3 +357,30 @@ msgstr "[源码与 Debian 包](../3-concepts/5-source_vs_deb.md)" #~ msgid "Version management" #~ msgstr "版本管理" +#: ../../source/5-developer/3-packaging_deb.md:10 +#: 0bc1ebed66a545768944e2c023c56401 +msgid "" +"arms_ros2_control (`ros-jazzy-arms-ros2-control`) — [fiveages-" +"sim/arms_ros2_control releases](https://github.com/fiveages-" +"sim/arms_ros2_control/releases). The standard package includes " +"`ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning`. " +"`./scripts/install_core_debs.sh --only arms` installs this package, not " +"`ros-jazzy-arms-ros2-control-full`." +msgstr "" +"arms_ros2_control(`ros-jazzy-arms-ros2-control`),见 [fiveages-" +"sim/arms_ros2_control 的 Release](https://github.com/fiveages-" +"sim/arms_ros2_control/releases)。标准包包含 " +"`ocs2_wbc_controller`、`ocs2_humanoid` 和 " +"`lina_planning`。`./scripts/install_core_debs.sh --only arms` 装的是这个包,不是 " +"`ros-jazzy-arms-ros2-control-full`。" + +#~ msgid "" +#~ "arms_ros2_control (`ros-jazzy-arms-" +#~ "ros2-control`, optional) — [fiveages-" +#~ "sim/arms_ros2_control releases](https://github.com/fiveages-" +#~ "sim/arms_ros2_control/releases)" +#~ msgstr "" +#~ "arms_ros2_control(`ros-jazzy-arms-ros2-control`,可选)—" +#~ " [fiveages-sim/arms_ros2_control " +#~ "发行版](https://github.com/fiveages-sim/arms_ros2_control/releases)" + diff --git a/locale/zh_CN/LC_MESSAGES/6-more_applications/3-vla_collect_train_deploy.po b/locale/zh_CN/LC_MESSAGES/6-more_applications/3-vla_collect_train_deploy.po index 009c1e7..8084ff1 100644 --- a/locale/zh_CN/LC_MESSAGES/6-more_applications/3-vla_collect_train_deploy.po +++ b/locale/zh_CN/LC_MESSAGES/6-more_applications/3-vla_collect_train_deploy.po @@ -106,16 +106,6 @@ msgstr "" "2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md) — " "`./quick_start.sh` 菜单选 **全身**。" -#: ../../source/6-more_applications/3-vla_collect_train_deploy.md:19 -#: 23cd265f52a846dd8a7baac9154f7130 -msgid "" -"[ocs2_wbc_controller](../4-reference/controllers/3-ocs2_wbc.md) — private" -" submodule; public loader is `full_body.launch.py`. Topics and FSM " -"values: that package README after access." -msgstr "" -"[ocs2_wbc_controller](../4-reference/controllers/3-ocs2_wbc.md) — " -"私有子模块;公开加载入口是 `full_body.launch.py`。话题和状态机取值:开通后见该包 README。" - #: ../../source/6-more_applications/3-vla_collect_train_deploy.md:20 #: 7fe6678cf44348228ca902427bf615af msgid "" @@ -286,3 +276,15 @@ msgstr "这些内容落地后应单独写成操作指南。在此之前,用上 #~ "pages." #~ msgstr "未列出的参数,以这些页面链接的包 README 为准。" +#: ../../source/6-more_applications/3-vla_collect_train_deploy.md:19 +#: d2e900467f0c446b93961067adc19491 +msgid "" +"[ocs2_wbc_controller](../4-reference/controllers/3-ocs2_wbc.md) — run it " +"from the `ros-jazzy-arms-ros2-control` deb. The public loader is " +"`full_body.launch.py`. Open the source repository to read topics and FSM " +"values that are only in that README." +msgstr "" +"[ocs2_wbc_controller](../4-reference/controllers/3-ocs2_wbc.md):从 `ros-" +"jazzy-arms-ros2-control` 这个 deb 运行。公开侧的加载入口是 `full_body.launch.py`。只在源码 " +"README 里的话题和 FSM 取值,打开源码仓库再看。" + diff --git a/scripts/check_zh_mix.py b/scripts/check_zh_mix.py index 3afcea1..b6f251e 100755 --- a/scripts/check_zh_mix.py +++ b/scripts/check_zh_mix.py @@ -36,7 +36,7 @@ deb apt rviz moveit colcon rosdep gazebo isaac isaacsim lerobot fasim fiveages sphinx myst furo ubuntu jazzy nvidia github git python linux docker home hold movej arx galbot dobot cr5 hightorque panthera ht - acone dexcap pico lift lift2s gen1 gen2 gen3 w1 w2 w2r s2 s2r wce3 + acone dexcap pico lift lift2s gen1 gen2 gen3 w1 w2 w2r s2 s2r int32 string jointstate posestamped mock_components hardware robot type launch skill skills deb humanoid composer webxr xrobotoolkit enterprise consumer app pc service overlay setup bash cmake diff --git a/source/0-overview/1-architecture.md b/source/0-overview/1-architecture.md index 35b5c13..179bc26 100644 --- a/source/0-overview/1-architecture.md +++ b/source/0-overview/1-architecture.md @@ -85,7 +85,7 @@ Robot descriptions define the URDF/xacro models, visual meshes, and ros2_control - **robot_descriptions** — Public umbrella that aggregates brand-specific packages - **robot-descriptions-common** — Shared grippers, hands, sensors, and launch utilities -- **humanoid/FiveAges** — Gitlink packages under that umbrella (not a separate `robot-descriptions-fiveages` repo). **Public:** W1, W2, S2, `fa-w2-components`. **Still private:** **W2R**, **S2R** (not open yet), Gen3. Paths: [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md) +- **humanoid/FiveAges** — Gitlink packages under that umbrella. There is no separate `robot-descriptions-fiveages` repo. **Public:** W1, W2, S2, `fa-w2-components`. **Still private:** **W2R** and **S2R**. Paths: [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md) - **Brand packages** — Per-vendor descriptions (dobot, arx, galbot, etc.) ### L2: Hardware Interfaces diff --git a/source/0-overview/2-learning_path.md b/source/0-overview/2-learning_path.md index c441f08..5b5465d 100644 --- a/source/0-overview/2-learning_path.md +++ b/source/0-overview/2-learning_path.md @@ -191,87 +191,79 @@ Use the matching **branch README** and `./quick_start.sh`. **Acone** / **AC One* - **Acone** / **AC One** — **dual-arm**; same `arx-lift2s` workspace, pick ACone in `quick_start` for co-debug - **[HighTorque Panthera HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md)** — dual-arm: `git clone -b panthera-ht …` then `./init_repo.sh` / `./quick_start.sh` -### Internal Path (FA Robots) +### Internal path (FiveAges robots) -```{admonition} Internal Access Required -:class: warning - -These links need repository access. Without it, GitHub does not open the page. That is expected. +FiveAges robots (W1, W2, W2R, S2, S2R, and the dual-arm CCS) use [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws), default branch `fa-w2`. W1, W2, and S2 URDF, plus the Gen1 and Gen2 USD remotes, are public. W2R and S2R are not. The description map is [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md). -FA **deploy** (W1, W2, W2R, S2, S2R, dual-arm CCS) uses [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) (default branch `fa-w2`). W1/W2/S2 URDF and Gen1/Gen2 USD remotes are public; **W2R and S2R are not open**. See [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md). -``` +Open the checkout you were given and follow that repository’s README. The script name shared with the public workspace is `./init_repo.sh`. -Open the private checkout you were given, then follow **that repository’s README**. The shared script name is `./init_repo.sh`. Flags and robot IDs stay in that README. +GitHub hides a private repository from anyone without access. That does not block every binary. -| Repository | What it is | Access | +| Repository | Use it for | Access | |------------|------------|--------| -| [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) | Internal workspace (`fa-w2`) | Required | -| [fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description) | W2R URDF | Required | -| [fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) | S2R URDF | Required | -| [fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description) | Gen3 URDF | Required | -| [fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3-robot-usds) | Gen3 USD | Required | -| [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) | Whole-body controller | Required | -| [ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid) | Wheeled-arm motion library | Required | +| [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) | The internal workspace (`fa-w2`) | Clone and follow its README | +| [fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description) | W2R URDF | Read or change that description | +| [fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) | S2R URDF | Read or change that description | +| [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) | Whole-body controller source | Read or change the source | +| [ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid) | Wheeled-arm motion library source | Read or change the source | -More private descriptions, hardware interfaces, and teleop checkouts are linked on the [Repository Map](3-repo_map.md). Public W1 / W2 / S2 URDF stays on [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md). +You can run whole-body control without those two source checkouts. The standard GitHub Release package `ros-jazzy-arms-ros2-control` already contains `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning` ([arms deb notes](https://github.com/fiveages-sim/arms_ros2_control/blob/main/README.deb.md)). In `open-deploy-ws` or `fa-deploy-ws`, choose `d` for arms in `./init_repo.sh`, or run `./scripts/install_core_debs.sh --only arms`. The script installs that standard package. It does not install `ros-jazzy-arms-ros2-control-full`, and the package is not on Ubuntu or ROS apt. Private descriptions, other hardware interfaces, and teleop trees are separate repositories. They stay on the [Repository Map](3-repo_map.md). Public W1, W2, and S2 URDF stays on [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md). **Tasks:** -1. Open [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) and run the init / quick-start scripts named in that README. + +1. Open [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) and run the init and quick-start scripts named in that README. 2. Follow [fa-deploy-ws Setup](../1-getting_started/4-fa_deploy_ws.md). -**Safety:** Verify in `mock_components` (or that workspace’s documented sim path) before `hardware:=real`. +**Safety:** Prove the motion in `mock_components`, or in the sim path that workspace documents, before you set `hardware:=real`. -## Day 7: FaSim integration exam +## Day 7: Bring one new robot into FaSim -**Goal:** Bring **one new robot** into FaSim so Isaac and the ROS 2 运控 stack move it. Pass by taking that robot through mock, then sim, until you can see the joints move. Replaying the existing CR5 or W2 demo is only a warm-up. +**Goal:** Connect a robot that is not already a demo, so Isaac and the ROS 2 stack move it. You are done when a command moves that robot’s joints in the viewport. Replaying CR5 or W2 is practice, not the task. -**You already need** Days 0–3: `./init_repo.sh`, a launch that reaches HOLD with `hardware:=mock_components`, and FaSim `./init.sh` / `./run.sh`. Isaac Sim is installed and `ISAACSIM_DIR` is set. +**Before you start.** Finish Days 0–3. You can reach HOLD with `hardware:=mock_components`, Isaac Sim is installed, `ISAACSIM_DIR` is set, and you have run FaSim `./init.sh` and `./run.sh`. -Pick one robot. Add odometry, Nav2, or a dexterous hand only when this robot has them. Work through the steps below. +File layout: [Add a Robot](../2-how_to/6-deployment/10-add_a_robot.md). Starting Isaac and choosing a connection: [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md). What the two connections do: [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md). -Procedure and file layout: [Add a Robot](../2-how_to/6-deployment/10-add_a_robot.md). Isaac start and the two connections: [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md). Mechanism: [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md). +### Build these four pieces -### Required for every robot +1. **A description.** Add a `{robot}_description` package whose xacro includes a `ros2_control` block. Simulation plugins come from [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro). Before you open Isaac, `ros2 launch ocs2_arm_controller demo.launch.py robot:=` reaches HOLD. Leave `hardware` at the default. -1. **Description.** A `{robot}_description` package whose xacro has a `ros2_control` block. Simulation plugins come from [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro). `ros2 launch ocs2_arm_controller demo.launch.py robot:=` (omit `hardware:=`) reaches HOLD before you open Isaac. -2. **USD.** A stage `./run.sh` can open, with one ArticulationRoot for this robot, under [robot_usds](https://github.com/fiveages-sim/robot_usds) or a project scene you can access. There is no `./run.sh --robot`. -3. **One sim connection** for those joints. - - **Topic bridge:** `hardware:=isaac` → `TopicBasedSystem`. The xacro `joint_commands_topic` / `joint_states_topic` equal that graph’s `topicName`. The shared macro writes `/isaac/joint_command` and `/isaac/joint_states`. A robot graph may use other names (W2 topic-bridge payload: `/joint_command` and `/joint_states`). `demo.launch.py` has no namespace argument. - - **In-process:** Play a payload that contains `ROS2ControlLaunch` (W2: [`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)). The node sets `hardware=isaac_sim` and `isaac_prim_path`. The description xacro must accept `isaac_sim`. -4. **Controllers.** Arm or split body: `ocs2_arm_controller` (`demo` or `split_body`). Whole body only when this robot’s planner model includes the mobile base: `full_body.launch.py` and, with access, [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller). Leave `infoFile` empty to keep the description default. To lock a mobile base, use `mobile_base_tcp` and `BASE_LOCK`. `full_body` together with a `fixed_base` info file has no virtual chassis joint for that lock, and arm enable can stay waiting. -5. **Motion you can see.** A small FSM home or joint target changes the same joints in Isaac. +2. **A USD stage.** `./run.sh` opens it, and the stage has one ArticulationRoot for this robot. Put it under [robot_usds](https://github.com/fiveages-sim/robot_usds), or in a project scene you can open. There is no `./run.sh --robot`. -### Only if this robot has it +3. **One connection for those joints.** + - **Topic bridge.** `hardware:=isaac` uses `topic_based_ros2_control/TopicBasedSystem`. The xacro `joint_commands_topic` / `joint_states_topic` and the graph `topicName` are the same strings. The shared macro writes `/isaac/joint_command` and `/isaac/joint_states`. W2’s topic-bridge payload uses `/joint_command` and `/joint_states`. `demo.launch.py` has no namespace argument. + - **In-process.** Press Play on a payload that contains `ROS2ControlLaunch`. W2’s in-process payload is [`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda). The node sets `hardware=isaac_sim` and `isaac_prim_path`. The description xacro must accept `isaac_sim`. -| Piece | When | What to wire | -|-------|------|----------------| -| Chassis / odom | It has a mobile base | Isaac publishes `world → odom → base_*`. `robot_state_publisher` publishes the URDF tree (`base_footprint → base_link` when both exist). OCS2 `baseFrame` is that same link. One publisher per TF edge. A ROS namespace does not rename `frame_id`. | -| Gripper or hand | It has one | Launch `type` / `left_type` / `right_type`. There is no `gripper:=`. | -| Navigation | The scene drives the base on a map | `NavigationLaunch` on the USD. `map` is a path relative to the opened `env/` layer. It starts `navigation_isaac_gt.launch.py`. Composer `ros2-stack` is a separate host process. | -| Second robot | Two articulations in one stage | Each root has its own graph and `ROS2ControlLaunch` `namespace`. Topics live under `//`. Frame names stay `world`, `odom`, `base_link`. | +4. **Controllers that match the body.** An arm, or a split-body robot, uses `ocs2_arm_controller` (`demo` or `split_body`). A planner model that includes the mobile base uses `full_body.launch.py` and `ocs2_wbc_controller`. That controller is already in the `ros-jazzy-arms-ros2-control` deb from Day 6. Cloning [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) is how you read or edit the source. Leave `infoFile` empty to keep the description default. Lock a mobile base with the `mobile_base_tcp` info file and `BASE_LOCK`. `full_body` together with a `fixed_base` info file has no virtual chassis joint for that lock, and arm enable can stay in `WAITING_FOR_ENABLE_POLICY`. -### Phases +### Work in this order -1. Mock: the demo launch above, FSM HOLD, joint names from the xacro. -2. `./run.sh`, open your USD, Play runs physics. -3. Topic bridge **or** in-process graph. `ros2 topic echo` the joint-state topic, or `ros2 control list_controllers`. -4. Command a small motion. The sim joints move. On the in-process graph, `ros2 topic hz /clock` tracks the physics step. +1. In mock, the launch above reaches HOLD, and the joint names match the xacro. +2. Run `./run.sh`, open your USD, and press Play so physics runs. +3. Connect with the topic bridge or the in-process graph. Read the joint-state topic with `ros2 topic echo`, or run `ros2 control list_controllers`. +4. Send a small joint target. The same joints move in Isaac. On the in-process graph, `ros2 topic hz /clock` follows the physics step. ### What you hand in -- The description package (or branch) and the USD path you opened. -- The launch line **or** the `ROS2ControlLaunch` prim you played. -- The joint-state topic or controller list you saw, and the motion you commanded. +- The description package, or the branch, and the USD path you opened. +- The launch line, or the `ROS2ControlLaunch` prim you played. +- The joint-state topic or the controller list, and the motion you sent. + +### How you know it works + +Check joint control, base motion, the end effector, and sensor data against the robot you chose. + +**Joints.** Mock reaches HOLD, Play runs, and the joint names in the state topic or in `ros2 control list_controllers` match the xacro. A command moves those joints in the viewport. On an in-process graph, `/robot_description` comes from `robot_state_publisher`, and the controller manager starts with robot-description publishing turned off. + +**Base.** Isaac publishes `world → odom → base_*`. `robot_state_publisher` publishes the URDF tree, including `base_footprint → base_link` when both links exist. OCS2 `baseFrame` is that same link. One node publishes each TF edge. A ROS namespace does not rename `frame_id`. A base that drives on a map uses `NavigationLaunch` on the USD. `map` is a path relative to the opened `env/` layer, and the node starts `navigation_isaac_gt.launch.py`. Composer `ros2-stack` is a separate process on the host. + +**End effector.** The launch arguments `type`, `left_type`, or `right_type` name this gripper or hand, and you can see it open or close. There is no `gripper:=` argument. -### Pass when you can show +**Sensors.** While Play is running, the camera or lidar topics from the scene are publishing. Camera rigs stay on the scene USD. -- Mock HOLD, then sim Play, on **this** robot. -- Joint state or the controller state interfaces match the xacro joint names. -- A command moves those joints in Isaac. -- If the payload publishes odometry: `world → odom → base_*` from Isaac, URDF tree from `robot_state_publisher`, and no second node on the same edge. -- In-process: `/robot_description` comes from `robot_state_publisher`. The controller manager is started with robot-description publishing off. +**A second robot on the same stage.** Each ArticulationRoot has its own graph and its own `ROS2ControlLaunch` `namespace`. Topics live under `//`. Frame names stay `world`, `odom`, and `base_link`. -A motion that finishes too fast is a `/clock` problem (physics-step clock versus playback tick). The FaSim reference describes that clock. It is not fixed by editing joint gains. +A motion that finishes much too fast is a `/clock` problem. The in-process W2 payload takes the clock from the physics step. The topic-bridge payload still takes it from the playback tick. The [FaSim reference](../4-reference/simulation/2-fasim_isaac.md) describes that clock. Changing joint gains does not fix it. ## Optional: Synthetic data (Isaac) diff --git a/source/0-overview/3-repo_map.md b/source/0-overview/3-repo_map.md index 352ef67..c2cdcac 100644 --- a/source/0-overview/3-repo_map.md +++ b/source/0-overview/3-repo_map.md @@ -59,7 +59,7 @@ There is **no** separate `robot-descriptions-fiveages` umbrella (404). Remotes b | [fa-s2-description](https://github.com/fiveages-sim/fa-s2-description) | [P] | `humanoid/FiveAges/fiveages_s2_description` | | [fa-w2-components](https://github.com/fiveages-sim/fa-w2-components) | [P] | `humanoid/FiveAges/fiveages_w2_common_description` | -[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) (`fiveages_s2r_description`, **still private — not open**) and [fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description) (`fiveages_wce3_description`, still private) appear only on `robot_descriptions` **`feature/agilex`** (`Gen2` / `Gen3`). Both links need access. +[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) (`fiveages_s2r_description`) is still private and appears on `robot_descriptions` **`feature/agilex`** under Gen2. The link needs access. ## L2: Hardware Interfaces @@ -94,9 +94,11 @@ There is **no** separate `robot-descriptions-fiveages` umbrella (404). Remotes b |------------|------------|---------| | [arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control) | [P] | OCS2 arm controller, teleop plugins | | [legubiao/ocs2_ros2](https://github.com/legubiao/ocs2_ros2) | [X] | OCS2 MPC library (branch: ros2) | -| [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) | [I] | Whole-body control | -| [ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid) | [I] | Wheeled-arm humanoid library | -| [lina_planning](https://github.com/fiveages-sim/lina_planning) | [I] | Trajectory primitives | +| [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) | [I] | Whole-body controller source. The binary is in `ros-jazzy-arms-ros2-control` | +| [ocs2-humanoid](https://github.com/fiveages-sim/ocs2-humanoid) | [I] | Motion-library source. Same standard deb | +| [lina_planning](https://github.com/fiveages-sim/lina_planning) | [I] | Trajectory-primitive source. Same standard deb | + +The standard package is the one `./scripts/install_core_debs.sh --only arms` installs ([arms deb notes](https://github.com/fiveages-sim/arms_ros2_control/blob/main/README.deb.md)). It is a GitHub Release deb, not an apt package, and it is not `ros-jazzy-arms-ros2-control-full`. Clone the three repositories above to read or change the source. Private descriptions and the hardware interfaces in L2 are not in this package. ## L4: Simulation @@ -107,7 +109,6 @@ There is **no** separate `robot-descriptions-fiveages` umbrella (404). Remotes b | [fiveages-env-usds](https://github.com/fiveages-sim/fiveages-env-usds) | [P] | Environment USD assets | | [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds) | [P] | Gen1 USD (W1) | | [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds) | [P] | Gen2 USD (W2 / S2; not W2R / S2R) | -| [fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3-robot-usds) | [I] | Gen3 USD (WCE3) | | [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) | [I] | FaSim project assets | ## L5: Teleop and Applications diff --git a/source/0-overview/4-public_vs_internal.md b/source/0-overview/4-public_vs_internal.md index 00cc31e..1304413 100644 --- a/source/0-overview/4-public_vs_internal.md +++ b/source/0-overview/4-public_vs_internal.md @@ -8,8 +8,8 @@ This page explains the differences between the public (`open-deploy-ws`) and int |--------|-------------|---------------| | **Workspace** | `open-deploy-ws` | `fa-deploy-ws` | | **Access** | Anyone (public GitHub) | FiveAges team only | -| **Robots** | Dobot, ARX, Galbot, HighTorque, quadruped | FA W2/W2R/S2/S2R, dual-arm CCS | -| **Real Hardware** | ARX Lift 2S (full-body), Acone (dual-arm), HighTorque Panthera HT | All FA robots | +| **Robots** | Dobot, ARX, Galbot, HighTorque, quadruped | FiveAges W2, W2R, S2, S2R, dual-arm CCS | +| **Real Hardware** | ARX Lift 2S (full-body), Acone (dual-arm), HighTorque Panthera HT | FiveAges robots on that workspace | | **Submodules** | Public only | Public + private | | **OCS2** | GitHub Release `.deb` or source | Full source (default) | | **Purpose** | Learning, OSS development, real robot deployment | Production deployment | @@ -86,8 +86,8 @@ This workspace requires private repository access. Contact your team lead if you ### Features - Internal workspace for FiveAges wheeled-arm humanoids (W2, W2R, S2, S2R) and dual-arm CCS -- Description remotes live as gitlinks under [robot_descriptions `humanoid/FiveAges/`](../4-reference/descriptions/4-fiveages_umbrella.md) — not a separate `robot-descriptions-fiveages` umbrella. **Public:** W1, W2, S2, `fa-w2-components`, plus Gen1/Gen2 USD. **Still private:** **W2R**, **S2R** (not open yet), Gen3. There is no `open-deploy-ws` Gen1 or Gen2 branch. -- Full OCS2 + WBC source when that workspace’s README says so +- Description remotes live as gitlinks under [robot_descriptions `humanoid/FiveAges/`](../4-reference/descriptions/4-fiveages_umbrella.md). There is no separate `robot-descriptions-fiveages` umbrella. **Public:** W1, W2, S2, `fa-w2-components`, plus Gen1 and Gen2 USD. **Still private:** **W2R** and **S2R**. There is no `open-deploy-ws` Gen1 or Gen2 branch. +- Running `ocs2_wbc_controller` uses the `ros-jazzy-arms-ros2-control` deb. A full source checkout of OCS2 or WBC is what that workspace’s README describes when you are changing the code. ```{admonition} Source of truth :class: important diff --git a/source/1-getting_started/3-open_deploy_ws.md b/source/1-getting_started/3-open_deploy_ws.md index 90210a5..36e9aea 100644 --- a/source/1-getting_started/3-open_deploy_ws.md +++ b/source/1-getting_started/3-open_deploy_ws.md @@ -157,14 +157,14 @@ colcon build --packages-up-to ocs2_arm_controller taku_description source install/setup.bash # 分体 — public mock path (arm MPC + body/head basic + grippers) ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku -# 全身 — needs the private ocs2_wbc_controller submodule +# 全身 — needs ocs2_wbc_controller from the arms deb, or from a source checkout ros2 launch ocs2_arm_controller full_body.launch.py robot:=taku ::: -```{admonition} Public mock vs private WBC +```{admonition} Public mock and the WBC package :class: warning -Shipping `config/ocs2/fixed_base_tcp.info` in the public description does **not** mean public mock can run `ocs2_wbc_controller`. Public mock uses **`split_body.launch.py`**. **`full_body.launch.py`** needs the private WBC submodule. +Shipping `config/ocs2/fixed_base_tcp.info` in the public description does not make mock start `ocs2_wbc_controller`. Public mock uses `split_body.launch.py`. `full_body.launch.py` needs the `ocs2_wbc_controller` package. Install it with the arms GitHub Release deb (`ros-jazzy-arms-ros2-control`: arms = `d` in `./init_repo.sh`, or `./scripts/install_core_debs.sh --only arms`), or build it from the source checkout. The info file alone is not the controller. ``` | Launch | Controllers | @@ -172,7 +172,7 @@ Shipping `config/ocs2/fixed_base_tcp.info` in the public description does **not* | `split_body.launch.py` | `ocs2_arm_controller` (dual-arm MPC, `info_file_name: task`) + `body_joint_controller` (`folding_low/high` + `waist_pitch/yaw`) + `head_joint_controller` (`head_yaw/pitch/roll`) + grippers | | `full_body.launch.py` | `ocs2_wbc_controller` (body + dual arms + head, `info_file_name: fixed_base_tcp`) + grippers | -When that config and the private module are present, full-body default `headMode` is **`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). `target_manager.yaml` has `enable_head_control: false`, so the head follows OCS2 rather than a joint-space marker. Split-body still teleops the head through `head_joint_controller` (RViz joint panel). Taku body-relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`. +When that config and `ocs2_wbc_controller` are installed, full-body default `headMode` is **`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). `target_manager.yaml` has `enable_head_control: false`, so the head follows OCS2 rather than a joint-space marker. Split-body still teleops the head through `head_joint_controller` (RViz joint panel). Taku body-relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`. In RViz, set **Fixed Frame** to **`base_link`** (or the coincident `base_footprint`). OCS2 `baseFrame` / markers use `base_link`. There is **no** `hardware:=mock` — the default key is `mock_components`. `hardware:=gz` may need a GPU; mock + RViz is the default verify path. The package README also lists `hardware:=isaac` on the same split / full launches. @@ -182,7 +182,7 @@ The description is **inferred** (public Dyna kinematics; not official Dyna specs ## Empty private directories and `COLCON_IGNORE` -In **public** mode, `./init_repo.sh` skips private nested modules listed in [`submodules_visibility.conf`](https://github.com/fiveages-sim/open-deploy-ws/blob/main/submodules_visibility.conf). Under `src/arms_ros2_control` those placeholders stay empty, including: +In **public** mode, `./init_repo.sh` skips private nested modules listed in [`submodules_visibility.conf`](https://github.com/fiveages-sim/open-deploy-ws/blob/main/submodules_visibility.conf). If you chose the arms deb, you do not need these directories to run: `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning` are already in `ros-jazzy-arms-ros2-control`. If you chose source, the placeholders under `src/arms_ros2_control` stay empty until you can clone them, including: - `controller/ocs2_wbc_controller` - `libraries/lina_planning` diff --git a/source/1-getting_started/5-faq.md b/source/1-getting_started/5-faq.md index b8f9197..0138d3e 100644 --- a/source/1-getting_started/5-faq.md +++ b/source/1-getting_started/5-faq.md @@ -88,7 +88,7 @@ Public init leaves private nested modules empty (`controller/ocs2_wbc_controller ### Q: Where is Taku? -On `robot_descriptions` branch **`feature/agilex`** at `humanoid/Dyna/taku_description` — not on the default `main` submodule pin. Visualize: `ros2 launch robot_common_launch humanoid.launch.py robot:=taku`. Control: `split_body.launch.py` / `full_body.launch.py` with `robot:=taku` ([package README](https://github.com/fiveages-sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md) §3.1 / §3.2). Public mock is **`split_body.launch.py`**; **`full_body.launch.py`** needs the private `ocs2_wbc_controller` submodule. There is no lean `open-deploy-ws` Taku branch. Checkout steps: [open-deploy-ws Setup](3-open_deploy_ws.md). +On `robot_descriptions` branch **`feature/agilex`** at `humanoid/Dyna/taku_description` — not on the default `main` submodule pin. Visualize: `ros2 launch robot_common_launch humanoid.launch.py robot:=taku`. Control: `split_body.launch.py` / `full_body.launch.py` with `robot:=taku` ([package README](https://github.com/fiveages-sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md) §3.1 / §3.2). Public mock is **`split_body.launch.py`**. **`full_body.launch.py`** needs `ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or from a source checkout. See [OCS2 WBC Controller](../4-reference/controllers/3-ocs2_wbc.md). There is no lean `open-deploy-ws` Taku branch. Checkout steps: [open-deploy-ws Setup](3-open_deploy_ws.md). ### Q: colcon build fails with missing dependency diff --git a/source/2-how_to/1-basic_operations/1-run_mock_demo.md b/source/2-how_to/1-basic_operations/1-run_mock_demo.md index c0f8d88..050b76d 100644 --- a/source/2-how_to/1-basic_operations/1-run_mock_demo.md +++ b/source/2-how_to/1-basic_operations/1-run_mock_demo.md @@ -54,7 +54,7 @@ source install/setup.bash ros2 launch ocs2_arm_controller split_body.launch.py robot:=taku ``` -Public mock is **`split_body.launch.py`**: `ocs2_arm_controller` (dual-arm MPC) plus `body_joint_controller` / `head_joint_controller` and Dynaclaw via `adaptive_gripper_controller` (`*_gripper_joint`; mimic jaw in URDF). There is no chassis or per-arm basic controller. **`full_body.launch.py robot:=taku`** needs the private `ocs2_wbc_controller` submodule; shipping `config/ocs2/fixed_base_tcp.info` is not enough. When that config and the private module are present, full-body default `headMode` is **`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). `target_manager.yaml` has `enable_head_control: false`. Split-body still uses `head_joint_controller`. +Public mock is **`split_body.launch.py`**: `ocs2_arm_controller` (dual-arm MPC) plus `body_joint_controller` / `head_joint_controller` and Dynaclaw via `adaptive_gripper_controller` (`*_gripper_joint`; mimic jaw in URDF). There is no chassis or per-arm basic controller. **`full_body.launch.py robot:=taku`** needs `ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or from a source checkout. Shipping `config/ocs2/fixed_base_tcp.info` is not enough. When that config and the controller are installed, full-body default `headMode` is **`HEAD_GAZE`** (gaze on `head_camera_mid_optical_frame`). `target_manager.yaml` has `enable_head_control: false`. Split-body still uses `head_joint_controller`. In RViz, set **Fixed Frame** to **`base_link`** (package root) or the coincident **`base_footprint`**. OCS2 `baseFrame` / markers use `base_link` (`marker_fixed_frame` in `config/ocs2/target_manager.yaml`). diff --git a/source/2-how_to/1-basic_operations/2-switch_robot.md b/source/2-how_to/1-basic_operations/2-switch_robot.md index ade1871..95b9a13 100644 --- a/source/2-how_to/1-basic_operations/2-switch_robot.md +++ b/source/2-how_to/1-basic_operations/2-switch_robot.md @@ -50,7 +50,7 @@ ros2 launch ocs2_arm_controller demo.launch.py ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone ``` -`arx_acone` is **Acone** (dual-arm). Full-body **ARX Lift 2S** (`arx_lift2s`) uses `split_body.launch.py` / `full_body.launch.py` on the `arx-lift2s` branch — see [ARX Lift 2S](../6-deployment/9-go_real_hardware/1-arx_lift2s.md). **Taku** (`taku`) uses the same split / full launches after descriptions are on `feature/agilex`: public mock is `split_body.launch.py`; `full_body.launch.py` needs the private `ocs2_wbc_controller` submodule — [Taku / `feature/agilex`](../../1-getting_started/3-open_deploy_ws.md). HighTorque Panthera HT launch name is `panthera_ht` — see [HighTorque Panthera HT](../6-deployment/9-go_real_hardware/2-panthera_ht.md). Keep `demo.launch.py` for `cr5` / `arx_acone` / `panthera_ht`. +`arx_acone` is **Acone** (dual-arm). Full-body **ARX Lift 2S** (`arx_lift2s`) uses `split_body.launch.py` / `full_body.launch.py` on the `arx-lift2s` branch — see [ARX Lift 2S](../6-deployment/9-go_real_hardware/1-arx_lift2s.md). **Taku** (`taku`) uses the same split / full launches after descriptions are on `feature/agilex`: public mock is `split_body.launch.py`; `full_body.launch.py` needs `ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or from a source checkout — [Taku / `feature/agilex`](../../1-getting_started/3-open_deploy_ws.md). HighTorque Panthera HT launch name is `panthera_ht` — see [HighTorque Panthera HT](../6-deployment/9-go_real_hardware/2-panthera_ht.md). Keep `demo.launch.py` for `cr5` / `arx_acone` / `panthera_ht`. ## End-effectors (`type` / `left_type` / `right_type`) diff --git a/source/2-how_to/2-simulation/4-isaac_sim.md b/source/2-how_to/2-simulation/4-isaac_sim.md index 35e63f7..a862038 100644 --- a/source/2-how_to/2-simulation/4-isaac_sim.md +++ b/source/2-how_to/2-simulation/4-isaac_sim.md @@ -1,23 +1,23 @@ # Isaac Sim -Run a robot in NVIDIA Isaac Sim and connect it to the same ROS 2 运控 stack used on hardware. +Open a robot in NVIDIA Isaac Sim and drive it with the same ROS 2 stack you use on the real machine. -FaSim-Isaac is the asset workspace: `./init.sh` then `./run.sh` (or `./run_headless.sh`). Robot choice is which USD you open, not a `./run.sh --robot` flag. Path and Isaac version live in `config/fa_sim.conf` / `config/fa_sim.local.conf`. +FaSim-Isaac holds the assets. Run `./init.sh`, then `./run.sh` or `./run_headless.sh`. You choose the robot by opening its USD. There is no `./run.sh --robot`. The Isaac path and version are in `config/fa_sim.conf`, with a machine override in `config/fa_sim.local.conf`. -There are two ROS 2 connections. Pick one for a given stage. +Connect ROS 2 in one of two ways. Use one of them for a given stage. -| Launch / graph | Plugin | What moves the joints | +| What you start | Plugin | What moves the joints | |----------------|--------|------------------------| | `hardware:=isaac` | `topic_based_ros2_control/TopicBasedSystem` | OmniGraph joint topics | -| In-process `ROS2ControlLaunch` (Play) | `isaacsim_ros2_control/IsaacSimSystem` (`hardware=isaac_sim` inside the node) | Controller manager in the Isaac process | +| Play on an in-process `ROS2ControlLaunch` | `isaacsim_ros2_control/IsaacSimSystem` (`hardware=isaac_sim` inside the node) | The controller manager inside the Isaac process | -`isaac_sim` is a ros2_control hardware interface, not a second robot body. Details, clock, and TF: [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md). +`isaac_sim` is the hardware interface for that in-process controller. It is not a second robot. Clock, TF, and the rest of the mechanism: [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md). -## Prerequisites +## Before you start -- NVIDIA Isaac Sim, GPU, and a matching driver. Default directory `ISAACSIM_DIR` (`~/isaacsim` unless you override it). -- ROS 2 Jazzy workspace that already builds the robot (`open-deploy-ws` or, with access, [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws)). -- For the topic bridge, the workspace includes `topic_based_ros2_control`. For the in-process graph, `./init.sh` operation 5 has installed `fasim.ros2.nodes` into this Isaac, and the description xacro accepts `hardware` `isaac_sim`. +- Isaac Sim is installed, the GPU driver matches it, and `ISAACSIM_DIR` points at that install (`~/isaacsim` unless you set another path). +- A ROS 2 Jazzy workspace already builds this robot: `open-deploy-ws`, or [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) once you can open that repository. +- The topic bridge needs `topic_based_ros2_control` in that workspace. The in-process graph needs `./init.sh` operation 5, which installs `fasim.ros2.nodes` into this Isaac, and a description xacro that accepts `hardware` `isaac_sim`. ## Start FaSim @@ -28,13 +28,13 @@ cd FaSim-Isaac ./run.sh ::: -`./init.sh` menu ([README](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/README.md)): +`./init.sh` asks you to ([README](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/README.md)): -1. Init selected submodules (`.gitmodules` / `submodules_visibility.conf`). Public entries start checked. Private entries (including [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd)) stay unchecked until you have access. Re-runs only add what you check. -2. Update submodules already checked out (`./init.sh --update`). The FaSim repo itself is not pulled. +1. Check out the submodules you select (`.gitmodules` and `submodules_visibility.conf`). Public entries start checked. Private entries, including [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd), stay unchecked until you can open them. A later run only adds what you check. +2. Update submodules you already checked out (`./init.sh --update`). This does not pull the FaSim repository itself. 3. Download ArtVIP into `environment/ArtVIP/` (`tools/artvip_kitchen.py`). -4. Optional Isaac ROS 2 Jazzy overlay under `isaac_jazzy_ws/`. The menu asks GitHub for stable tags. If that query fails, `config/fa_sim.conf` falls back to `6.2.0` / `6.1.0` / `6.0.1`. Override with `ISAAC_SIM_VERSION=… ./init.sh`. -5. Install FaSim extensions into this Isaac (`exts/fasim.steering.nodes`, `exts/fasim.ros2.nodes`) and silence script warnings. Re-run after you reinstall Isaac. Restart Isaac so the extensions load. +4. Optionally add an Isaac ROS 2 Jazzy overlay under `isaac_jazzy_ws/`. The menu asks GitHub for stable tags. If that query fails, `config/fa_sim.conf` falls back to `6.2.0`, `6.1.0`, and `6.0.1`. Override with `ISAAC_SIM_VERSION=… ./init.sh`. +5. Install the FaSim extensions into this Isaac (`exts/fasim.steering.nodes`, `exts/fasim.ros2.nodes`) and quiet the script warnings. Run this again after you reinstall Isaac, then restart Isaac so the extensions load. `./run.sh` shows the saved backend, then asks PhysX or Newton, CPU governor, and which ROS 2 workspace to source. `./run_headless.sh` is the same menu for Headless Streaming. Non-interactive examples from the README: @@ -60,12 +60,12 @@ ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone hardware:=isaac `robot:=` is the description key (`_description`). `demo.launch.py` has no namespace argument. Do not append `namespace:=…` on this launch. -The shared macro [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro) writes: +The shared macro [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro) sets: - `joint_commands_topic` = `/isaac/joint_command` - `joint_states_topic` = `/isaac/joint_states` -Those names have to be the OmniGraph `topicName` on **this** robot. W2’s topic-bridge payload [`W2/payloads/ROS/ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda) publishes `/joint_command` and `/joint_states` instead. If the two sides differ, retarget the xacro `` (or the graph) until `ros2 topic echo` shows the same `sensor_msgs/JointState` names the controller claims. Plugin parameters: [topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md). +Those strings have to match the OmniGraph `topicName` on this robot. W2’s topic-bridge payload [`W2/payloads/ROS/ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda) publishes `/joint_command` and `/joint_states` instead. If the two sides differ, change the xacro `` or the graph until `ros2 topic echo` shows the same `sensor_msgs/JointState` names the controller is using. Plugin parameters: [topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md). `use_sim_time` follows `hardware` (`isaac` → true) unless you pass `use_sim_time:=true` or `false`. @@ -78,13 +78,13 @@ ros2 topic echo /isaac/joint_states --once A joint command on the matching command topic moves the articulation. There is no stack-wide `/target_pose`. -## In-process driver (`isaac_sim`) +## In-process hardware interface (`isaac_sim`) -Use this when the USD contains `fasim.ros2.nodes.ROS2ControlLaunch` (W2 in-process payload: [`W2/payloads/ROS/fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)). Play runs the graph. The node calls `emit_control`, which sets `hardware=isaac_sim`, passes the ArticulationRoot as `isaac_prim_path`, and starts the controller manager inside Isaac. +Use this when the USD contains `fasim.ros2.nodes.ROS2ControlLaunch`. W2’s in-process payload is [`W2/payloads/ROS/fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda). Press Play. The node calls `emit_control`, which sets `hardware=isaac_sim`, passes the ArticulationRoot as `isaac_prim_path`, and starts the controller manager inside Isaac. -You still need a description package whose ros2_control xacro includes `simulation_hardware_plugin` for `isaac_sim` ([robot_common_launch README](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/README.md)). The graph inputs are `robot`, `mode` (`demo`, `split_body`, `full_body`), `type`, and optional `namespace`, `infoFile`, `arms`. Empty `robot` reads the USD `Robot` variant; that string must be the description package stem. +The description package still has to exist. Its ros2_control xacro includes `simulation_hardware_plugin` for `isaac_sim` ([robot_common_launch README](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/README.md)). The graph inputs are `robot`, `mode` (`demo`, `split_body`, `full_body`), `type`, and the optional `namespace`, `infoFile`, and `arms`. An empty `robot` reads the USD `Robot` variant. That string is the description package stem. -On Play, confirm: +After Play, check: :::{code-block} bash ros2 control list_controllers @@ -96,7 +96,7 @@ ros2 topic hz /clock `namespace` on the graph (empty for one robot) is how a second articulation gets `//controller_manager`. It is not a `demo.launch.py` argument. Frame ids stay `world`, `odom`, and `base_link` / `base_footprint`. See the reference for TF and for `infoFile`. -Whole-body mode needs the private [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) submodule. To hold a mobile base, keep the description’s `mobile_base_tcp` info and send `BASE_LOCK`. A `full_body` graph with `infoFile` set to a `fixed_base` info file has no virtual chassis degree of freedom for that lock, and arm enable can sit in `WAITING_FOR_ENABLE_POLICY`. +Whole-body mode (`mode` `full_body`) loads `ocs2_wbc_controller`. That package is already in the GitHub Release deb `ros-jazzy-arms-ros2-control`. Choose `d` for arms in `./init_repo.sh`, or run `./scripts/install_core_debs.sh --only arms`. Cloning [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) is how you read or edit the source. To hold a mobile base, keep the description’s `mobile_base_tcp` info and send `BASE_LOCK`. A `full_body` graph whose `infoFile` points at a `fixed_base` info file has no virtual chassis joint for that lock, and arm enable can stay in `WAITING_FOR_ENABLE_POLICY`. ## What to open @@ -113,9 +113,9 @@ Gen labels and brand folders: [robot_usds reference](../../4-reference/simulatio **Isaac does not start.** `ISAACSIM_DIR` must contain the launchers named in `config/fa_sim.conf` (`isaac-sim.sh`, `isaac-sim.newton.sh`, `isaac-sim.streaming.sh`, `isaac-sim.newton.streaming.sh`). `nvidia-smi` shows a GPU. Logs: `~/.nvidia-omniverse/logs/`. -**No ROS 2 topics after Play.** Domain id and `RMW_IMPLEMENTATION` match the sourced workspace. Topic bridge: the graph’s `topicName` matches the xacro. In-process: operation 5 is installed and Isaac was restarted; the stage’s `ROS` variant is the fiveages payload, not the topic-bridge payload. +**Play starts, but no ROS 2 topics appear.** The domain id and `RMW_IMPLEMENTATION` match the workspace you sourced. For the topic bridge, the graph `topicName` matches the xacro. For the in-process graph, operation 5 is installed and Isaac was restarted, and the stage’s `ROS` variant is the fiveages payload rather than the topic-bridge payload. -**Motion finishes much too fast.** On the in-process payload, `/clock` comes from the on-demand `ROS_Clock` graph (`OnPhysicsStep`), which is already how W2 `fiveages.usda` is wired. The topic-bridge `ros2.usda` still publishes the clock from `OnPlaybackTick`. Fix the clock source before editing joint gains. Mechanism: [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md). +**A motion finishes much too fast.** On the in-process payload, `/clock` comes from the on-demand `ROS_Clock` graph (`OnPhysicsStep`). That is how W2 `fiveages.usda` is already wired. The topic-bridge `ros2.usda` still publishes the clock from `OnPlaybackTick`. Fix the clock before you edit joint gains. The mechanism is on the [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md). ## Next diff --git a/source/2-how_to/6-deployment/10-add_a_robot.md b/source/2-how_to/6-deployment/10-add_a_robot.md index 83f593e..934b777 100644 --- a/source/2-how_to/6-deployment/10-add_a_robot.md +++ b/source/2-how_to/6-deployment/10-add_a_robot.md @@ -69,7 +69,7 @@ How to add more skills under `.cursor/skills/`: the same [skills README](https:/ `main` still lists AgileX Aloha at `manipulator/AgileX/agilex_aloha_description` and does **not** have the `.cursor/skills` directory. -**Taku** (Dyna / DVT1) is also in-tree on `feature/agilex` at [`humanoid/Dyna/taku_description`](https://github.com/fiveages-sim/robot_descriptions/tree/feature/agilex/humanoid/Dyna/taku_description). Visualize with `robot_common_launch humanoid.launch.py robot:=taku`. Control is `split_body.launch.py` / `full_body.launch.py` with `robot:=taku` ([package README](https://github.com/fiveages-sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md) §3.1 / §3.2) — not `demo.launch.py`. Public mock is **`split_body.launch.py`**; **`full_body.launch.py`** needs the private `ocs2_wbc_controller` submodule. It is **not** a row in that branch’s README brand tables. There is no lean `open-deploy-ws` Taku branch — [open-deploy-ws Setup](../../1-getting_started/3-open_deploy_ws.md). +**Taku** (Dyna / DVT1) is also in-tree on `feature/agilex` at [`humanoid/Dyna/taku_description`](https://github.com/fiveages-sim/robot_descriptions/tree/feature/agilex/humanoid/Dyna/taku_description). Visualize with `robot_common_launch humanoid.launch.py robot:=taku`. Control is `split_body.launch.py` / `full_body.launch.py` with `robot:=taku` ([package README](https://github.com/fiveages-sim/robot_descriptions/blob/feature/agilex/humanoid/Dyna/taku_description/README.md) §3.1 / §3.2) — not `demo.launch.py`. Public mock is **`split_body.launch.py`**. **`full_body.launch.py`** needs `ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or from a source checkout. See [OCS2 WBC Controller](../../4-reference/controllers/3-ocs2_wbc.md). It is **not** a row in that branch’s README brand tables. There is no lean `open-deploy-ws` Taku branch — [open-deploy-ws Setup](../../1-getting_started/3-open_deploy_ws.md). ## 2. Wire it into a deploy workspace diff --git a/source/2-how_to/7-synthetic_data/0-index.md b/source/2-how_to/7-synthetic_data/0-index.md index b672682..594fb35 100644 --- a/source/2-how_to/7-synthetic_data/0-index.md +++ b/source/2-how_to/7-synthetic_data/0-index.md @@ -4,20 +4,9 @@ This chapter is the **Isaac Sim datagen pipeline**: USD scenes → ROS 2 interfa This How-To category is the Isaac datagen pipeline, not Gazebo or teleop. Reference pages stay the source of APIs; this chapter only explains **how the pieces connect**. -```{admonition} Documented revisions -:class: note +Follow [robot_action_composer](https://github.com/fiveages-sim/robot_action_composer) `main` and [lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main`. Simulation grasp datagen is included there ([#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10)). There is no `feature/dex-grasp-generator` branch. -- [robot_action_composer](https://github.com/fiveages-sim/robot_action_composer) `main` -- [lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main` (`feature/sim-grasp-datagen` merged in [#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10)) - -`feature/dex-grasp-generator` is no longer a branch. -``` - -```{admonition} Terminology -:class: note - -**Humanoid** here means a **wheeled-arm humanoid** (mobile base + arms, e.g. FiveAges W2). It does **not** mean a bipedal or footed humanoid. -``` +**Humanoid** on these pages means a wheeled-arm robot: a mobile base plus arms, for example FiveAges W2. It does not mean a biped. ## Pipeline diff --git a/source/2-how_to/7-synthetic_data/1-isaac_scenes.md b/source/2-how_to/7-synthetic_data/1-isaac_scenes.md index df7887d..23ef4b2 100644 --- a/source/2-how_to/7-synthetic_data/1-isaac_scenes.md +++ b/source/2-how_to/7-synthetic_data/1-isaac_scenes.md @@ -63,13 +63,12 @@ Git submodules recorded there: |------|----------| | `humanoid/FiveAges/Gen1` | fiveages-gen1-robot-usds | | `humanoid/FiveAges/Gen2` | fiveages-gen2-robot-usds | -| `humanoid/FiveAges/Gen3` | fiveages-gen3-robot-usds | | `humanoid/Ubtech` | ubtech-usds | | `humanoid/Galbot` | galbot-usds | -FaSim `submodules_visibility.conf` marks Galbot **public** and the FiveAges Gen\* / Ubtech trees **private**, so `./init.sh` does not select FiveAges by default. The **remotes** for Gen1 (`fiveages-gen1-robot-usds`) and Gen2 (`fiveages-gen2-robot-usds`) are now public; Gen3 is still private. **W2R and S2R are not in the Gen2 USD repo.** In-tree (not submodule) categories on robot_usds include grippers, dexhands, manipulators, mobile bases, mobile manipulators, and sensors — browse the repo for the current roots. +FaSim `submodules_visibility.conf` marks Galbot public and the FiveAges and Ubtech trees private, so `./init.sh` does not select FiveAges by default. The Gen1 remote (`fiveages-gen1-robot-usds`) and the Gen2 remote (`fiveages-gen2-robot-usds`) are public. W2R and S2R are not in the Gen2 USD repo. robot_usds also keeps grippers, dexterous hands, manipulators, mobile bases, mobile manipulators, and sensors in the tree itself. Browse the repo for the current roots. -FiveAges **Gen1 / Gen2 / Gen3** are wheeled-arm USD generations under `humanoid/FiveAges/` (README maps Gen1→W1, Gen2→W2/S2). They are not bipedal humanoids. URDF status: [FiveAges robot descriptions](../../4-reference/descriptions/4-fiveages_umbrella.md). +Gen1 and Gen2 under `humanoid/FiveAges/` are wheeled-arm USD. The README maps Gen1 to W1 and Gen2 to W2 and S2. They are not bipeds. URDF status: [FiveAges robot descriptions](../../4-reference/descriptions/4-fiveages_umbrella.md). Full tree: [robot_usds reference](../../4-reference/simulation/3-robot_usds.md), [USD submodules](../../4-reference/simulation/4-usd_submodules.md). diff --git a/source/2-how_to/7-synthetic_data/2-orchestration.md b/source/2-how_to/7-synthetic_data/2-orchestration.md index 2f14a55..173418a 100644 --- a/source/2-how_to/7-synthetic_data/2-orchestration.md +++ b/source/2-how_to/7-synthetic_data/2-orchestration.md @@ -41,7 +41,7 @@ Skill names (examples from the README index; parameters in [SKILLS_REFERENCE.md] | Navigation | `nav.navigate_to_pose`, `nav.navigate_to_object`, `nav.navigate_relative`, `nav.send_nav_goal`, `nav.wait_nav_arrived` | | Joint / session / env | `joint.movej_to_config`, `joint.goto_cached_joints`, `robot.cache_ee_pose`, `robot.send_mode_command`, `env.randomize_object_local_xyz`, … | -Datagen workspace used in the README is **`examples/IsaacSim`** inside lerobot_ros2 (contains `robots/`). Robot-specific notes, including wheeled-arm **FiveAges W2** dual-arm tasks, are next to those trees (e.g. [`robots/FiveAges_W2/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/FiveAges_W2/README.md)). A [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) project directory can be the workspace instead (`LEROBOT_ROOT` plus that project’s `robot.yaml`). End-effector poses use one of the two frame paths in [robot_action_composer](../../4-reference/python_apps/5-robot_action_composer.md): live TF when `robot.yaml` has no `ee_tip`, or a USD tip→parent chain when `ee_tip` is set. +The README runs this from **`examples/IsaacSim`** inside lerobot_ros2, which contains `robots/`. Notes for each robot, including dual-arm tasks on FiveAges W2, sit next to those trees, for example [`robots/FiveAges_W2/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/FiveAges_W2/README.md). A [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) project directory can be the workspace instead: set `LEROBOT_ROOT` and use that project’s `robot.yaml`. End-effector poses follow [robot_action_composer](../../4-reference/python_apps/5-robot_action_composer.md). Without `ee_tip`, the pose comes from live TF. With `ee_tip`, it walks the USD chain from the tip to its parent first. ## Official Nav2, not a custom nav stack diff --git a/source/3-concepts/4-fsm_and_topics.md b/source/3-concepts/4-fsm_and_topics.md index 9fab832..516f1ab 100644 --- a/source/3-concepts/4-fsm_and_topics.md +++ b/source/3-concepts/4-fsm_and_topics.md @@ -34,7 +34,7 @@ Exact transitions depend on the **running controller**: |------------|--------|----------| | [Basic Joint Controller](../4-reference/controllers/7-basic_joint_controller.md) | HOME / HOLD / MOVEJ | README: `1` HOME, `2` HOLD, `4` MOVEJ (canonical); `3` is a **legacy MOVEJ alias** when this controller is standalone, and means **OCS2** on mixed OCS2/WBC stacks | | [OCS2 Arm Controller](../4-reference/controllers/2-ocs2_arm_controller.md) | HOME / OCS2 / HOLD | README integers: `1` HOME, `2` HOLD, `3` **OCS2**. Operators and `ros2_robot_interface` send them on **`/fsm_command`**. Starts in HOLD; OCS2 returns only to HOLD. Shared `FSMCommandPublisher` also defines `4` MOVEJ | -| [OCS2 WBC Controller](../4-reference/controllers/3-ocs2_wbc.md) | 全身 stack | Private package; extra states are in that README after access. Public Python still uses the same `/fsm_command` integers plus `/mode_command` strings | +| [OCS2 WBC Controller](../4-reference/controllers/3-ocs2_wbc.md) | 全身 stack | Binary in `ros-jazzy-arms-ros2-control`. Extra states are in the source README. Public Python still uses the same `/fsm_command` integers plus `/mode_command` strings | On mixed stacks, head / split-waist `basic_joint_controller` treats **`3` and `4` as MOVEJ**, while the arm / WBC controller treats **`3` as OCS2** and **`4` as MOVEJ**. @@ -92,7 +92,7 @@ Unstamped `/left_target` replaces the current EE goal with **one** pose (VR / hi `/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` (`/ocs2_wbc_controller/current_state`) need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config (`full_body.launch.py` when the controller type is `ocs2_wbc_controller/Ocs2WbcController`). Default mock demos (`demo.launch.py`) and 分体 (`split_body.launch.py`) do **not** imply these features are present. -The controller is a **private** submodule; extra FSM states stay in that README after access. Which constraints are live is machine-dependent (`WbcCapability` in the [msgs README](https://github.com/fiveages-sim/arms_ros2_control/blob/9a1da3ba3747b3042866422c2269c1d49bb02f48/command/arms_ros2_control_msgs/README.md): mobile base, body relative, head 6D, midpoint gaze, …). Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC + body/head `basic_joint_controller` + `adaptive_gripper_controller`) — that is **not** WBC. `full_body.launch.py robot:=taku` needs the private `ocs2_wbc_controller` submodule; shipping `config/ocs2/fixed_base_tcp.info` in the public description is not enough. When that config and the private module are present, Taku full-body default `headMode` is `HEAD_GAZE` (gaze on `head_camera_mid_optical_frame`); `target_manager.yaml` has `enable_head_control: false` so the head follows OCS2 rather than a joint-space marker. Split-body still teleops the head through `head_joint_controller`. Taku body-relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`. Head 6D tracking (`HEAD_TRACKING`) is only there when the controller reports `head_tracking_ee_enabled`. +`ocs2_wbc_controller` runs from the `ros-jazzy-arms-ros2-control` deb. Extra FSM states stay in the source README. Which constraints are live depends on the robot (`WbcCapability` in the [msgs README](https://github.com/fiveages-sim/arms_ros2_control/blob/9a1da3ba3747b3042866422c2269c1d49bb02f48/command/arms_ros2_control_msgs/README.md): mobile base, body relative, head 6D, midpoint gaze, …). Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC + body/head `basic_joint_controller` + `adaptive_gripper_controller`). That is not WBC. `full_body.launch.py robot:=taku` needs `ocs2_wbc_controller` from that deb or from a source checkout. Shipping `config/ocs2/fixed_base_tcp.info` in the public description is not enough. When that config and the controller are installed, Taku full-body default `headMode` is `HEAD_GAZE` (gaze on `head_camera_mid_optical_frame`); `target_manager.yaml` has `enable_head_control: false` so the head follows OCS2 rather than a joint-space marker. Split-body still teleops the head through `head_joint_controller`. Taku body-relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`. Head 6D tracking (`HEAD_TRACKING`) is only there when the controller reports `head_tracking_ee_enabled`. ::: These Cartesian body topics are on the **全身 / WBC** path (`full_body.launch.py`, `body_target_enabled`). **分体** (`split_body.launch.py`) drives the waist with [basic_joint_controller](../4-reference/controllers/7-basic_joint_controller.md) joint topics (`/body_joint_controller/target_joint_position`, …), not this set. diff --git a/source/3-concepts/5-source_vs_deb.md b/source/3-concepts/5-source_vs_deb.md index 8d7440c..7aec33a 100644 --- a/source/3-concepts/5-source_vs_deb.md +++ b/source/3-concepts/5-source_vs_deb.md @@ -10,7 +10,9 @@ These packages are **not** published to Debian / ROS apt software sources (`pack |---------|-------------|-----------------|---------| | OCS2 | `ros-jazzy-ocs2` | [legubiao/ocs2_ros2](https://github.com/legubiao/ocs2_ros2/releases) | MPC library | | Common descriptions | `ros-jazzy-robot-descriptions-common` | [fiveages-sim/robot-descriptions-common](https://github.com/fiveages-sim/robot-descriptions-common/releases) | Grippers / hands / sensors / `robot_common_launch` | -| arms_ros2_control | `ros-jazzy-arms-ros2-control` | [fiveages-sim/arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control/releases) | Controllers (optional) | +| arms_ros2_control | `ros-jazzy-arms-ros2-control` | [fiveages-sim/arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control/releases) | Controllers, including `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning` | + +The standard arms package contains `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning` ([arms deb notes](https://github.com/fiveages-sim/arms_ros2_control/blob/main/README.deb.md)). `./scripts/install_core_debs.sh --only arms` installs `ros-jazzy-arms-ros2-control` and skips `ros-jazzy-arms-ros2-control-full`. You can run those three libraries without cloning their private repositories. Cloning is for reading or changing the source. Other private descriptions and hardware interfaces are not in this package. **Recommended for most users:** run `./init_repo.sh` in `open-deploy-ws` or `fa-deploy-ws` and choose `d` (deb) for the modules you want. To **switch** an existing module (including OCS2) between source and deb, use menu **2) 切换模块安装方式** — do not hand-edit apt lists or run `dpkg` as the primary path. Deb mode downloads those release assets via `scripts/install_core_debs.sh`. diff --git a/source/3-concepts/7-split_vs_wbc.md b/source/3-concepts/7-split_vs_wbc.md index c716322..9a85be3 100644 --- a/source/3-concepts/7-split_vs_wbc.md +++ b/source/3-concepts/7-split_vs_wbc.md @@ -15,8 +15,8 @@ Two real launch paths in [ocs2_arm_controller](https://github.com/fiveages-sim/a - **Basic Joint Controller** (`basic_joint_controller`) — joint FSM HOME / HOLD / MOVEJ; `/fsm_command` is `std_msgs/Int32`. How-to: [Use Basic Joint Controller](../2-how_to/4-controllers/11-basic_joint.md). - **OCS2 Arm Controller** (`ocs2_arm_controller`) — arm MPC FSM HOME / OCS2 / HOLD (package README). -- **OCS2 WBC Controller** (`ocs2_wbc_controller`) — private submodule; 全身 MPC. States and topics are in that package README after access. +- **OCS2 WBC Controller** (`ocs2_wbc_controller`) — 全身 MPC. The binary is in the `ros-jazzy-arms-ros2-control` deb. The private repository is the source. States and topics that are only in that package README stay there. FSM command values, Action / Service tables, and WBC Cartesian topics: [FSM and Topics](4-fsm_and_topics.md). Controllers index: [Controllers reference](../4-reference/controllers/0-index.md). -`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default mock demos (`demo.launch.py`) and 分体 do **not** imply those features are present; capability bits are machine-dependent. Public Taku mock uses `split_body.launch.py robot:=taku`; `full_body.launch.py robot:=taku` still needs the private `ocs2_wbc_controller` submodule (shipping `config/ocs2/fixed_base_tcp.info` is not enough). +`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default mock demos (`demo.launch.py`) and 分体 do **not** imply those features are present; capability bits are machine-dependent. Public Taku mock uses `split_body.launch.py robot:=taku`; `full_body.launch.py robot:=taku` needs `ocs2_wbc_controller` from that deb or from a source checkout. Shipping `config/ocs2/fixed_base_tcp.info` is not enough. diff --git a/source/4-reference/controllers/3-ocs2_wbc.md b/source/4-reference/controllers/3-ocs2_wbc.md index a44a554..effd3fe 100644 --- a/source/4-reference/controllers/3-ocs2_wbc.md +++ b/source/4-reference/controllers/3-ocs2_wbc.md @@ -2,10 +2,12 @@ Whole-body MPC — **全身控制** (`ocs2_wbc_controller`) — for wheeled dual-arm robots, using `ocs2_wheel_humanoid`. -```{admonition} Access Required -:class: warning +```{admonition} Run the deb, clone the source to edit it +:class: note + +You can run `ocs2_wbc_controller` without opening the private repository. It ships in the GitHub Release package `ros-jazzy-arms-ros2-control`, together with `ocs2_humanoid` and `lina_planning` ([arms deb notes](https://github.com/fiveages-sim/arms_ros2_control/blob/main/README.deb.md)). In `open-deploy-ws` or `fa-deploy-ws`, choose `d` for arms in `./init_repo.sh`, or run `./scripts/install_core_debs.sh --only arms`. That script installs the standard package. It does not install `ros-jazzy-arms-ros2-control-full`, and the package is not on Ubuntu or ROS apt. -`controller/ocs2_wbc_controller` in [arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control) is the private submodule [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller). The link needs repository access. Topics, FSM values, and launch names are in that package README after access. The in-tree loader on the public side is `full_body.launch.py`. +[ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) is the source checkout under `controller/ocs2_wbc_controller` in [arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control). Open it when you need to read or change the source. Topics and FSM values that are only written in that README stay there. The public loader is `full_body.launch.py`. ``` ## Role @@ -40,7 +42,7 @@ Extra FSM states stay in the private package README after access. From public so :::{admonition} Whole-body (WBC) availability :class: warning -These topics need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default mock demos (`demo.launch.py`) and 分体 (`split_body.launch.py`) do **not** imply they are present. Capability bits (`WbcCapability`) are machine-dependent. Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC + body/head basic + grippers), not WBC. `full_body.launch.py robot:=taku` needs the private WBC submodule; shipping `config/ocs2/fixed_base_tcp.info` is not enough. When that config and the private module are present, Taku full-body default `headMode` is `HEAD_GAZE` (gaze on `head_camera_mid_optical_frame`); `target_manager.yaml` has `enable_head_control: false`. Head 6D tracking (`HEAD_TRACKING`) is only there when `head_tracking_ee_enabled` is true. Taku body-relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`. Full tables: [FSM and Topics](../../3-concepts/4-fsm_and_topics.md). +These topics need `ocs2_wbc_controller` and that robot’s 全身 launch and config. `demo.launch.py` and 分体 (`split_body.launch.py`) do not start them. Capability bits (`WbcCapability`) depend on the robot. Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC, body and head basic controllers, and grippers). `full_body.launch.py robot:=taku` needs `ocs2_wbc_controller` from the `ros-jazzy-arms-ros2-control` deb, or from a source checkout. Shipping `config/ocs2/fixed_base_tcp.info` is not enough. With that config and the controller installed, Taku full-body default `headMode` is `HEAD_GAZE` (gaze on `head_camera_mid_optical_frame`), and `target_manager.yaml` has `enable_head_control: false`. Head 6D tracking (`HEAD_TRACKING`) is there when `head_tracking_ee_enabled` is true. Taku’s body-relative rest is around x≈−0.21, not Bot2 `[0, 0.25]`. Full tables: [FSM and Topics](../../3-concepts/4-fsm_and_topics.md). ::: ## Related diff --git a/source/4-reference/controllers/8-ros2_parameters.md b/source/4-reference/controllers/8-ros2_parameters.md index bdcd7bd..e49ab1a 100644 --- a/source/4-reference/controllers/8-ros2_parameters.md +++ b/source/4-reference/controllers/8-ros2_parameters.md @@ -208,7 +208,7 @@ YAML: package [`config/default.yaml`](https://github.com/fiveages-sim/arms_ros2_ (ocs2-wbc-controller)= ## OCS2 WBC Controller -`controller/ocs2_wbc_controller` is a **private** submodule. Parameter names after access: that package README. Public launch: `ros2 launch ocs2_arm_controller full_body.launch.py` — [OCS2 WBC Controller](3-ocs2_wbc.md). Extra frame `body_frame` is **Startup only** per the target-manager notes in #120. +`ocs2_wbc_controller` runs from the `ros-jazzy-arms-ros2-control` deb. Parameter names that are only in the source README stay in [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller). Public launch: `ros2 launch ocs2_arm_controller full_body.launch.py` — [OCS2 WBC Controller](3-ocs2_wbc.md). Extra frame `body_frame` is **Startup only** per the target-manager notes in #120. Public YAML may still list an `ocs2_wbc_controller:` block (Lift 2S `home_3` / `home_4`; Taku on `feature/agilex`). Treat those keys as machine overlays; the private README is the parameter list. diff --git a/source/4-reference/descriptions/0-index.md b/source/4-reference/descriptions/0-index.md index 5be66a6..74edbc4 100644 --- a/source/4-reference/descriptions/0-index.md +++ b/source/4-reference/descriptions/0-index.md @@ -5,7 +5,7 @@ This section documents the robot description packages — URDF/xacro models, mes ```{admonition} Terminology :class: note -FiveAges **humanoid** descriptions (W1, W2, W2R, S2, S2R, WCE3) are **wheeled-arm humanoids** (mobile base + arms). They are **not** bipedal or footed humanoids. +FiveAges humanoid descriptions in this set (W1, W2, W2R, S2, S2R) are wheeled-arm robots: a mobile base plus arms. They are not bipeds. ``` ## Overview @@ -39,5 +39,5 @@ robot_descriptions/ # umbrella paths from its README | [robot_descriptions](1-robot_descriptions.md) | Umbrella | Public | | [robot-descriptions-common](2-common.md) | Grippers, hands, sensors, `robot_common_launch` (path `common`) | Public | | [Brand packages](3-brand_public.md) | Dobot, ARX, Galbot, HighTorque | Public | -| [FiveAges descriptions](4-fiveages_umbrella.md) | `humanoid/FiveAges/*` URDF gitlinks + Gen1/2/3 USD | Public W1/W2/S2 + components + Gen1/Gen2 USD; W2R, S2R, Gen3 still private | +| [FiveAges descriptions](4-fiveages_umbrella.md) | `humanoid/FiveAges/*` URDF gitlinks + Gen1/Gen2 USD | Public W1/W2/S2 + components + Gen1/Gen2 USD; W2R and S2R still private | | [Vendor arms](6-vendor_arms.md) | Tianji, Rokae, Gento (public remotes); Fairino, Agibot G2 (private) | Public remotes + private remotes | diff --git a/source/4-reference/descriptions/1-robot_descriptions.md b/source/4-reference/descriptions/1-robot_descriptions.md index 92800ed..4c4ab4b 100644 --- a/source/4-reference/descriptions/1-robot_descriptions.md +++ b/source/4-reference/descriptions/1-robot_descriptions.md @@ -51,7 +51,7 @@ robot_descriptions/ README also tables **in-tree** wheeled humanoids, mobile manipulators, manipulators (including HighTorque Panthera HT path above), and leg humanoids. Brand folders are those listed there. -FiveAges URDF packages are gitlinks under `humanoid/FiveAges/` in [`.gitmodules`](https://github.com/fiveages-sim/robot_descriptions/blob/main/.gitmodules). They are **not** in the README brand tables and are **not** a separate `robot-descriptions-fiveages` umbrella. **Public:** W1, W2, S2, `fa-w2-components`. **Still private:** **W2R**, **S2R** (not open yet), Gen3. Paths and remotes: [FiveAges robot descriptions](4-fiveages_umbrella.md). +FiveAges URDF packages are gitlinks under `humanoid/FiveAges/` in [`.gitmodules`](https://github.com/fiveages-sim/robot_descriptions/blob/main/.gitmodules). They are not in the README brand tables, and there is no separate `robot-descriptions-fiveages` umbrella. **Public:** W1, W2, S2, `fa-w2-components`. **Still private:** **W2R** and **S2R**. Paths and remotes: [FiveAges robot descriptions](4-fiveages_umbrella.md). Standalone clone (README). In `open-deploy-ws`, prefer `./init_repo.sh` instead: diff --git a/source/4-reference/descriptions/3-brand_public.md b/source/4-reference/descriptions/3-brand_public.md index 437c159..0a1ae95 100644 --- a/source/4-reference/descriptions/3-brand_public.md +++ b/source/4-reference/descriptions/3-brand_public.md @@ -10,7 +10,7 @@ Brand **EN/ZH** labels follow [robot_usds README_zh-CN.md §3.1](https://github. | 方舟无限 | ARX | | 银河通用 | Galbot | | 高擎 | HighTorque, Panthera | -| 中科第五纪 | FiveAges | +| 第五纪 | FiveAges | | 天机智能 | Tianji, Gento | | 智元 | Agibot | | 因时 | Inspire | diff --git a/source/4-reference/descriptions/4-fiveages_umbrella.md b/source/4-reference/descriptions/4-fiveages_umbrella.md index 197710b..9414fa3 100644 --- a/source/4-reference/descriptions/4-fiveages_umbrella.md +++ b/source/4-reference/descriptions/4-fiveages_umbrella.md @@ -1,6 +1,6 @@ # FiveAges robot descriptions -One page for FiveAges (中科第五纪) wheeled-arm humanoid **URDF** packages and their **USD** mapping. +URDF packages and USD mapping for FiveAges (第五纪) wheeled-arm robots. ```{admonition} Public now (Gen1 W1 + Gen2 W2 / S2 + components + USD) :class: tip @@ -16,7 +16,7 @@ Launch names and xacro details: those **public package READMEs**. There is no `o ```{admonition} Still private — W2R and S2R are not open :class: warning -These remotes need repository access (without it, GitHub does not open the page): **W2R** ([fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)), **S2R** ([fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description)), **Gen3** ([fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description), [fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3-robot-usds)), and [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws). There is **no** public `robot-descriptions-fiveages` umbrella. After access, follow **those package READMEs**. +These remotes need repository access. Without it, GitHub does not open the page: **W2R** ([fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)), **S2R** ([fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description)), and [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws). There is no public `robot-descriptions-fiveages` umbrella. After you can open a repository, follow that package README. ``` ```{admonition} Source of truth @@ -30,7 +30,7 @@ These remotes need repository access (without it, GitHub does not open the page) - Public launch / `hardware:=`: [robot_common_launch](2-common.md) (`mock_components` / `gz` / `isaac` / `isaac_sim` / `real`) ``` -FiveAges **humanoid** platforms in this docs set (W1, W2, W2R, S2, S2R, WCE3) are **wheeled-arm humanoids** (mobile base + arms), not bipedal. +FiveAges platforms in this docs set (W1, W2, W2R, S2, S2R) are wheeled-arm robots: a mobile base plus arms. They are not bipeds. ## URDF packages (`robot_descriptions`) @@ -38,7 +38,7 @@ FiveAges descriptions live as **git submodules** of the public umbrella. Checkou **Public remotes** (W1, W2, S2, `fa-w2-components`): browse the HTTPS repos, or `git submodule update --init` the matching path on [robot_descriptions](https://github.com/fiveages-sim/robot_descriptions). Launch / xacro: each package README ([W1](https://github.com/fiveages-sim/fa-w1-description), [W2](https://github.com/fiveages-sim/fa-w2-description), [S2](https://github.com/fiveages-sim/fa-s2-description), [components](https://github.com/fiveages-sim/fa-w2-components)). W1 reuses Rokae `ar5_*` descriptions ([robot-descriptions-rokae](https://github.com/fiveages-sim/robot-descriptions-rokae)); W2 and S2 reuse Tianji `m6_ccs_description` ([robot-descriptions-tianji](https://github.com/fiveages-sim/robot-descriptions-tianji)). Those vendor remotes are **public**. -**Still private remotes** (**W2R**, **S2R**, Gen3): 404 without access. **W2R and S2R are not open yet.** +**W2R** and **S2R** stay private. Without access, GitHub does not open those pages. They are not open yet. [`open-deploy-ws` `submodules_visibility.conf`](https://github.com/fiveages-sim/open-deploy-ws/blob/main/submodules_visibility.conf) still marks the FiveAges description paths `private`, so `./init_repo.sh` does **not** pull them. Do not recursive-init from `open-deploy-ws`. There is no public `open-deploy-ws` Gen1 or Gen2 branch. @@ -52,9 +52,9 @@ FiveAges descriptions live as **git submodules** of the public umbrella. Checkou | `humanoid/FiveAges/fiveages_s2_description` | `fiveages_s2_description` | [fa-s2-description](https://github.com/fiveages-sim/fa-s2-description) | Public | | `humanoid/FiveAges/fiveages_w2_common_description` | `fiveages_w2_common_description` | [fa-w2-components](https://github.com/fiveages-sim/fa-w2-components) | Public | -`main` has **no** `fiveages_s2r_description` and **no** `fiveages_wce3_description` gitlink. +`main` has no `fiveages_s2r_description` gitlink. -### `feature/agilex` (grouped like USD: Gen1 / Gen2 / Gen3) +### `feature/agilex` (grouped like the USD tree: Gen1 / Gen2) | Gen | Path | Package dir | Remote | Visibility | |-----|------|-------------|--------|------------| @@ -64,9 +64,8 @@ FiveAges descriptions live as **git submodules** of the public umbrella. Checkou | Gen2 | `humanoid/FiveAges/Gen2/fiveages_s2_description` | `fiveages_s2_description` | [fa-s2-description](https://github.com/fiveages-sim/fa-s2-description) | Public | | Gen2 | `humanoid/FiveAges/Gen2/fiveages_s2r_description` | `fiveages_s2r_description` | [fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description) | Private — **not open** | | Gen2 | `humanoid/FiveAges/Gen2/fiveages_w2_common_description` | `fiveages_w2_common_description` | [fa-w2-components](https://github.com/fiveages-sim/fa-w2-components) | Public | -| Gen3 | `humanoid/FiveAges/Gen3/fiveages_wce3_description` | `fiveages_wce3_description` | [fa-wce3-description](https://github.com/fiveages-sim/fa-wce3-description) | Private | -`feature/agilex` adds Gen2 **W2R** and **S2R** gitlinks; those remotes stay private. +`feature/agilex` adds the Gen2 **W2R** and **S2R** gitlinks. Those remotes stay private. After access to a private remote, init the path named in `.gitmodules` (or let `fa-deploy-ws` `./init_repo.sh` do it). @@ -78,7 +77,6 @@ After access to a private remote, init the path named in `.gitmodules` (or let ` |--------------------------------|----------|--------------|------------| | `humanoid/FiveAges/Gen1` | [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds) | W1 / Gen1 | Public | | `humanoid/FiveAges/Gen2` | [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds) | W2 / S2 / Gen2 (`W2/`, `S2/`, `components/`) | Public | -| `humanoid/FiveAges/Gen3` | [fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3-robot-usds) | WCE3 / Gen3 | Private | Gen2 USD is **W2 and S2** only. It does **not** publish W2R or S2R. diff --git a/source/4-reference/python_apps/1-ros2_robot_interface.md b/source/4-reference/python_apps/1-ros2_robot_interface.md index f7e037f..574247d 100644 --- a/source/4-reference/python_apps/1-ros2_robot_interface.md +++ b/source/4-reference/python_apps/1-ros2_robot_interface.md @@ -55,7 +55,7 @@ Operator-facing topics on a running OCS2 / `basic_joint_controller` stack, and t :::{admonition} Whole-body (WBC) availability :class: warning -`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default mock demos (`demo.launch.py`) and 分体 (`split_body.launch.py`) do **not** imply these features are present. The controller is a **private** submodule; capability bits are machine-dependent (`WbcCapability`). Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC + body/head basic + grippers), not WBC. `full_body.launch.py robot:=taku` needs the private WBC submodule; shipping `config/ocs2/fixed_base_tcp.info` is not enough. When that config and the private module are present, Taku full-body default `headMode` is `HEAD_GAZE`. Details: [FSM and Topics](../../3-concepts/4-fsm_and_topics.md). +`/body_target*`, `/head_target*`, `/mode_command`, and `WbcCurrentState` need **`ocs2_wbc_controller`** and that robot’s 全身 launch/config. Default mock demos (`demo.launch.py`) and 分体 (`split_body.launch.py`) do **not** imply these features are present. The controller runs from the `ros-jazzy-arms-ros2-control` deb. Capability bits depend on the robot (`WbcCapability`). Public Taku mock uses `split_body.launch.py robot:=taku` (arm MPC, body and head basic controllers, and grippers). That is not WBC. `full_body.launch.py robot:=taku` needs `ocs2_wbc_controller` from that deb or from a source checkout. Shipping `config/ocs2/fixed_base_tcp.info` is not enough. When that config and the controller are installed, Taku full-body default `headMode` is `HEAD_GAZE`. Details: [FSM and Topics](../../3-concepts/4-fsm_and_topics.md). ::: ### FSM and WBC mode diff --git a/source/4-reference/python_apps/4-lerobot_ros2.md b/source/4-reference/python_apps/4-lerobot_ros2.md index 73080e1..e0306de 100644 --- a/source/4-reference/python_apps/4-lerobot_ros2.md +++ b/source/4-reference/python_apps/4-lerobot_ros2.md @@ -2,7 +2,7 @@ LeRobot ↔ ROS 2 integration monorepo. LeRobot talks to the robot over ROS 2 topics. -**Repository:** [fiveages-sim/lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main` (`f750af76`). `feature/sim-grasp-datagen` was merged in [#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10) (`147ea78d`, 2026-10-23) and is no longer a branch. +**Repository:** [fiveages-sim/lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main` (`f750af76`). Simulation grasp datagen is on this branch ([#10](https://github.com/fiveages-sim/lerobot_ros2/pull/10), `147ea78d`, 2026-10-23). There is no separate `feature/sim-grasp-datagen` branch to check out. **README:** [README.md](https://github.com/fiveages-sim/lerobot_ros2/blob/main/README.md) @@ -49,7 +49,7 @@ source .venv/bin/activate # default backend=uv | `./init.sh all` | Submodules + env + orchestration + LeRobot plugins (NumPy 2) | | `./init.sh set-backend uv` | Write `backend` in `.fa-env.toml` (`uv` or `conda`) | -Orchestration and dexterous grasp share one environment on NumPy 1.x so they match ROS 2’s system OpenCV / `cv_bridge`. Recording and policy inference install NumPy 2 for `lerobot` 0.5. Use a separate environment for that step. `./init.sh install-lerobot` in the grasp environment upgrades NumPy and then head-camera capture through `cv_bridge` no longer matches the system build. Dexterous grasp is optional (the reference robot is FiveAges W2 with Wuji Hand2). A robot without that grasp config still runs `all-motion`. +Keep orchestration and dexterous grasp in one environment on NumPy 1.x. That matches the OpenCV and `cv_bridge` that come with ROS 2. Recording and policy inference use NumPy 2 because `lerobot` 0.5 does. Put that step in a second environment. If you run `./init.sh install-lerobot` inside the grasp environment, NumPy moves to 2 and head-camera frames through `cv_bridge` no longer match the system build. Dexterous grasp is optional. The reference robot for it is FiveAges W2 with Wuji Hand2. A robot that has no grasp config still uses `all-motion`. Optional submodules in [`.gitmodules`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/.gitmodules): [HUG](https://github.com/fiveages-sim/HUG) (private; Python 3.10 env under `submodules/hug/.venv`), [wuji-retargeting](https://github.com/fiveages-sim/wuji-retargeting), [internnav_w2](https://github.com/fiveages-sim/internnav_w2), [internnav_arx_lift2s](https://github.com/fiveages-sim/internnav_arx_lift2s), [LightNav-0_W2](https://github.com/fiveages-sim/LightNav-0_W2). `internnav_w2` and `LightNav-0_W2` need access. Runtime retargeting installs PyPI `wuji-sdk` (`./init.sh install-grasp`); do not recurse into the nested MuJoCo repos inside `wuji-retargeting`. @@ -119,7 +119,7 @@ More examples are under `examples/`. `lerobot_robot_ros2` depends on the local ` Shared steps: [`examples/IsaacSim/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md). That README still lists Isaac Sim 6.0. FaSim `config/fa_sim.conf` is the version menu for this stack (fallback `6.2.0` / `6.1.0` / `6.0.1`). -`motion-generation` runs in any directory that contains `robots/` or a project `robot.yaml`. A [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) project directory (private; needs access) can be that workspace when `LEROBOT_ROOT` points at this checkout and `robot.yaml` `extends` a profile under `examples/IsaacSim/robots/`. The public example in that README is: +`motion-generation` runs in any directory that contains `robots/` or a project `robot.yaml`. A [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) project directory can be that workspace when you can open the repository, `LEROBOT_ROOT` points at this checkout, and `robot.yaml` `extends` a profile under `examples/IsaacSim/robots/`. The public example in that README is: :::{code-block} bash export LEROBOT_ROOT=/path/to/lerobot_ros2 @@ -129,7 +129,7 @@ motion-generation --robot fiveages_w2 --task-key poc_port4_bimanual_carry `ros2-stack`, `check-robot-status`, and `record_datasets.py --workspace ` take the same directory. Orchestration files beside those scenes (`robot.yaml`, `task_configs/`, `maps/` or `map/`) are on `fa-project-usd` branch `feature/sinopec-test-tube-picking`, which is ahead of that repo’s `main`. -Public G1D profile [`examples/IsaacSim/robots/Unitree/G1D/robot.yaml`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml): `ee_target_frame` is `{arm}_eef`, `ee_command_frame` is `{arm}_tcp`, and there is no `ee_tip`. `ros2_stack.motion.required` is `false` with `args.hardware: isaac`, because the scene USD already starts in-process control on Play. That YAML `hardware: isaac` is the composer stack preset. It is not the in-process plugin name `isaac_sim`. Leaving `required: true` would start a second controller manager. +The public G1D profile [`examples/IsaacSim/robots/Unitree/G1D/robot.yaml`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml) sets `ee_target_frame` to `{arm}_eef` and `ee_command_frame` to `{arm}_tcp`. It has no `ee_tip`. `ros2_stack.motion.required` is `false`, and `args.hardware` is `isaac`, because the scene USD already starts in-process control when you press Play. That YAML value `hardware: isaac` is the composer stack preset. It is not the in-process plugin name `isaac_sim`. If you leave `required: true`, a second controller manager starts. ## Camera plugin diff --git a/source/4-reference/python_apps/5-robot_action_composer.md b/source/4-reference/python_apps/5-robot_action_composer.md index c93f2aa..f48d02e 100644 --- a/source/4-reference/python_apps/5-robot_action_composer.md +++ b/source/4-reference/python_apps/5-robot_action_composer.md @@ -2,7 +2,7 @@ Motion generation and **task_queue** YAML orchestration: a skill registry turns YAML blocks into **`StageTarget`** sequences and runs them through **`ROS2RobotInterface`**. Optional LeRobot dataset recording is an extra, not the core path. -**Repository:** [fiveages-sim/robot_action_composer](https://github.com/fiveages-sim/robot_action_composer) `main` (`5c94cc08`). `feature/dex-grasp-generator` is no longer a branch; follow `main`. +**Repository:** [fiveages-sim/robot_action_composer](https://github.com/fiveages-sim/robot_action_composer) `main` (`5c94cc08`). Follow `main`. There is no `feature/dex-grasp-generator` branch. **README:** [README.md](https://github.com/fiveages-sim/robot_action_composer/blob/main/README.md) @@ -111,12 +111,13 @@ check-robot-status --robot fiveages_w2 --workspace . ## End-effector frames -[`stages_in_command_ee_frame`](https://github.com/fiveages-sim/robot_action_composer/blob/main/robot_action_composer/task_runtime/placement/frames.py) rewrites a stage pose into the link OCS2 tracks. The two paths are not the same source: +[`stages_in_command_ee_frame`](https://github.com/fiveages-sim/robot_action_composer/blob/main/robot_action_composer/task_runtime/placement/frames.py) rewrites a stage pose into the link OCS2 is tracking. Which frames it uses depends on `robot.yaml`. -- **No `ee_tip` in `robot.yaml`.** Live TF from `ee_target_frame` to `ee_command_frame`. Public G1D ([`robot.yaml`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml)) sets `{arm}_eef` → `{arm}_tcp`. -- **`ee_tip` set.** First the USD local chain tip → parent (`parent_prim` / `tip_prim`), then an optional live TF from that parent frame to `ee_command_frame`. On W2, OCS2 often tracks `{arm}_eef`, not `{arm}_tcp`. A project `robot.yaml` on [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) `feature/sinopec-test-tube-picking` uses this path (needs access). The prim paths stay in that file. +Without `ee_tip`, it reads live TF from `ee_target_frame` to `ee_command_frame`. Public G1D ([`robot.yaml`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/robots/Unitree/G1D/robot.yaml)) goes from `{arm}_eef` to `{arm}_tcp`. -Empty frame names send the pose unchanged. +With `ee_tip`, it first walks the USD chain from the tip prim to its parent (`tip_prim` to `parent_prim`), then can apply a live TF from that parent frame to `ee_command_frame`. On W2, OCS2 usually tracks `{arm}_eef`, not `{arm}_tcp`. A project `robot.yaml` on [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) branch `feature/sinopec-test-tube-picking` uses this second path. Open that file for the prim paths. You need access to the repository. + +Empty frame names leave the pose unchanged. ## In-repo docs (`main`) diff --git a/source/4-reference/simulation/2-fasim_isaac.md b/source/4-reference/simulation/2-fasim_isaac.md index e16c876..9bd6da6 100644 --- a/source/4-reference/simulation/2-fasim_isaac.md +++ b/source/4-reference/simulation/2-fasim_isaac.md @@ -1,31 +1,33 @@ # FaSim-Isaac -NVIDIA Isaac Sim workspace for FiveAges Sim: robot and scene USD, an optional Isaac ROS 2 Jazzy overlay, and the extensions that start 运控 inside Sim. +FaSim-Isaac is the Isaac Sim workspace: robot and scene USD, an optional Isaac ROS 2 Jazzy overlay, and the extensions that start 运控 inside Sim. -**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac) `main` (`3606dc89`, 2026-11-13). In-process ros2_control landed on `main` in [#7](https://github.com/fiveages-sim/FaSim-Isaac/pull/7) (`1a4193a3`). `feature/ros2-control-node` has since diverged (Replicator capture under `exts/fasim.replicator.sdg` is on that branch, not on `main`). +Use this page when you need to see why a joint topic, a clock, or a TF edge behaves the way it does. To start Sim and pick a launch, follow [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md). -**README:** [README.md](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/README.md) +**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac) `main` (`3606dc89`, 2026-11-13). In-process ros2_control is on `main` ([#7](https://github.com/fiveages-sim/FaSim-Isaac/pull/7), `1a4193a3`). Replicator capture (`exts/fasim.replicator.sdg`) is on `feature/ros2-control-node`, not on `main`. -How to start Sim and which launch to use: [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md). +**README:** [README.md](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/README.md) ## Two hardware interfaces +One stage uses one of these. `isaac` is the topic bridge you pass on a ROS 2 launch. `isaac_sim` is set inside Isaac when Play starts the in-process node. It is not a `demo.launch.py` flag, and it is not a second robot body. + | Key | Where it is set | Plugin | Joint I/O | |-----|-----------------|--------|-----------| | `isaac` | `ros2 launch … hardware:=isaac` | `topic_based_ros2_control/TopicBasedSystem` | `sensor_msgs/JointState` topics | -| `isaac_sim` | `emit_control` inside `ROS2ControlLaunch` (not a `demo.launch.py` flag) | `isaacsim_ros2_control/IsaacSimSystem` | In-process articulation | +| `isaac_sim` | `emit_control` inside `ROS2ControlLaunch` | `isaacsim_ros2_control/IsaacSimSystem` | The articulation in the Isaac process | -Shared xacro: [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro). `hardware:=isaac` writes `/isaac/joint_command` and `/isaac/joint_states`. `hardware:=isaac_sim` writes `` from launch `isaac_prim_path` (ArticulationRoot). [`robot_common_launch` README](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/README.md) lists both keys. `use_sim_time` is true for `gz`, `isaac`, and `isaac_sim` unless the launch argument is explicitly `true` or `false` ([`launch_arg_utils.py`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/robot_common_launch/common/launch_arg_utils.py)). +Both keys are in the shared [`simulation_hardware.xacro`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/xacro/ros2_control/simulation_hardware.xacro) and in the [`robot_common_launch` README](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/README.md). `hardware:=isaac` writes `/isaac/joint_command` and `/isaac/joint_states`. `hardware:=isaac_sim` writes `` from the launch argument `isaac_prim_path`, which is the ArticulationRoot. `use_sim_time` is true for `gz`, `isaac`, and `isaac_sim` unless you pass the launch argument as `true` or `false` ([`launch_arg_utils.py`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/robot_common_launch/common/launch_arg_utils.py)). -A robot xacro that whitelists `validated_hardware_type` must include `isaac_sim` or that xacro fails on purpose. +If a robot xacro whitelists `validated_hardware_type`, include `isaac_sim`. Otherwise that xacro fails on purpose when the in-process node starts. -`{hardware}.yaml` overlays merge only when the file exists. `load_robot_config` order is common → type yaml → `{variant}.yaml` → end-effector compose → `{hardware}.yaml` → `control.patch` ([`robot_utils.py`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/robot_common_launch/common/robot_utils.py)). Hardware overlay runs after compose so a later compose pass does not drop gripper keys from `isaac.yaml` ([robot-descriptions-common #41](https://github.com/fiveages-sim/robot-descriptions-common/pull/41)). `isaac_sim` can reuse `isaac.yaml`; emit passes `hardware_yaml=isaac`. A file named `isaac_sim.yaml` is loaded when the launch hardware string is `isaac_sim`. +`{hardware}.yaml` is merged only when the file exists. `load_robot_config` applies files in this order: common, type yaml, `{variant}.yaml`, end-effector compose, `{hardware}.yaml`, then `control.patch` ([`robot_utils.py`](https://github.com/fiveages-sim/robot-descriptions-common/blob/main/robot_common_launch/robot_common_launch/common/robot_utils.py)). The hardware file comes after compose so a later compose pass does not drop gripper keys from `isaac.yaml` ([robot-descriptions-common #41](https://github.com/fiveages-sim/robot-descriptions-common/pull/41)). `isaac_sim` can reuse `isaac.yaml`. `emit_control` passes `hardware_yaml=isaac`. A file named `isaac_sim.yaml` is loaded when the launch hardware string is `isaac_sim`. -### Topic names are per robot +### Topic names follow the robot -The shared macro’s `/isaac/joint_*` pair is the topic-bridge default (Acone uses that macro). W2’s topic-bridge graph publishes `/joint_command` and `/joint_states` ([`ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda)). The xacro `` and the graph `topicName` are the same strings. `demo.launch.py` does not take a namespace that rewrites them. +The shared macro’s `/isaac/joint_*` pair is the topic-bridge default. Acone uses that macro. W2’s topic-bridge graph publishes `/joint_command` and `/joint_states` ([`ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda)). The xacro `` and the graph `topicName` are the same strings. `demo.launch.py` has no namespace argument that rewrites them. -In-process W2 ([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)) does not bridge body or arm `JointState` topics. The controller manager owns those degrees of freedom. Chassis `cmd_vel` / `odom` stay on the child ROS graph. +In-process W2 ([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)) does not bridge body or arm `JointState` topics. The controller manager owns those joints. Chassis `cmd_vel` and `odom` stay on the child ROS graph. ## In-process launch @@ -42,25 +44,25 @@ In-process W2 ([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-r | `useSimTime` | Forced true for `isaac_sim` (needs `/clock`) | | `publishRobotDescription` | Latch the same xacro on `/robot_description` (default true) | -`emit_control` builds one xacro URDF and pins both the controller manager and `/robot_description` to it. `Ros2ControlManager.setup` is called with `publish_robot_description=False`, so the manager does not publish that topic again. `robot_state_publisher` (host process) publishes `/robot_description` and the URDF TF tree. If that process does not start, a latched `fasim_robot_description` publisher is the fallback. Resource Manager therefore loads the description once. +`emit_control` builds one xacro URDF and points both the controller manager and `/robot_description` at it. `Ros2ControlManager.setup` is called with `publish_robot_description=False`, so the manager does not publish that topic a second time. `robot_state_publisher` on the host publishes `/robot_description` and the URDF TF tree. If that process does not start, a latched `fasim_robot_description` publisher is the fallback. The resource manager therefore loads the description once. -That xacro path is also why Play does not synthesize a fresh URDF from the stage on every start: the node reuses the description xacro and only falls back to USD synthesis for an unexpected prim. +Play does not rebuild a URDF from the stage on every start. The node reuses the description xacro, and it falls back to synthesizing a URDF from the USD only for an unexpected prim. ### CppAD cache -`ocs2_arm_controller` declares `recompile_libraries` with default **true** when `task.info` does not set `recompileLibraries` ([`CtrlComponent.h`](https://github.com/fiveages-sim/arms_ros2_control/blob/main/controller/ocs2_arm_controller/include/ocs2_arm_controller/control/CtrlComponent.h)). The library folder is `${OCS2_PLANNING_URDF_DIR:-/tmp}/ocs2_ros2//ocs2/`. +`ocs2_arm_controller` declares `recompile_libraries` with default true when `task.info` does not set `recompileLibraries` ([`CtrlComponent.h`](https://github.com/fiveages-sim/arms_ros2_control/blob/main/controller/ocs2_arm_controller/include/ocs2_arm_controller/control/CtrlComponent.h)). The library folder is `${OCS2_PLANNING_URDF_DIR:-/tmp}/ocs2_ros2//ocs2/`. -`emit_control` then sets `recompile_libraries: false` on the **main** controller only: `ocs2_arm_controller` for `demo` / `split_body`, `ocs2_wbc_controller` for `full_body`. That force applies to the in-process `isaac_sim` path. A topic-bridge `hardware:=isaac` launch does not run `emit_control`, so it keeps the controller default (true unless that robot’s info or YAML already says false). +On the in-process path, `emit_control` then sets `recompile_libraries: false` on the main controller only: `ocs2_arm_controller` for `demo` and `split_body`, `ocs2_wbc_controller` for `full_body`. A topic-bridge launch (`hardware:=isaac`) does not run `emit_control`, so it keeps the controller default. That default stays true unless that robot’s info file or YAML already says false. -Reusing the xacro URDF and reusing the CppAD cache are the two startup shortcuts for a simulated robot that runs 运控 inside Isaac. +A simulated robot that runs 运控 inside Isaac starts faster for two reasons: the node reuses the description xacro, and it reuses this CppAD cache. ### `infoFile` and `BASE_LOCK` -`infoFile` overrides `info_file_name` on the main controller. `fixed_base_tcp` drops the virtual chassis degrees of freedom (`manipulatorModelType` 0) so whole-body planning is body and arms. +`infoFile` overrides `info_file_name` on the main controller. `fixed_base_tcp` drops the virtual chassis degrees of freedom (`manipulatorModelType` 0), so whole-body planning covers the body and the arms. -`emit_control` warns when `mode` is `full_body` and the override name contains `fixed_base`: the planner has `basePlan=0`, so a runtime `BASE_LOCK` has nothing to constrain, and the arm enable policy can stay in `WAITING_FOR_ENABLE_POLICY`. Locking the base uses `mobile_base_tcp` plus `BASE_LOCK`. +`emit_control` warns when `mode` is `full_body` and the override name contains `fixed_base`. The planner then has `basePlan=0`, so a runtime `BASE_LOCK` has nothing to constrain, and arm enable can stay in `WAITING_FOR_ENABLE_POLICY`. Lock the base with `mobile_base_tcp` and `BASE_LOCK`. -Whole-body control needs [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) (private; open it after access). +`full_body` loads `ocs2_wbc_controller` from the GitHub Release package `ros-jazzy-arms-ros2-control` (`./init_repo.sh` with arms set to `d`, or `./scripts/install_core_debs.sh --only arms`). The same package contains `ocs2_humanoid` and `lina_planning`. It is not an apt package, and it is not `ros-jazzy-arms-ros2-control-full`. Open [ocs2-wbc-controller](https://github.com/fiveages-sim/ocs2-wbc-controller) when you need to read or change the source. ## Clock @@ -68,7 +70,7 @@ In-process W2 publishes `/clock` from a separate on-demand graph `ROS_Clock`: `e The topic-bridge payload on the same robot ([`ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/ros2.usda)) still drives `PublishClock` from `OnPlaybackTick` and sets `resetOnStop=0`. -`/clock` is the controller’s time base when `use_sim_time` is true. A render-frame clock advances several physics steps in one tick, so a timed move finishes early. The repair is the physics-step clock, not a joint-parameter change. The same `ROS_Clock` pattern is what new fiveages in-process payloads follow; this page verifies it on W2. Odometry graphs keep their own `ReadSimTime` (`resetOnStop=1`) so `odom` stamps stay valid. Camera prims belong on the scene payload, not on this clock graph. +`/clock` is the controller’s time base when `use_sim_time` is true. A clock that ticks once per rendered frame jumps several physics steps, so a timed move finishes early. Use the physics-step clock. Changing joint gains does not fix that. New in-process payloads follow the same `ROS_Clock` pattern. This page checks it on W2. Odometry graphs keep their own `ReadSimTime` (`resetOnStop=1`) so `odom` stamps stay valid. Put cameras on the scene payload, not on this clock graph. `arms_target_manager`, when the node spawns it, is a host process with `use_sim_time:=false` so markers are not tied to the physics step. @@ -76,7 +78,7 @@ The topic-bridge payload on the same robot ([`ros2.usda`](https://github.com/fiv Isaac’s odometry graph publishes `world → odom → base_*` and `/odom`. It does not publish the whole URDF tree. `robot_state_publisher` publishes `base_footprint → base_link` (when both links exist) and the arm tree, including fixed frames such as `right_eef`. -W2’s in-process ArticulationRoot is `base_link` (`/FiveAges_W2/base_link`). The odometry chain on that payload is `world → odom → base_footprint`; `robot_state_publisher` publishes `base_footprint → base_link`. OCS2 `baseFrame` is the same link the planner’s `task.info` names. `base_footprint` is the ground link; `base_link` may sit above it. Two publishers on one edge fight. A standing model with no `base_footprint` uses `base_link` for that chain. Confirm the link in that robot’s USD and `task.info` before copying the W2 names. +On in-process W2 the ArticulationRoot is `base_link` (`/FiveAges_W2/base_link`). That payload’s odometry chain is `world → odom → base_footprint`, and `robot_state_publisher` publishes `base_footprint → base_link`. OCS2 `baseFrame` is the link named in that planner’s `task.info`. `base_footprint` sits on the ground. `base_link` can sit above it. Two publishers on one edge fight. A standing model with no `base_footprint` uses `base_link` for that chain. Read the link names in the robot’s USD and `task.info` before you copy the W2 names. ### Several robots @@ -99,9 +101,9 @@ ros2 run tf2_ros tf2_echo world base_link --ros-args \ ## Project scenes -[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) is private. On `main`, a project is `scene.usd(a)`, `objects/`, and runnable `env/` ([README](https://github.com/fiveages-sim/fa-project-usd/blob/main/README.md)). +[fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) is a private repository. On `main`, a project is `scene.usd(a)`, `objects/`, and a runnable `env/` ([README](https://github.com/fiveages-sim/fa-project-usd/blob/main/README.md)). -Orchestration files next to those scenes (`robot.yaml`, `task_configs/`, `maps/` or `map/`) are on branch `feature/sinopec-test-tube-picking`, which is ahead of `main` and not merged (compared 2026-11-13). Three projects on that branch have this layout: `Fiveages/2026-11 Standard Moving Boxes`, `Siemens/2026-06 Wind Turbine Blade Detection`, and `Aimbo/2026-04 Bosch German&Poland POC`. Open the branch after you have access. The public entry for running a project directory is [lerobot_ros2 `examples/IsaacSim/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md) (`motion-generation` with `LEROBOT_ROOT` set). Camera rigs stay in the scene USD. +The files the orchestrator reads next to those scenes (`robot.yaml`, `task_configs/`, and `maps/` or `map/`) are on branch `feature/sinopec-test-tube-picking`. That branch was ahead of `main` and not merged when these pages were checked on 2026-11-13. Three projects there use this layout: `Fiveages/2026-11 Standard Moving Boxes`, `Siemens/2026-06 Wind Turbine Blade Detection`, and `Aimbo/2026-04 Bosch German&Poland POC`. You need access to open the branch. The public way to run a project directory is [lerobot_ros2 `examples/IsaacSim/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md): `motion-generation` with `LEROBOT_ROOT` set. Keep camera rigs in the scene USD. ## Layout diff --git a/source/4-reference/simulation/3-robot_usds.md b/source/4-reference/simulation/3-robot_usds.md index 3f05617..c18118b 100644 --- a/source/4-reference/simulation/3-robot_usds.md +++ b/source/4-reference/simulation/3-robot_usds.md @@ -4,7 +4,7 @@ USD robot asset superproject for Isaac Sim. **Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-sim/robot_usds) -Brand **EN/ZH** labels in this docs set follow [README_zh-CN.md §3.1](https://github.com/fiveages-sim/robot_usds/blob/main/README_zh-CN.md#31-中文简称与英文标识对照) (English folder names match that table). Examples: 方舟无限 = **ARX**; 高擎 = **HighTorque** / Panthera; 越疆 = **Dobot**; 银河通用 = **Galbot**; 中科第五纪 = **FiveAges**. +Brand labels in this docs set follow [README_zh-CN.md §3.1](https://github.com/fiveages-sim/robot_usds/blob/main/README_zh-CN.md#31-中文简称与英文标识对照). English folder names match that table. Examples: 方舟无限 = **ARX**; 高擎 = **HighTorque** / Panthera; 越疆 = **Dobot**; 银河通用 = **Galbot**; 第五纪 = **FiveAges**. ## Purpose @@ -20,8 +20,7 @@ robot_usds/ ├── humanoid/ │ ├── FiveAges/ │ │ ├── Gen1/ # → fiveages-gen1-robot-usds -│ │ ├── Gen2/ # → fiveages-gen2-robot-usds -│ │ └── Gen3/ # → fiveages-gen3-robot-usds +│ │ └── Gen2/ # → fiveages-gen2-robot-usds │ ├── Galbot/ # → galbot-usds │ └── Ubtech/ # → ubtech-usds ├── manipulators/ # Arm USD assets @@ -38,7 +37,6 @@ The following are managed as Git submodules: |------|------------|--------|------------| | `humanoid/FiveAges/Gen1` | [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds) | main | Public | | `humanoid/FiveAges/Gen2` | [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds) | main | Public (`W2/`, `S2/`, `components/`) | -| `humanoid/FiveAges/Gen3` | fiveages-gen3-robot-usds | main | Private | | `humanoid/Galbot` | galbot-usds | main | Public | | `humanoid/Ubtech` | ubtech-usds | main | Private | @@ -76,13 +74,12 @@ Assets directly in `robot_usds` (not submodules): ## Asset Naming -### Gen1/Gen2/Gen3 +### Gen1 and Gen2 From the [robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) Humanoid → FiveAges table: - **Gen1** — W1 (`humanoid/FiveAges/Gen1` → [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds), public) -- **Gen2** — W2 / S2 (`humanoid/FiveAges/Gen2` → [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds), public). Tree: `W2/`, `S2/`, `components/`. **W2R and S2R are not in this repo.** -- **Gen3** — WCE3 (`humanoid/FiveAges/Gen3` → `fiveages-gen3-robot-usds`, still private) +- **Gen2** — W2 / S2 (`humanoid/FiveAges/Gen2` → [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds), public). Tree: `W2/`, `S2/`, `components/`. W2R and S2R are not in this repo. URDF / deploy: [FiveAges robot descriptions](../descriptions/4-fiveages_umbrella.md). diff --git a/source/4-reference/simulation/4-usd_submodules.md b/source/4-reference/simulation/4-usd_submodules.md index 75c777e..2c3872a 100644 --- a/source/4-reference/simulation/4-usd_submodules.md +++ b/source/4-reference/simulation/4-usd_submodules.md @@ -10,13 +10,12 @@ These are the only USD repositories in scope for this documentation (based on `r |------|------------|-------------| | `humanoid/FiveAges/Gen1` | [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds) | W1 / Gen1 (public) | | `humanoid/FiveAges/Gen2` | [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds) | W2 / S2 / Gen2 (public; `W2/`, `S2/`, `components/`) | -| `humanoid/FiveAges/Gen3` | fiveages-gen3-robot-usds | WCE3 / Gen3 (private remote) | | `humanoid/Galbot` | galbot-usds | Galbot mobile manipulator | | `humanoid/Ubtech` | ubtech-usds | Ubtech humanoid | -## Gen1/Gen2/Gen3 +## Gen1 and Gen2 -FiveAges robot USD assets organized by generation. Names below are from the [robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) Humanoid → FiveAges table. **Gen1 and Gen2 remotes are public; Gen3 is still private.** URDF gitlinks: [FiveAges robot descriptions](../descriptions/4-fiveages_umbrella.md). +FiveAges robot USD, by generation. Names below are from the [robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) Humanoid → FiveAges table. The Gen1 and Gen2 remotes are public. URDF gitlinks: [FiveAges robot descriptions](../descriptions/4-fiveages_umbrella.md). ### Gen1 @@ -28,13 +27,7 @@ README name: **W1**. Path: `humanoid/FiveAges/Gen1`. Public. **Repository:** [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds) -README names: **W2 / S2**. Path: `humanoid/FiveAges/Gen2`. Public tree: `W2/`, `S2/`, `components/`. **W2R and S2R are not open** (not in this repo; URDF remotes stay private). - -### Gen3 - -**Repository:** fiveages-gen3-robot-usds - -README name: **WCE3**. Path: `humanoid/FiveAges/Gen3`. Private remote. +README names: **W2 / S2**. Path: `humanoid/FiveAges/Gen2`. Public tree: `W2/`, `S2/`, `components/`. W2R and S2R are not in this repo. Their URDF remotes stay private. ## Galbot diff --git a/source/5-developer/3-packaging_deb.md b/source/5-developer/3-packaging_deb.md index f14614e..464b3aa 100644 --- a/source/5-developer/3-packaging_deb.md +++ b/source/5-developer/3-packaging_deb.md @@ -7,7 +7,7 @@ Creating `.deb` packages for FiveAges Sim components. Several components ship prebuilt `.deb` files on GitHub Releases (not on packages.ros.org / Ubuntu apt): - OCS2 (`ros-jazzy-ocs2`) — [legubiao/ocs2_ros2 releases](https://github.com/legubiao/ocs2_ros2/releases) - robot-descriptions-common (`ros-jazzy-robot-descriptions-common`) — [fiveages-sim/robot-descriptions-common releases](https://github.com/fiveages-sim/robot-descriptions-common/releases) -- arms_ros2_control (`ros-jazzy-arms-ros2-control`, optional) — [fiveages-sim/arms_ros2_control releases](https://github.com/fiveages-sim/arms_ros2_control/releases) +- arms_ros2_control (`ros-jazzy-arms-ros2-control`) — [fiveages-sim/arms_ros2_control releases](https://github.com/fiveages-sim/arms_ros2_control/releases). The standard package includes `ocs2_wbc_controller`, `ocs2_humanoid`, and `lina_planning`. `./scripts/install_core_debs.sh --only arms` installs this package, not `ros-jazzy-arms-ros2-control-full`. ## Package Documentation diff --git a/source/6-more_applications/3-vla_collect_train_deploy.md b/source/6-more_applications/3-vla_collect_train_deploy.md index a58db6a..424ae66 100644 --- a/source/6-more_applications/3-vla_collect_train_deploy.md +++ b/source/6-more_applications/3-vla_collect_train_deploy.md @@ -16,7 +16,7 @@ Whole-body here is **全身控制** (`full_body.launch.py` / Lift 2S **full body 1. [分体控制 vs 全身控制](../3-concepts/7-split_vs_wbc.md) — `split_body.launch.py` vs `full_body.launch.py`. 2. [ARX Lift 2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md) — `./quick_start.sh` menu: **full body**. -3. [ocs2_wbc_controller](../4-reference/controllers/3-ocs2_wbc.md) — private submodule; public loader is `full_body.launch.py`. Topics and FSM values: that package README after access. +3. [ocs2_wbc_controller](../4-reference/controllers/3-ocs2_wbc.md) — run it from the `ros-jazzy-arms-ros2-control` deb. The public loader is `full_body.launch.py`. Open the source repository to read topics and FSM values that are only in that README. 4. Waist **joint** commands on the 分体 / Basic Joint Controller side: [Basic Joint Controller](../4-reference/controllers/7-basic_joint_controller.md) (`waist_lifting_*`, `waist_turning_command`). How-to: [Use Basic Joint Controller](../2-how_to/4-controllers/11-basic_joint.md). Internal FA wheeled-arm humanoids: [fa-deploy-ws Setup](../1-getting_started/4-fa_deploy_ws.md) after access.