diff --git a/locale/zh_CN/LC_MESSAGES/0-overview/0-index.po b/locale/zh_CN/LC_MESSAGES/0-overview/0-index.po index 51b2183..b8f779a 100644 --- a/locale/zh_CN/LC_MESSAGES/0-overview/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/0-overview/0-index.po @@ -54,11 +54,11 @@ msgstr "**MPC 控制器** — 基于 OCS2 的运动规划与控制(分体控 #: ../../source/0-overview/0-index.md:12 640100088d3542f6a27e14beafd4843e msgid "" -"**Simulation** — Gazebo Harmonic, and **FaSim** (Isaac Sim high-fidelity " -"+ the same ROS 2 运控 as the real robot, plus simulation ground truth)" +"**Simulation** — **FaSim** (Isaac Sim high-fidelity + the same ROS 2 运控 " +"as the real robot, plus simulation ground truth) is the default physics " +"path; Gazebo Harmonic remains available" msgstr "" -"**仿真** — Gazebo Harmonic,以及 **FaSim**(Isaac Sim 高保真 + 与真机同一套 ROS 2 " -"运控,外加仿真真值)" +"**仿真** — **FaSim**(Isaac Sim 高保真 + 与真机同一套 ROS 2 运控,外加仿真真值)是默认的物理仿真路径;Gazebo Harmonic 仍可使用" #: ../../source/0-overview/0-index.md:13 185ca09b5bc44adbaba950ea42e24909 msgid "**Teleoperation** — VR, isomorphic teleop, and glove-based control" 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 78a901c..2d4ea65 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 @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,12 +18,12 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/0-overview/2-learning_path.md:1 -#: 1bcc816cbbfa436a8ab93f09801bf63d +#: 2299a5ae6f62411bbfb2bdf52fb95b0b msgid "Newcomer Learning Path" msgstr "新手学习路径" #: ../../source/0-overview/2-learning_path.md:3 -#: 3a1c5346eb7f4d27a1383793ae199f87 +#: 85dbb6a65737436fa8c6bc0c9b0afd83 msgid "" "This guide provides a structured day-by-day approach to learning the " "FiveAges Sim ecosystem. Follow it sequentially to build understanding " @@ -31,118 +31,118 @@ msgid "" msgstr "本指南按天提供结构化学习路径,帮助你掌握 FiveAges Sim 生态系统。请按顺序学习,从基础概念过渡到进阶主题。" #: ../../source/0-overview/2-learning_path.md:5 -#: f38c081190bf4278b60b06c5e0a83cf5 +#: 7dce964d6933447cbca4c908e7775f57 msgid "Overview" msgstr "概述" -#: ../../source/0-overview/2-learning_path.md b21339648a094c37b1f02808d06ba39c +#: ../../source/0-overview/2-learning_path.md 05357c96e97d49b8a588bada816dacaa msgid "Stage" msgstr "阶段" -#: ../../source/0-overview/2-learning_path.md 64445541510f4f769c9a3b130eda60af +#: ../../source/0-overview/2-learning_path.md 267b7f6ef9aa4f36b514c166e0562bf1 msgid "Goal" msgstr "目标" -#: ../../source/0-overview/2-learning_path.md aaa40e17caff454aaf1080e2b1995573 +#: ../../source/0-overview/2-learning_path.md 81e10802a1bf4d7584fd1c30e5b2c07c msgid "Time Estimate" msgstr "预估时间" -#: ../../source/0-overview/2-learning_path.md 7270ec571e114a76b246dfcf8569c344 +#: ../../source/0-overview/2-learning_path.md 9306495786a64d41b660d1ad16bc09dc msgid "Day 0" msgstr "第 0 天" -#: ../../source/0-overview/2-learning_path.md 6c1749ba4c584de8b6ea69f326cf5abb +#: ../../source/0-overview/2-learning_path.md 0738859d445f495eb589b44f1969d9f6 msgid "Map the stack" msgstr "梳理技术栈" -#: ../../source/0-overview/2-learning_path.md 3322a15444bf49ffa82d7928f8d267eb +#: ../../source/0-overview/2-learning_path.md 642bbea8a1574b67a750c6a1de3216db msgid "1-2 hours reading" msgstr "阅读 1–2 小时" -#: ../../source/0-overview/2-learning_path.md 749d07ed2660475783e38113ae45cc19 +#: ../../source/0-overview/2-learning_path.md 73016f5c4028418aa64420560cf67211 msgid "Day 1" msgstr "第 1 天" -#: ../../source/0-overview/2-learning_path.md a339589d0df34f938176a1e5b2bcc582 +#: ../../source/0-overview/2-learning_path.md 8553279611a748049ecb1928bf8bd00b msgid "First motion in sim" msgstr "仿真中的首次运动" -#: ../../source/0-overview/2-learning_path.md 34ff9960b5774414833272681a7711b3 -#: 45413554d1d84ebf90acf7abdd9c8e75 94fcb8ca717d46d898e785e1778b7f91 +#: ../../source/0-overview/2-learning_path.md 01243a4689854fe89060df0d8dc4b11d +#: 4c94572e1baa4c5aa946513f6508e210 dbafbeb990214d2b860a08a3ceb4fa94 msgid "2-4 hours" msgstr "2-4 小时" -#: ../../source/0-overview/2-learning_path.md 60304d9b37884c4f9e9746cf5aa660da +#: ../../source/0-overview/2-learning_path.md 5b660100c70d4cada9f0d68646c0e8bb msgid "Day 2" msgstr "第 2 天" -#: ../../source/0-overview/2-learning_path.md 0a1048d7d08f4d2baa9ca49185474bef +#: ../../source/0-overview/2-learning_path.md 53a575c69faf456ca9b74a113d2a7ecd msgid "Switch robots" msgstr "切换机器人" -#: ../../source/0-overview/2-learning_path.md f081e18c1efc47f4bb3a37ee442f6fd2 +#: ../../source/0-overview/2-learning_path.md 631860c7dfa6483a8c1b6d9b071b9af3 msgid "1-2 hours" msgstr "1-2 小时" -#: ../../source/0-overview/2-learning_path.md 845fda2fa851418fa3ad9400f707f67c +#: ../../source/0-overview/2-learning_path.md 25d6516aa6af41e4979252c70bd2c304 msgid "Day 3" msgstr "第 3 天" -#: ../../source/0-overview/2-learning_path.md 311eed5e7b2d4b9e8f342073573cc271 +#: ../../source/0-overview/2-learning_path.md c7cb1df53f124b80badeb4dae8fda129 msgid "Gazebo / Isaac" msgstr "Gazebo / Isaac" -#: ../../source/0-overview/2-learning_path.md 068d7678f8724e23ae08e9f7629b5848 +#: ../../source/0-overview/2-learning_path.md 310d2270863042e4b4e9db9c87aafe91 msgid "Day 4" msgstr "第 4 天" -#: ../../source/0-overview/2-learning_path.md 01e9824584fa481c9f2df3c668116098 +#: ../../source/0-overview/2-learning_path.md 5162f2a875da4633b0de2b8116f02049 msgid "Python interface" msgstr "Python 接口" -#: ../../source/0-overview/2-learning_path.md 203cccf7a0584e109d71f700f7579084 +#: ../../source/0-overview/2-learning_path.md 6f012252a0e94df09b297318286f1a32 msgid "2-3 hours" msgstr "2-3 小时" -#: ../../source/0-overview/2-learning_path.md f4b08853006044ebaf76a0e22c7bb275 +#: ../../source/0-overview/2-learning_path.md 548d0b2489a14b898bed3e7248e84dda msgid "Day 5" msgstr "第 5 天" -#: ../../source/0-overview/2-learning_path.md 0f8d0003f00045f5b06c395aa4348aaa +#: ../../source/0-overview/2-learning_path.md 75d11323aa6e47988e8b6fe7603cb5aa msgid "Teleoperation" msgstr "遥操作" -#: ../../source/0-overview/2-learning_path.md ca833df77e0b4381ab8ad6e6be9174ce +#: ../../source/0-overview/2-learning_path.md bffa3b396a6d47f184a08a4e3f60527c msgid "Day 6" msgstr "第 6 天" -#: ../../source/0-overview/2-learning_path.md 0e487f52168e4b1fbc58a282bdd9a76a +#: ../../source/0-overview/2-learning_path.md 20e8d19222b1458f815e21175c60047b msgid "Real hardware" msgstr "真实硬件" -#: ../../source/0-overview/2-learning_path.md 11872dbb87024f8bb5cb17e048ab190e +#: ../../source/0-overview/2-learning_path.md 959b147eb90c402faf8b30c8ce01f752 msgid "Varies" msgstr "因情况而异" -#: ../../source/0-overview/2-learning_path.md 34364df6db7a4f6da02ecec64cb14fd6 +#: ../../source/0-overview/2-learning_path.md fda2b36f26f1453eaf45f050deeffe00 msgid "Day 7" msgstr "第 7 天" -#: ../../source/0-overview/2-learning_path.md 7189aa22ad0f4df5aab944be23577f4a +#: ../../source/0-overview/2-learning_path.md 0d7d8b600b7d40fdab1737ae17b0e11a msgid "Bring one new robot into FaSim" msgstr "把一款新机器人接入 FaSim" -#: ../../source/0-overview/2-learning_path.md 8a4640ab2e2c44d08fc0d759750a6e13 +#: ../../source/0-overview/2-learning_path.md 98c220c550cc47a6a776bd4ff6aa46ee msgid "One robot, mock then sim" msgstr "一款机器人,先 mock 再仿真" #: ../../source/0-overview/2-learning_path.md:18 -#: 2bec8dcb62a643a4859df32bf3e17837 +#: 2e9f64d86bac40f8a04e98f7b723a379 msgid "Real Hardware for External Users" msgstr "外部用户的真实硬件" #: ../../source/0-overview/2-learning_path.md:21 -#: 5fe424a783384d46b11189d018c0e431 +#: b463d58452e74869b7f3633054a6987d msgid "" "**ARX Lift 2S** is the full-body ARX (方舟无限) mobile manipulator (including" " chassis). **Acone** / **AC One** is **dual-arm**, not Lift 2S. " @@ -154,67 +154,67 @@ msgstr "" "2S。**高擎 Panthera HT** 是双臂操作臂。请优先看对应操作指南。使用这些 `open-deploy-ws` 分支不需要内部权限。" #: ../../source/0-overview/2-learning_path.md:24 -#: f174f8452aac4c04843f2440a9d5b0c8 +#: 9444bc1498bd42e5a86de82c4a0949d1 msgid "Day 0: Map the Stack" msgstr "第 0 天:梳理技术栈" #: ../../source/0-overview/2-learning_path.md:26 -#: 1a6e81353c0d4e00bab4efc7769ff655 +#: c1e904bff45e4c5ba60eccc4ddbc3675 msgid "**Goal:** Understand the ecosystem structure and choose your entry path." msgstr "**目标:** 理解生态系统结构,并选择你的入口路径。" #: ../../source/0-overview/2-learning_path.md:28 #: ../../source/0-overview/2-learning_path.md:40 #: ../../source/0-overview/2-learning_path.md:66 -#: ../../source/0-overview/2-learning_path.md:126 -#: ../../source/0-overview/2-learning_path.md:218 -#: 597fff1e668f4f1b984c6c20225d5457 79e32da957d34854a3c25f6b9f800cc3 -#: ac5ae5ac91c8425da40960f96e1057a7 cf3ed8bcb57a49ca9529e11f70f762f8 -#: e35a30ff89944b029ad1a3c740954257 +#: ../../source/0-overview/2-learning_path.md:107 +#: ../../source/0-overview/2-learning_path.md:193 +#: 672672627b814eaea0f033d136cc5524 9a5cbdbe5ddc4f8cb9aa92b1d3d6f176 +#: a1a433474fb54b83b87344490fece6fc e2df61b0054f42feb19abf97275c8828 +#: f2727d88a3874ee2b41ec24d175d05fb msgid "**Tasks:**" msgstr "**任务:**" #: ../../source/0-overview/2-learning_path.md:29 -#: eb25f0403b3e4a9fbc93d407d5577547 +#: ea803997076e44eda4e688eb51e839a8 msgid "Read this [Overview](0-index.md) section" msgstr "阅读本[概述](0-index.md)章节" #: ../../source/0-overview/2-learning_path.md:30 -#: ff945fb4e90b4747ac266a8a9f8f81a7 +#: 6c993a3035014ad39806ccdb6398ba26 msgid "Study the [Architecture](1-architecture.md) diagram" msgstr "学习[架构](1-architecture.md)图" #: ../../source/0-overview/2-learning_path.md:31 -#: 4108fb149f8140a5aea1f39f80f31509 +#: 7a6ba005bad447cd8fd69f6fd7711f3c msgid "Decide: Public path (`open-deploy-ws`) or Internal path (`fa-deploy-ws`)" msgstr "做出选择:公开路径(`open-deploy-ws`)或内部路径(`fa-deploy-ws`)" #: ../../source/0-overview/2-learning_path.md:32 -#: becfae2441774d0d92236007ab401e97 +#: 229cdfb752af41d3b34514fb30c35565 msgid "Review the [Repository Map](3-repo_map.md)" msgstr "查阅[仓库地图](3-repo_map.md)" #: ../../source/0-overview/2-learning_path.md:34 -#: 154612632ad14b4cbca3fd39156131e2 +#: 44d702d4e6054fbfae9204d8ca1f34af msgid "" "**Outcome:** You can explain the five layers and know which workspace to " "start with." msgstr "**预期结果:** 你能说明五个层级,并知道该从哪个工作空间开始。" #: ../../source/0-overview/2-learning_path.md:36 -#: c055a013f09544ed91e53d55d570ce34 +#: 1be2622e145545cbb7a96d47c04b93e3 msgid "Day 1: First Motion in Simulation" msgstr "第 1 天:仿真中的首次运动" #: ../../source/0-overview/2-learning_path.md:38 -#: 350748071c9f4e7d9627ea44e55d18c5 +#: a5d94b4c70be4ce7affa6ebdb7abb6f0 msgid "" "**Goal:** Install the environment, then run a robot demo (`hardware` " "default `mock_components`)." msgstr "**目标:** 先安装环境,再运行机器人演示(`hardware` 默认为 `mock_components`)。" #: ../../source/0-overview/2-learning_path.md:41 -#: 55b62427bd674c59b14711e0f0ab01b4 +#: 97a8115f4ea24f1d9c5db06d0a7ea131 msgid "" "[Install Environment](../1-getting_started/2-install_environment.md) — " "Ubuntu 24.04, ROS 2 Jazzy + rosdep. On a bare host: add the ROS apt " @@ -227,12 +227,12 @@ msgstr "" "install/setup.bash`。" #: ../../source/0-overview/2-learning_path.md:42 -#: 748bd1ae8f474851964ace7cab26a508 +#: 0fbdcc431cf34561ab7003065e22d44c msgid "Clone `open-deploy-ws` and run the official init script:" msgstr "克隆 `open-deploy-ws` 并运行官方初始化脚本:" #: ../../source/0-overview/2-learning_path.md:43 -#: 3a35c570145a4e24b2a2c166c9529b6d +#: 6df2029030cc4fd485a43aca43f18192 msgid "" "git clone https://github.com/fiveages-sim/open-deploy-ws.git\n" "cd open-deploy-ws\n" @@ -243,17 +243,17 @@ msgstr "" "./init_repo.sh\n" #: ../../source/0-overview/2-learning_path.md:48 -#: 85ef9f002bce494ebe9a5d07527834a6 +#: 474278a838cd46bfa6dfc651842ae223 msgid "Build the workspace:" msgstr "编译工作空间:" #: ../../source/0-overview/2-learning_path.md:49 -#: 8810794473984103a028b5502c32f04e +#: 82f519142e514db180c44179ac15d7cc msgid "colcon build --symlink-install\n" msgstr "colcon build --symlink-install\n" #: ../../source/0-overview/2-learning_path.md:52 -#: 1729f1a8d79f41499c6c124f6798f8b1 +#: 0d6f3384c6cb40efac1ccd8cdc289f6d msgid "" "Launch the demo (defaults: `robot:=cr5`, `hardware:=mock_components` — " "omit both; there is no `hardware:=mock`):" @@ -262,7 +262,7 @@ msgstr "" "`hardware:=mock`):" #: ../../source/0-overview/2-learning_path.md:53 -#: d4ff262af9a7408c96109790337f641a +#: d7f8d76b2a314777841b0d8cbe333edf msgid "" "source install/setup.bash\n" "ros2 launch ocs2_arm_controller demo.launch.py\n" @@ -270,8 +270,28 @@ msgstr "" "source install/setup.bash\n" "ros2 launch ocs2_arm_controller demo.launch.py\n" +#: ../../source/0-overview/2-learning_path.md +msgid "" +"After this launch, the clip below shows the effect in RViz (a single arm): " +"drag the end-effector target, adjust joints with the JointControlPanel " +"sliders, and use HOME to reset. It does not show the terminal or the launch " +"command, so it is not a complete startup recording, and it is not Isaac " +"physics verification." +msgstr "" +"启动之后,下面这段视频展示 RViz 里的单臂操作效果:拖动末端目标,用 JointControlPanel 的滑条调节关节,再按 HOME 复位。视频里没有终端和启动命令,所以它不是完整的启动录屏,也不是 Isaac 物理运行验证。" + +#: ../../source/0-overview/2-learning_path.md +msgid "" +"" +msgstr "" +"" + #: ../../source/0-overview/2-learning_path.md:58 -#: b13539f21ef04250bf80750d1a7c80b0 +#: 04b909f6ef9f44edabe227022ebe7a39 msgid "" "**Primary sources:** [open-deploy-ws](https://github.com/fiveages-sim" "/open-deploy-ws), [arms_ros2_control](https://github.com/fiveages-" @@ -282,7 +302,7 @@ msgstr "" "sim/arms_ros2_control)" #: ../../source/0-overview/2-learning_path.md:60 -#: 0c18c8eb5cdf4b00831415e8de80948b +#: b46c1774372241dbb02bb0c538f7b00f msgid "" "**Outcome:** RViz opens with the OCS2 demo; FSM starts in HOLD. See " "[Quick Demo](../1-getting_started/1-quick_demo_public.md)." @@ -291,17 +311,17 @@ msgstr "" "[快速演示](../1-getting_started/1-quick_demo_public.md)。" #: ../../source/0-overview/2-learning_path.md:62 -#: a9c9ec6425224d6b8f10362b3ec04448 +#: 3c340d9de3d54ded93f3c64277942374 msgid "Day 2: Switch Robots" msgstr "第 2 天:切换机器人" #: ../../source/0-overview/2-learning_path.md:64 -#: 783447721bef439d8d30765a202d5130 +#: 4b72e6ef17c94536b83633c705f3fae4 msgid "**Goal:** Change the robot model and understand the description system." msgstr "**目标:** 更换机器人模型,并理解描述系统。" #: ../../source/0-overview/2-learning_path.md:67 -#: 87e1a039268a40798f8a8f5bf3aefb2c +#: a0d02a62701b48e6b8f28bb5a4a6892b msgid "" "Prefer `./init_repo.sh` so nested modules under `src/robot-descriptions/`" " match `submodules_visibility.conf` (do not recursive-init)." @@ -310,33 +330,44 @@ msgstr "" "`submodules_visibility.conf` 一致(不要递归 init)。" #: ../../source/0-overview/2-learning_path.md:68 -#: 09ed8fd469154df0a9a873cbed21faad +#: de1712a77b4d48c8a6cf7553e2d7501b msgid "Rebuild the packages you need, then `source install/setup.bash`." msgstr "重建所需软件包,然后 `source install/setup.bash`。" #: ../../source/0-overview/2-learning_path.md:69 -#: df8468bad7814c2283102de291e3c758 -msgid "Launch with the new robot (omit `hardware:=` to keep `mock_components`):" -msgstr "用新机器人启动(省略 `hardware:=` 以保持 `mock_components`):" +#: e47541b30b964e1f9637c89fcbceabcb +msgid "Launch one of the robots below. Omit `hardware:=`; the launch default is `mock_components`." +msgstr "在下面的机型里选一个启动。省略 `hardware:=`;启动默认是 `mock_components`。" #: ../../source/0-overview/2-learning_path.md:70 -#: c016f878064e431384d309eae6820323 -msgid "ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone\n" -msgstr "ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone\n" +#: 341ef2307b284de9bd0b60d449c7f61f +msgid "ARX Lift 2S" +msgstr "方舟无限 Lift 2S" -#: ../../source/0-overview/2-learning_path.md:73 -#: ae48c604d5ea40a8933cbd0d8928ff5e +#: ../../source/0-overview/2-learning_path.md msgid "" -"`arx_acone` is **Acone** (dual-arm), not Lift 2S. Full-body ARX Lift 2S " -"uses the `arx-lift2s` branch scripts — see [ARX Lift " +"Use the `arx-lift2s` branch of `open-deploy-ws` for this robot, not the " +"Day 1 default tree. Clone and `./init_repo.sh` are on [ARX Lift " "2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md)." msgstr "" -"`arx_acone` 是 **Acone**(双臂),不是 Lift 2S。全身方舟无限 Lift 2S 使用 `arx-lift2s` " -"分支脚本 — 见 [方舟无限 Lift " -"2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md)。" +"这台机器人用 `open-deploy-ws` 的 `arx-lift2s` 分支,而不是第 1 天的默认仓库树。克隆和 `./init_repo.sh` 见 [方舟无限 Lift 2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md)。" + +#: ../../source/0-overview/2-learning_path.md +msgid "ros2 launch ocs2_arm_controller full_body.launch.py robot:=arx_lift2s\n" +msgstr "ros2 launch ocs2_arm_controller full_body.launch.py robot:=arx_lift2s\n" + +#: ../../source/0-overview/2-learning_path.md:73 +#: a5be7239184d4f47963445b8ad9c64fb +msgid "" +"`arx_lift2s` is **ARX Lift 2S** (方舟无限), the full-body mobile manipulator " +"(arms, lift, and chassis). It is not **Acone** / **AC One** (`arx_acone`, " +"dual-arm). `full_body.launch.py` starts `ocs2_wbc_controller`, which ships " +"in the `ros-jazzy-arms-ros2-control` deb." +msgstr "" +"`arx_lift2s` 是 **方舟无限 Lift 2S**,全身移动操作臂(手臂、升降轴和底盘)。它不是 **Acone** / **AC One**(`arx_acone`,双臂)。`full_body.launch.py` 会启动 `ocs2_wbc_controller`,该控制器已包含在 `ros-jazzy-arms-ros2-control` 这个 deb 里。" #: ../../source/0-overview/2-learning_path.md:75 -#: 83077712d8674e4294461f4d284370f9 +#: 6b2a31deb5a640dabec15053f4c9e34f msgid "" "**Primary sources:** [robot_descriptions](https://github.com/fiveages-" "sim/robot_descriptions), brand-specific READMEs" @@ -345,29 +376,63 @@ msgstr "" "sim/robot_descriptions)、各品牌 README" #: ../../source/0-overview/2-learning_path.md:77 -#: ae9a7aa98cd448b999bdddd2331c95a8 +#: 617b97f80ba94f13bcc9956df572dd43 +msgid "FiveAges W2 with xhand1" +msgstr "第五纪 W2 配 xhand1" + +#: ../../source/0-overview/2-learning_path.md +msgid "" +"W2 is a FiveAges wheeled-arm robot. Its URDF is public ([fa-w2-" +"description](https://github.com/fiveages-sim/fa-w2-description)); the " +"usual workspace is [fa-deploy-ws](https://github.com/fiveages-sim/fa-" +"deploy-ws) (default branch `fa-w2`). See [FiveAges robot " +"descriptions](../4-reference/descriptions/4-fiveages_umbrella.md) and [fa-" +"deploy-ws Setup](../1-getting_started/4-fa_deploy_ws.md)." +msgstr "" +"W2 是第五纪的轮臂机器人。它的 URDF 是公开的([fa-w2-description](https://github.com/fiveages-sim/fa-w2-description));常用工作空间是 [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws)(默认分支 `fa-w2`)。见 [第五纪机器人描述](../4-reference/descriptions/4-fiveages_umbrella.md) 和 [fa-deploy-ws 配置](../1-getting_started/4-fa_deploy_ws.md)。" + +#: ../../source/0-overview/2-learning_path.md +msgid "ros2 launch ocs2_arm_controller full_body.launch.py robot:=fiveages_w2 type:=xhand1\n" +msgstr "ros2 launch ocs2_arm_controller full_body.launch.py robot:=fiveages_w2 type:=xhand1\n" + +#: ../../source/0-overview/2-learning_path.md +msgid "This clip is a W2 with xhand1 operation demo:" +msgstr "这段视频是 W2 配 xhand1 的操作演示:" + +#: ../../source/0-overview/2-learning_path.md msgid "" -"**Outcome:** You can switch between Dobot CR5, Acone (dual-arm), Galbot, " -"etc." -msgstr "**预期结果:** 你可以在 Dobot CR5、Acone(双臂)、Galbot 等机型之间切换。" +"" +msgstr "" +"" + +#: ../../source/0-overview/2-learning_path.md +msgid "" +"**Outcome:** You have switched from the Day 1 CR5 `demo.launch.py` to a " +"`full_body.launch.py` robot, for example ARX Lift 2S or FiveAges W2 with " +"xhand1." +msgstr "**预期结果:** 你已从第 1 天的 CR5 `demo.launch.py`,切换到某个 `full_body.launch.py` 机型,例如方舟无限 Lift 2S,或第五纪 W2 配 xhand1。" #: ../../source/0-overview/2-learning_path.md:79 -#: 5e9f462d07ff4408883a8b99f3be8c5b +#: 6cd786c4230a46be9850d2d5643e90e9 msgid "Day 3: Gazebo and Isaac Simulation" msgstr "第 3 天:Gazebo 与 Isaac 仿真" #: ../../source/0-overview/2-learning_path.md:81 -#: f89890f197c2446ba1ba937ed3c3d83d +#: 9cad3450ec3642fd86abf1e899b983bc msgid "**Goal:** Run physics simulation instead of mock hardware." msgstr "**目标:** 运行物理仿真,而不是 mock 硬件。" #: ../../source/0-overview/2-learning_path.md:83 -#: eb0c730730274a4989007e77472e24db +#: a518cc724c944bf5a348e862248260a1 msgid "Gazebo Harmonic" msgstr "Gazebo Harmonic" #: ../../source/0-overview/2-learning_path.md:85 -#: da78e53909c04070bf17eee7dc7e8358 +#: 223163474d4f4e2381a681b6e0f63868 msgid "" "# Install Gazebo packages (if not already)\n" "sudo apt install ros-jazzy-gz-*\n" @@ -382,104 +447,33 @@ msgstr "" "ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz\n" #: ../../source/0-overview/2-learning_path.md:93 -#: 94617717d1d3471cb4754ee11ae2149f +#: 9bbbb88166a64dd587ba7ca4bf5c0668 msgid "Isaac Sim (FaSim)" msgstr "Isaac Sim(FaSim)" #: ../../source/0-overview/2-learning_path.md:95 -#: ac9d480bc7de469ca1e298e33a5d6346 +#: 57054223bb7a450fa5b04ddd27a117ee msgid "" -"**FaSim** pairs NVIDIA Isaac Sim high-fidelity simulation with the same " -"ROS 2 运控 stack as the real robot, so motion matches hardware while the " -"sim supplies ground truth. Assets: [FaSim-Isaac](https://github.com" -"/fiveages-sim/FaSim-Isaac) (one-click USD + scene pull), " -"[robot_usds](https://github.com/fiveages-sim/robot_usds)." -msgstr "" -"**FaSim** 把 NVIDIA Isaac Sim 高保真仿真与真机同一套 ROS 2 运控叠在一起:运动能力对齐硬件,仿真再提供真值。资产" -":[FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac)(一键拉取 USD " -"与场景)、[robot_usds](https://github.com/fiveages-sim/robot_usds)。" +"**FaSim** pairs NVIDIA Isaac Sim with the same ROS 2 运控 stack as the real" +" robot. Follow [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md): " +"clone [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac), run " +"`./init.sh`, then `./run.sh`, and connect with **one** of the two paths " +"on that page (`hardware:=isaac`, or Play on a `ROS2ControlLaunch` " +"payload). Default Isaac path is `ISAACSIM_DIR` (`~/isaacsim`); override " +"in `config/fa_sim.local.conf`." +msgstr "**FaSim** 把 NVIDIA Isaac Sim 和真机同一套 ROS 2 运控配在一起。按 [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) 做:克隆 [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac),跑 `./init.sh`,再 `./run.sh`,并只用那一页上的**一条**接入路径(`hardware:=isaac`,或在带 `ROS2ControlLaunch` 的 payload 上按 Play)。Isaac 默认路径是 `ISAACSIM_DIR`(`~/isaacsim`);在 `config/fa_sim.local.conf` 里覆盖。" #: ../../source/0-overview/2-learning_path.md:97 -#: a5ea0b361eb540299f7b83a5904692fb -msgid "FaSim-Isaac scripts" -msgstr "FaSim-Isaac 脚本" - -#: ../../source/0-overview/2-learning_path.md:100 -#: 20ab5965d8f84fe3ba5a05f9f0fbd430 -msgid "" -"Use **FaSim-Isaac** `./init.sh` then `./run.sh`. Default Isaac path is " -"`ISAACSIM_DIR` (`~/isaacsim`); override in `config/fa_sim.local.conf`. " -"Version for the optional ROS 2 workspace comes from the init menu " -"(fallback list in `config/fa_sim.conf`), not a hardcoded minor version in" -" these docs." -msgstr "" -"使用 **FaSim-Isaac** 的 `./init.sh`,再运行 `./run.sh`。默认 Isaac 路径是 " -"`ISAACSIM_DIR`(`~/isaacsim`);在 `config/fa_sim.local.conf` 中覆盖。可选 ROS 2 " -"工作空间的版本来自 init 菜单(回退列表见 `config/fa_sim.conf`),不要在文档里写死某个次版本号。" - -#: ../../source/0-overview/2-learning_path.md:103 -#: 01573890b72a4ddfb878bf1d4b0c7bde -msgid "" -"Install NVIDIA Isaac Sim (default directory `~/isaacsim`, or set " -"`ISAACSIM_DIR`)." -msgstr "安装 NVIDIA Isaac Sim(默认目录 `~/isaacsim`,或设置 `ISAACSIM_DIR`)。" - -#: ../../source/0-overview/2-learning_path.md:104 -#: f7c322b6e77c4954af457e2604a4451a -msgid "Clone and initialize FaSim-Isaac:" -msgstr "克隆并初始化 FaSim-Isaac:" - -#: ../../source/0-overview/2-learning_path.md:105 -#: df01b3856a864f41b6a7aeae3f485904 -msgid "" -"git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" -"cd FaSim-Isaac\n" -"./init.sh\n" -msgstr "" -"git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" -"cd FaSim-Isaac\n" -"./init.sh\n" - -#: ../../source/0-overview/2-learning_path.md:110 -#: 16b90d29839a4cb28ecf8aa0fc625988 -msgid "Start Isaac (`./run.sh` menu: PhysX / Newton / Headless Streaming):" -msgstr "启动 Isaac(`./run.sh` 菜单:PhysX / Newton / Headless Streaming):" - -#: ../../source/0-overview/2-learning_path.md:111 -#: 7b4352ba5b5740ea8cc8035effdc3650 -msgid "./run.sh\n" -msgstr "./run.sh\n" - -#: ../../source/0-overview/2-learning_path.md:114 -#: a9fbd5aad4344941be83cce420c96de3 -msgid "" -"Connect ROS 2 using **one** of the two Isaac paths in [Isaac " -"Sim](../2-how_to/2-simulation/4-isaac_sim.md):" -msgstr "" -"用下面两条 Isaac 路径中的一条连接 ROS 2,说明见 [Isaac " -"Sim](../2-how_to/2-simulation/4-isaac_sim.md):" - -#: ../../source/0-overview/2-learning_path.md:115 -#: 6aa26adcf4424ba59dac702af4a517c7 -msgid "" -"Topic bridge, from the workspace terminal: `ros2 launch " -"ocs2_arm_controller demo.launch.py hardware:=isaac`" -msgstr "" -"话题桥,在工作空间终端执行:`ros2 launch ocs2_arm_controller demo.launch.py " -"hardware:=isaac`" - -#: ../../source/0-overview/2-learning_path.md:116 -#: 04fa3a29f1cc46998b4cb9b1c42f746d +#: 5f167987f525446f99d3fb45cb37cdb7 msgid "" -"In-process: open a USD whose ROS payload contains `ROS2ControlLaunch` and" -" press Play. That path sets `hardware=isaac_sim` inside Isaac. It is not " -"a second `hardware:=` on `demo.launch.py`." -msgstr "" -"进程内:打开 ROS 载荷里含有 `ROS2ControlLaunch` 的 USD 并播放。这条路径在 Isaac 内部设置 " -"`hardware=isaac_sim`。它不是 `demo.launch.py` 上的第二个 `hardware:=`。" +"What the two connections and the Kit extensions do: [FaSim-" +"Isaac](../4-reference/simulation/2-fasim_isaac.md). Assets: " +"[robot_usds](../4-reference/simulation/3-robot_usds.md), [Environment " +"assets](../4-reference/simulation/5-env_assets.md)." +msgstr "两种接入方式和 Kit 扩展做什么,见 [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md)。资产见 [robot_usds](../4-reference/simulation/3-robot_usds.md)、[环境资产](../4-reference/simulation/5-env_assets.md)。" -#: ../../source/0-overview/2-learning_path.md:118 -#: bf8f87ba461b42569de9d420bc74d6fa +#: ../../source/0-overview/2-learning_path.md:99 +#: cb00e175288e4699979626ffbbe3230d msgid "" "**Primary sources:** [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-" "Isaac), [robot_usds](https://github.com/fiveages-sim/robot_usds)" @@ -487,30 +481,30 @@ msgstr "" "**主要来源:** [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-" "Isaac)、[robot_usds](https://github.com/fiveages-sim/robot_usds)" -#: ../../source/0-overview/2-learning_path.md:120 -#: 91a4682296e746b99f5fec1b318bb7ed +#: ../../source/0-overview/2-learning_path.md:101 +#: d9553af5ece4466d9e3d834b01a6c49c msgid "" "**Outcome:** Physics-based simulation with Gazebo, or FaSim (Isaac + ROS " "2 运控, matching real-robot motion plus ground truth)." msgstr "**预期结果:** 基于物理的仿真,可用 Gazebo,或 FaSim(Isaac + ROS 2 运控,运动对齐真机并带仿真真值)。" -#: ../../source/0-overview/2-learning_path.md:122 -#: e081c4fa03714436ba73bfbac4bd6992 +#: ../../source/0-overview/2-learning_path.md:103 +#: bda0b4aff48b4bcc80a0cc3b1106fee7 msgid "Day 4: Python Interface" msgstr "第 4 天:Python 接口" -#: ../../source/0-overview/2-learning_path.md:124 -#: 91e31adb96874f3ab0161cb214fc4f3b +#: ../../source/0-overview/2-learning_path.md:105 +#: d889755ee9b94090a71a14c84b275820 msgid "**Goal:** Control the robot programmatically." msgstr "**目标:** 以编程方式控制机器人。" -#: ../../source/0-overview/2-learning_path.md:127 -#: f6e611d33ac04ec3bae2366e787d86b9 +#: ../../source/0-overview/2-learning_path.md:108 +#: 03a9e9857fb349d7bb2ff1d146dc76b1 msgid "Install fa-py-libraries:" msgstr "安装 fa-py-libraries:" -#: ../../source/0-overview/2-learning_path.md:128 -#: 564da87a156d4f11823183e5e38b0af3 +#: ../../source/0-overview/2-learning_path.md:109 +#: 1f4dec5a40f240baa8b2354ae2852106 msgid "" "cd ~/\n" "git clone https://github.com/fiveages-sim/fa-py-libraries.git\n" @@ -524,13 +518,13 @@ msgstr "" "./init.sh all # Python 3.12 env; installs ros2_robot_interface and " "related submodules\n" -#: ../../source/0-overview/2-learning_path.md:134 -#: 10444b7025b0472885fa305e181bf02d +#: ../../source/0-overview/2-learning_path.md:115 +#: e2c99ac6b33d4bc6a2daebc9f88c667e msgid "Write a simple script:" msgstr "编写一个简单脚本:" -#: ../../source/0-overview/2-learning_path.md:135 -#: e705532b05994909bc75f55af6bfb79f +#: ../../source/0-overview/2-learning_path.md:116 +#: 797feaecbb15448ead3783ab56fa4a68 msgid "" "from ros2_robot_interface import ROS2RobotInterface, " "ROS2RobotInterfaceConfig\n" @@ -548,8 +542,8 @@ msgstr "" "joint_state = interface.get_joint_state()\n" "pose = interface.left_arm_handler.get_pose()\n" -#: ../../source/0-overview/2-learning_path.md:144 -#: a036d2473ddf48d49817b37cc7058be6 +#: ../../source/0-overview/2-learning_path.md:125 +#: cfad2d9db829473fb1e87bddfb0d86aa msgid "" "**Primary sources:** [fa-py-libraries](https://github.com/fiveages-sim" "/fa-py-libraries), [ros2_robot_interface](https://github.com/fiveages-" @@ -559,28 +553,28 @@ msgstr "" "libraries)、[ros2_robot_interface](https://github.com/fiveages-" "sim/ros2_robot_interface)" -#: ../../source/0-overview/2-learning_path.md:146 -#: a21c7c47c4ab4f8ea74339e287e4b8f2 +#: ../../source/0-overview/2-learning_path.md:127 +#: e2f6f339f34b4f6aab0e276e5df5e3a3 msgid "**Outcome:** You can script robot motions in Python." msgstr "**预期结果:** 你可以用 Python 编写机器人运动脚本。" -#: ../../source/0-overview/2-learning_path.md:148 -#: c3b0b40a078b4731a22c8c82bd46f93a +#: ../../source/0-overview/2-learning_path.md:129 +#: 13bc7f273b67416eb56b14c5337c852c msgid "Day 5: Teleoperation" -msgstr "第 5 天: 遥操作" +msgstr "第 5 天:遥操作" -#: ../../source/0-overview/2-learning_path.md:150 -#: ca5181d6181e40c7821bde68086fb240 +#: ../../source/0-overview/2-learning_path.md:131 +#: 4302e88f06074ddb89d0b4d3d7072167 msgid "**Goal:** Control the robot via VR or isomorphic teleop." msgstr "**目标:** 通过 VR 或同构遥操作控制机器人。" -#: ../../source/0-overview/2-learning_path.md:152 -#: fc23cabe93144eab8f3798bde5bde490 +#: ../../source/0-overview/2-learning_path.md:133 +#: 5ee523616ea74f25b2d2ce80c051d794 msgid "VR Teleoperation" msgstr "VR 遥操作" -#: ../../source/0-overview/2-learning_path.md:154 -#: 3162e7515e924672bde2b30263dd9e6e +#: ../../source/0-overview/2-learning_path.md:135 +#: f9102f063fbe47fa8c14dc685b679482 msgid "" "**Supported headsets:** Pico Enterprise (recommended; USB 网络共享, " "Enterprise App), Pico consumer (different App), and Meta Quest. Backends:" @@ -589,8 +583,8 @@ msgstr "" "**支持的头显:** Pico 企业版(推荐;USB 网络共享、企业版 App)、Pico 消费版(不同 App)和 Meta " "Quest。后端:WebXR(`./run.sh vr`)或 XRoboToolkit(`./run.sh vr-xrt`)。" -#: ../../source/0-overview/2-learning_path.md:156 -#: 0c04f3148ea9409ebeb70a92e39d9012 +#: ../../source/0-overview/2-learning_path.md:137 +#: 2b2289eefad94de0b306469d79687968 msgid "" "cd fa-py-libraries\n" "./run.sh vr\n" @@ -598,13 +592,13 @@ msgstr "" "cd fa-py-libraries\n" "./run.sh vr\n" -#: ../../source/0-overview/2-learning_path.md:161 -#: 88a116023e2240388da5739aa1755258 +#: ../../source/0-overview/2-learning_path.md:142 +#: 10bb7196bd80436ca7a7cf9864a7609e msgid "Pico Enterprise vs consumer" msgstr "Pico 企业版与消费版" -#: ../../source/0-overview/2-learning_path.md:164 -#: 3694f426d71147dab391f65cd2c059fd +#: ../../source/0-overview/2-learning_path.md:145 +#: 0090c9e349cc4f1f8bd7dbdfa4bc90e3 msgid "" "Pico **Enterprise** and Pico **consumer** are different SKUs: Enterprise " "supports USB 网络共享 and uses a **different App**. Install the App that " @@ -613,13 +607,13 @@ msgstr "" "Pico **企业版** 与 Pico **消费版** 是不同 SKU:企业版支持 USB 网络共享,并使用**不同的 " "App**。不要为两者安装同一个 App。" -#: ../../source/0-overview/2-learning_path.md:167 -#: c690c93c797b40ee8135138e6b098559 +#: ../../source/0-overview/2-learning_path.md:148 +#: 6f29b45f50984f0a95bf7e5923f1a36f msgid "Isomorphic Teleop (HighTorque Panthera HT)" msgstr "同构遥操作(高擎 Panthera HT)" -#: ../../source/0-overview/2-learning_path.md:169 -#: cdc403a26c2f471ea9f2ab21256c92fd +#: ../../source/0-overview/2-learning_path.md:150 +#: 1483513375ba4523b62ffa56bb1163cc msgid "" "Master–slave **isomorphic teleop** (同构遥操作). On the `panthera-ht` branch, " "real-robot teleop is `./teleop_start.sh` — see [HighTorque Panthera " @@ -631,8 +625,8 @@ msgstr "" "HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md)。模拟(软件包 " "README):" -#: ../../source/0-overview/2-learning_path.md:171 -#: bdd92eb18a2a4dc78cfd6577d8e2b2dd +#: ../../source/0-overview/2-learning_path.md:152 +#: e1cf0f2a5e5546e1a89911049c1a5da7 msgid "" "ros2 launch drag_teleop_controller drag_teleop_controller.launch.py \\\n" " role:=master hardware:=mock_components\n" @@ -644,8 +638,8 @@ msgstr "" "ros2 launch drag_teleop_controller drag_teleop_controller.launch.py \\\n" " role:=slave hardware:=mock_components\n" -#: ../../source/0-overview/2-learning_path.md:178 -#: 0635bab6b5fa464e906d46cf179702f9 +#: ../../source/0-overview/2-learning_path.md:159 +#: 0d1063f5bce24e4bab3d8c28d8019ceb msgid "" "**Primary sources:** VR pose publisher, " "[drag_teleop_controller](https://github.com/fiveages-" @@ -654,30 +648,30 @@ msgstr "" "**主要来源:** VR 位姿发布器、[drag_teleop_controller](https://github.com/fiveages-" "sim/drag_teleop_controller)" -#: ../../source/0-overview/2-learning_path.md:180 -#: 2b81e8e6b203478a9e89e837de190224 +#: ../../source/0-overview/2-learning_path.md:161 +#: cfd58728647c41c7b9964b13078cec07 msgid "" "**Outcome:** Real-time control via VR headset or master–slave isomorphic " "teleop." msgstr "**预期结果:** 通过 VR 头显或主从同构遥操作进行实时控制。" -#: ../../source/0-overview/2-learning_path.md:182 -#: 45fef0bc464c4a958cddf7c83c2c6613 +#: ../../source/0-overview/2-learning_path.md:163 +#: a09d0c030e49474dbd55f66537b5c7cb msgid "Day 6: Real Hardware" msgstr "第 6 天:真实硬件" -#: ../../source/0-overview/2-learning_path.md:184 -#: 74318656e22b4923bd97951cc9dcbb49 +#: ../../source/0-overview/2-learning_path.md:165 +#: 53700b7951f940be9e298a1931e22124 msgid "**Goal:** Deploy to physical robots." msgstr "**目标:** 部署到实体机器人。" -#: ../../source/0-overview/2-learning_path.md:186 -#: 04e9b00bb97744e58572d96c5c8b18e0 +#: ../../source/0-overview/2-learning_path.md:167 +#: dff8b527c3bb4af599108cbde9cd945f msgid "Public Path (ARX Lift 2S, Acone, HighTorque Panthera HT)" msgstr "公开路径(方舟无限 Lift 2S、Acone、高擎 Panthera HT)" -#: ../../source/0-overview/2-learning_path.md:188 -#: 039a96dc199648c4a0eac47dfef31e19 +#: ../../source/0-overview/2-learning_path.md:169 +#: 635decdc55ef4598aac3e3faf3b61eff msgid "" "Use the matching **branch README** and `./quick_start.sh`. **Acone** / " "**AC One** is **dual-arm**; **Lift 2S** is the full-body platform." @@ -685,8 +679,8 @@ msgstr "" "使用对应 **分支 README** 和 `./quick_start.sh`。**Acone** / **AC One** 是 " "**双臂**;**Lift 2S** 是全身平台。" -#: ../../source/0-overview/2-learning_path.md:190 -#: 214a53d70439438c9d38e09e81c9cbb7 +#: ../../source/0-overview/2-learning_path.md:171 +#: bd9bb55ed1c9413da508a81879cef1f0 msgid "" "**[ARX Lift " "2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md)** — " @@ -698,8 +692,8 @@ msgstr "" "全身含底盘:`git clone -b arx-lift2s …` 然后 `./init_repo.sh` / " "`./quick_start.sh`" -#: ../../source/0-overview/2-learning_path.md:191 -#: fd4a1d9f41af4385bd990441dd8bc0b1 +#: ../../source/0-overview/2-learning_path.md:172 +#: 15038ccc37724f648c738f619d6c4173 msgid "" "**Acone** / **AC One** — **dual-arm**; same `arx-lift2s` workspace, pick " "ACone in `quick_start` for co-debug" @@ -707,8 +701,8 @@ msgstr "" "**Acone** / **AC One** — **双臂**;同一 `arx-lift2s` 工作空间,在 `quick_start` 中选 " "ACone 做联调" -#: ../../source/0-overview/2-learning_path.md:192 -#: e7ab06055c444cb1b51cf13c441177c4 +#: ../../source/0-overview/2-learning_path.md:173 +#: fdf200cd6a0e4a71bea77403a3d586c2 msgid "" "**[HighTorque Panthera " "HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md)** — " @@ -719,158 +713,940 @@ 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:196 -#: 3aac93ef75b04a5ba4c7c4148c9f4d64 +#: ../../source/0-overview/2-learning_path.md:175 +#: b913ca7bdc71409491d1ebe39a0217cb +msgid "Internal path (FiveAges robots)" +msgstr "内部路径(第五纪机器人)" + +#: ../../source/0-overview/2-learning_path.md:177 +#: a68fc1ca6faf4bfb8330ad433a29800a +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:179 +#: e0daa6da829644eb98e0272c5801cdfc +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:181 +#: 81a62705c0024583a6dc186244aa8886 +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:142 +#: 2f0e4d91cb434f9b871793c8b429d200 msgid "Repository" msgstr "Repository" -#: ../../source/0-overview/2-learning_path.md:196 -#: 866b46b6062641b8973d3df58600abc6 +#: ../../source/0-overview/2-learning_path.md:142 +#: 28ef85ccd47a495591df94b66bbe6115 +msgid "Use it for" +msgstr "用来做什么" + +#: ../../source/0-overview/2-learning_path.md:142 +#: 43f1232a2e214ae2b09565811aeef26b msgid "Access" msgstr "Access" -#: ../../source/0-overview/2-learning_path.md:196 -#: 858aab9e5e32459b9d6bedb748e566d7 +#: ../../source/0-overview/2-learning_path.md:142 +#: 0a4b19311f3a4a7ea62912f7145bd062 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 -#: 389bd986d6c740d9936ffb4ae1b00c8c +#: ../../source/0-overview/2-learning_path.md:142 +#: 0c9f834e68834b218232ee33494d19c8 +msgid "The internal workspace (`fa-w2`)" +msgstr "内部工作区(`fa-w2`)" + +#: ../../source/0-overview/2-learning_path.md:142 +#: 3ab986340ecf409e9d9adf7161c8cbb0 +msgid "Clone and follow its README" +msgstr "克隆后按它的 README 做" + +#: ../../source/0-overview/2-learning_path.md:142 +#: a18ddebec6104fe7bae7d7ac274c6b59 msgid "[fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)" msgstr "[fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)" -#: ../../source/0-overview/2-learning_path.md:196 -#: a7d6c3c31e7343b7be8eeef5ded06ac7 +#: ../../source/0-overview/2-learning_path.md:142 +#: 5e58b40836c440c0999c20763ead6fb6 msgid "W2R URDF" msgstr "W2R 的 URDF" -#: ../../source/0-overview/2-learning_path.md:196 -#: fcd4fafb75ea4a61b347e08a15f131f1 +#: ../../source/0-overview/2-learning_path.md:142 +#: 1fe1581f774340b8ad373c50cdff1351 f64d0c6627244fe48895e946423fa0f2 +msgid "Read or change that description" +msgstr "阅读或修改这份描述" + +#: ../../source/0-overview/2-learning_path.md:142 +#: 24ad24a7ceb145199be047372e703bf9 msgid "[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description)" msgstr "[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description)" -#: ../../source/0-overview/2-learning_path.md:196 -#: 344a3dd3c17e4ef5bcd06d95e2a9e9bd +#: ../../source/0-overview/2-learning_path.md:142 +#: cd8471b29e2c46a2a0487dd6e6bc48c4 msgid "S2R URDF" msgstr "S2R 的 URDF" -#: ../../source/0-overview/2-learning_path.md:196 -#: c4a8dece825a455b862ba803bcc24557 +#: ../../source/0-overview/2-learning_path.md:142 +#: 5436c969324c48dabbb97f940419bfcd 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 -#: 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:142 +#: ef4a1994fd474405bc648bbc4491ec43 +msgid "Whole-body controller source" +msgstr "全身控制器源码" -#: ../../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:142 +#: 00899e7c21844516ba63fadaa302784d 097d4ee0c8654174802a22eb4c752ba0 +msgid "Read or change the source" +msgstr "阅读或修改源码" -#: ../../source/0-overview/2-learning_path.md:260 -#: dd217448cfdd4fcbbc0c8ec920e45ba7 -msgid "What you hand in" -msgstr "要交什么" +#: ../../source/0-overview/2-learning_path.md:142 +#: 3012f0901ece4143915b7cbe89a8f8f8 +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:276 -#: 1026d30fe8ce4605b075e43c02fcb51a -msgid "Optional: Synthetic data (Isaac)" -msgstr "可选:合成数据(Isaac)" +#: ../../source/0-overview/2-learning_path.md:142 +#: 0ab11946e31c49c8bee0048b0924d222 +msgid "Wheeled-arm motion library source" +msgstr "轮臂运动库源码" -#: ../../source/0-overview/2-learning_path.md:278 -#: ff04abb6c3744d8480604599a7c9d542 +#: ../../source/0-overview/2-learning_path.md:191 +#: 8bbf19b88521409684d98acedf00dfd3 msgid "" -"**Goal:** Understand the Isaac datagen path (not Gazebo): USD scene → " -"`ROS2RobotInterface` → composer `task_queue` → LeRobot dataset on disk." +"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 "" -"**目标:** 弄清 Isaac 数据采集路径(不是 Gazebo):USD 场景 → `ROS2RobotInterface` → " -"composer `task_queue` → 磁盘上的 LeRobot 数据集。" +"跑全身控制不必检出这两个源码仓。标准 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:280 -#: abdb2861ed33444eae92bd2e31643e1e +#: ../../source/0-overview/2-learning_path.md:195 +#: 7cf7185daa0a4c149e98d4d8d86d9e2f msgid "" -"Follow [Synthetic Data](../2-how_to/7-synthetic_data/0-index.md) on " -"[lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main` and " -"[robot_action_composer](https://github.com/fiveages-" -"sim/robot_action_composer) `main`. Stop at recording/export; skip " -"training." +"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 "" -"按 [合成数据](../2-how_to/7-synthetic_data/0-index.md) 走 " -"[lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) 的 `main` 和 " -"[robot_action_composer](https://github.com/fiveages-" -"sim/robot_action_composer) 的 `main`。停在录制 / 导出,跳过训练。" +"打开 [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws),运行该 " +"README 里写的初始化和快速启动脚本。" -#: ../../source/0-overview/2-learning_path.md:282 -#: a6b8a4d8a77d4cd894284eb3d8416443 -msgid "After the beginner path" -msgstr "新手路径之后" +#: ../../source/0-overview/2-learning_path.md:196 +#: b6b3bfd342f04b24bad0b1a6bc74bc2e +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:284 -#: 6b5d253de1b942bab0ddc008493220ae +#: ../../source/0-overview/2-learning_path.md:198 +#: 630fc4b49264469684b2c34f68d5b5a8 msgid "" -"Continue by **role** in [More " -"applications](../6-more_applications/0-index.md): field commissioning " -"(现场调试), classical algorithm (传统方案算法工程师), VLA collect / train / deploy " -"(VLA 采训推), simulation (仿真工程师)." -msgstr "" -"按 **角色** 继续看[更多应用](../6-more_applications/0-index.md):现场调试、传统方案算法工程师、VLA " -"采训推、仿真工程师。" - -#: ../../source/0-overview/2-learning_path.md:286 -#: 7ae5f8b5000f4124b83437e763d9b223 -msgid "Tips for Success" -msgstr "实用建议" +"**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:288 -#: 84245dc734e34ea59f2326c05078fe77 -msgid "" -"**Don't skip mock mode** — Always verify behavior in mock before " -"simulation or real hardware" -msgstr "**不要跳过 mock 模式** — 在进入仿真或真实硬件之前,务必先在 mock 中验证行为" +#: ../../source/0-overview/2-learning_path.md:201 +#: e97851d04b7c43fd82df3ccaa4232e3d +msgid "Day 7: Bring one new robot into FaSim" +msgstr "第 7 天:把一台新机器人接入 FaSim" -#: ../../source/0-overview/2-learning_path.md:289 -#: 4367a0d7b8b24a678c90a3a0bb250c9b +#: ../../source/0-overview/2-learning_path.md:203 +#: c264ab31d6a34a51972c7f742a02169d msgid "" -"**Read the warnings** — The stack logs helpful messages about " -"configuration issues" -msgstr "**阅读警告信息** — 技术栈会记录有助于排查配置问题的日志" +"**Goal:** Independently connect a robot that is not already a demo, so " +"Isaac and the ROS 2 stack move it. This is the exam, not a walkthrough of" +" CR5 or W2. You are done when a command moves that robot in the viewport " +"and you can hand in the items below." +msgstr "**目标:** 独立接上一台还不是现成 demo 的机器人,让 Isaac 和 ROS 2 运控把它动起来。这是考核,不是再走一遍 CR5 或 W2。一条指令能在视口里带动这台机器人,并且能交出下面这些材料,这一天就算完成。" -#: ../../source/0-overview/2-learning_path.md:290 -#: 8ee96f8c22d944f696fb6e69afb460b6 +#: ../../source/0-overview/2-learning_path.md:205 +#: bfb7275595e548379bbc0b9102a27b08 msgid "" -"**Use lean branches** — `open-deploy-ws` offers `dobot-cr5`, `arx-" -"lift2s`, and `panthera-ht`" -msgstr "**使用精简分支** — `open-deploy-ws` 提供 `dobot-cr5`、`arx-lift2s` 和 `panthera-ht`" +"**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:291 -#: 678e88e7bb474d4593fbfadbc985ec19 +#: ../../source/0-overview/2-learning_path.md:207 +#: 7c701488cbca46f2866df52b1d1432b5 msgid "" -"**Ask questions** — File issues on the relevant repository for bugs or " -"unclear documentation" -msgstr "**提出问题** — 遇到缺陷或文档不清时,请在相应仓库提交 issue" - -#~ msgid "Day 6+" -#~ msgstr "" - -#~ msgid "Real hardware (internal)" -#~ msgstr "" +"Package layout: [Add a " +"Robot](../2-how_to/6-deployment/10-add_a_robot.md). Start Sim and choose " +"a connection: [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md). In-" +"process inputs, swerve chassis graphs, clock, and TF: [FaSim-" +"Isaac](../4-reference/simulation/2-fasim_isaac.md)." +msgstr "描述包怎么放:[添加机器人](../2-how_to/6-deployment/10-add_a_robot.md)。启动 Sim 并选择接入方式:[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md)。进程内输入、舵轮底盘图、时钟和 TF:[FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md)。" -#~ msgid "Day 6+: Real Hardware (Internal)" -#~ msgstr "" +#: ../../source/0-overview/2-learning_path.md:209 +#: 9bad7b2c52ea4cd6a15787b0a86ef7c6 +msgid "Build these four pieces" +msgstr "准备这四样" -#~ msgid "**Goal:** Deploy to physical FA robots." -#~ msgstr "" +#: ../../source/0-overview/2-learning_path.md:211 +#: 0300b6b7959349ce82002bec70d00d04 +#, 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` 保持默认。" -#~ msgid "" -#~ "This stage requires access to `fa-" -#~ "deploy-ws` and a physical robot. " -#~ "Contact your team lead for repository" -#~ " access and hardware allocation." -#~ msgstr "" +#: ../../source/0-overview/2-learning_path.md:213 +#: 0b3af64d1be04f59a0d574c03950d02b +msgid "" +"**A USD stage.** `./run.sh` opens it, and the stage has one " +"ArticulationRoot for this robot. Put it under " +"[robot_usds](../4-reference/simulation/3-robot_usds.md), or in a project " +"scene you can open. There is no `./run.sh --robot`." +msgstr "**一份 USD。** `./run.sh` 能打开它,舞台上这台机器人有一个 ArticulationRoot。放在 [robot_usds](../4-reference/simulation/3-robot_usds.md) 下,或放进你能打开的项目场景。没有 `./run.sh --robot`。" + +#: ../../source/0-overview/2-learning_path.md:215 +#: 035af007510c4f3f95c67f41bd63e3a2 +msgid "" +"**One connection for those joints.** Use the topic bridge *or* the in-" +"process graph, as in [Isaac " +"Sim](../2-how_to/2-simulation/4-isaac_sim.md). For `isaac_sim`, the xacro" +" must accept that hardware key, and the payload must contain " +"`ROS2ControlLaunch` ([ROS 2 Control " +"extension](../4-reference/simulation/2-fasim_isaac.md#ros-2-control-" +"extension)). On a four-wheel swerve chassis such as Linkhou S2 or " +"Taku, the steer and drive joints are commanded by `SwerveController`, not" +" by that hardware key ([Swerve " +"extension](../4-reference/simulation/2-fasim_isaac.md#swerve-extension))." +msgstr "**给这些关节选一种接入。** 按 [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md),用话题桥 *或* 进程内图。走 `isaac_sim` 时,xacro 必须接受这个硬件键,payload 里要有 `ROS2ControlLaunch`([ROS 2 Control 扩展](../4-reference/simulation/2-fasim_isaac.md#ros-2-control-extension))。像 Linkhou S2 或 Taku 这样的四轮舵轮底盘,转向关节和驱动关节由 `SwerveController` 指挥,而不是那个硬件键([舵轮扩展](../4-reference/simulation/2-fasim_isaac.md#swerve-extension))。" -#~ msgid "ros2 launch drag_teleop_controller drag_teleop.launch.py\n" +#: ../../source/0-overview/2-learning_path.md:217 +#: 55e3d6714a974f13836e5ec15abb2a1d +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:219 +#: 46c180ccee1444278a2030a929e2bd26 +msgid "Work in this order" +msgstr "按这个顺序做" + +#: ../../source/0-overview/2-learning_path.md:221 +#: 8e869d719a214841862bc4779ae01761 +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:222 +#: acd57dd4cfbe4063b3f8b24e75e77534 +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:223 +#: 558053e97fb64993afa8a40e937cf6e5 +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:224 +#: ed11a6cf08ee4ea28ae7417a083b9de2 +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:226 +#: 263dff6829d94be490fa15eda2bae050 +msgid "What you hand in" +msgstr "要交什么" + +#: ../../source/0-overview/2-learning_path.md:228 +#: 42e184946c1842cd969091a38348a931 +msgid "The description package, or the branch, and the USD path you opened." +msgstr "描述包或分支,以及你打开的 USD 路径。" + +#: ../../source/0-overview/2-learning_path.md:229 +#: b896e80edb7f4588bef266d9bf2d93cc +msgid "" +"The launch line, or the `ROS2ControlLaunch` prim you played (and the " +"swerve graph, if you used one)." +msgstr "launch 命令,或你播放的那个 `ROS2ControlLaunch` 图元(如果用了舵轮图,也一并交上)。" + +#: ../../source/0-overview/2-learning_path.md:230 +#: c793ac6e13d049eaba030a244ee96679 +msgid "The joint-state topic or the controller list, and the motion you sent." +msgstr "你看到的关节状态话题或控制器列表,以及你发出的动作。" + +#: ../../source/0-overview/2-learning_path.md:231 +#: 66fa43851ee3428294cad48d4cc59a3c +msgid "" +"A short note of known limits, plus steps another person can replay, and a" +" demo recording." +msgstr "一份已知限制说明、别人能照着复现的步骤,以及演示录像。" + +#: ../../source/0-overview/2-learning_path.md:233 +#: 94b58af88ccb44ea96617166a5a344c0 +msgid "How you know it works" +msgstr "怎样算做完" + +#: ../../source/0-overview/2-learning_path.md:235 +#: 0f03b0eec9bb4aa99c5fa13f9a8b90ea +msgid "" +"Check the functions that belong to the robot you chose: joint control, " +"chassis motion, end effector, and sensor data. For a wheeled robot, show " +"that the base drives; for a robot with a dexterous hand, show that the " +"hand opens and closes." +msgstr "按你选的机器人检查相应功能:关节控制、底盘运动、末端执行器和传感器数据。轮式机器人要能看出底盘在走;带灵巧手的机器人要能看出手在开合。" + +#: ../../source/0-overview/2-learning_path.md:237 +#: 40f9dcd58afe4e23b2357e71df5e52a5 +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." +msgstr "**关节。** mock 能进到 HOLD,Play 在跑,状态话题或 `ros2 control list_controllers` 里的关节名和 xacro 一致。发一条指令后,视口里这些关节会动。" + +#: ../../source/0-overview/2-learning_path.md:239 +#: d8fa06afe9a248a2a6d3b838fe6dc9d0 +msgid "" +"**Base.** Follow the [TF](../4-reference/simulation/2-fasim_isaac.md" +"#tf) and, if the robot drives on a map, " +"[Navigation](../4-reference/simulation/2-fasim_isaac.md#navigation)" +" sections. A ROS namespace does not rename `frame_id`. Composer " +"`ros2-stack` is a separate process on the host." +msgstr "**底盘。** 按 [TF](../4-reference/simulation/2-fasim_isaac.md#tf) 核对;如果机器人要在地图上行驶,再看 [导航](../4-reference/simulation/2-fasim_isaac.md#navigation)。ROS 命名空间不会改写 `frame_id`。Composer 的 `ros2-stack` 是主机上的另一个进程。" + +#: ../../source/0-overview/2-learning_path.md:241 +#: cd33057b00514da28fbb10c296654a1a +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:243 +#: 40460cba88c74c9791a7a7b353dade65 +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:245 +#: b93533a34fa34536b4bd1f71aa77058b +msgid "" +"If a timed motion finishes much too fast, check `/clock` against " +"[Clock](../4-reference/simulation/2-fasim_isaac.md#clock) before " +"you edit joint gains." +msgstr "如果带时限的动作结束得过快,先按 [时钟](../4-reference/simulation/2-fasim_isaac.md#clock) 检查 `/clock`,再去改关节增益。" + +#: ../../source/0-overview/2-learning_path.md:247 +#: 301ac443dedb49048d5e1a0ef6a04fd9 +msgid "Optional: Synthetic data (Isaac)" +msgstr "可选:合成数据(Isaac)" + +#: ../../source/0-overview/2-learning_path.md:249 +#: 7457b2218c9042b9a303b3e2cc384682 +msgid "" +"**Goal:** Understand the Isaac datagen path (not Gazebo): USD scene → " +"`ROS2RobotInterface` → composer `task_queue` → LeRobot dataset on disk." +msgstr "" +"**目标:** 弄清 Isaac 数据采集路径(不是 Gazebo):USD 场景 → `ROS2RobotInterface` → " +"composer `task_queue` → 磁盘上的 LeRobot 数据集。" + +#: ../../source/0-overview/2-learning_path.md:251 +#: 5de2eff51f4f4fd5a842826287cb5694 +msgid "" +"Follow [Synthetic Data](../2-how_to/7-synthetic_data/0-index.md) on " +"[lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) `main` and " +"[robot_action_composer](https://github.com/fiveages-" +"sim/robot_action_composer) `main`. Stop at recording/export; skip " +"training." +msgstr "" +"按 [合成数据](../2-how_to/7-synthetic_data/0-index.md) 走 " +"[lerobot_ros2](https://github.com/fiveages-sim/lerobot_ros2) 的 `main` 和 " +"[robot_action_composer](https://github.com/fiveages-" +"sim/robot_action_composer) 的 `main`。停在录制 / 导出,跳过训练。" + +#: ../../source/0-overview/2-learning_path.md:253 +#: c6ddb62fbff14916b0c0f060841985f7 +msgid "After the beginner path" +msgstr "新手路径之后" + +#: ../../source/0-overview/2-learning_path.md:255 +#: 0efb5310daf641d5a2ce1c3167be88a5 +msgid "" +"Continue by **role** in [More " +"applications](../6-more_applications/0-index.md): field commissioning " +"(现场调试), classical algorithm (传统方案算法工程师), VLA collect / train / deploy " +"(VLA 采训推), simulation (仿真工程师)." +msgstr "" +"按 **角色** 继续看[更多应用](../6-more_applications/0-index.md):现场调试、传统方案算法工程师、VLA " +"采训推、仿真工程师。" + +#: ../../source/0-overview/2-learning_path.md:257 +#: 7fae7d8b285e43248b5285f9adae643a +msgid "Tips for Success" +msgstr "实用建议" + +#: ../../source/0-overview/2-learning_path.md:259 +#: fb45d4ac7a154a28bcc82c4e79cc4e3d +msgid "" +"**Don't skip mock mode** — Always verify behavior in mock before " +"simulation or real hardware" +msgstr "**不要跳过 mock 模式** — 在进入仿真或真实硬件之前,务必先在 mock 中验证行为" + +#: ../../source/0-overview/2-learning_path.md:260 +#: 6fc4367ec615404995d1bbca39986055 +msgid "" +"**Read the warnings** — The stack logs helpful messages about " +"configuration issues" +msgstr "**阅读警告信息** — 技术栈会记录有助于排查配置问题的日志" + +#: ../../source/0-overview/2-learning_path.md:261 +#: bb322d6a80a84ba4a55932c47223ede3 +msgid "" +"**Use lean branches** — `open-deploy-ws` offers `dobot-cr5`, `arx-" +"lift2s`, and `panthera-ht`" +msgstr "**使用精简分支** — `open-deploy-ws` 提供 `dobot-cr5`、`arx-lift2s` 和 `panthera-ht`" + +#: ../../source/0-overview/2-learning_path.md:262 +#: 949729e120bc46268940c7ed3d4fac7a +msgid "" +"**Ask questions** — File issues on the relevant repository for bugs or " +"unclear documentation" +msgstr "**提出问题** — 遇到缺陷或文档不清时,请在相应仓库提交 issue" + +#: ../../source/0-overview/2-learning_path.md:0 +#: 2b2289eefad94de0b306469d79687968 +msgid "fa-py-libraries and Viser" +msgstr "fa-py-libraries 与 Viser" + +#: ../../source/0-overview/2-learning_path.md:0 +#: 9bbbb88166a64dd587ba7ca4bf5c0668 +msgid "Isaac Sim" +msgstr "Isaac Sim" + +#: ../../source/0-overview/2-learning_path.md:97 +#: 13b551e443224318a9a277d7cb45ed5a +msgid "" +"This clip is a W2 with xhand1 operation demo: in RViz, drag the dual-arm " +"end-effector targets, reset both arms, and adjust the head joints with " +"JointControlPanel." +msgstr "" +"这段视频是 W2 配 xhand1 的操作演示:在 RViz 里拖动双臂末端目标,复位双臂,并用 JointControlPanel 调节头部关节。" + +#: ../../source/0-overview/2-learning_path.md:109 +#: 2b2289eefad94de0b306469d79687968 +msgid "Day 3: fa-py-libraries and Viser" +msgstr "第 3 天:fa-py-libraries 与 Viser" + +#: ../../source/0-overview/2-learning_path.md:111 +#: 1e435dc089be48fda87b09825b543c62 +msgid "" +"**Goal:** Install fa-py-libraries and open Viser in a browser, so you can " +"see the robot and send basic commands before you start Isaac Sim." +msgstr "" +"**目标:** 安装 fa-py-libraries,并在浏览器里打开 Viser,这样在启动 Isaac Sim " +"之前就能看到机器人、发出基本指令。" + +#: ../../source/0-overview/2-learning_path.md:113 +#: c37fa178f7e048249605ee218b2ecb4d +msgid "" +"Viser is the browser 3D view and control page from " +"[ros2-viser](https://github.com/fiveages-sim/ros2-viser). Launch it from " +"**fa-py-libraries**, not as a standalone product and not from " +"lerobot_ros2." +msgstr "" +"Viser 是 [ros2-viser](https://github.com/fiveages-sim/ros2-viser) " +"提供的浏览器三维查看与控制页面。从 **fa-py-libraries** 启动它,不要把它当成单独的产品,也不要从 lerobot_ros2 " +"启动。" + +#: ../../source/0-overview/2-learning_path.md:117 +#: 1b2e81b2b661458694dd7949aca0cb13 +msgid "" +"Keep a robot demo from Day 1 or Day 2 running. The ros2-viser README asks " +"you to start the control stack first; `/robot_description` must be " +"available." +msgstr "" +"先保持第 1 天或第 2 天的机器人演示在运行。ros2-viser 的 README 要求先启动运控;`/robot_description` " +"必须已经可用。" + +#: ../../source/0-overview/2-learning_path.md:118 +#: 1f4dec5a40f240baa8b2354ae2852106 +msgid "" +"Install fa-py-libraries (Python 3.12 env; this also installs " +"`ros2_robot_interface` and `ros2-viser`):" +msgstr "" +"安装 fa-py-libraries(Python 3.12 环境;同时会装上 `ros2_robot_interface` 和 " +"`ros2-viser`):" + +#: ../../source/0-overview/2-learning_path.md:119 +#: 1f4dec5a40f240baa8b2354ae2852106 +msgid "" +"git clone https://github.com/fiveages-sim/fa-py-libraries.git\n" +"cd fa-py-libraries\n" +"./init.sh all\n" +msgstr "" +"git clone https://github.com/fiveages-sim/fa-py-libraries.git\n" +"cd fa-py-libraries\n" +"./init.sh all\n" + +#: ../../source/0-overview/2-learning_path.md:124 +#: c62889ec812744bfa63feba2bca681dc +msgid "Start Viser from that repository:" +msgstr "从该仓库启动 Viser:" + +#: ../../source/0-overview/2-learning_path.md:125 +#: 627699df354b45e0b5771eb50f84f020 +msgid "./run.sh viser\n" +msgstr "./run.sh viser\n" + +#: ../../source/0-overview/2-learning_path.md:128 +#: d209530eaf0a4ee7a9d90536d6a98117 +msgid "" +"`./run.sh` with no arguments opens a menu; item 1 is `ros2-viser launch`. " +"The command runs `ros2-viser/launch.py`." +msgstr "" +"不带参数运行 `./run.sh` 会打开菜单;第 1 项是 `ros2-viser launch`。这条命令会执行 " +"`ros2-viser/launch.py`。" + +#: ../../source/0-overview/2-learning_path.md:129 +#: 53faa6c2f42b4d20aa5403dbbef54fa5 +msgid "" +"In a browser, open the URL that Viser prints in the terminal (`访问 URL`). " +"The same output shows the host and port; this launch has no separate " +"host/port flag. You can also scan the QR code it prints." +msgstr "" +"在浏览器里打开 Viser 在终端打印的地址(`访问 " +"URL`)。同一段输出里有主机和端口;这次启动没有单独的主机/端口参数。也可以扫描它打印的二维码。" + +#: ../../source/0-overview/2-learning_path.md:130 +#: 45a9c452eefb4c58ac62c221be1ae555 +msgid "" +"The page starts as an empty scene. If only one robot is present, it loads " +"automatically. If there are several, pick one under “选择命名空间”. If the robot" +" comes up later, click “刷新命名空间列表”." +msgstr "" +"页面一开始是空场景。如果当时只有一台机器人,会自动加载。如果有多台,在「选择命名空间」里选一个。如果机器人是后来才起来的,点「刷新命名空间列表」。" + +#: ../../source/0-overview/2-learning_path.md:131 +#: a16165cb99e6420ba43f15e413f8fb4c +msgid "" +"Confirm the model is visible. For a first control check: use HOME / HOLD " +"on the state panel; switch to OCS2 and drag the end-effector handles; or " +"switch to MOVEJ, move the joint sliders, and send the target. On a mobile " +"base such as G1-D, `launch.py` sets the visualization frame to `world`; " +"you can also choose `map` or `odom` on the page so the model and the " +"handles share the same ground." +msgstr "" +"确认模型已经可见。第一次检查控制时:在状态面板用 HOME / HOLD;切到 OCS2,拖动末端手柄;或者切到 " +"MOVEJ,拉动关节滑条再发送目标。像 G1-D 这样的移动底盘,`launch.py` 会把可视化坐标系设为 `world`;也可以在页面上改成 " +"`map` 或 `odom`,让模型和手柄落在同一地面上。" + +#: ../../source/0-overview/2-learning_path.md:133 +#: 39765f5ad82a4409b865785096182078 +msgid "" +"Do not copy the rest of the Python API here. Full Viser UI: " +"[ros2-viser](../4-reference/python_apps/3-ros2_viser.md). Writing scripts " +"with `ROS2RobotInterface`: [Python " +"Interface](../2-how_to/3-programming/5-python_interface.md)." +msgstr "" +"这里不要再抄一遍其余 Python API。Viser 完整界面见 " +"[ros2-viser](../4-reference/python_apps/3-ros2_viser.md)。用 " +"`ROS2RobotInterface` 写脚本见 [Python " +"接口](../2-how_to/3-programming/5-python_interface.md)。" + +#: ../../source/0-overview/2-learning_path.md:135 +#: cfad2d9db829473fb1e87bddfb0d86aa +msgid "" +"**Primary sources:** [fa-py-libraries](https://github.com/fiveages-sim/fa-" +"py-libraries), [ros2-viser](https://github.com/fiveages-sim/ros2-viser)" +msgstr "" +"**主要来源:** [fa-py-libraries](https://github.com/fiveages-sim/fa-py-" +"libraries)、[ros2-viser](https://github.com/fiveages-sim/ros2-viser)" + +#: ../../source/0-overview/2-learning_path.md:137 +#: 4fdb3584b08c4ab39d81b9d5f235b63c +msgid "" +"**Outcome:** You can open Viser in a browser, see the robot, and use the " +"page to move it while a demo is running." +msgstr "**预期结果:** 能在浏览器里打开 Viser,看到机器人,并在演示运行时用这个页面对它进行控制。" + +#: ../../source/0-overview/2-learning_path.md:139 +#: 6cd786c4230a46be9850d2d5643e90e9 +msgid "Day 4: Isaac Sim" +msgstr "第 4 天:Isaac Sim" + +#: ../../source/0-overview/2-learning_path.md:141 +#: 6c1a4fbd3717417584f5ea0c19f1a680 +msgid "" +"**Goal:** Run physics simulation in Isaac Sim (FaSim), instead of mock " +"hardware. This is the default simulation path." +msgstr "**目标:** 在 Isaac Sim(FaSim)里跑物理仿真,而不是 mock 硬件。这是默认的仿真路径。" + +#: ../../source/0-overview/2-learning_path.md:145 +#: ea68f9803dc64d3385c302966562df00 +msgid "" +"Start Viser the way you did on Day 3, after the Isaac / ROS 2 stack is up," +" so you can view and control the robot in the browser: [Start " +"Viser](../2-how_to/3-programming/5-python_interface.md#start-viser). A " +"G1-D demonstration of full-body control and chassis motion is on that How-" +"To page: [G1-D full-body control and chassis " +"motion](../2-how_to/2-simulation/4-isaac_sim.md#g1-d-full-body-control-" +"and-chassis-motion)." +msgstr "" +"Isaac / ROS 2 运控起来之后,按第 3 天的方式启动 Viser,就可以在浏览器里查看和控制机器人:[启动 " +"Viser](../2-how_to/3-programming/5-python_interface.md#start-viser)。G1-D " +"全身控制和底盘运动的演示在该 How-To 页:[G1-D " +"全身控制与底盘运动](../2-how_to/2-simulation/4-isaac_sim.md#g1-d-full-body-control-" +"and-chassis-motion)。" + +#: ../../source/0-overview/2-learning_path.md:151 +#: d9553af5ece4466d9e3d834b01a6c49c +msgid "" +"**Outcome:** You can start FaSim and see the robot move in Isaac Sim with " +"the same ROS 2 运控 as the real robot, plus simulation ground truth." +msgstr "**预期结果:** 能启动 FaSim,看到机器人在 Isaac Sim 中运动,运控与真机同一套 ROS 2 运控,并带仿真真值。" + +#: ../../source/0-overview/2-learning_path.md:153 +#: 497f972944484fe39c4a370cf2ce0ae1 +msgid "Gazebo (alternative)" +msgstr "Gazebo(备选)" + +#: ../../source/0-overview/2-learning_path.md:155 +#: 8183e2e419f94fe9b3cfbf36f105ad94 +msgid "" +"If you need Gazebo Harmonic instead, follow [Gazebo " +"Simulation](../2-how_to/2-simulation/3-gazebo_sim.md):" +msgstr "" +"如果需要改用 Gazebo Harmonic,按 [Gazebo " +"仿真](../2-how_to/2-simulation/3-gazebo_sim.md):" + +#: ../../source/0-overview/2-learning_path.md:167 +#: 669bdddd22734991ade09dd6ba456292 +msgid "" +"**Goal:** Start with VR or a game controller, then know what the other " +"input methods are for." +msgstr "**目标:** 先用 VR 或游戏手柄上手,再了解其他输入方式各自做什么。" + +#: ../../source/0-overview/2-learning_path.md:169 +#: 3a7107a4bdae4f189220022b4af36f92 +msgid "" +"Keep the robot stack from Days 1–4 running. Teleop only publishes targets " +"or assist events into that stack; it does not replace it." +msgstr "保持第 1 到第 4 天的机器人运控在运行。遥操作只向这套运控发布目标或辅助事件,并不能代替它。" + +#: ../../source/0-overview/2-learning_path.md:171 +#: 85320b35b35245e7903361b84f85c94b +msgid "" +"Inputs in this stack have different jobs: **end-effector pose** (VR " +"controllers, Vive Tracker, DexCap exoskeleton arms), **joint-space " +"following** (isomorphic teleop), **fingers / grippers** (VR triggers, Wuji" +" gloves, DexCap gloves), and **enable / pause / FSM assists** (some VR " +"buttons, the joystick enable switch, the foot pedal)." +msgstr "" +"这套系统里,不同输入承担不同职责:**末端位姿**(VR 手柄、Vive Tracker、DexCap " +"外骨骼的手臂)、**关节空间跟随**(同构遥操作)、**手指 / 夹爪**(VR 扳机、Wuji 手套、DexCap 手套),以及**使能 / 暂停" +" / FSM 辅助**(部分 VR 按键、手柄使能开关、脚踏板)。" + +#: ../../source/0-overview/2-learning_path.md:173 +#: a931ff91a0af4ef08a51df1fd322c279 +msgid "Start here: VR" +msgstr "从这里开始:VR" + +#: ../../source/0-overview/2-learning_path.md:175 +#: 8fef0e19aa504c0a81d094519ecf773c +msgid "" +"**What it is for.** Drive the arms from the headset controllers’ end-" +"effector pose. Triggers operate the gripper or hand. Buttons handle FSM, " +"pause, and — on 全身 — some arm enable/disable assists. Use this path when " +"you have a Pico or Quest headset." +msgstr "" +"**适合做什么。** 用头显配套手柄的末端位姿来带动手臂。扳机关夹爪或灵巧手。按键处理 FSM、暂停,以及在全身上的部分手臂使能/禁用辅助。有 " +"Pico 或 Quest 头显时走这条路径。" + +#: ../../source/0-overview/2-learning_path.md:177 +#: 2c66f7798d4b46e5904e991791ed3bdd +msgid "" +"**Minimum steps.** Follow [VR " +"Teleoperation](../2-how_to/5-teleoperation/6-vr_teleop.md). You need fa-" +"py-libraries from Day 3, `enable_vr: true` in the description’s " +"`config/ocs2/target_manager.yaml` (most robots default off), and a network" +" to the headset. Then:" +msgstr "" +"**最短步骤。** 按 [VR 遥操作](../2-how_to/5-teleoperation/6-vr_teleop.md)。你需要第 3 天的" +" fa-py-libraries,在描述包的 `config/ocs2/target_manager.yaml` 里把 `enable_vr: " +"true`(多数机器人默认是关闭的),以及通向头显的网络。然后:" + +#: ../../source/0-overview/2-learning_path.md:179 +#: 2b2289eefad94de0b306469d79687968 +msgid "" +"cd ~/fa-py-libraries\n" +"./run.sh vr\n" +msgstr "" +"cd ~/fa-py-libraries\n" +"./run.sh vr\n" + +#: ../../source/0-overview/2-learning_path.md:184 +#: 1cfef8eb78a24b2ba3323561026cb411 +msgid "" +"Open the URL shown in the headset browser (WebXR). For the lower-latency " +"XRoboToolkit path, use `./run.sh vr-xrt-service` then `./run.sh vr-xrt` as" +" on that page. Pico **Enterprise** is the preferred Pico SKU (USB 网络共享, " +"and a **different App** from Pico consumer)." +msgstr "" +"在头显浏览器里打开显示的 URL(WebXR)。延迟更低的 XRoboToolkit 路径,按该页使用 `./run.sh vr-xrt-" +"service`,再运行 `./run.sh vr-xrt`。Pico **Enterprise** 是更推荐的 Pico 规格(支持 USB " +"网络共享,并且和消费版 Pico 用的是**不同的 App**)。" + +#: ../../source/0-overview/2-learning_path.md:186 +#: f5d23ac11a454d228067850f97bc6bc9 +msgid "" +"**What you should see.** The arms follow the VR controllers, and you can " +"change FSM and the gripper from the controller buttons." +msgstr "**预期看到的结果。** 手臂跟随 VR 手柄运动,你可以用手柄按键切换 FSM、操作夹爪。" + +#: ../../source/0-overview/2-learning_path.md:188 +#: 38cc2e72185b4039ab2221b4e17eb741 +msgid "Start here: game controller (joystick)" +msgstr "从这里开始:游戏手柄(joystick)" + +#: ../../source/0-overview/2-learning_path.md:190 +#: ad40a811155e4fcc95b3b961111c95e0 +msgid "" +"**What it is for.** A gamepad or joystick, without a headset, to command " +"arm velocity (`control_input` → `/left_target/twist` and " +"`/right_target/twist`) and, in chassis mode, `/cmd_vel`. Use this path " +"when you only have a game controller." +msgstr "" +"**适合做什么。** 不用头显,用游戏手柄或摇杆以速度方式控制手臂(`control_input` → `/left_target/twist` 和" +" `/right_target/twist`),在底盘模式下还可以发 `/cmd_vel`。只有游戏手柄时走这条路径。" + +#: ../../source/0-overview/2-learning_path.md:192 +#: c2e1f61c7a304486ad6ee3467545fd1a +msgid "" +"**Minimum steps.** With the robot stack already running, follow [Joystick " +"teleop](../2-how_to/5-teleoperation/9-joystick_teleop.md):" +msgstr "" +"**最短步骤。** 在机器人运控已经运行的前提下,按 " +"[手柄遥操作](../2-how_to/5-teleoperation/9-joystick_teleop.md):" + +#: ../../source/0-overview/2-learning_path.md:194 +#: 341ef2307b284de9bd0b60d449c7f61f +msgid "ros2 launch arms_teleop joystick_teleop.launch.py\n" +msgstr "ros2 launch arms_teleop joystick_teleop.launch.py\n" + +#: ../../source/0-overview/2-learning_path.md:198 +#: 769f1095885b4e628f8326ed10d8adf1 +msgid "" +"Joystick control starts disabled; press the right stick to enable it " +"(package README). Most mapped gamepads use the generic SDL layout " +"automatically." +msgstr "手柄控制默认是关闭的;按下右摇杆使能(见软件包 README)。大多数已映射的游戏手柄会自动使用通用 SDL 布局。" + +#: ../../source/0-overview/2-learning_path.md:200 +#: 8189179a85b7465584693f0781affe90 +msgid "" +"**What you should see.** After you enable the controller, stick motion " +"changes the arm target, or the chassis in chassis mode." +msgstr "**预期看到的结果。** 使能之后,拨动摇杆会改变手臂目标;在底盘模式下则控制底盘。" + +#: ../../source/0-overview/2-learning_path.md:202 +#: a7bc60bca0e94a27bb79c1c321076513 +msgid "Other methods" +msgstr "其他方式" + +#: ../../source/0-overview/2-learning_path.md:204 +#: 0b56acb571434b5f8d785c3324255a04 +msgid "" +"These are additional ways to supply pose, finger, or assist signals. Use " +"the linked pages for setup; this day does not walk through them." +msgstr "这些是补充位姿、手指或辅助信号的方式。具体布置看链接的页面;这一天不逐步讲解。" + +#: ../../source/0-overview/2-learning_path.md:206 +#: d37e6bf04cfc44d88667b7f33048e470 +msgid "" +"**Isomorphic teleop** (同构遥操作) — Master–slave joint following on HighTorque" +" Panthera HT, not end-effector pose. On the `panthera-ht` branch, real-" +"robot teleop is `./teleop_start.sh`: [HighTorque Panthera " +"HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md), " +"[Isomorphic Teleop](../2-how_to/5-teleoperation/7-isomorphic_teleop.md)." +msgstr "" +"**同构遥操作** — 在 HighTorque Panthera HT 上做主从关节跟随,不是末端位姿。`panthera-ht` " +"分支上,真机遥操作是 `./teleop_start.sh`:[HighTorque Panthera " +"HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md)、[同构遥操作](../2-how_to/5-teleoperation/7-isomorphic_teleop.md)。" + +#: ../../source/0-overview/2-learning_path.md:207 +#: e52bc28497b747e5830e64ced0aa2881 +msgid "" +"**DexCap exoskeleton and gloves** (internal) — The exoskeleton measures " +"waist and arm joints; the gloves measure finger joints. Combined arm + " +"hand teleop: [DexCap " +"Teleoperation](../2-how_to/5-teleoperation/8-dexcap_teleop.md)." +msgstr "" +"**DexCap 外骨骼和手套**(内部)— 外骨骼测腰部和手臂关节,手套测手指关节。臂手一体遥操作:[DexCap " +"遥操作](../2-how_to/5-teleoperation/8-dexcap_teleop.md)。" + +#: ../../source/0-overview/2-learning_path.md:208 +#: ae5d2f7b156a451aaec023a610c466f3 +msgid "" +"**VR gesture / hand tracking** — The current `./run.sh vr` path starts " +"**controller** mode. This docs set does not document a launch entry that " +"turns on VR gesture or hand-tracking recognition." +msgstr "" +"**VR 手势 / 手部追踪** — 当前的 `./run.sh vr` 路径启动的是**头显手柄**模式。本页文档没有给出打开 VR " +"手势或手部追踪识别的启动入口。" + +#: ../../source/0-overview/2-learning_path.md:209 +#: babbafc7819a4a5181d6fe537617e30d +msgid "" +"**Wuji gloves** (internal) — Finger and hand joint teleop, with optional " +"Vive Tracker for arm pose: " +"[wuji_glove_teleop](../4-reference/teleop/5-wuji_glove.md)." +msgstr "" +"**Wuji 手套**(内部)— 手指和手部关节遥操作,可选配 Vive Tracker " +"来带动手臂:[wuji_glove_teleop](../4-reference/teleop/5-wuji_glove.md)。" + +#: ../../source/0-overview/2-learning_path.md:210 +#: a97822ae788b4e6fab940018e7037e18 +msgid "" +"**Foot pedal** — An assist, not a complete teleop setup. " +"`foot_pedal_teleop` in `arms_teleop` publishes events on " +"`/teleop/controller_state` (FSM up/down, arm enable, STORAGE/UPDATE, " +"mirror). It does not replace VR or the game controller: [Joystick " +"teleop](../2-how_to/5-teleoperation/9-joystick_teleop.md#foot-pedal-" +"assist-only)." +msgstr "" +"**脚踏板** — 这是辅助输入,不是完整的遥操作方案。`arms_teleop` 里的 `foot_pedal_teleop` 在 " +"`/teleop/controller_state` 上发布事件(FSM 上/下、手臂使能、STORAGE/UPDATE、镜像)。它不能代替 VR " +"或游戏手柄:[手柄遥操作](../2-how_to/5-teleoperation/9-joystick_teleop.md#foot-pedal-" +"assist-only)。" + +#: ../../source/0-overview/2-learning_path.md:211 +#: 25c0db2abf944d969bebd29d83e1716a +msgid "" +"**Vive Tracker** (internal) — SteamVR **Vive Tracker** poses mapped to arm" +" end-effector targets (`vive_tracker_teleop`). That is the name used in " +"the package and in these docs; it is not documented as “Valve Tracker”: " +"[Vive Tracker](../4-reference/teleop/6-vive_tracker.md)." +msgstr "" +"**Vive Tracker**(内部)— 把 SteamVR 的 **Vive Tracker** " +"位姿映射到手臂末端目标(`vive_tracker_teleop`)。软件包和本文档用的就是这个名称,并没有写成 “Valve " +"Tracker”:[Vive Tracker](../4-reference/teleop/6-vive_tracker.md)。" + +#: ../../source/0-overview/2-learning_path.md:213 +#: 5192ac4283074a0dab4f46c3eb73f0b7 +msgid "" +"**Primary sources:** [VR " +"Teleoperation](../2-how_to/5-teleoperation/6-vr_teleop.md), [arms_teleop " +"README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md)" +msgstr "" +"**主要来源:** [VR " +"遥操作](../2-how_to/5-teleoperation/6-vr_teleop.md)、[arms_teleop " +"README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md)" + +#: ../../source/0-overview/2-learning_path.md:215 +#: ce0c8b1a662945a9aed7729665ac58b4 +msgid "" +"**Outcome:** You can run either the VR path or the game-controller path, " +"and you can tell which of the other devices is for pose, fingers, or " +"enable/pause assists." +msgstr "**预期结果:** 你能跑通 VR 或游戏手柄其中一条路径,并且分得清其他设备分别用于位姿、手指,还是使能/暂停辅助。" + +#: ../../source/0-overview/2-learning_path.md:259 +#: bfb7275595e548379bbc0b9102a27b08 +msgid "" +"**Before you start.** Finish Days 0–4. You can reach HOLD with " +"`hardware:=mock_components`, Viser opens in the browser, Isaac Sim is " +"installed, `ISAACSIM_DIR` is set, and you have run FaSim `./init.sh` and " +"`./run.sh`." +msgstr "" +"**开始之前。** 做完第 0 到第 4 天。你能用 `hardware:=mock_components` 进到 HOLD,Viser " +"能在浏览器里打开,Isaac Sim 已安装,`ISAACSIM_DIR` 已设置,并且已经跑过 FaSim 的 `./init.sh` 和 " +"`./run.sh`。" + +#~ msgid "Day 6+" +#~ msgstr "" + +#~ msgid "Real hardware (internal)" +#~ msgstr "" + +#~ msgid "Day 6+: Real Hardware (Internal)" +#~ msgstr "" + +#~ msgid "**Goal:** Deploy to physical FA robots." +#~ msgstr "" + +#~ msgid "" +#~ "This stage requires access to `fa-" +#~ "deploy-ws` and a physical robot. " +#~ "Contact your team lead for repository" +#~ " access and hardware allocation." +#~ msgstr "" + +#~ msgid "ros2 launch drag_teleop_controller drag_teleop.launch.py\n" #~ msgstr "ros2 launch drag_teleop_controller drag_teleop.launch.py\n" #~ msgid "Isaac Sim 6.1 Required" @@ -973,508 +1749,133 @@ msgstr "**提出问题** — 遇到缺陷或文档不清时,请在相应仓库 #~ msgid "**Outcome:** A robot moves in RViz responding to MPC targets." #~ msgstr "**预期结果:** 机器人在 RViz 中响应 MPC 目标并运动。" -#~ msgid "Initialize a different robot's description submodule:" -#~ msgstr "初始化另一台机器人的描述子模块:" - -#~ msgid "" -#~ "cd src/robot_descriptions\n" -#~ "git submodule update --init robot-descriptions-arx\n" -#~ msgstr "" -#~ "cd src/robot_descriptions\n" -#~ "git submodule update --init robot-descriptions-arx\n" - -#~ msgid "Rebuild packages:" -#~ msgstr "重新编译软件包:" - -#~ msgid "colcon build --packages-up-to robot-descriptions-arx\n" -#~ msgstr "colcon build --packages-up-to robot-descriptions-arx\n" - -#~ msgid "Launch with the new robot:" -#~ msgstr "使用新机器人启动:" - -#~ msgid "Clone `fa-deploy-ws` and initialize for your robot (e.g., W2):" -#~ msgstr "克隆 `fa-deploy-ws` 并为你的机器人初始化(例如 W2):" - -#~ msgid "" -#~ "git clone /fa-deploy-ws.git\n" -#~ "cd fa-deploy-ws\n" -#~ "./init_repo.sh --robot fiveages_w2\n" -#~ msgstr "" -#~ "git clone /fa-deploy-ws.git\n" -#~ "cd fa-deploy-ws\n" -#~ "./init_repo.sh --robot fiveages_w2\n" - -#~ msgid "" -#~ "Configure `robot.local.yaml` with your robot's" -#~ " parameters (network settings, domain ID," -#~ " etc.)" -#~ msgstr "在 `robot.local.yaml` 中配置机器人参数(网络设置、Domain ID 等)" - -#~ msgid "Run the quick start:" -#~ msgstr "运行快速启动:" - -#~ msgid "./quick_start.sh\n" -#~ msgstr "./quick_start.sh\n" - -#~ msgid "" -#~ "**Safety:** Always start with `mock` " -#~ "mode, verify trajectories, then switch " -#~ "to real hardware." -#~ msgstr "**安全:** 始终先从 `mock` 模式开始,确认轨迹无误后再切换到真实硬件。" - -#~ msgid "" -#~ "from ros2_robot_interface import RobotInterface\n" -#~ "\n" -#~ "robot = RobotInterface()\n" -#~ "robot.connect()\n" -#~ "robot.move_j([0.0, -0.5, 0.5, 0.0, 0.0, 0.0])\n" -#~ "robot.gripper_close()\n" -#~ msgstr "" -#~ "from ros2_robot_interface import RobotInterface\n" -#~ "\n" -#~ "robot = RobotInterface()\n" -#~ "robot.connect()\n" -#~ "robot.move_j([0.0, -0.5, 0.5, 0.0, 0.0, 0.0])\n" -#~ "robot.gripper_close()\n" - -#~ msgid "" -#~ "FA robots (W2, W2R, S2, S2R, " -#~ "dual-arm CCS) require access to " -#~ "`fa-deploy-ws`. Contact your team " -#~ "lead for repository access and hardware" -#~ " allocation." -#~ msgstr "FA 机器人(W2、W2R、S2、S2R、双臂 CCS)需要访问 `fa-deploy-ws`。请联系团队负责人申请仓库权限并分配硬件。" - -#~ msgid "Add a robot" -#~ msgstr "添加机器人" - -#~ msgid "Project-dependent" -#~ msgstr "视项目而定" - -#~ msgid "In another terminal, launch the ROS 2 side with Isaac hardware:" -#~ msgstr "在另一个终端中,以 Isaac 硬件启动 ROS 2 侧:" - -#~ msgid "" -#~ "Clone `fa-deploy-ws` and run the" -#~ " init / quick-start scripts named " -#~ "in **that repository’s README** (not " -#~ "public). Flags and robot IDs are " -#~ "documented only there." -#~ msgstr "" -#~ "克隆 `fa-deploy-ws`,并运行**该仓库 README**(非公开)中写明的" -#~ " init / quick-start 脚本。参数和机器人 ID " -#~ "只写在那里。" - -#~ msgid "Day 7+: Add a Robot" -#~ msgstr "第 7 天及以后:添加机器人" - -#~ msgid "**Goal:** Integrate a new robot into the ecosystem." -#~ msgstr "**目标:** 将新机器人集成到生态系统中。" - -#~ msgid "Create a description package with URDF/xacro" -#~ msgstr "用 URDF/xacro 创建描述包" - -#~ msgid "Add ros2_control hardware-interface YAML" -#~ msgstr "添加 ros2_control 驱动层 YAML" - -#~ msgid "Configure OCS2 controller parameters" -#~ msgstr "配置 OCS2 控制器参数" - -#~ msgid "Test progression: mock → simulation → real hardware" -#~ msgstr "测试进阶顺序:mock → 仿真 → 真实硬件" - -#~ msgid "" -#~ "See the [Developer Guide](../5-developer/0-index.md)" -#~ " for detailed instructions." -#~ msgstr "详细说明请参阅[开发者指南](../5-developer/0-index.md)。" - -#~ msgid "" -#~ "Follow [Synthetic " -#~ "Data](../2-how_to/7-synthetic_data/0-index.md). Documented " -#~ "composer/lerobot branches are `feature/dex-" -#~ "grasp-generator` and `feature/sim-grasp-" -#~ "datagen`. Stop at recording/export; skip " -#~ "training." -#~ msgstr "" -#~ "见 [合成数据](../2-how_to/7-synthetic_data/0-index.md)。文档对应的 " -#~ "composer/lerobot 分支是 `feature/dex-grasp-" -#~ "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" +#~ msgid "Initialize a different robot's description submodule:" +#~ msgstr "初始化另一台机器人的描述子模块:" -#: ../../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 只是练习,不是任务。" +#~ msgid "" +#~ "cd src/robot_descriptions\n" +#~ "git submodule update --init robot-descriptions-arx\n" +#~ msgstr "" +#~ "cd src/robot_descriptions\n" +#~ "git submodule update --init robot-descriptions-arx\n" -#: ../../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`。" +#~ msgid "Rebuild packages:" +#~ msgstr "重新编译软件包:" -#: ../../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)。" +#~ msgid "colcon build --packages-up-to robot-descriptions-arx\n" +#~ msgstr "colcon build --packages-up-to robot-descriptions-arx\n" -#: ../../source/0-overview/2-learning_path.md:227 -#: d569ef5e0f6c44ca96922e076ca866f3 -msgid "Build these four pieces" -msgstr "准备这四样" +#~ msgid "Launch with the new robot:" +#~ 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` 保持默认。" +#~ msgid "Clone `fa-deploy-ws` and initialize for your robot (e.g., W2):" +#~ msgstr "克隆 `fa-deploy-ws` 并为你的机器人初始化(例如 W2):" -#: ../../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`。" +#~ msgid "" +#~ "git clone /fa-deploy-ws.git\n" +#~ "cd fa-deploy-ws\n" +#~ "./init_repo.sh --robot fiveages_w2\n" +#~ msgstr "" +#~ "git clone /fa-deploy-ws.git\n" +#~ "cd fa-deploy-ws\n" +#~ "./init_repo.sh --robot fiveages_w2\n" -#: ../../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 参数。" +#~ msgid "" +#~ "Configure `robot.local.yaml` with your robot's" +#~ " parameters (network settings, domain ID," +#~ " etc.)" +#~ msgstr "在 `robot.local.yaml` 中配置机器人参数(网络设置、Domain ID 等)" -#: ../../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`。" +#~ msgid "Run the quick start:" +#~ msgstr "运行快速启动:" -#: ../../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`。" +#~ msgid "./quick_start.sh\n" +#~ msgstr "./quick_start.sh\n" -#: ../../source/0-overview/2-learning_path.md:239 -#: 4a096772ea7d480bb5f33460e6ea1a3b -msgid "Work in this order" -msgstr "按这个顺序做" +#~ msgid "" +#~ "**Safety:** Always start with `mock` " +#~ "mode, verify trajectories, then switch " +#~ "to real hardware." +#~ msgstr "**安全:** 始终先从 `mock` 模式开始,确认轨迹无误后再切换到真实硬件。" -#: ../../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 一致。" +#~ msgid "" +#~ "from ros2_robot_interface import RobotInterface\n" +#~ "\n" +#~ "robot = RobotInterface()\n" +#~ "robot.connect()\n" +#~ "robot.move_j([0.0, -0.5, 0.5, 0.0, 0.0, 0.0])\n" +#~ "robot.gripper_close()\n" +#~ msgstr "" +#~ "from ros2_robot_interface import RobotInterface\n" +#~ "\n" +#~ "robot = RobotInterface()\n" +#~ "robot.connect()\n" +#~ "robot.move_j([0.0, -0.5, 0.5, 0.0, 0.0, 0.0])\n" +#~ "robot.gripper_close()\n" -#: ../../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,让物理开始跑。" +#~ msgid "" +#~ "FA robots (W2, W2R, S2, S2R, " +#~ "dual-arm CCS) require access to " +#~ "`fa-deploy-ws`. Contact your team " +#~ "lead for repository access and hardware" +#~ " allocation." +#~ msgstr "FA 机器人(W2、W2R、S2、S2R、双臂 CCS)需要访问 `fa-deploy-ws`。请联系团队负责人申请仓库权限并分配硬件。" -#: ../../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`。" +#~ msgid "Add a robot" +#~ msgstr "添加机器人" -#: ../../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` 跟着物理步走。" +#~ msgid "Project-dependent" +#~ msgstr "视项目而定" -#: ../../source/0-overview/2-learning_path.md:248 -#: e7e45de1031249daaf44cc0d09327bea -msgid "The description package, or the branch, and the USD path you opened." -msgstr "描述包或分支,以及你打开的 USD 路径。" +#~ msgid "In another terminal, launch the ROS 2 side with Isaac hardware:" +#~ msgstr "在另一个终端中,以 Isaac 硬件启动 ROS 2 侧:" -#: ../../source/0-overview/2-learning_path.md:249 -#: a6b83566fb7444edbb19a6044cacbc6a -msgid "The launch line, or the `ROS2ControlLaunch` prim you played." -msgstr "launch 命令,或你播放的那个 `ROS2ControlLaunch` 图元。" +#~ msgid "" +#~ "Clone `fa-deploy-ws` and run the" +#~ " init / quick-start scripts named " +#~ "in **that repository’s README** (not " +#~ "public). Flags and robot IDs are " +#~ "documented only there." +#~ msgstr "" +#~ "克隆 `fa-deploy-ws`,并运行**该仓库 README**(非公开)中写明的" +#~ " init / quick-start 脚本。参数和机器人 ID " +#~ "只写在那里。" -#: ../../source/0-overview/2-learning_path.md:250 -#: 80628069538945d0ae80776fbd3b996b -msgid "The joint-state topic or the controller list, and the motion you sent." -msgstr "你看到的关节状态话题或控制器列表,以及你发出的动作。" +#~ msgid "Day 7+: Add a Robot" +#~ msgstr "第 7 天及以后:添加机器人" -#: ../../source/0-overview/2-learning_path.md:252 -#: 94a7b25435244fd7a598009356f5aeaf -msgid "How you know it works" -msgstr "怎样算做完" +#~ msgid "**Goal:** Integrate a new robot into the ecosystem." +#~ 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 "按你选的这台机器人,核对关节控制、底盘运动、末端执行器和传感器数据。" +#~ msgid "Create a description package with URDF/xacro" +#~ msgstr "用 URDF/xacro 创建描述包" -#: ../../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` 是主机上的另一个进程。" +#~ msgid "Add ros2_control hardware-interface YAML" +#~ msgstr "添加 ros2_control 驱动层 YAML" -#: ../../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:=` 参数。" +#~ msgid "Configure OCS2 controller parameters" +#~ msgstr "配置 OCS2 控制器参数" -#: ../../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 上。" +#~ msgid "Test progression: mock → simulation → real hardware" +#~ msgstr "测试进阶顺序:mock → 仿真 → 真实硬件" -#: ../../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`。" +#~ msgid "" +#~ "See the [Developer Guide](../5-developer/0-index.md)" +#~ " for detailed instructions." +#~ msgstr "详细说明请参阅[开发者指南](../5-developer/0-index.md)。" -#: ../../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 "" +#~ "Follow [Synthetic " +#~ "Data](../2-how_to/7-synthetic_data/0-index.md). Documented " +#~ "composer/lerobot branches are `feature/dex-" +#~ "grasp-generator` and `feature/sim-grasp-" +#~ "datagen`. Stop at recording/export; skip " +#~ "training." +#~ msgstr "" +#~ "见 [合成数据](../2-how_to/7-synthetic_data/0-index.md)。文档对应的 " +#~ "composer/lerobot 分支是 `feature/dex-grasp-" +#~ "generator` 与 `feature/sim-grasp-" +#~ "datagen`。停在录制/导出;跳过训练。" #~ msgid "Internal Access Required" #~ msgstr "需要内部访问权限" @@ -1649,3 +2050,188 @@ msgstr "" #~ "gains." #~ msgstr "运动结束得过快,是 `/clock` 的问题(物理步时钟相对播放节拍)。FaSim 参考页说明了这套时钟。改关节增益解决不了。" +#~ msgid "" +#~ "**FaSim** pairs NVIDIA Isaac Sim " +#~ "high-fidelity simulation with the same " +#~ "ROS 2 运控 stack as the real " +#~ "robot, so motion matches hardware while" +#~ " the sim supplies ground truth. " +#~ "Assets: [FaSim-Isaac](https://github.com/fiveages-" +#~ "sim/FaSim-Isaac) (one-click USD + " +#~ "scene pull), [robot_usds](https://github.com/fiveages-" +#~ "sim/robot_usds)." +#~ msgstr "" +#~ "**FaSim** 把 NVIDIA Isaac Sim 高保真仿真与真机同一套" +#~ " ROS 2 运控叠在一起:运动能力对齐硬件,仿真再提供真值。资产:[FaSim-" +#~ "Isaac](https://github.com/fiveages-sim/FaSim-Isaac)(一键拉取" +#~ " USD 与场景)、[robot_usds](https://github.com/fiveages-" +#~ "sim/robot_usds)。" + +#~ msgid "FaSim-Isaac scripts" +#~ msgstr "FaSim-Isaac 脚本" + +#~ msgid "" +#~ "Use **FaSim-Isaac** `./init.sh` then " +#~ "`./run.sh`. Default Isaac path is " +#~ "`ISAACSIM_DIR` (`~/isaacsim`); override in " +#~ "`config/fa_sim.local.conf`. Version for the " +#~ "optional ROS 2 workspace comes from " +#~ "the init menu (fallback list in " +#~ "`config/fa_sim.conf`), not a hardcoded minor" +#~ " version in these docs." +#~ msgstr "" +#~ "使用 **FaSim-Isaac** 的 `./init.sh`,再运行 " +#~ "`./run.sh`。默认 Isaac 路径是 " +#~ "`ISAACSIM_DIR`(`~/isaacsim`);在 `config/fa_sim.local.conf` " +#~ "中覆盖。可选 ROS 2 工作空间的版本来自 init 菜单(回退列表见 " +#~ "`config/fa_sim.conf`),不要在文档里写死某个次版本号。" + +#~ msgid "" +#~ "Install NVIDIA Isaac Sim (default " +#~ "directory `~/isaacsim`, or set " +#~ "`ISAACSIM_DIR`)." +#~ msgstr "安装 NVIDIA Isaac Sim(默认目录 `~/isaacsim`,或设置 `ISAACSIM_DIR`)。" + +#~ msgid "Clone and initialize FaSim-Isaac:" +#~ msgstr "克隆并初始化 FaSim-Isaac:" + +#~ msgid "" +#~ "git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" +#~ "cd FaSim-Isaac\n" +#~ "./init.sh\n" +#~ msgstr "" +#~ "git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" +#~ "cd FaSim-Isaac\n" +#~ "./init.sh\n" + +#~ msgid "Start Isaac (`./run.sh` menu: PhysX / Newton / Headless Streaming):" +#~ msgstr "启动 Isaac(`./run.sh` 菜单:PhysX / Newton / Headless Streaming):" + +#~ msgid "./run.sh\n" +#~ msgstr "./run.sh\n" + +#~ msgid "" +#~ "Connect ROS 2 using **one** of the" +#~ " two Isaac paths in [Isaac " +#~ "Sim](../2-how_to/2-simulation/4-isaac_sim.md):" +#~ msgstr "" +#~ "用下面两条 Isaac 路径中的一条连接 ROS 2,说明见 [Isaac" +#~ " Sim](../2-how_to/2-simulation/4-isaac_sim.md):" + +#~ msgid "" +#~ "Topic bridge, from the workspace " +#~ "terminal: `ros2 launch ocs2_arm_controller " +#~ "demo.launch.py hardware:=isaac`" +#~ msgstr "" +#~ "话题桥,在工作空间终端执行:`ros2 launch ocs2_arm_controller " +#~ "demo.launch.py hardware:=isaac`" + +#~ msgid "" +#~ "In-process: open a USD whose ROS" +#~ " payload contains `ROS2ControlLaunch` and " +#~ "press Play. That path sets " +#~ "`hardware=isaac_sim` inside Isaac. It is " +#~ "not a second `hardware:=` on " +#~ "`demo.launch.py`." +#~ msgstr "" +#~ "进程内:打开 ROS 载荷里含有 `ROS2ControlLaunch` 的 " +#~ "USD 并播放。这条路径在 Isaac 内部设置 " +#~ "`hardware=isaac_sim`。它不是 `demo.launch.py` 上的第二个 " +#~ "`hardware:=`。" + +#~ msgid "**One connection for those joints.**" +#~ msgstr "**给这些关节接上一种连接。**" + +#~ 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 参数。" + +#~ 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`。" + +#~ msgid "" +#~ "Check joint control, base motion, the" +#~ " end effector, and sensor data " +#~ "against the robot you chose." +#~ msgstr "按你选的这台机器人,核对关节控制、底盘运动、末端执行器和传感器数据。" + +#~ 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` 是主机上的另一个进程。" + +#~ 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`。" + +#~ 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) 写了这个时钟。改关节增益修不好。" diff --git a/locale/zh_CN/LC_MESSAGES/1-getting_started/1-quick_demo_public.po b/locale/zh_CN/LC_MESSAGES/1-getting_started/1-quick_demo_public.po index 8c88a0a..0ad2001 100644 --- a/locale/zh_CN/LC_MESSAGES/1-getting_started/1-quick_demo_public.po +++ b/locale/zh_CN/LC_MESSAGES/1-getting_started/1-quick_demo_public.po @@ -335,15 +335,22 @@ msgstr "[切换到其他机器人](../2-how_to/1-basic_operations/2-switch_robot #: ../../source/1-getting_started/1-quick_demo_public.md:111 #: 95217015a6cb4dd1ae73d67a726295a4 -msgid "[Run Gazebo simulation](../2-how_to/2-simulation/3-gazebo_sim.md)" -msgstr "[运行 Gazebo 仿真](../2-how_to/2-simulation/3-gazebo_sim.md)" - -#: ../../source/1-getting_started/1-quick_demo_public.md:112 -#: a355f0e537e54d8aa0cce9b5dfc81dcc msgid "" -"[Connect Python " -"interface](../2-how_to/3-programming/5-python_interface.md)" -msgstr "[接入 Python 接口](../2-how_to/3-programming/5-python_interface.md)" +"[Start Viser](../2-how_to/3-programming/5-python_interface.md#start-" +"viser) — browser view and control" +msgstr "[启动 Viser](../2-how_to/3-programming/5-python_interface.md#start-viser) — 浏览器查看与控制" + +#: ../../source/1-getting_started/1-quick_demo_public.md +msgid "[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) — the default physics path" +msgstr "[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) — 默认的物理仿真路径" + +#: ../../source/1-getting_started/1-quick_demo_public.md +msgid "[Gazebo Simulation](../2-how_to/2-simulation/3-gazebo_sim.md) — alternative backend" +msgstr "[Gazebo 仿真](../2-how_to/2-simulation/3-gazebo_sim.md) — 备选后端" + +#: ../../source/1-getting_started/1-quick_demo_public.md +msgid "[Python Interface](../2-how_to/3-programming/5-python_interface.md)" +msgstr "[Python 接口](../2-how_to/3-programming/5-python_interface.md)" #: ../../source/1-getting_started/1-quick_demo_public.md:114 #: 242caab21948416cbc6a3b42556ec44b 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 1a02a8b..fb077d0 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 @@ -1400,7 +1400,15 @@ msgstr "" #: ../../source/1-getting_started/3-open_deploy_ws.md:330 #: 82b229315a20468d93531d3dc44ea1ee -msgid "[Gazebo simulation](../2-how_to/2-simulation/3-gazebo_sim.md)" +msgid "[Start Viser](../2-how_to/3-programming/5-python_interface.md#start-viser)" +msgstr "[启动 Viser](../2-how_to/3-programming/5-python_interface.md#start-viser)" + +#: ../../source/1-getting_started/3-open_deploy_ws.md +msgid "[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md)" +msgstr "[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md)" + +#: ../../source/1-getting_started/3-open_deploy_ws.md +msgid "[Gazebo Simulation](../2-how_to/2-simulation/3-gazebo_sim.md)" msgstr "[Gazebo 仿真](../2-how_to/2-simulation/3-gazebo_sim.md)" #~ msgid "" diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/0-index.po b/locale/zh_CN/LC_MESSAGES/2-how_to/0-index.po index 21092b9..b3f69e9 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/0-index.po @@ -59,13 +59,15 @@ msgstr "仿真" #: ../../source/2-how_to/0-index.md:14 d735c5d1a2504ac48ec6c4aa610d0a5e msgid "" -"[Gazebo Simulation](2-simulation/3-gazebo_sim.md) — Physics simulation " -"with Gazebo" -msgstr "[Gazebo 仿真](2-simulation/3-gazebo_sim.md) — 使用 Gazebo 进行物理仿真" +"[Isaac Sim](2-simulation/4-isaac_sim.md) — NVIDIA Isaac Sim (FaSim); the " +"default physics path" +msgstr "[Isaac Sim](2-simulation/4-isaac_sim.md) — NVIDIA Isaac Sim(FaSim);默认的物理仿真路径" -#: ../../source/2-how_to/0-index.md:15 99951ce2853e40f182fc9d3923759e16 -msgid "[Isaac Sim](2-simulation/4-isaac_sim.md) — NVIDIA Isaac Sim integration" -msgstr "[Isaac Sim](2-simulation/4-isaac_sim.md) — NVIDIA Isaac Sim 集成" +#: ../../source/2-how_to/0-index.md +msgid "" +"[Gazebo Simulation](2-simulation/3-gazebo_sim.md) — Gazebo as an " +"alternative backend" +msgstr "[Gazebo 仿真](2-simulation/3-gazebo_sim.md) — Gazebo 作为备选后端" #: ../../source/2-how_to/0-index.md:17 75ca2fa7b18044c396d3fdc388108c21 msgid "Programming" diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/0-index.po b/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/0-index.po index dd8dbd8..36b873f 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/2-simulation/0-index.po @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-09 12:40+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,32 +20,40 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/2-how_to/2-simulation/0-index.md:1 -#: b6e74f58986c4fee9dc15910581ecc9b +#: c876f2d9a13349308822311ae70e70a3 msgid "Simulation" msgstr "仿真" #: ../../source/2-how_to/2-simulation/0-index.md:3 -#: 47eccbca145b4a5394c46a3b147a1224 -msgid "Physics simulation with Gazebo or NVIDIA Isaac Sim." -msgstr "使用 Gazebo 或 NVIDIA Isaac Sim 进行物理仿真。" +#: da4035665a1d43b7a5ee55926bf58060 +msgid "" +"The default physics simulation path is NVIDIA Isaac Sim (FaSim). Start " +"Isaac and run the first checks: [Isaac Sim](4-isaac_sim.md). To view and " +"control the robot in a browser while Sim is running, start Viser first: " +"[Start Viser](../3-programming/5-python_interface.md#start-viser). " +"Mechanisms, extensions, and USD layout: [Simulation " +"reference](../../4-reference/simulation/0-index.md)." +msgstr "默认的物理仿真路径是 NVIDIA Isaac Sim(FaSim)。启动 Isaac 并做第一次检查:[Isaac Sim](4-isaac_sim.md)。仿真运行时若要在浏览器里查看并控制机器人,先启动 Viser:[启动 Viser](../3-programming/5-python_interface.md#start-viser)。机制、扩展和 USD 布局:[仿真参考](../../4-reference/simulation/0-index.md)。" #: ../../source/2-how_to/2-simulation/0-index.md:5 -#: 96052c13b8354b6d88f6d045d9f8aa11 +#: 927de6ea948546c3be2bcbee41c8b594 msgid "" "`hardware:=mock_components` / `gz` / `isaac` are launch keys, not vendor " -"hardware-interface packages under `hardwares/`. Plugin table: " -"[ros2_control in This Stack](../../3-concepts/1-ros2_control_here.md). " -"Isaac topic `` names: " +"hardware-interface packages under `hardwares/`. `isaac_sim` is set inside" +" Isaac on the in-process path; it is not a `demo.launch.py` flag. Plugin " +"table: [ros2_control in This " +"Stack](../../3-concepts/1-ros2_control_here.md). Isaac topic `` " +"names: " "[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)." -msgstr "" -"`hardware:=mock_components` / `gz` / `isaac` 是 launch 键,不是 `hardwares/` " -"下的厂商驱动层包。插件表:[本栈中的 " -"ros2_control](../../3-concepts/1-ros2_control_here.md)。Isaac 话题 ``" -" " -"名:[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)。" +msgstr "`hardware:=mock_components` / `gz` / `isaac` 是 launch 键,不是 `hardwares/` 下的厂商驱动层包。`isaac_sim` 是在进程内路径上、由 Isaac 内部设置的,不是 `demo.launch.py` 的参数。插件表:[本栈中的 ros2_control](../../3-concepts/1-ros2_control_here.md)。Isaac 话题 `` 名称:[topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md)。" #: ../../source/2-how_to/2-simulation/0-index.md:7 -#: 511e3ddd3a0a4ed5b61000a814dd38d0 +#: 88a4e2c74efa4cbe9361882830e5b712 +msgid "Gazebo remains available as an alternative backend: [Gazebo Simulation](3-gazebo_sim.md)." +msgstr "Gazebo 仍可作为备选后端使用:[Gazebo 仿真](3-gazebo_sim.md)。" + +#: ../../source/2-how_to/2-simulation/0-index.md:9 +#: 3dc5a6e05fa5443c85a698909f61b61a msgid "" "Isaac USD → composer → LeRobot datagen is the [Synthetic " "Data](../7-synthetic_data/0-index.md) How-To category, not Gazebo." 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 7e5e795..8b8af45 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 @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,49 +20,131 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:1 -#: e330dd2785754f51b425d9a048c9c0ad +#: d0df8e7394614867ae43f50ca27105ef msgid "Isaac Sim" msgstr "Isaac Sim" +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:3 +#: 771c0042355e4884869fcbece6dc769c +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 +#: cdc020d3dcbd432aabf177151aef8ce3 +msgid "" +"FaSim-Isaac holds the assets and installs the OmniGraph extensions. 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 存放资产,并安装 OmniGraph 扩展。先 `./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 +#: 1325ee78323d45148a8db3b95a693a05 +msgid "" +"Connect ROS 2 in one of two ways. Use one of them for a given stage. " +"These are description hardware keys, not the FaSim Kit extensions." +msgstr "ROS 2 有两种接法。一个舞台用其中一种。它们是描述包里的硬件键,不是 FaSim Kit 扩展。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md +#: 83b556b21a3e44f5b7fd3f1e11d65d56 +msgid "What you start" +msgstr "你启动的是什么" + #: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: 6b4a32b60adc47ba85764eaf3be0fde2 +#: 3e755e79bd6743d5bf7cfae0999ade91 msgid "Plugin" msgstr "Plugin" #: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: 8f33c5db1d9e442ba6e056a46b034f62 +#: 01131b3b14d1418cadc1f52c4aec0140 msgid "What moves the joints" msgstr "谁在驱动关节" #: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: 5cc0b75c59b9496e8030be95dacfe47a +#: 66fd36da17d54af0b448773e1aa74ff1 msgid "`hardware:=isaac`" msgstr "`hardware:=isaac`" #: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: 6beef602b389441eaa80468367f75051 +#: 0a3d21fad20f46ed8d0ee16c696fb19f msgid "`topic_based_ros2_control/TopicBasedSystem`" msgstr "`topic_based_ros2_control/TopicBasedSystem`" #: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: 17ffa5a51d834cc89205693933dcfeef +#: 648d2c6f878947ea8a1ae863ddff3fde msgid "OmniGraph joint topics" msgstr "OmniGraph 关节话题" #: ../../source/2-how_to/2-simulation/4-isaac_sim.md -#: d767d3346fad4cdf97e26fad98fe2d82 +#: 665bad2beafd4fd3a2fd193a66170f1d +msgid "Play on an in-process `ROS2ControlLaunch`" +msgstr "在进程内的 `ROS2ControlLaunch` 上按 Play" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md +#: f88cd321496f4253bc9741251c7ee864 msgid "" "`isaacsim_ros2_control/IsaacSimSystem` (`hardware=isaac_sim` inside the " "node)" msgstr "`isaacsim_ros2_control/IsaacSimSystem`(节点内部的 `hardware=isaac_sim`)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:22 -#: 103da11ebb3544a68d6b395b571f0ba0 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md +#: 770eba541e614d7ab93d5122553d46a8 +msgid "The controller manager inside the Isaac process" +msgstr "Isaac 进程里的控制器管理器" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:14 +#: b6e5c6ca9f664813855c91a4df688a64 +msgid "" +"`isaac_sim` is the hardware interface for that in-process controller. It " +"is not a second robot. A swerve chassis uses a different node, " +"`SwerveController`, which is not a hardware key. Mechanism, parameters, " +"and clock/TF: [FaSim-Isaac " +"reference](../../4-reference/simulation/2-fasim_isaac.md)." +msgstr "`isaac_sim` 是这套进程内控制器的驱动层,不是第二台机器人。舵轮底盘用的是另一个节点 `SwerveController`,它不是硬件键。机制、参数以及时钟/TF 见 [FaSim-Isaac 参考](../../4-reference/simulation/2-fasim_isaac.md)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:16 +#: f17ff3393e38408fa2d2bacad4dd17ba +msgid "Before you start" +msgstr "开始之前" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:18 +#: 4dd75e3914444b38881a4e3f582af7b5 +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 +#: cffa4848c1904caea2033d36c6930181 +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 +#: 9dd4f1b8710e40d18c15ae67c540abf2 +msgid "" +"The topic bridge needs `topic_based_ros2_control` in that workspace. The " +"in-process graph and a swerve graph both need `./init.sh` operation 5 " +"(the FaSim extensions) and a restart of Isaac. The in-process path also " +"needs 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:24 +#: 19cd1e43d12b400a8621da0db7e873d7 msgid "Start FaSim" msgstr "启动 FaSim" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:24 -#: 3b4dc282e9364a7eaa82c2941e2b0d01 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:26 +#: 8657b09848ad43f4be28893c583d16ae msgid "" "git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" "cd FaSim-Isaac\n" @@ -75,13 +156,65 @@ msgstr "" "./init.sh\n" "./run.sh" +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:33 +#: f6ef8468f94e486185f7fb53fe3b41c2 +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:35 -#: 771b023704c540408b68243af8551a89 +#: 9f3f25bd01564b0ca19b1b7abcca1f7d +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) and [labutopia-usd](https://github.com/fiveages-sim" +"/labutopia-usd), stay unchecked until you can open them. A later run only" +" adds what you check. Current public versus private rows: " +"[robot_usds](../../4-reference/simulation/3-robot_usds.md) and " +"[Environment assets](../../4-reference/simulation/5-env_assets.md)." +msgstr "检出你勾选的子模块(`.gitmodules` 和 `submodules_visibility.conf`)。公开项默认勾上。私有项,包括 [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) 和 [labutopia-usd](https://github.com/fiveages-sim/labutopia-usd),在你能打开之前保持不勾。以后再跑只会补上新勾的项。当前公开与私有行见 [robot_usds](../../4-reference/simulation/3-robot_usds.md) 和 [环境资产](../../4-reference/simulation/5-env_assets.md)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:36 +#: 1d38a2ad194c4102ae9a8129dc948f07 +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:37 +#: fb8f0c9d116540298b712b7a0dae7428 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:38 +#: 7f4942b752b5423a93349a5cb87da0f8 +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:39 -#: 4ef86350d22341f1a1ed4ecbfd14911a +#: 9751e031a905494da56d8579b765a14f +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. What each extension does: [FaSim Kit " +"extensions](../../4-reference/simulation/2-fasim_isaac.md#fasim-kit-" +"extensions)." +msgstr "把 FaSim 扩展装进这次 Isaac(`exts/fasim.steering.nodes`、`exts/fasim.ros2.nodes`),并压低脚本警告。重装 Isaac 之后再做一次,然后重启 Isaac,扩展才会加载。各扩展做什么见 [FaSim Kit 扩展](../../4-reference/simulation/2-fasim_isaac.md#fasim-kit-extensions)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:41 +#: 166c1118071d499ab9d9057d68cc3db3 msgid "" "`./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" @@ -91,8 +224,8 @@ msgstr "" "`./run.sh` 先显示已保存的后端,再询问 PhysX 或 Newton、CPU 调速,以及要 source 哪个 ROS 2 " "工作空间。`./run_headless.sh` 是无头串流的同一套菜单。README 里的非交互例子:" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:41 -#: 3bf6db10115c4f229b4e5d7ee3b0f3ea +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:43 +#: 1305b82b8ed041a082cd59722a2e3451 msgid "" "./run.sh -y --physics physx --cpu auto --ros-ws ~/ros2_ws\n" "./run_headless.sh -y --physics physx --instance 0\n" @@ -104,8 +237,8 @@ msgstr "" "./run.sh --asset-region china\n" "./run.sh --kit-profile none" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:48 -#: 790f5bcf437846629f2b1b2a58368e45 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:50 +#: ad30f2a8c39a4e958c64cade14b8c697 msgid "" "`config/fa_sim.conf` kit profiles (`--kit-profile` / `--list-kit-" "profiles`): `none`, `newton-physx-min`, `newton-physx`, `physx-compat`, " @@ -121,28 +254,28 @@ msgstr "" "作为本机覆盖。当 `RMW_IMPLEMENTATION=rmw_zenoh_cpp` 时,`./run.sh` 会启动 Zenoh " "路由,并在退出时停掉它。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:50 -#: 132ab8a971414d63b9aa3955fbcfd2b8 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:52 +#: 2ba2f1f4a9144cbc9044e0e97f9ed63b msgid "" "Open the robot USD under `robots/` (robot_usds) or a scene under " "`environment/`. Operation 5 must already be done before a stage that uses" -" `ROS2ControlLaunch`." +" `ROS2ControlLaunch` or `SwerveController`." msgstr "" "打开 `robots/`(robot_usds)下的机器人 USD,或 `environment/` 下的场景。使用 " "`ROS2ControlLaunch` 的舞台,必须已经做过第 5 项。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:52 -#: 8fb0c603822f4ade8178ec4f8e89e5be +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:56 +#: 7043633195954ad4bdeb99ed7550f7a7 msgid "Topic bridge (`hardware:=isaac`)" msgstr "Topic bridge (`hardware:=isaac`)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:54 -#: 693c4016ee744196b2e442bc53bd5c92 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:58 +#: 670921c31b8e477aa61ea0921323b34e msgid "In another terminal, after the workspace overlay:" msgstr "另一个终端里,先 source 工作空间:" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:56 -#: d787220750c34b6ba452c602f6e266fd +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:60 +#: 85f7310d2fb54a0cabfcbf98b990af49 msgid "" "source ~/open-deploy-ws/install/setup.bash\n" "ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone " @@ -152,8 +285,8 @@ msgstr "" "ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone " "hardware:=isaac" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:61 -#: 2371d1891a004e238b0b42290936fcc3 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:65 +#: a0c1cdde5b3347368e7b967db8083a0f msgid "" "`robot:=` is the description key (`_description`). `demo.launch.py` " "has no namespace argument. Do not append `namespace:=…` on this launch." @@ -161,18 +294,51 @@ msgstr "" "`robot:=` 是描述包键(`_description`)。`demo.launch.py` " "没有命名空间参数。这条启动命令上不要再加 `namespace:=…`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:65 -#: 5270f899463a40e398e39d13f0d23fb7 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:67 +#: 70dc6a6ec620496492d5644ceb38419e +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:69 +#: 5e62bee3cee045478c4f0a5be10b548b msgid "`joint_commands_topic` = `/isaac/joint_command`" msgstr "`joint_commands_topic` = `/isaac/joint_command`" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:66 -#: 72af61bb61214f3a911e9fb7b71acc77 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:70 +#: 6020bf51a1f44782822d15950205f8a6 msgid "`joint_states_topic` = `/isaac/joint_states`" msgstr "`joint_states_topic` = `/isaac/joint_states`" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:70 -#: bd4d8ca3041446c989c9c3a4824765b3 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:72 +#: 1c2ad96957c648c6a3f3fa86e3a02121 +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:74 +#: b0cd4b8fe1df400e8ca1ae114461fbfe msgid "" "`use_sim_time` follows `hardware` (`isaac` → true) unless you pass " "`use_sim_time:=true` or `false`." @@ -180,13 +346,13 @@ msgstr "" "`use_sim_time` 跟随 `hardware`(`isaac` 时为 true),除非你显式传入 " "`use_sim_time:=true` 或 `false`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:72 -#: f8477caffdbc47beab48ae43469f1c7c +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:76 +#: 694432fb214f4dcf8a85d2d68e0e8f15 msgid "Check:" msgstr "Check:" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:74 -#: 8bbdd22905c344ca8735adec117fdf84 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:78 +#: f50cdadc5f454fa390a4103a3447e7bc msgid "" "ros2 topic echo /isaac/joint_states --once\n" "# or the topicName this USD actually publishes" @@ -194,15 +360,55 @@ msgstr "" "ros2 topic echo /isaac/joint_states --once\n" "# or the topicName this USD actually publishes" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:79 -#: c304fd35f77a4994b6333e6896fecf3e +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:83 +#: 00ab23fcd5c142d99ac7e7f24ce47c18 msgid "" "A joint command on the matching command topic moves the articulation. " "There is no stack-wide `/target_pose`." msgstr "匹配的指令话题上的关节指令会驱动关节体。整栈没有统一的 `/target_pose`。" +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:87 +#: 139ded0d25264f6d8d2dda6473540538 +msgid "In-process hardware interface (`isaac_sim`)" +msgstr "进程内驱动层(`isaac_sim`)" + #: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: 620f72fd424a42cfa12fa8d6998adf64 +#: 6e49323f211048dca9f4129d23ce393a +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:91 +#: f80fa844ea8a4d369d6b829151285c54 +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)). Graph " +"inputs, CppAD cache, and `infoFile`: [ROS 2 Control " +"extension](../../4-reference/simulation/2-fasim_isaac.md#ros-2-control-" +"extension). 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))。图输入、CppAD 缓存和 `infoFile` 见 [ROS 2 Control 扩展](../../4-reference/simulation/2-fasim_isaac.md#ros-2-control-extension)。`robot` 留空时读取 USD 的 `Robot` 变体。该字符串是描述包的词干。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:93 +#: 04ac4c2a9c01494aa3a2352ca3b0f0f4 +msgid "After Play, check:" +msgstr "Play 之后检查:" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: 12206fa9a6fc4d69924d5aec284010d0 msgid "" "ros2 control list_controllers\n" "ros2 topic echo /joint_states --once\n" @@ -212,8 +418,8 @@ msgstr "" "ros2 topic echo /joint_states --once\n" "ros2 topic hz /clock" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 -#: d65473e70a124196a654760ad422c5f4 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:101 +#: 971939b9c8a14920a81286c323a46a79 msgid "" "`/joint_states` here is the controller’s `joint_state_broadcaster`, not " "the topic-bridge pair. `/clock` should tick near the physics rate. Arm " @@ -222,56 +428,88 @@ msgstr "" "这里的 `/joint_states` 是控制器的 `joint_state_broadcaster`,不是话题桥那一对。`/clock` " "应接近物理频率。手臂自由度不会再桥到 `/isaac/joint_command`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:97 -#: 8ac769d5dba648b49d78f1202d24c3e5 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:103 +#: 45cdfe422760406b854463de25a75cf2 msgid "" "`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`." +"`base_link` / `base_footprint`. See " +"[TF](../../4-reference/simulation/2-fasim_isaac.md#tf)." +msgstr "图上的 `namespace`(单机器人时为空)用来给第二台关节体分配 `//controller_manager`。它不是 `demo.launch.py` 的参数。帧 id 仍是 `world`、`odom`,以及 `base_link` / `base_footprint`。见 [TF](../../4-reference/simulation/2-fasim_isaac.md#tf)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:105 +#: e9010f8ca2af4f3d8724037470a8b3d1 +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 "" -"图上的 `namespace`(单机器人时为空)用来给第二台关节体分配 `//controller_manager`。它不是 " -"`demo.launch.py` 的参数。帧 id 仍是 `world`、`odom`,以及 `base_link` / " -"`base_footprint`。TF 和 `infoFile` 见参考页。" +"全身模式(`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:101 -#: c71c8d6d190142cfb05a58ce57bb1847 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:107 +#: b445797f786147978937da76afa8459a +msgid "" +"If the opened USD uses `SwerveController` (Linkhou S2 or Taku chassis " +"graphs), that is the [swerve " +"extension](../../4-reference/simulation/2-fasim_isaac.md#swerve-extension), " +"not this hardware key. After Play, publish a `geometry_msgs/Twist` on the" +" graph’s subscribe topic and check that steer joints move in position and" +" wheel joints in velocity." +msgstr "如果打开的 USD 用了 `SwerveController`(Linkhou S2 或 Taku 底盘图),那是 [舵轮扩展](../../4-reference/simulation/2-fasim_isaac.md#swerve-extension),不是这个硬件键。Play 之后,往图的订阅话题发布 `geometry_msgs/Twist`,确认转向关节按位置运动、驱动关节按速度转动。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:109 +#: 6c1b9b4a47f7493abccf5e49ac1d7343 msgid "What to open" msgstr "打开什么" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: f97cd87bdee6428d8934bec924751c28 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: cb4ddb62aba04650a2d97f182fb560ff msgid "Tree" msgstr "Tree" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: 4c7c30b88b6448d9868b7d5344749334 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: 0717ddbe03304e36b4cf442adbe07e26 msgid "Content" msgstr "内容" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: f1f8487d9e504ee38261e1ea53aa2d2c +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: a30342e6f41a49f183d022e222d363be msgid "`robots/` → [robot_usds](https://github.com/fiveages-sim/robot_usds)" msgstr "`robots/` → [robot_usds](https://github.com/fiveages-sim/robot_usds)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: 3da7a164f6b642d1a8e266bed4c83b68 -msgid "Robot USD" -msgstr "机器人 USD" +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: 5f3dbf1a3abf4eb39aacca8811c17d3c +msgid "" +"Robot USD. Folder map: " +"[robot_usds](../../4-reference/simulation/3-robot_usds.md)" +msgstr "代际标签和品牌目录:[robot_usds 参考](../../4-reference/simulation/3-robot_usds.md)。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: 0f244b453992468d86533b7225c89d50 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: 6fa2e6fd6c8741e994bd9bf9ba8fe41d msgid "`environment/fiveages_env/`" msgstr "`environment/fiveages_env/`" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: 482d7522ba65470484472c8ed3cb958d +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: bd06fa248970428e827159993ec894ff msgid "Public scenes" msgstr "公开场景" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: 241830ef098042b6975e313ce00d948c +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: 9b360dd056824573bcc4fd0f06ebd409 msgid "" "`environment/fa-project-usd/` → [fa-project-usd](https://github.com" "/fiveages-sim/fa-project-usd)" @@ -279,35 +517,35 @@ msgstr "" "`environment/fa-project-usd/` → [fa-project-usd](https://github.com" "/fiveages-sim/fa-project-usd)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: f2faa12706f8469ab46f26b9b75e56f7 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: 7b5031709df44b7bbd3c00c7437165d3 msgid "Project scenes (private; needs access)" msgstr "项目场景(私有,需要权限)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: b286e97b7db74bc69992d30e89503bc9 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: bcc38cee86f444898e8ea5830d82067b msgid "`environment/artvip-usd/`" msgstr "`environment/artvip-usd/`" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:89 -#: dad5a37648db4207b6d068c9145adf55 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:95 +#: d4e3c326068a45ffa817ab8600ad35da msgid "ArtVIP components" msgstr "ArtVIP 组件" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:110 -#: 3b11356336294c2c87de52e02fc9c816 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:118 +#: f55b8402000146d189db6712b86d02d0 msgid "" -"Gen labels and brand folders: [robot_usds " -"reference](../../4-reference/simulation/3-robot_usds.md)." +"Scene trees and project layout: [Environment " +"assets](../../4-reference/simulation/5-env_assets.md)." msgstr "代际标签和品牌目录:[robot_usds 参考](../../4-reference/simulation/3-robot_usds.md)。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:112 -#: 2042d970511a477e8b539ff081ba4305 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:122 +#: db1df23db3e748819a7d1fdb953dd20c msgid "When it fails" msgstr "打不开时" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:114 -#: 9baa9c8fd26645ceaca0be6ef8a12a54 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:124 +#: c28815e5dd5241f59e03f706a4034ddc msgid "" "**Isaac does not start.** `ISAACSIM_DIR` must contain the launchers named" " in `config/fa_sim.conf` (`isaac-sim.sh`, `isaac-sim.newton.sh`, `isaac-" @@ -319,30 +557,105 @@ msgstr "" "sim.newton.streaming.sh`)。`nvidia-smi` 能看到 GPU。日志在 `~/.nvidia-" "omniverse/logs/`。" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:120 -#: 0b75e41d73054ee99f4d59d334032786 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:126 +#: 40867fec332140c5ae3ee62f0bcc4fcc +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. For a swerve graph, the `SwerveController` node type must be " +"available (same operation 5 and restart)." +msgstr "" +"**Play 起来了,但没有 ROS 2 话题。** 域 ID 和 `RMW_IMPLEMENTATION` 要和你 source " +"的工作区一致。话题桥:图的 `topicName` 和 xacro 一致。进程内:第 5 项已安装,Isaac 已重启,场景里的 `ROS` " +"变体是 fiveages 载荷,而不是话题桥载荷。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:128 +#: 4dfb1736fece4aef816667fe36766671 +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 " +"Clock](../../4-reference/simulation/2-fasim_isaac.md#clock) " +"section." +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:130 +#: f78cd2cd56f848fcb69d41e979269e85 msgid "Next" msgstr "Next" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:122 -#: 37c84783707f4a0da910d8a815ca32f2 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:132 +#: 46fc8e974669422b8e05d2b51f1afd5a msgid "[FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md)" msgstr "[FaSim-Isaac 参考](../../4-reference/simulation/2-fasim_isaac.md)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:123 -#: fff47197c82048008f986f52bf5f65c4 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:133 +#: 7dc1ab80fde844a38a4efce5021b9414 msgid "" "[Add a Robot](../6-deployment/10-add_a_robot.md) and the [Day 7 " -"exam](../../0-overview/2-learning_path.md)" +"exam](../../0-overview/2-learning_path.md#day-7-bring-one-new-robot-into-" +"fasim)" msgstr "" "[添加机器人](../6-deployment/10-add_a_robot.md) 和 [第 7 " "天考核](../../0-overview/2-learning_path.md)" -#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:124 -#: 519d1959b74748b19073cb9bb53e7058 +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:134 +#: d4b40f4e35564a6f91281fbcd5c620c5 msgid "[Synthetic Data](../7-synthetic_data/0-index.md)" msgstr "[Synthetic Data](../7-synthetic_data/0-index.md)" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:21 +#: dc92c9512a4448e4899bff0e09556df6 +msgid "" +"To view and control the robot in a browser, install fa-py-libraries and " +"start Viser first. After the Isaac / ROS 2 stack is up, run `./run.sh " +"viser` and open the URL printed in the terminal. Steps: [Start " +"Viser](../3-programming/5-python_interface.md#start-viser)." +msgstr "" +"要在浏览器里查看和控制机器人,先安装 fa-py-libraries 并启动 Viser。Isaac / ROS 2 运控起来之后,运行 " +"`./run.sh viser`,打开终端打印的 URL。步骤见 [启动 " +"Viser](../3-programming/5-python_interface.md#start-viser)。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:121 +#: 0a87f45f7248407eaae0dfa1f9686635 +msgid "G1-D full-body control and chassis motion" +msgstr "G1-D 全身控制与底盘运动" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:123 +#: 9395180f7a9347ef96ec6760f1d8038f +msgid "" +"This clip is a G1-D demonstration of full-body control in Isaac Sim. On " +"the Viser web control interface, drag the dual-arm end-effector targets " +"and move the chassis in rotation and translation; G1-D in Isaac Sim moves " +"with it. Start Viser as in [Start " +"Viser](../3-programming/5-python_interface.md#start-viser) after the stack" +" is up." +msgstr "" +"这段视频是 G1-D 在 Isaac Sim 中做全身控制的演示。在 Viser 网页控制界面上拖动双臂末端目标,并控制底盘旋转和平移;Isaac " +"Sim 中的 G1-D 同步运动。运控起来之后,按 [启动 " +"Viser](../3-programming/5-python_interface.md#start-viser) 启动 Viser。" + +#: ../../source/2-how_to/2-simulation/4-isaac_sim.md:125 +#: 19f86f0c3fef4cb9b942b316fc23cb4f +msgid "" +"" +msgstr "" +"" + #~ msgid "NVIDIA Omniverse Launcher installed" #~ msgstr "NVIDIA Omniverse Launcher installed" @@ -753,273 +1066,6 @@ 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 连接。同一舞台只选一种。" @@ -1039,3 +1085,6 @@ msgstr "" #~ msgid "On Play, confirm:" #~ msgstr "播放后确认:" +#~ msgid "Robot USD" +#~ msgstr "机器人 USD" + diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/3-programming/5-python_interface.po b/locale/zh_CN/LC_MESSAGES/2-how_to/3-programming/5-python_interface.po index e5af499..5d32973 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/3-programming/5-python_interface.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/3-programming/5-python_interface.po @@ -39,8 +39,8 @@ msgstr "已安装 ROS 2 Jazzy" #: ../../source/2-how_to/3-programming/5-python_interface.md:8 #: 5a94673031a448ee934eabe0dcbb2c98 -msgid "Robot demo running (mock, Gazebo, or real)" -msgstr "机器人演示正在运行(mock、Gazebo 或真实硬件)" +msgid "Robot demo running (mock, Isaac Sim, or real; Gazebo is an alternative)" +msgstr "机器人演示正在运行(mock、Isaac Sim 或真实硬件;Gazebo 是备选)" #: ../../source/2-how_to/3-programming/5-python_interface.md:9 #: 93c6d33ee68341a0b75c740e4daa9582 @@ -190,8 +190,8 @@ msgstr "`connect()` 看到 `/right_current_pose` 后,双臂模式下才有 `ri #: ../../source/2-how_to/3-programming/5-python_interface.md:69 #: c464a2f81276427da3944f4975d52ae1 -msgid "With Viser visualization" -msgstr "结合 Viser 可视化" +msgid "Start Viser" +msgstr "启动 Viser" #: ../../source/2-how_to/3-programming/5-python_interface.md:71 #: 17db0b5dd5034bd8950db72cab7b44d4 @@ -350,6 +350,64 @@ msgstr "" "cd ~/fa-py-libraries\n" "./init.sh all" +#: ../../source/2-how_to/3-programming/5-python_interface.md:73 +#: d200dcfea6934c609fb35cdff121d366 +msgid "" +"Viser is the browser 3D view and control page from " +"[ros2-viser](../../4-reference/python_apps/3-ros2_viser.md). Start the " +"robot control stack first (`/robot_description` must be available), then " +"launch Viser from **fa-py-libraries**. That is the primary entry; do not " +"start it from lerobot_ros2 or treat `pip install ros2-viser` as the " +"product launcher." +msgstr "" +"Viser 是 [ros2-viser](../../4-reference/python_apps/3-ros2_viser.md) " +"提供的浏览器三维查看与控制页面。先启动机器人运控(`/robot_description` 必须已经可用),再从 **fa-py-" +"libraries** 启动 Viser。这是主要入口;不要从 lerobot_ros2 启动,也不要把 `pip install " +"ros2-viser` 当成产品启动方式。" + +#: ../../source/2-how_to/3-programming/5-python_interface.md:80 +#: e3e4cface8344082acf8ddacaf1f8295 +msgid "" +"`./run.sh` with no arguments opens a menu; item 1 is `ros2-viser launch`. " +"The command runs `ros2-viser/launch.py`. In a browser, open the URL " +"printed in the terminal (`访问 URL`). The same output shows the host and " +"port; this launch has no separate host/port flag. You can also scan the QR" +" code it prints." +msgstr "" +"不带参数运行 `./run.sh` 会打开菜单;第 1 项是 `ros2-viser launch`。这条命令会执行 " +"`ros2-viser/launch.py`。在浏览器里打开终端打印的地址(`访问 " +"URL`)。同一段输出里有主机和端口;这次启动没有单独的主机/端口参数。也可以扫描它打印的二维码。" + +#: ../../source/2-how_to/3-programming/5-python_interface.md:82 +#: 1317f2df27df4a4091d86f2b3ed48b9a +msgid "" +"The page starts as an empty scene. If only one robot is present, it loads " +"automatically. If there are several, pick one under “选择命名空间”. If the robot" +" comes up later, click “刷新命名空间列表”. Then confirm the model is visible. For " +"a first control check: use HOME / HOLD on the state panel; switch to OCS2 " +"and drag the end-effector handles; or switch to MOVEJ, move the joint " +"sliders, and send the target. On a mobile base such as G1-D, `launch.py` " +"sets the visualization frame to `world`; you can also choose `map` or " +"`odom` on the page so the model and the handles share the same ground." +msgstr "" +"页面一开始是空场景。如果当时只有一台机器人,会自动加载。如果有多台,在「选择命名空间」里选一个。如果机器人是后来才起来的,点「刷新命名空间列表」。然后确认模型已经可见。第一次检查控制时:在状态面板用" +" HOME / HOLD;切到 OCS2,拖动末端手柄;或者切到 MOVEJ,拉动关节滑条再发送目标。像 G1-D " +"这样的移动底盘,`launch.py` 会把可视化坐标系设为 `world`;也可以在页面上改成 `map` 或 " +"`odom`,让模型和手柄落在同一地面上。" + +#: ../../source/2-how_to/3-programming/5-python_interface.md:84 +#: 3034d27fa8fb4d3d84af48abedeba2e4 +msgid "" +"`ros2_viser` is a library dependency of that command. The full UI and " +"embedding `ROS2ViserVisualizer` in your own script are on " +"[ros2-viser](../../4-reference/python_apps/3-ros2_viser.md). Use this page" +" before you rely on Viser while running [Isaac " +"Sim](../2-simulation/4-isaac_sim.md)." +msgstr "" +"`ros2_viser` 是这条命令的库依赖。完整界面,以及在自己的脚本里嵌入 `ROS2ViserVisualizer`,见 " +"[ros2-viser](../../4-reference/python_apps/3-ros2_viser.md)。在跑 [Isaac " +"Sim](../2-simulation/4-isaac_sim.md) 时要靠 Viser 查看之前,先看完这一页。" + #~ msgid "Python 3.10+" #~ msgstr "Python 3.10+" @@ -689,4 +747,3 @@ msgstr "" #~ "[ros2_robot_interface](../../4-reference/python_apps/1-ros2_robot_interface.md)" #~ " (Topic ↔ API map)." #~ msgstr "" - diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/0-index.po b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/0-index.po index cf96ff8..ab1f76a 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/0-index.po @@ -32,3 +32,13 @@ msgid "" "implemented." msgstr "VR、同构遥操作和 DexCap。拖动示教(拖动遥操作)未实现。" +#: ../../source/2-how_to/5-teleoperation/0-index.md:3 +#: cce04bf8475d49b09216e93403285026 +msgid "" +"Start with [VR](6-vr_teleop.md) or a [game " +"controller](9-joystick_teleop.md). The other pages cover isomorphic " +"teleop, DexCap, Wuji gloves, Vive Tracker, and related assists. Drag " +"teaching (拖动遥操作) is not implemented." +msgstr "" +"先从 [VR](6-vr_teleop.md) 或 [游戏手柄](9-joystick_teleop.md) " +"上手。其余页面介绍同构遥操作、DexCap、Wuji 手套、Vive Tracker 以及相关辅助输入。拖动示教(拖动遥操作)尚未实现。" diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/8-dexcap_teleop.po b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/8-dexcap_teleop.po index ba3339c..16d16f5 100644 --- a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/8-dexcap_teleop.po +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/8-dexcap_teleop.po @@ -433,6 +433,119 @@ msgstr "" "[wuji-ros2-control](../../4-reference/teleop/7-wuji_hand_hi.md)(灵巧手硬件)— " "私有名称见:[驱动层](../../4-reference/hardware/0-index.md)" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:3 +#: da523b8ca2b6427e86ac863eff34082e +msgid "" +"Use the DexCap V4 exoskeleton and gloves for combined arm and hand " +"teleoperation. The exoskeleton measures waist and arm joints; the gloves " +"measure finger joints." +msgstr "用 DexCap V4 外骨骼和手套做臂手一体遥操作。外骨骼测腰部和手臂关节,手套测手指关节。" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:14 +#: 5d1438c38cda4c2888b450c4d6f68eee +msgid "Waist and arm joint measurement from the exoskeleton" +msgstr "由外骨骼测量腰部和手臂关节" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:15 +#: 192c8bf4297349b4ad2b848a576663e2 +msgid "Finger joint mapping from the gloves to robot hands" +msgstr "由手套把手指关节映射到机器人手" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:41 +#: e728718175024b48bebeda9bf09b3cf4 +msgid "3. Start the driver" +msgstr "3. 启动驱动" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:43 +#: 2e6895ad19644e3fa8cf1a1f48c6b789 +msgid "ros2 launch dexcap_ros2_control dexcap_driver.launch.py\n" +msgstr "ros2 launch dexcap_ros2_control dexcap_driver.launch.py\n" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:47 +#: 1839ae13869042998176499edbce54c3 +msgid "" +"To start only the exoskeleton or only one glove, pass `start_upper_body`, " +"`start_left_hand`, and `start_right_hand` as in the private package " +"README. That README is also the place to look for first-connection safety;" +" `publish_command` is not a current launch argument." +msgstr "" +"如果只启动外骨骼或一只手套,按私有软件包 README 传入 `start_upper_body`、`start_left_hand` 和 " +"`start_right_hand`。首次连接的安全注意事项也在那份 README 里;`publish_command` 不是当前的启动参数。" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 07696f46b1a945e8b965ced2fc43ffa1 +msgid "`/dexcap/waist`" +msgstr "`/dexcap/waist`" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 2067e909604f4f9eb9a3d210eff8bc3b +msgid "Waist joints from the exoskeleton" +msgstr "外骨骼的腰部关节" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 61b5e12a38d64246bb8592e614b61419 +msgid "`/dexcap/left_arm`" +msgstr "`/dexcap/left_arm`" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 228e550f72554d69814ba250b78a0e5e +msgid "Left arm joints from the exoskeleton" +msgstr "外骨骼的左臂关节" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 61b5e12a38d64246bb8592e614b61419 +msgid "`/dexcap/right_arm`" +msgstr "`/dexcap/right_arm`" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 13b1aa1a7d154bceb08814a81703c002 +msgid "Right arm joints from the exoskeleton" +msgstr "外骨骼的右臂关节" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 61b5e12a38d64246bb8592e614b61419 +msgid "`/dexcap/left_hand`" +msgstr "`/dexcap/left_hand`" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 6c8a3d365f0a4025a8c9d0e0d7e4f703 +msgid "Left glove, 21 joints" +msgstr "左手套,21 个关节" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 61b5e12a38d64246bb8592e614b61419 +msgid "`/dexcap/right_hand`" +msgstr "`/dexcap/right_hand`" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:51 +#: 6c8a3d365f0a4025a8c9d0e0d7e4f703 +msgid "Right glove, 21 joints" +msgstr "右手套,21 个关节" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:72 +#: 7b23ae0f3c704741822e3ddfe1a495ef +msgid "Mapper outputs and further topics are in the private README." +msgstr "映射输出和其他话题见私有 README。" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:101 +#: 2063c8a188fb4286bd7be49a85254a12 +msgid "" +"`/dexcap/left_hand` and `/dexcap/right_hand` publish glove joint angles; " +"`/dexcap/waist`, `/dexcap/left_arm`, and `/dexcap/right_arm` publish when " +"the exoskeleton is started" +msgstr "" +"`/dexcap/left_hand` 和 `/dexcap/right_hand` " +"发布手套关节角;启动外骨骼后,`/dexcap/waist`、`/dexcap/left_arm` 和 `/dexcap/right_arm` " +"会发布数据" + +#: ../../source/2-how_to/5-teleoperation/8-dexcap_teleop.md:102 +#: bf52d75b27eb4593a68bc6f45e383be6 +msgid "" +"The robot hand follows the gloves; the arms follow the exoskeleton when " +"arm mapping is enabled" +msgstr "机器人手跟随手套;启用手臂映射时,手臂跟随外骨骼" + #~ msgid "" #~ "# Create conda environment\n" #~ "conda create -n dexcap python=3.12\n" diff --git a/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/9-joystick_teleop.po b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/9-joystick_teleop.po new file mode 100644 index 0000000..136b952 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/2-how_to/5-teleoperation/9-joystick_teleop.po @@ -0,0 +1,210 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: FiveAges Sim\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-10-22 06:31+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: zh_CN \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.18.0\n" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:1 +#: 341cbe96e29d4d2d94edd2f238e45fbe +msgid "Joystick teleop" +msgstr "手柄遥操作" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:3 +#: 6851f8f07bc245f5a5c5c2e0c1a3cbda +msgid "" +"Use a game controller (joystick / gamepad) to command the arms and, in " +"chassis mode, the mobile base. The package is " +"[`arms_teleop`](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md) in " +"[arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control). It" +" also contains a foot-pedal assist, which is not a complete teleop setup." +msgstr "" +"用游戏手柄(joystick / gamepad)控制手臂,在底盘模式下还可以控制移动底盘。软件包是 " +"[arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control) 里的 " +"[`arms_teleop`](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md)。它还包含脚踏板辅助,那并不是完整的遥操作方案。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:5 +#: f753df2abfb54a229497459f6c04237b +msgid "Prerequisites" +msgstr "前提" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:7 +#: 34ca6d8f43c94ba6b67bed21660ecad1 +msgid "" +"A robot stack is already running (mock, Isaac Sim, or real). This launch " +"does not start the controller." +msgstr "机器人运控已经在运行(mock、Isaac Sim 或真机)。这次启动不会拉起控制器。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:8 +#: 105d41aaf0af4e04a739670fde76d2b3 +msgid "" +"A game controller is connected. The default device is `/dev/input/js0`." +msgstr "已接入游戏手柄。默认设备是 `/dev/input/js0`。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:10 +#: b711acc6ae6145a99362b03f42ae7451 +msgid "Start the joystick" +msgstr "启动手柄" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:12 +#: 98e886ee9eef40f28d79a70fa1cb0ff0 +msgid "" +"source install/setup.bash\n" +"ros2 launch arms_teleop joystick_teleop.launch.py" +msgstr "" +"source install/setup.bash\n" +"ros2 launch arms_teleop joystick_teleop.launch.py" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:17 +#: ce7d2a2be91a487983688b8fddffef82 +msgid "" +"By default `joy_driver:=auto` uses `game_controller_node` when " +"`joy_enumerate_devices` reports the device as mapped, with " +"`generic_gamepad.yaml` (SDL standard layout). Unmapped devices fall back " +"to `joy_node` and `default.yaml`. The package README lists typical mapped " +"gamepads; do not treat that list as a compatibility guarantee for an " +"untested device." +msgstr "" +"默认 `joy_driver:=auto`:当 `joy_enumerate_devices` 把设备报告为已映射时,使用 " +"`game_controller_node`,配置为 `generic_gamepad.yaml`(SDL 标准布局)。未映射的设备会回退到 " +"`joy_node` 和 `default.yaml`。软件包 README 列出了常见的已映射手柄;不要把这份名单当成对未测试设备的兼容性保证。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:19 +#: 233436aa380a4098b93e40b6c1231e99 +msgid "" +"Joystick control starts **disabled**. Press the **right stick** to enable " +"it, then move the sticks. Press the right stick again to disable." +msgstr "手柄控制默认是**关闭**的。按下**右摇杆**使能,再拨动摇杆。再按一次右摇杆则关闭。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:21 +#: 393f8f36280549f29a84d829395c11b0 +msgid "List connected devices:" +msgstr "列出已连接的设备:" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:23 +#: f9545e70fd004e17a549bce20e9bd0b2 +msgid "ros2 run joy joy_enumerate_devices" +msgstr "ros2 run joy joy_enumerate_devices" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:27 +#: bb69137240e342248af0acd29c8e1310 +msgid "" +"If more than one controller is connected, pass the device you want, for " +"example `joy_dev:=/dev/input/js1`. Mapping overrides and keyboard teleop " +"are in the [package README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md). Do not run" +" `joystick_teleop` and `keyboard_teleop` at the same time if they would " +"publish to the same topics." +msgstr "" +"如果接了不止一个手柄,传入你要用的设备,例如 `joy_dev:=/dev/input/js1`。映射覆盖和键盘遥操作见 [软件包 " +"README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md)。如果 " +"`joystick_teleop` 和 `keyboard_teleop` 会往同一组话题发布,不要同时运行。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:29 +#: 01dfa6532c6544898c34d311367f0fe6 +msgid "What it publishes" +msgstr "它发布什么" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:31 +#: c89663d28fa04ce08a81398c38d55830 +msgid "" +"The joystick node publishes `control_input` " +"(`arms_ros2_control_msgs/Inputs`). " +"[arms_target_manager](../../4-reference/controllers/6-gripper_teleop_plugins.md)" +" scales that message into `/left_target/twist` and `/right_target/twist`. " +"In chassis mode it publishes `/cmd_vel`. The joystick stack also publishes" +" `/fsm_command`." +msgstr "" +"手柄节点发布 " +"`control_input`(`arms_ros2_control_msgs/Inputs`)。[arms_target_manager](../../4-reference/controllers/6-gripper_teleop_plugins.md)" +" 会把它换算成 `/left_target/twist` 和 `/right_target/twist`。在底盘模式下会发布 " +"`/cmd_vel`。手柄这一路还会发布 `/fsm_command`。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:33 +#: 53b54a01befb4641b18a9eb711172bdd +msgid "What you should see" +msgstr "预期看到的结果" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:35 +#: 941dd1281aa54ddeb931182e6300fde9 +msgid "" +"After you enable the controller, stick motion changes the active arm’s " +"target, or the chassis when you are in chassis mode. `teleop_mode` reports" +" whether the joystick is active." +msgstr "使能之后,拨动摇杆会改变当前手臂的目标;处于底盘模式时则控制底盘。`teleop_mode` 会报告手柄是否处于活动状态。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:39 +#: 567a7ef317b04d689212fa3df02d72eb +msgid "Foot pedal (assist only)" +msgstr "脚踏板(仅作辅助)" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:41 +#: 1fc23d97e7cb4a318c57283be56f7c0b +msgid "" +"`foot_pedal_teleop` is an **assist**, not a standalone teleop path. It " +"reads one USB foot pedal (the packaged udev rule is for the SayoDevice " +"CM6K) and publishes events on `/teleop/controller_state`. It does **not** " +"publish `/fsm_command`. FSM transitions and teleop toggles are handled by " +"`VRInputHandler`." +msgstr "" +"`foot_pedal_teleop` 是**辅助输入**,不是独立的遥操作路径。它读取一块 USB 脚踏板(随包装的 udev 规则针对 " +"SayoDevice CM6K),并在 `/teleop/controller_state` 上发布事件。它**不会**发布 " +"`/fsm_command`。FSM 切换和遥操作开关由 `VRInputHandler` 处理。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:43 +#: 0ecd6b2421de488bb7d92f08e99fa4d3 +msgid "With exactly one supported pedal connected:" +msgstr "在恰好接入一块受支持的脚踏板时:" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:45 +#: 985b0e06aab547f9ad8e39407ea01f3f +msgid "ros2 run arms_teleop foot_pedal_teleop" +msgstr "ros2 run arms_teleop foot_pedal_teleop" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:49 +#: 829d869c609e412bae4d8f655e7aa985 +msgid "" +"The package README documents the event map (FSM up/down, left/right arm " +"teleop enable, STORAGE/UPDATE, mirror), udev setup, and how to choose a " +"device when more than one pedal is connected." +msgstr "" +"软件包 README 记录了事件映射(FSM 上/下、左/右臂遥操作使能、STORAGE/UPDATE、镜像)、udev " +"配置,以及接入多块脚踏板时如何选择设备。" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:51 +#: 8302626a70524fbfac50ebdf9cf4b869 +msgid "Related" +msgstr "相关页面" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:53 +#: 7b816a0c685d49e8a92583bd70eeecf7 +msgid "" +"[VR Teleoperation](6-vr_teleop.md) — headset controllers for end-effector " +"pose" +msgstr "[VR 遥操作](6-vr_teleop.md) — 用头显手柄提供末端位姿" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:54 +#: 481b3430c35743eab05122b8a9ce7b80 +msgid "" +"[arms_teleop README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md)" +msgstr "" +"[arms_teleop README](https://github.com/fiveages-" +"sim/arms_ros2_control/blob/main/command/arms_teleop/README.md)" + +#: ../../source/2-how_to/5-teleoperation/9-joystick_teleop.md:55 +#: dcc676cdec124b49844b8ed70c646258 +msgid "[FSM and Topics](../../3-concepts/4-fsm_and_topics.md)" +msgstr "[FSM 与话题](../../3-concepts/4-fsm_and_topics.md)" 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 f114e49..72eaf01 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 @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,19 +20,19 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:1 -#: 6af88afd1158441798642bee5513199a +#: 0d210f83b6064c52ad9cfb54cedc36ec msgid "Isaac Scenes and USD" msgstr "Isaac 场景与 USD" #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:3 -#: 6528621a31a544a4a9b633857486e2a3 +#: 1202a4d4d0ec45e2a4dcd374415ae80f msgid "" "Synthetic datagen in this stack is an **Isaac Sim** line. Gazebo is not " "part of this pipeline." msgstr "本栈的合成数据采集是 **Isaac Sim** 线路。Gazebo 不在这条流水线里。" #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:5 -#: b0d8c9d0cfd94c1b8282b1c6ee8fb22e +#: c5b538d09ec24942abc7e3a8154f1360 msgid "" "Scene assets live in **FaSim-Isaac**. Robot USD files are the " "**robot_usds** superproject (FaSim submodule `robots/`). Environment and " @@ -43,110 +42,40 @@ msgstr "" "`robots/`)。环境与私有项目 USD 与这棵树并列,不在它内部。" #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:7 -#: 557abe7df66c434fb188fccf1860cce7 -msgid "FaSim-Isaac (scene host)" -msgstr "FaSim-Isaac(场景宿主)" +#: 6d36b8ff4e7347b4aef085f6af93c390 +msgid "Prepare the workspace" +msgstr "准备工作区" #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:9 -#: 1e2f149064ac4dd6bee614156d194def +#: 964e5ad6068c4eaebb20e59f4bae798a msgid "" -"**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-" -"sim/FaSim-Isaac)" -msgstr "" -"**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-" -"sim/FaSim-Isaac)" +"Clone [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac), run " +"`./init.sh`, then `./run.sh`. The menu, flags, and first ROS 2 connection" +" are on [Isaac Sim](../2-simulation/4-isaac_sim.md). Do not hand-assemble" +" the tree." +msgstr "克隆 [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac),跑 `./init.sh`,再 `./run.sh`。菜单、参数和第一次 ROS 2 接入见 [Isaac Sim](../2-simulation/4-isaac_sim.md)。不要手工拼这棵树。" #: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:11 -#: 53c63b2d77354fcdaaa463d750ec5eb8 -msgid "" -"FaSim-Isaac is the one-click Isaac asset workspace: it clones USD " -"submodules, can install the Isaac ROS 2 Jazzy overlay, and starts Sim. " -"Prefer the scripts; do not hand-assemble the tree." -msgstr "" -"FaSim-Isaac 是一键 Isaac 资产工作区:克隆 USD 子模块、可安装 Isaac ROS 2 Jazzy overlay、并启动 " -"Sim。优先用脚本,不要手拼目录树。" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:13 -#: 51a6d78387fe4ab1be12f7fbc998e640 -msgid "" -"git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" -"cd FaSim-Isaac\n" -"./init.sh\n" -"./run.sh" -msgstr "" -"git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" -"cd FaSim-Isaac\n" -"./init.sh\n" -"./run.sh" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:20 -#: 0b7e4100e4d24c1a8c228ed3a849f0a4 -msgid "" -"`./init.sh` menu and `./run.sh` flags: [Isaac " -"Sim](../2-simulation/4-isaac_sim.md). Operation 1 selects submodules " -"(`public` checked, private unchecked until you have access). Operation 4 " -"is the optional Isaac ROS 2 Jazzy overlay. The version menu queries " -"GitHub stable tags; `config/fa_sim.conf` falls back to `6.2.0` / `6.1.0` " -"/ `6.0.1`. Override with `ISAAC_SIM_VERSION=… ./init.sh`. Operation 5 " -"installs `fasim.ros2.nodes` (needed before Play on an in-process " -"`ROS2ControlLaunch` graph)." -msgstr "" -"`./init.sh` 菜单和 `./run.sh` 参数见 [Isaac " -"Sim](../2-simulation/4-isaac_sim.md)。第 1 项选择子模块(`public` " -"默认勾选,私有项在有权限前不勾)。第 4 项是可选的 Isaac ROS 2 Jazzy 叠加层。版本菜单向 GitHub " -"查询稳定标签;`config/fa_sim.conf` 回退到 `6.2.0` / `6.1.0` / `6.0.1`。可用 " -"`ISAAC_SIM_VERSION=… ./init.sh` 覆盖。第 5 项安装 `fasim.ros2.nodes`(进程内 " -"`ROS2ControlLaunch` 图在播放前需要它)。" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:22 -#: a4530d4a570449e7a44be06161026531 +#: c1c5e9c8b73b47a892d82c67b205d7ce msgid "" "The datagen example README " "([`examples/IsaacSim/README.md`](https://github.com/fiveages-" "sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md) on `main`) still " "lists Ubuntu 24.04, ROS 2 Jazzy, and Isaac Sim 6.0. Keep path and version" -" in FaSim config. The FaSim fallback list above is newer than that 6.0 " -"line." +" in FaSim config. The FaSim fallback list (`6.2.0`, `6.1.0`, `6.0.1` in " +"`config/fa_sim.conf`) is newer than that 6.0 line." msgstr "" "数采示例 README(`main` 上的 [`examples/IsaacSim/README.md`](https://github.com" "/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md))仍写 " "Ubuntu 24.04、ROS 2 Jazzy 和 Isaac Sim 6.0。路径和版本以 FaSim 配置为准。上面的 FaSim " "回退列表比那一行 6.0 更新。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:24 -#: 9dd542c38ef040749b2c1cc5fc43b158 -msgid "Layout from that README:" -msgstr "该 README 中的布局:" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:26 -#: 9c72f3e966c64dcaa5d5664a25108b50 -msgid "" -"FaSim-Isaac/\n" -"├── init.sh\n" -"├── run.sh\n" -"├── config/ # fa_sim.conf + optional fa_sim.local.conf\n" -"├── robots/ # → robot_usds\n" -"├── environment/\n" -"│ ├── fiveages_env/ # → fiveages-env-usds (public scenes)\n" -"│ └── fa-project-usd/ # → fa-project-usd (private project USD)\n" -"└── isaac_jazzy_ws/ # created by init.sh operation 4" -msgstr "" -"FaSim-Isaac/\n" -"├── init.sh\n" -"├── run.sh\n" -"├── config/ # fa_sim.conf + optional fa_sim.local.conf\n" -"├── robots/ # → robot_usds\n" -"├── environment/\n" -"│ ├── fiveages_env/ # → fiveages-env-usds (public scenes)\n" -"│ └── fa-project-usd/ # → fa-project-usd (private project USD)\n" -"└── isaac_jazzy_ws/ # created by init.sh operation 4" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:38 -#: f70bc5b9a9ff4c249c91c01198bdb8d6 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:13 +#: 61115763adc2439180417d2e4d484c11 msgid "" -"Open the target robot USD from `robots/` (robot_usds) in Isaac and run " -"the simulation. Enable Isaac’s ROS 2 simulation-control and prim services" -" as in the [NVIDIA Isaac ROS 2 workspace " +"Open the target robot or scene USD in Isaac and run the simulation. " +"Enable Isaac’s ROS 2 simulation-control and prim services as in the " +"[NVIDIA Isaac ROS 2 workspace " "docs](https://docs.isaacsim.omniverse.nvidia.com/latest/installation/install_ros.html" "#setup-ros-2-workspaces) linked from the example README " "(`/set_simulation_state`, prim service for object pose)." @@ -157,154 +86,54 @@ msgstr "" "#setup-ros-2-workspaces) 启用 ROS 2 simulation-control 与 prim " "服务(`/set_simulation_state`、物体位姿 prim service)。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:40 -#: e7644635b9e74e7caf47f4d688ae48f5 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:15 +#: 44008d69247c4eb3ada772bb221f4ea6 msgid "" -"Package details: [FaSim-Isaac " -"reference](../../4-reference/simulation/2-fasim_isaac.md)." +"Workspace layout, Kit extensions, and in-process 运控: [FaSim-" +"Isaac](../../4-reference/simulation/2-fasim_isaac.md)." msgstr "包细节:[FaSim-Isaac 参考](../../4-reference/simulation/2-fasim_isaac.md)。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:42 -#: 7e322d1f3d9446b8aa31a8b813e434d1 -msgid "robot_usds (robot USD only)" -msgstr "robot_usds(仅机器人 USD)" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:17 +#: ac15502d43264a87b626d951106d80ff +msgid "Which tree to open" +msgstr "打开哪棵树" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:44 -#: 5625e41645374d48af8144ffb792b0ea -msgid "" -"**Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-" -"sim/robot_usds)" -msgstr "" -"**Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-" -"sim/robot_usds)" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:46 -#: 39603a4e431246ba8b72e8e2ce6a8517 -msgid "" -"This chapter documents USD **as referenced by robot_usds** (and as the " -"FaSim `robots/` submodule). **Primary path:** FaSim `./init.sh` operation" -" 1 initializes that submodule (public items by default)." -msgstr "" -"本章按 **robot_usds 引用的 USD**(以及作为 FaSim `robots/` 子模块)来写。**主路径:** FaSim " -"`./init.sh` 操作 1 初始化该子模块(默认 public 项)。" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: f7aa481d5a8a4aa99fef8ed45fb1c807 +msgid "Tree" +msgstr "目录树" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:48 -#: 4efe881b294d48739df47edc348072fa -msgid "Manual fallback" -msgstr "手动回退" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 3da8f32a40a94a788e4eff8b626b1641 +msgid "Role" +msgstr "角色" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:51 -#: cc47091f05bb4df6986545fa95a16a91 -msgid "" -"After a plain clone of robot_usds (outside FaSim), submodule directories " -"are empty until:" -msgstr "若在 FaSim 外单独克隆 robot_usds,子模块目录在以下步骤之前是空的:" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 67adf0f1eab54e748ee874c59c1aa19d +msgid "Reference" +msgstr "参考" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 72a2b3bfbeb44ab3956787663519735d -msgid "" -"git clone git@github.com:fiveages-sim/robot_usds.git\n" -"cd robot_usds\n" -"git submodule update --init --recursive" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 8ffb211b1de3448ba2bde833ab2dceef +msgid "`robots/` → [robot_usds](https://github.com/fiveages-sim/robot_usds)" msgstr "" -"git clone git@github.com:fiveages-sim/robot_usds.git\n" -"cd robot_usds\n" -"git submodule update --init --recursive" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:60 -#: 4073cb7bf81a409e8a2c556be7582e40 -msgid "Git submodules recorded there:" -msgstr "其中记录的 Git 子模块:" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: e7464afeb40f46059f2ec4810ffa55b9 -msgid "Path" -msgstr "路径" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 80d00a63b1b0448596e1c36fc238fe6f -msgid "Upstream" -msgstr "上游" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 8edee48d038646f2868ecdc74e25583f -msgid "`humanoid/FiveAges/Gen1`" -msgstr "`humanoid/FiveAges/Gen1`" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 0e597dfa11b348208488f9a2fe4cd1be -msgid "fiveages-gen1-robot-usds" -msgstr "fiveages-gen1-robot-usds" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: e52c2741105a4ac38e759ca64e42ade7 -msgid "`humanoid/FiveAges/Gen2`" -msgstr "`humanoid/FiveAges/Gen2`" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 51dd6d57326741dfb5becc9e3cd4f5be -msgid "fiveages-gen2-robot-usds" -msgstr "fiveages-gen2-robot-usds" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: d022eac72ee641ac8f5cf8d2ff2ec3ae -msgid "`humanoid/Ubtech`" -msgstr "`humanoid/Ubtech`" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: e13ae2518271494b8811c30901ae25d3 -msgid "ubtech-usds" -msgstr "ubtech-usds" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: f5649cc359d44fefbd0a2aa07bff1295 -msgid "`humanoid/Galbot`" -msgstr "`humanoid/Galbot`" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 2d5581f1f8584890863096c4fbcdb6f8 -msgid "galbot-usds" -msgstr "galbot-usds" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:74 -#: 42dc6b5acb5f4587b423bb60d350debe -msgid "" -"Full tree: [robot_usds " -"reference](../../4-reference/simulation/3-robot_usds.md), [USD " -"submodules](../../4-reference/simulation/4-usd_submodules.md)." -msgstr "" -"完整树:[robot_usds 参考](../../4-reference/simulation/3-robot_usds.md)、[USD " -"子模块](../../4-reference/simulation/4-usd_submodules.md)。" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:76 -#: ec0bf99ea1ef4c6590863308c227b8e5 -msgid "Environment and private project USD" -msgstr "环境与私有项目 USD" +"**Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-" +"sim/robot_usds)" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:78 -#: 4ea36f7630e1478d9491d9f262daef48 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: e3ed37a6f1c34836a5f463b463264ec4 msgid "" -"Environment assets are **siblings** of `robots/`, not robot_usds " -"submodules." -msgstr "环境资产是 `robots/` 的**同级目录**,不是 robot_usds 子模块。" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: c532cfacda7844619446cbd1c8359c2a -msgid "Tree" -msgstr "目录树" +"Robot USD, including FiveAges Gen1/Gen2 gitlinks and in-tree models such " +"as Taku" +msgstr "机器人 USD,包括 FiveAges Gen1/Gen2 gitlink,以及仓库内的机型,例如 Taku" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: b8c98e6d0dc74f78b88afb6886e4e5d6 -msgid "Visibility" -msgstr "可见性" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 7a4e5f41ed7b4519b3d2515a23e35810 -msgid "Role" -msgstr "角色" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 107b44d96325406481872b21a4e5ace7 +msgid "[robot_usds](../../4-reference/simulation/3-robot_usds.md)" +msgstr "[环境资产参考](../../4-reference/simulation/5-env_assets.md)。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 8a8fc973edb54c7da9b0b20958f55888 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 2474a408f5834cd7883c6c4797d978a7 msgid "" "`environment/fiveages_env/` → [fiveages-env-usds](https://github.com" "/fiveages-sim/fiveages-env-usds)" @@ -312,70 +141,60 @@ msgstr "" "`environment/fiveages_env/` → [fiveages-env-usds](https://github.com" "/fiveages-sim/fiveages-env-usds)" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 376442af72ac4144a16d2689867dfab5 -msgid "Public" -msgstr "公开" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: fa8464e1161b40feb3c1765a817ae368 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 51f3b743aa8b4aca96a597a5d838f353 msgid "" -"Shared Isaac scenes: `static/` (tables, shelves, boxes), `moveable/` " -"(small objects), `articulation/` (drawers, …), `background/`, `tasks/` " -"(composed task scenes)." +"Public scenes (`static/`, `moveable/`, `articulation/`, `background/`, " +"`tasks/`)" msgstr "" "共享 Isaac " "场景:`static/`(桌子、货架、箱子)、`moveable/`(小物体)、`articulation/`(抽屉等)、`background/`、`tasks/`(组合任务场景)。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: aa23797267bc4ad0ae08c01755efae0d -msgid "`environment/fa-project-usd/` → fa-project-usd" -msgstr "`environment/fa-project-usd/` → fa-project-usd" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: 7c244c3d332e4492982b8da62dc58c9a -msgid "Private" -msgstr "私有" - -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:53 -#: ac147763070145d38f82fb0903ac1555 -msgid "" -"Project-specific USD used by internal task scenes. `./init.sh` leaves " -"this unchecked unless you have access." -msgstr "内部任务场景用的项目专用 USD。没有权限时 `./init.sh` 默认不勾选。" +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 99acca7efa984ca4942645a7ca734bbe +msgid "[Environment assets](../../4-reference/simulation/5-env_assets.md)" +msgstr "[环境资产参考](../../4-reference/simulation/5-env_assets.md)。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:85 -#: 01602fb65ef842ce9e7d51be62774e97 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: ddeb5945c0b945daa4dc8fe6a3e0f520 msgid "" -"robot_usds README: if you use robot_usds **outside** FaSim, put " -"`environment/fiveages_env` next to `robots/` so scene USDs can reference " -"it." +"`environment/fa-project-usd/` → [fa-project-usd](https://github.com" +"/fiveages-sim/fa-project-usd)" msgstr "" -"robot_usds README:若在 FaSim **之外**用 robot_usds,把 " -"`environment/fiveages_env` 放在 `robots/` 旁边,场景 USD 才能引用。" +"`environment/fiveages_env/` → [fiveages-env-usds](https://github.com" +"/fiveages-sim/fiveages-env-usds)" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:87 -#: 518eee3bad1148a28685acb84116cf4d +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 76219b8f96ae42c08e87452850363555 msgid "" -"`fa-project-usd` is a private project scene tree, not a public robot " -"model. Product names on this page follow the public robot_usds gallery " -"text." -msgstr "不要把私有项目 USD 当成公开机器人模型,也不要写本章所依据的公开 robot_usds gallery 文本里没有的产品代号。" +"Private project scenes. `robot.yaml` / `task_configs/` / maps are on " +"branch `feature/sinopec-test-tube-picking`, not on `main`" +msgstr "私有项目场景。`robot.yaml` / `task_configs/` / 地图在分支 `feature/sinopec-test-tube-picking` 上,不在 `main` 上" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:89 -#: 3a0cb1e59d0c4008b6d5ede099dc0b31 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md +#: 0b0634e122ca4634944c8fb1b1f685ae msgid "" -"[Environment assets " -"reference](../../4-reference/simulation/5-env_assets.md)." +"[fa-project-usd](../../4-reference/simulation/5-env_assets.md#fa-project-" +"usd)" msgstr "[环境资产参考](../../4-reference/simulation/5-env_assets.md)。" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:91 -#: fdda10d581d94f10a884b1f5a1036047 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:25 +#: 8de71c0ba8d0429194ba207d40f873f2 +msgid "" +"If you use robot_usds **outside** FaSim, put `environment/fiveages_env` " +"next to `robots/` so scene USDs can reference it. `fa-project-usd` is a " +"project scene tree, not a public robot model. Product names on this page " +"follow the public robot_usds gallery text. Keep camera rigs in the scene " +"USD." +msgstr "不要把私有项目 USD 当成公开机器人模型,也不要写本章所依据的公开 robot_usds gallery 文本里没有的产品代号。" + +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:27 +#: f27916cbc6874f0bbc6d1391e0a54303 msgid "Next on the pipeline" msgstr "流水线下一步" -#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:93 -#: 7640fc05543e4d6f851d341880c48201 +#: ../../source/2-how_to/7-synthetic_data/1-isaac_scenes.md:29 +#: 09e1d2c2b0b94ce39b47e68054a4b967 msgid "" "With Isaac running and ROS 2 topics/services up, motion and recording " "talk to the robot through **ros2_robot_interface**, orchestrated by " @@ -443,34 +262,235 @@ 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`" +#~ msgid "FaSim-Isaac (scene host)" +#~ msgstr "FaSim-Isaac(场景宿主)" + +#~ msgid "" +#~ "**Repository:** [fiveages-sim/FaSim-" +#~ "Isaac](https://github.com/fiveages-sim/FaSim-Isaac)" +#~ msgstr "" +#~ "**Repository:** [fiveages-sim/FaSim-" +#~ "Isaac](https://github.com/fiveages-sim/FaSim-Isaac)" + +#~ msgid "" +#~ "FaSim-Isaac is the one-click Isaac" +#~ " asset workspace: it clones USD " +#~ "submodules, can install the Isaac ROS" +#~ " 2 Jazzy overlay, and starts Sim. " +#~ "Prefer the scripts; do not hand-" +#~ "assemble the tree." +#~ msgstr "" +#~ "FaSim-Isaac 是一键 Isaac 资产工作区:克隆 USD " +#~ "子模块、可安装 Isaac ROS 2 Jazzy overlay、并启动" +#~ " Sim。优先用脚本,不要手拼目录树。" + +#~ msgid "" +#~ "git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" +#~ "cd FaSim-Isaac\n" +#~ "./init.sh\n" +#~ "./run.sh" +#~ msgstr "" +#~ "git clone git@github.com:fiveages-sim/FaSim-Isaac.git\n" +#~ "cd FaSim-Isaac\n" +#~ "./init.sh\n" +#~ "./run.sh" + +#~ msgid "" +#~ "`./init.sh` menu and `./run.sh` flags: " +#~ "[Isaac Sim](../2-simulation/4-isaac_sim.md). Operation " +#~ "1 selects submodules (`public` checked, " +#~ "private unchecked until you have " +#~ "access). Operation 4 is the optional " +#~ "Isaac ROS 2 Jazzy overlay. The " +#~ "version menu queries GitHub stable tags;" +#~ " `config/fa_sim.conf` falls back to `6.2.0`" +#~ " / `6.1.0` / `6.0.1`. Override with" +#~ " `ISAAC_SIM_VERSION=… ./init.sh`. Operation 5 " +#~ "installs `fasim.ros2.nodes` (needed before " +#~ "Play on an in-process " +#~ "`ROS2ControlLaunch` graph)." +#~ msgstr "" +#~ "`./init.sh` 菜单和 `./run.sh` 参数见 [Isaac " +#~ "Sim](../2-simulation/4-isaac_sim.md)。第 1 项选择子模块(`public`" +#~ " 默认勾选,私有项在有权限前不勾)。第 4 项是可选的 Isaac ROS " +#~ "2 Jazzy 叠加层。版本菜单向 GitHub " +#~ "查询稳定标签;`config/fa_sim.conf` 回退到 `6.2.0` / " +#~ "`6.1.0` / `6.0.1`。可用 `ISAAC_SIM_VERSION=… " +#~ "./init.sh` 覆盖。第 5 项安装 `fasim.ros2.nodes`(进程内" +#~ " `ROS2ControlLaunch` 图在播放前需要它)。" + +#~ msgid "Layout from that README:" +#~ msgstr "该 README 中的布局:" + +#~ msgid "" +#~ "FaSim-Isaac/\n" +#~ "├── init.sh\n" +#~ "├── run.sh\n" +#~ "├── config/ # fa_sim.conf +" +#~ " optional fa_sim.local.conf\n" +#~ "├── robots/ # → robot_usds\n" +#~ "├── environment/\n" +#~ "│ ├── fiveages_env/ # → fiveages-env-usds (public scenes)\n" +#~ "│ └── fa-project-usd/ # → fa-project-usd (private project USD)\n" +#~ "└── isaac_jazzy_ws/ # created by init.sh operation 4" +#~ msgstr "" +#~ "FaSim-Isaac/\n" +#~ "├── init.sh\n" +#~ "├── run.sh\n" +#~ "├── config/ # fa_sim.conf +" +#~ " optional fa_sim.local.conf\n" +#~ "├── robots/ # → robot_usds\n" +#~ "├── environment/\n" +#~ "│ ├── fiveages_env/ # → fiveages-env-usds (public scenes)\n" +#~ "│ └── fa-project-usd/ # → fa-project-usd (private project USD)\n" +#~ "└── isaac_jazzy_ws/ # created by init.sh operation 4" + +#~ msgid "robot_usds (robot USD only)" +#~ msgstr "robot_usds(仅机器人 USD)" + +#~ msgid "" +#~ "This chapter documents USD **as " +#~ "referenced by robot_usds** (and as the" +#~ " FaSim `robots/` submodule). **Primary " +#~ "path:** FaSim `./init.sh` operation 1 " +#~ "initializes that submodule (public items " +#~ "by default)." +#~ msgstr "" +#~ "本章按 **robot_usds 引用的 USD**(以及作为 FaSim " +#~ "`robots/` 子模块)来写。**主路径:** FaSim `./init.sh` 操作" +#~ " 1 初始化该子模块(默认 public 项)。" + +#~ msgid "Manual fallback" +#~ msgstr "手动回退" + +#~ msgid "" +#~ "After a plain clone of robot_usds " +#~ "(outside FaSim), submodule directories are " +#~ "empty until:" +#~ msgstr "若在 FaSim 外单独克隆 robot_usds,子模块目录在以下步骤之前是空的:" + +#~ msgid "" +#~ "git clone git@github.com:fiveages-sim/robot_usds.git\n" +#~ "cd robot_usds\n" +#~ "git submodule update --init --recursive" +#~ msgstr "" +#~ "git clone git@github.com:fiveages-sim/robot_usds.git\n" +#~ "cd robot_usds\n" +#~ "git submodule update --init --recursive" + +#~ msgid "Git submodules recorded there:" +#~ msgstr "其中记录的 Git 子模块:" + +#~ msgid "Path" +#~ msgstr "路径" + +#~ msgid "Upstream" +#~ msgstr "上游" + +#~ msgid "`humanoid/FiveAges/Gen1`" +#~ msgstr "`humanoid/FiveAges/Gen1`" + +#~ msgid "fiveages-gen1-robot-usds" +#~ msgstr "fiveages-gen1-robot-usds" + +#~ msgid "`humanoid/FiveAges/Gen2`" +#~ msgstr "`humanoid/FiveAges/Gen2`" + +#~ msgid "fiveages-gen2-robot-usds" +#~ msgstr "fiveages-gen2-robot-usds" + +#~ msgid "`humanoid/Ubtech`" +#~ msgstr "`humanoid/Ubtech`" + +#~ msgid "ubtech-usds" +#~ msgstr "ubtech-usds" + +#~ msgid "`humanoid/Galbot`" +#~ msgstr "`humanoid/Galbot`" + +#~ msgid "galbot-usds" +#~ msgstr "galbot-usds" + +#~ msgid "" +#~ "Full tree: [robot_usds " +#~ "reference](../../4-reference/simulation/3-robot_usds.md), [USD" +#~ " submodules](../../4-reference/simulation/4-usd_submodules.md)." +#~ msgstr "" +#~ "完整树:[robot_usds " +#~ "参考](../../4-reference/simulation/3-robot_usds.md)、[USD " +#~ "子模块](../../4-reference/simulation/4-usd_submodules.md)。" + +#~ msgid "Environment and private project USD" +#~ msgstr "环境与私有项目 USD" + +#~ msgid "" +#~ "Environment assets are **siblings** of " +#~ "`robots/`, not robot_usds submodules." +#~ msgstr "环境资产是 `robots/` 的**同级目录**,不是 robot_usds 子模块。" + +#~ msgid "Visibility" +#~ msgstr "可见性" + +#~ msgid "Public" +#~ msgstr "公开" + +#~ msgid "`environment/fa-project-usd/` → fa-project-usd" +#~ msgstr "`environment/fa-project-usd/` → fa-project-usd" + +#~ msgid "Private" +#~ msgstr "私有" + +#~ msgid "" +#~ "Project-specific USD used by internal" +#~ " task scenes. `./init.sh` leaves this " +#~ "unchecked unless you have access." +#~ msgstr "内部任务场景用的项目专用 USD。没有权限时 `./init.sh` 默认不勾选。" + +#~ msgid "" +#~ "robot_usds README: if you use robot_usds" +#~ " **outside** FaSim, put " +#~ "`environment/fiveages_env` next to `robots/` " +#~ "so scene USDs can reference it." +#~ msgstr "" +#~ "robot_usds README:若在 FaSim **之外**用 " +#~ "robot_usds,把 `environment/fiveages_env` 放在 `robots/`" +#~ " 旁边,场景 USD 才能引用。" + +#~ 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 " +#~ "自己的树里还有夹爪、灵巧手、机械臂、移动底盘、移动操作臂和传感器。当前目录以仓库为准。" + +#~ 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)。" + 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 c1fcfce..013215f 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 @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,22 +20,27 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:1 -#: d5fdeb337f564fc1bf2f58a7cb7390a1 +#: 874e69523db64c6596ca620746113938 msgid "FiveAges robot descriptions" msgstr "FiveAges 机器人描述" +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:3 +#: edaf8f629dd848ac80b604037b4d6106 +msgid "URDF packages and USD mapping for FiveAges (第五纪) wheeled-arm robots." +msgstr "第五纪轮臂机器人的 URDF 包和 USD 对照。" + #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:5 -#: f1c2031ee6f14d74a5c146c3cfd0dd78 +#: 979b1d1109324510866b4fe49e996ea8 msgid "Public now (Gen1 W1 + Gen2 W2 / S2 + components + USD)" msgstr "现已公开(Gen1 W1 + Gen2 W2 / S2 + 组件 + USD)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:8 -#: 6743cb05b7e74fa8a2524df5d73e6777 +#: 61f8a03292764889b8ffd7c30b11f102 msgid "These remotes are public (HTTPS):" msgstr "以下远端已公开(HTTPS):" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:10 -#: 179b74e6aef44883baa89b07b71c987d +#: a6a32d92c3cc4299846331321422a3a0 msgid "" "URDF: [fa-w1-description](https://github.com/fiveages-" "sim/fa-w1-description) (W1 / Gen1), " @@ -54,7 +58,7 @@ msgstr "" "/fiveages-sim/fa-w2-components)(共享Gen2 组件)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:11 -#: c43977254bd54d5eb11bbdddd4b74251 +#: b98e779e03594577bdf0819a3189741b msgid "" "USD: [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-" "gen1-robot-usds) (W1; `robot_usds` path `humanoid/FiveAges/Gen1`) and " @@ -67,24 +71,42 @@ msgstr "" "usds)(`W2/`、`S2/`、`components/`;路径 `humanoid/FiveAges/Gen2`)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:13 -#: 4fee678af17441698f52293ed8d8e46d +#: 2338a68fd13941e5a6a3563c17e246e8 msgid "" "Launch names and xacro details: those **public package READMEs**. There " "is no `open-deploy-ws` Gen1 or Gen2 branch." msgstr "Launch 名和 xacro 细节见那些**公开包 README**。没有 `open-deploy-ws` 的 Gen1 或 Gen2 分支。" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:16 -#: f0608bbf7a8f445cbb560dcfdb9896da +#: a3365641f3fa4b4db7ef9b60491356ec msgid "Still private — W2R and S2R are not open" msgstr "仍为私有 — W2R 与 S2R 尚未开放" +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:19 +#: 5f2e7ff2d7ce41fe9f8ec4b80217c8a3 +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:22 -#: 4af44c08ae0c44b6b60d6e0c31665fd1 +#: 96acdfde6d5e4157b8de9ef89680934e msgid "Source of truth" msgstr "权威来源" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:25 -#: 611919bee2b24dc7ab896ce37f15a265 +#: fa0fa38868344d3eb7676ec817a8c1b5 msgid "" "URDF gitlinks: [robot_descriptions `.gitmodules` on " "`main`](https://github.com/fiveages-" @@ -99,7 +121,7 @@ msgstr "" "sim/robot_descriptions/blob/feature/agilex/.gitmodules)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:26 -#: 49ed1fe2696340df96a7ebbaf5e25777 +#: 147c26f3a9a44546bb01dc43479a93b1 msgid "" "On-disk path: `humanoid/FiveAges/` inside the public " "[robot_descriptions](https://github.com/fiveages-sim/robot_descriptions) " @@ -109,7 +131,7 @@ msgstr "" "sim/robot_descriptions)下的`humanoid/FiveAges/`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:27 -#: b11eb89b788842f8b98d046a1eb3449a +#: 5f68483e302e45fbb2df070924ebcede msgid "" "The public [robot_descriptions README](https://github.com/fiveages-" "sim/robot_descriptions/blob/main/README.md) **does not** table these " @@ -120,7 +142,7 @@ msgstr "" "`.gitmodules` 为准,不要用 README 品牌表" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:28 -#: aed4bcbcf1ea4ba09dc180fedeb232f1 +#: 28fa48eee66e4d2ba83880dd9bc4af1b msgid "" "Public USD: [robot_usds README](https://github.com/fiveages-" "sim/robot_usds/blob/main/README.md) §3.1 Humanoid → FiveAges, [fiveages-" @@ -135,7 +157,7 @@ msgstr "" "gen2-robot-usds)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:29 -#: 403ad7b902b649cc876460c19d55d104 +#: c81a6f50df4f4fcb93ff85080b1722f0 msgid "" "Workspace pattern (script name only): [fa-deploy-ws " "Setup](../../1-getting_started/4-fa_deploy_ws.md) — `./init_repo.sh`. " @@ -145,7 +167,7 @@ msgstr "" " — `./init_repo.sh`。额外参数和机器人 ID 在开通后的该私有 README 里。" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:30 -#: 02bdb7a295784da88adbc98e838b3992 +#: 5c2c9a6569e7443984c37a58ce706184 msgid "" "Public launch / `hardware:=`: [robot_common_launch](2-common.md) " "(`mock_components` / `gz` / `isaac` / `isaac_sim` / `real`)" @@ -153,20 +175,27 @@ 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 +#: 7496086c4cc54c4b902424484331a2cb +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:35 -#: c676b51091274557aec6d940b3c5f374 +#: 433e93f217864278ad827fb072eb4dd2 msgid "URDF packages (`robot_descriptions`)" msgstr "URDF 包(`robot_descriptions`)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:37 -#: 7bc8127f6a4e495c82cdae5f38c49e78 +#: 67ac2744dc2d4743b0a8d68bcc8c5cad msgid "" "FiveAges descriptions live as **git submodules** of the public umbrella. " "Checkout names and remotes below are from `.gitmodules`." msgstr "FiveAges 描述是公开伞形仓下的 **git 子模块**。下面的检出目录名和远端来自 `.gitmodules`。" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:39 -#: 93ecf4a941f746339dce35d79ea9d6ba +#: 3ee2a82bd8a84d0298d609801c3b469f msgid "" "**Public remotes** (W1, W2, S2, `fa-w2-components`): browse the HTTPS " "repos, or `git submodule update --init` the matching path on " @@ -193,8 +222,15 @@ msgstr "" " 复用天机 `m6_ccs_description`([robot-descriptions-tianji](https://github.com" "/fiveages-sim/robot-descriptions-tianji))。这些厂商远端已**公开**。" +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:41 +#: 6208c711c761444a9877b07fa858f09c +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:43 -#: c62971f06f9f45dcb1d6245662e8484d +#: 284eaf80caa24fedb627bbbf43879978 msgid "" "[`open-deploy-ws` `submodules_visibility.conf`](https://github.com" "/fiveages-sim/open-deploy-ws/blob/main/submodules_visibility.conf) still " @@ -208,192 +244,209 @@ msgstr "" "ws`递归 init。没有公开的 `open-deploy-ws`Gen1 或 Gen2 分支。" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:45 -#: d38f02566eb94023941fcaf0ac99180f +#: 8138f3c4b80c4dd38a714fb23a9c452e msgid "`main` (flat under `humanoid/FiveAges/`)" msgstr "`main`(平铺在 `humanoid/FiveAges/` 下" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 73d2a21f425248ed85da58cfe8f6f447 8458c56572804df7bc8f9380e291c1fc +#: 3ea752437f2048b688b7de15657ddba5 4d64e6be14e74ed9a1c9944b29d0c2ed msgid "Path" msgstr "路径" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 33d735c6388b471cb52fe8ea0e6f3dfd ed2ecaccf5314ab495e32fc9589fb885 +#: 4b6eea0189894485a6a14e0d7a5a8c45 e6647163ee1d4d9b8ce4258043bd2ac0 msgid "Package dir" msgstr "包目录" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 6ff3262888aa42919a040bfaa395ea24 92ac1a6fec564f28a752036c003dbacd +#: 01af08812fc04167b55a23f4c1b6286a 6c902c390617457783570ecafde5004d msgid "Remote" msgstr "远端" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 3d8c22610c564da29f29e5b6e921d414 94b1685562544ff0914230660ede9f9a -#: ad5c1eefb29e488687f5f6999f77679f +#: 1b5d840107124d5cadfebbc31b6cec52 8a9e78ad054742edac9880c50f52f05e +#: c29308abbff64d70a0bee7e571a3b229 msgid "Visibility" msgstr "可见性" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 8708d6ef8b4d4a9f86a72ead7688c384 +#: 17c05390cda9476bb07f1121b0b7624b msgid "`humanoid/FiveAges/fiveages_w1_description`" msgstr "`humanoid/FiveAges/fiveages_w1_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 75c4727f812f4758b8bd2e0203ec0e31 e6296c1f48d141bcabe0cf0cfbdb7a12 +#: 0a750d1eff344e7a8a665f0db0edfade 6d25197df37940febac2defd36142c3c msgid "`fiveages_w1_description`" msgstr "`fiveages_w1_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 12f285ee6d304c72952bd8670b82c100 717c2bef8cb2418d9df6ebc3687e1d26 +#: 22fca437d64e4b4b83d79b22fe86bdb9 afa338d5eff740d18a4d5152f6f3402d msgid "[fa-w1-description](https://github.com/fiveages-sim/fa-w1-description)" msgstr "[fa-w1-description](https://github.com/fiveages-sim/fa-w1-description)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 18f60621cff44f5db5c183af2d6b481f 2573e5c7dd9e44719411d7bc4d548dfe -#: 25a37a5bb18f46bcacfd14f407104ceb 261510de27484733b3d573ab09b76e7d -#: 5b144cf10329443ab97d4fb14b3fdb5a 61e499e39bb74bf2a931f600aa0d39f3 -#: 6a43c66e031c4accaa08ef73b4302a99 9ee7f799668d4741a6c1974d70f35b0c -#: ec5b6f48b505473fbb191ed597ae5aa2 f30ca3833b71402f82c440010f54ab49 +#: 069b27bf5f3744bba43953ab6a682623 1ca3b6e7f46b40bfa79e5ffbaff6eccf +#: 30c8b9cf064146d598030878124d9126 4efca3887c3b4da1b1e6ee26d0e10473 +#: 600b168c5edc4c91a89d4e961a1498c1 680fd92fcce248ada1c68e4634d76003 +#: 8369453cb6a74f12a1ded578b9ccc925 87925d5325e64c4482948b0c275af50a +#: 936a7c6c64ff4edca9b063de8b68e7ce c375b9cf02974a6cac76469bc660000f msgid "Public" msgstr "公开" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: ac587260bc7d486c9753bfa2e5da7fe9 +#: 180bf67167424dd381ddb92e76588207 msgid "`humanoid/FiveAges/fiveages_w2_description`" msgstr "`humanoid/FiveAges/fiveages_w2_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 01b6428068f4422bacf04f93e670c81b ffcca1d3941e4df89352e1df2fffe1a1 +#: d7c1756563a34f6e86a75997c6f50bbb d859f3203b2546a085e8cb6ae86be0ae msgid "`fiveages_w2_description`" msgstr "`fiveages_w2_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: a813518881c14fcbb7fc23e5db0d9838 b218ae43a7764331b48e5914d54a6793 +#: 09278733f6e84b229e16420074eed8a1 f389e275dd054ec283cc9ee7d441d915 msgid "[fa-w2-description](https://github.com/fiveages-sim/fa-w2-description)" msgstr "[fa-w2-description](https://github.com/fiveages-sim/fa-w2-description)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: b1359b263da9437bbef5335401cd1d02 +#: 3b75ea4cab7d45dfbd38bff45bb85f40 msgid "`humanoid/FiveAges/fiveages_w2r_description`" msgstr "`humanoid/FiveAges/fiveages_w2r_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 0e1cec541e41406a9e0ecfc52c166037 e1f665fa82b64c369c1301ba58cd9d91 +#: b3e3c82c6f3947a6875c7b1a5c3778fc fe8ef830df8c46a48f02d9991c55b5e6 msgid "`fiveages_w2r_description`" msgstr "`fiveages_w2r_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 228aa5908be8460585a88f6aaf6bea6f e5ab2968c69f43dc855d49d12307eb34 +#: 05026d32c1414c47ba2962ebe643431b ef401c43a7b34455ba0ea771fc589fe0 msgid "[fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)" msgstr "[fa-w2r-description](https://github.com/fiveages-sim/fa-w2r-description)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 5a1d360aa38346b688238c4912f16690 67207fc4e0a34acab0899ade3982e210 -#: edb368600da047de87b5c76cd75ed414 +#: 2cf765d7d8fc4c7bac20a9ce929a5138 7cce93cd562a4e43885486554a7ec110 +#: b577315297334cffba5bf49768b7bdd8 msgid "Private — **not open**" msgstr "私有 — **尚未开放**" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: dfc3906bfb5048f0bbeec22a093789db +#: aa3ede314e124d1d8982bd57219c226b msgid "`humanoid/FiveAges/fiveages_s2_description`" msgstr "`humanoid/FiveAges/fiveages_s2_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 96c2cd5adabe441ab0c22e51cc6154b2 f0ae769f78104a638444d1b166365cbc +#: af5036d809a1456f84bf19b70eb62b80 e25cafdb1c584092851cbb88f7e2b5f3 msgid "`fiveages_s2_description`" msgstr "`fiveages_s2_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: c18bf71583744cbc8fd2857e08ff34de e51684da7a2644f586717bfa8af0f2fb +#: 25e0d25beebe42d6957b69d677310003 54365ecc9cc34960b50811c1007f05d2 msgid "[fa-s2-description](https://github.com/fiveages-sim/fa-s2-description)" msgstr "[fa-s2-description](https://github.com/fiveages-sim/fa-s2-description)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 5d3aa1194c5f484585de698f7c2c6be7 +#: dd3a502b189b4b18b975e59a3acf05f9 msgid "`humanoid/FiveAges/fiveages_w2_common_description`" msgstr "`humanoid/FiveAges/fiveages_w2_common_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 2c98534eeb114fc597755275fd3dc6f2 b11ab8f2d07d4d36b909ed00cbdaddd5 +#: 1895e7744d5842c686565f29a5273dff d6e5649799b04e938aa8e2cfd112b88e msgid "`fiveages_w2_common_description`" msgstr "`fiveages_w2_common_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 052a0f737bef4a58bf887de1551a7dcc f672dfc5edac4d17a972fa2ad61e385d +#: 32b83b46340b47d79c558f0eea7b3a4b 8176b120e0e14aea8c8b6a46164cb768 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 +#: 3b1aeea7a53d4b7d9d4bee626b98b56e +msgid "`main` has no `fiveages_s2r_description` gitlink." +msgstr "`main` 上没有 `fiveages_s2r_description` 这个 gitlink。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:57 +#: 0fd8ebec8d314b6aaca9f6a068f3a3f3 +msgid "`feature/agilex` (grouped like the USD tree: Gen1 / Gen2)" +msgstr "`feature/agilex`(和 USD 树一样按 Gen1 / Gen2 分组)" + #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: b2cb839e4c2e4aa1a415aab0cc87f828 +#: 5c6d4f0d78c8459a9b2dae613d662933 msgid "Gen" msgstr "代" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: bff756e68d6544babdb90f47896354af +#: a9ea99584e054a4faf705aced5a6b523 msgid "Gen1" msgstr "Gen1" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: f3cea84bea044b1297feed6a5c038551 +#: 89e5cc808bc4451fa9ec3aaff9010675 msgid "`humanoid/FiveAges/Gen1/fiveages_w1_description`" msgstr "`humanoid/FiveAges/Gen1/fiveages_w1_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 0e808b9925094f3ebf2809ac8c557750 653668ec17574528bb870695dad2261e -#: 69c3323ef3bb45a8935578349ed6be51 832fe010e35e4ced997df756439f8085 -#: d820003211684ddf81af50b5b06fa254 +#: 07fb77237f5742928c89c28b9d14223f 3978d86195a643e6ab87276c3e5048b4 +#: 68b1d48747d747ea946c117f6799468d 7a48df18b24444f18bf79838549a3235 +#: e78134163ca14827a651715a322a3650 msgid "Gen2" msgstr "Gen2" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: a7fa4ca8c48f4904bdf4a3b308a5bccc +#: 8960a29a3bd7495e9e4d8a70c2333ea1 msgid "`humanoid/FiveAges/Gen2/fiveages_w2_description`" msgstr "`humanoid/FiveAges/Gen2/fiveages_w2_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 462210134ab14bb68a29291392ba55ff +#: 5bac6284f6cf4c47803fd824efd61872 msgid "`humanoid/FiveAges/Gen2/fiveages_w2r_description`" msgstr "`humanoid/FiveAges/Gen2/fiveages_w2r_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 45ff20e1b9a74d588b193ce319c5a7c1 +#: 4b215786d9904a13a3bfd1086af78451 msgid "`humanoid/FiveAges/Gen2/fiveages_s2_description`" msgstr "`humanoid/FiveAges/Gen2/fiveages_s2_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 90ae1b881fb348be9bbf4f0f37882d57 +#: 701e1795eecd4dd99a3e0b5bf0c823dc msgid "`humanoid/FiveAges/Gen2/fiveages_s2r_description`" msgstr "`humanoid/FiveAges/Gen2/fiveages_s2r_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: ce9117825b6042e385464387e971f574 +#: 5214d46a62f6490ca1778ca5683ea7a6 msgid "`fiveages_s2r_description`" msgstr "`fiveages_s2r_description`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: b9e70dfe24fd4664a2e9fa62190f71d7 +#: a603017fff784def9b7d922b6d099b2a msgid "[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description)" msgstr "[fa-s2r-description](https://github.com/fiveages-sim/fa-s2r-description)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 26d8f7c393a346c4afbf3aa0c78611a9 +#: f413b6053382454d965ca17ce75694f1 msgid "`humanoid/FiveAges/Gen2/fiveages_w2_common_description`" msgstr "`humanoid/FiveAges/Gen2/fiveages_w2_common_description`" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:71 -#: b999c7b28b4c43e59ae3cd83baacfaee +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:68 +#: 3507d91a3c4642538f9c3dca7b3e4ffe +msgid "" +"`feature/agilex` adds the Gen2 **W2R** and **S2R** gitlinks. Those " +"remotes stay private." +msgstr "`feature/agilex` 增加了 Gen2 的 **W2R** 和 **S2R** gitlink。这些远端仍是私有的。" + +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:70 +#: f809f0f428d3496fade7f06703631e3e msgid "" "After access to a private remote, init the path named in `.gitmodules` " "(or let `fa-deploy-ws` `./init_repo.sh` do it)." msgstr "开通私有远端后,按 `.gitmodules` 里的路径初始化(或交给 `fa-deploy-ws` 的 `./init_repo.sh`)。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:73 -#: 7656232fb2fe415e8fc6dc7c7c82c29a +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:72 +#: cc888688e169492ebdb94873b1701621 msgid "Isaac USD (`robot_usds`)" msgstr "Isaac USD(`robot_usds`)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:75 -#: 0ba351cb06e941d289d4453773808cc1 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:74 +#: 0a6d583ad3d2497483c803f595c8d8f4 msgid "" "[robot_usds](https://github.com/fiveages-sim/robot_usds) maps FiveAges " "assets under `humanoid/FiveAges/` as **Git submodules**. From that README" @@ -404,27 +457,27 @@ msgstr "" "README:" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 937a5b536f1842aa88de4ea595e903ce +#: c44d7a40f96448818bf23ac45fb4d67d msgid "Path (under `robot_usds` root)" msgstr "路径(相对 `robot_usds` 根)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 10e09b33e1744c6ab4689a8d6f3f1c2d +#: acfa3bcb93174ade9518f3752868cf2b msgid "Upstream" msgstr "上游" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: c672c595f30540bb9f12a924ab71febb +#: 488c5fb3e9724288aa06e63c647c4120 msgid "README names" msgstr "README 名称" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 11b74c927c6d4badacbe069348dc0909 +#: c66f51b74f9442d4984cc1e6896fb3dc msgid "`humanoid/FiveAges/Gen1`" msgstr "`humanoid/FiveAges/Gen1`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 6f424e7f6bb7479da146bcc1452d57e8 +#: bc87540db40c49a7ace9d968ebbe68e1 msgid "" "[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1" "-robot-usds)" @@ -433,17 +486,17 @@ msgstr "" "-robot-usds)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: eb2edd452dcf42a1b452ddeed921c96d +#: ea524d63b3014b3e86594df8e8f330a0 msgid "W1 / Gen1" msgstr "W1 / Gen1" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 5db76a11c63342a194f21c1da65d7320 +#: cefa78c0a6f8484f8a261fc88c32683d msgid "`humanoid/FiveAges/Gen2`" msgstr "`humanoid/FiveAges/Gen2`" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: a1880c9af872485d9cc3f8389c94638a +#: 65718b29ea7744d0b10ba2e624cbc176 msgid "" "[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" "-robot-usds)" @@ -452,26 +505,26 @@ msgstr "" "-robot-usds)" #: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:22 -#: 67a66275a48848fda87ef07a99633dfd +#: fd0dff1022c54b9195cfaed442dd26bb msgid "W2 / S2 / Gen2 (`W2/`, `S2/`, `components/`)" msgstr "W2 / S2 / Gen2(`W2/`、`S2/`、`components/`)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:83 -#: 957c575f168549bb95b1c9943f8fe53f +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:81 +#: 4e178ce939f348b4bb51e2eb54f572e9 msgid "Gen2 USD is **W2 and S2** only. It does **not** publish W2R or S2R." msgstr "Gen2 USD **只含 W2 与 S2**,**不**发布 W2R 或 S2R。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:85 -#: 46dfc584ea3c4af9ad1533afd1582a8d +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:83 +#: 31eaaa6c479241ed997bb93daabbea0f msgid "" "Checkout: standalone `git submodule update --init humanoid/FiveAges/Gen2`" " (and `…/Gen1`) as in the [robot_usds README](https://github.com" "/fiveages-sim/robot_usds/blob/main/README.md) §2.1, or FaSim-Isaac " -"**`./init.sh`** (operation that inits `robots/` via " -"`submodules_visibility.conf`), then **`./run.sh`**. FaSim’s visibility " -"file still marks the FiveAges Gen\\* trees `private`, so `./init.sh` does" -" not select them by default. See " -"[robot_usds](../simulation/3-robot_usds.md)." +"**`./init.sh`** (operation 1 inits `robots/` via " +"`submodules_visibility.conf`), then **`./run.sh`**. On FaSim-Isaac `main`" +" as checked on 2026-11-13, Gen1 and Gen2 are marked public, so operation " +"1 selects them by default. Gen3 stays private and still needs access. See" +" [robot_usds](../simulation/3-robot_usds.md)." msgstr "" "检出:按[robot_usds README](https://github.com/fiveages-" "sim/robot_usds/blob/main/README.md)§2.1 单独执行 `git submodule update --init" @@ -480,13 +533,13 @@ msgstr "" "的可见性文件仍把 FiveAges Gen\\* 树标成 `private`,因此 `./init.sh`默认不会勾选它们。见 " "[robot_usds](../simulation/3-robot_usds.md)。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:87 -#: 6909cac36acb4b97aad1e92716c11210 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:85 +#: 544a47576a554fc19e6c052dadce5672 msgid "Private: deploy" msgstr "私有:部署" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:89 -#: 19d492aedd324079b37c8c4a997f79e5 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:87 +#: 5c9c37ee601b4c84a5a36da48f9f11cf msgid "" "`fa-deploy-ws` is internal. Extra flags and robot IDs live in **that** " "README — not here. There is no public `open-deploy-ws` Gen1 or Gen2 " @@ -495,25 +548,25 @@ msgstr "" "`fa-deploy-ws`是内部工作区。额外参数和机器人 ID 在**那份** README 里 — 不在本页。没有公开的`open-" "deploy-ws`Gen1 或 Gen2 分支。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:91 -#: 8a1a339a65d743f6849cb5ba53c011f2 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:89 +#: 1fb09b34106a4ef2abf7a12e1a87ee9d msgid "After access:" msgstr "开通权限后:" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:93 -#: 16abee0dd55143b38926b56237ba945d +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:91 +#: 2e877175bd6d41d8932f1ccbe58eb60e msgid "Read the private package README for the checkout you have (not this page)." msgstr "读你已检出的那个私有包 README(不要以本页为准)。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:94 -#: 595659ceb4b743428de3a5c5704eae49 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:92 +#: 975ee9077429480ebaae3c8599ad32c8 msgid "" "In `fa-deploy-ws`, run **`./init_repo.sh`** (do not recursive-init). " "Extra flags live in that README." msgstr "在 `fa-deploy-ws` 里跑 **`./init_repo.sh`**(不要递归 init)。额外参数以那份 README 为准。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:95 -#: f97d84e3fc364ff386a53d633f8328aa +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:93 +#: eddf69506a114d31ad3f1a00202c6d5b msgid "" "`colcon build`, then `source install/setup.bash` in the launch terminal " "(or that repo’s official quick-start script if it has one)." @@ -521,8 +574,8 @@ msgstr "" "`colcon build`,然后在启动终端 `source install/setup.bash`(若该仓有官方 quick-start " "脚本则优先用脚本)。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:96 -#: 4defc5c27da2442794b81765f94544f2 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:94 +#: b4e096f152794fada18791c4bc4dc9ef msgid "" "EEF / `hardware:=` follow [robot_common_launch](2-common.md). There is no" " `gripper:=` and no `hardware:=mock`." @@ -530,8 +583,8 @@ msgstr "" "末端 / `hardware:=` 遵循 [robot_common_launch](2-common.md)。没有 " "`gripper:=`,也没有 `hardware:=mock`。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:98 -#: d4c39f267834403480e563c361da0006 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:96 +#: aa955553cd38415490552d9db5efcf0d msgid "" "Composer `--robot fiveages_w2` is a real key on [robot_action_composer " "ROS2_STACK.md](https://github.com/fiveages-" @@ -543,8 +596,8 @@ msgstr "" "sim/robot_action_composer/blob/main/docs/ROS2_STACK.md) 上的真实键。它不是文档里的 " "`./init_repo.sh --robot` 参数。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:100 -#: 7f390d6828764c42b238f576afde32fa +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:98 +#: cce7daff8edb4e738e6440467a3dd7e9 #, python-brace-format msgid "" "Copy an existing public `{robot}_description` only as a **layout hint** —" @@ -553,38 +606,38 @@ msgstr "" "公开 `{robot}_description` 只当**布局提示**来复制 — " "[添加机器人](../../2-how_to/6-deployment/10-add_a_robot.md)。" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:102 -#: a15251d3384c40fdb35f781a3401d084 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:100 +#: 71e176676e2948a5a943e357bf072f54 msgid "Related" msgstr "相关内容" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:104 -#: cb93a6d4d0b14c1ca741390ba92e9cf1 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:102 +#: cba250e510364af9bf38d1182c75a6ad msgid "[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/4-reference/descriptions/4-fiveages_umbrella.md:105 -#: d1de07d5a8354fe982239ec5802afe74 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:103 +#: 436f2f4a3ca94bb79e725ff3a6d2a70b msgid "[robot_usds](../simulation/3-robot_usds.md)" msgstr "[robot_usds](../simulation/3-robot_usds.md)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:106 -#: bcaef2a5518a4283b8fd5543bf319d52 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:104 +#: f6ad23b5a93d478a87e37c778da259fc msgid "[robot_common_launch](2-common.md)" msgstr "[robot_common_launch](2-common.md)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:107 -#: ab52237a16f0475c9536d2301dd754fe +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:105 +#: dece0292cbfe4290b4ed3262b4d957fd msgid "[Vendor arms](6-vendor_arms.md)" msgstr "[厂商机械臂](6-vendor_arms.md)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:108 -#: d2728737f8bd4db8aae8220e7fd3d486 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:106 +#: 48aa430702d944538586025974d9a5c4 msgid "[Add a Robot](../../2-how_to/6-deployment/10-add_a_robot.md)" msgstr "[添加机器人](../../2-how_to/6-deployment/10-add_a_robot.md)" -#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:109 -#: b5ea54a7c329478e8224818ad4ee19e3 +#: ../../source/4-reference/descriptions/4-fiveages_umbrella.md:107 +#: 8af5e5b087174b82bcb3b04f93c66f9f msgid "[WBC controller](../controllers/3-ocs2_wbc.md)" msgstr "[WBC 控制器](../controllers/3-ocs2_wbc.md)" @@ -864,60 +917,6 @@ msgstr "[WBC 控制器](../controllers/3-ocs2_wbc.md)" #~ msgid "`fa-s2r-description`" #~ msgstr "`fa-s2r-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" diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/0-index.po b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/0-index.po index 45c6aaf..9e651b1 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/0-index.po @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-09 11:09+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,210 +20,242 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/4-reference/simulation/0-index.md:1 -#: 46139283ff544254b399249045f43350 +#: efcf6b9bb6f1487da18429070e334517 msgid "Simulation Reference" msgstr "仿真参考" #: ../../source/4-reference/simulation/0-index.md:3 -#: ed62aac1e5394012afc6ca69c47df5fa -msgid "This section documents the simulation backends and USD assets." -msgstr "本节介绍仿真后端和 USD 资产。" +#: 50577259f6c64fd48ae6eaf0ffe12456 +msgid "" +"This section is the reference for the simulation backends and their USD " +"assets. It explains what each piece is, how the pieces fit, and which " +"parameters or layouts are in the current trees. Step-by-step start, " +"launch, and first checks live in the How-To pages." +msgstr "这一节是仿真后端和 USD 资产的参考:每块是什么、怎么拼在一起,以及当前树里的参数和布局。逐步启动、launch 和第一次检查写在 How-To 页面。" #: ../../source/4-reference/simulation/0-index.md:5 -#: 6ee14c7cd412418caf678bd3bceda1d8 -msgid "Overview" -msgstr "概述" - -#: ../../source/4-reference/simulation/0-index.md:7 -#: 9b14fdc4379848f78eff2c5411d1bd44 +#: 9ac12d5763ca4a998d6934bf0efc1857 msgid "" -"The stack supports multiple simulation backends. **FaSim** is Isaac Sim " -"high-fidelity simulation combined with the same ROS 2 运控 as the real " -"robot, so you get matching motion plus simulation ground truth." -msgstr "本栈支持多种仿真后端。**FaSim** 是 Isaac Sim 高保真仿真叠上与真机同一套 ROS 2 运控,因此运动对齐硬件,同时带有仿真真值。" +"**FaSim** is NVIDIA Isaac Sim plus the same ROS 2 运控 stack used on the " +"real robot, so motion can match hardware while the sim supplies ground " +"truth. FaSim-Isaac is more than a place to open a USD: it also installs " +"the OmniGraph extensions that start 运控 inside Sim and that drive a swerve" +" chassis." +msgstr "**FaSim** 是 NVIDIA Isaac Sim,再加上真机同一套 ROS 2 运控,所以运动可以跟硬件对齐,同时仿真还能给出真值。FaSim-Isaac 不只是用来打开一份 USD:它还会安装 OmniGraph 扩展,在 Sim 里启动运控,并驱动舵轮底盘。" -#: ../../source/4-reference/simulation/0-index.md -#: c4ae536fe75d492182a92bc441d52fac -msgid "Backend" -msgstr "后端" +#: ../../source/4-reference/simulation/0-index.md:7 +#: 3114c584722148739f7cd1992c16a86d +msgid "Isaac Sim reading order" +msgstr "Isaac Sim 阅读顺序" -#: ../../source/4-reference/simulation/0-index.md -#: c51fb3b3a8f44d64b737b40f27956833 -msgid "Use Case" -msgstr "使用场景" +#: ../../source/4-reference/simulation/0-index.md:9 +#: 8a4774766fba48f2a9d0febd47ad4bbb +msgid "" +"Use the pages in this order. Each one points at a specific section when " +"you need more detail; they do not repeat the full mechanism." +msgstr "按这个顺序读。需要细节时,各页会链到具体小节,而不是把整套机制再讲一遍。" -#: ../../source/4-reference/simulation/0-index.md -#: ../../source/4-reference/simulation/0-index.md:17 -#: 0571edcabb3a464da6505c7d1e81ec1b 2e42af58c58a46df9a6a4529ff2be665 -msgid "Mock" -msgstr "Mock" +#: ../../source/4-reference/simulation/0-index.md:11 +#: 8c91bb12d269422a95e638f5e8f7efef +msgid "" +"**Prepare the machine and start Sim** — [Isaac " +"Sim](../../2-how_to/2-simulation/4-isaac_sim.md): `./init.sh`, " +"`./run.sh`, and the first ROS 2 connection." +msgstr "**准备机器并启动 Sim** — [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md):`./init.sh`、`./run.sh`,以及第一次接入 ROS 2。" -#: ../../source/4-reference/simulation/0-index.md -#: cbce8541d1b0498fb6c0cac9a21ef168 -msgid "Fast testing, no physics (`hardware:=mock_components`)" -msgstr "快速测试、无物理(`hardware:=mock_components`)" +#: ../../source/4-reference/simulation/0-index.md:12 +#: ef248e24fda9425eb47d1f2d712b07e4 +msgid "" +"**Robot USD assets** — [robot_usds](3-robot_usds.md): the `robots/` tree," +" its git submodules, and public versus private checkout." +msgstr "**机器人 USD 资产** — [robot_usds](3-robot_usds.md):`robots/` 目录、其中的 git 子模块,以及公开与私有检出。" -#: ../../source/4-reference/simulation/0-index.md -#: 35353d6766ff4a9b9bfab59ec28a3fa5 -msgid "Gazebo Harmonic" -msgstr "Gazebo Harmonic" +#: ../../source/4-reference/simulation/0-index.md:13 +#: 1fac824389e24c6197fdf51bf3b741f5 +msgid "" +"**FaSim extensions** — [FaSim-Isaac](2-fasim_isaac.md): how the `isaac` /" +" `isaac_sim` hardware keys differ from the Kit extensions, then the [ROS " +"2 Control extension](2-fasim_isaac.md#ros-2-control-extension) and the [swerve" +" extension](2-fasim_isaac.md#swerve-extension)." +msgstr "**FaSim 扩展** — [FaSim-Isaac](2-fasim_isaac.md):`isaac` / `isaac_sim` 硬件键和 Kit 扩展有何不同,然后是 [ROS 2 Control 扩展](2-fasim_isaac.md#ros-2-control-extension) 和 [舵轮扩展](2-fasim_isaac.md#swerve-extension)。" + +#: ../../source/4-reference/simulation/0-index.md:14 +#: 3d9803df1b2a42c2af8ee053f5836cfe +msgid "" +"**Scenes and project layout** — [Environment assets](5-env_assets.md): " +"public scenes, ArtVIP / LabUtopia components, and private project USD " +"(including where `robot.yaml` currently lives)." +msgstr "**场景与项目布局** — [环境资产](5-env_assets.md):公开场景、ArtVIP / LabUtopia 组件,以及私有项目 USD(包括 `robot.yaml` 目前在哪)。" -#: ../../source/4-reference/simulation/0-index.md -#: da421af7ef4f4be08699117d503f4843 -msgid "Physics simulation" -msgstr "物理仿真" +#: ../../source/4-reference/simulation/0-index.md:15 +#: 6a8a27368e844cffaec5d205bcf7fcc0 +msgid "" +"**Run, check, and debug** — [When it " +"fails](../../2-how_to/2-simulation/4-isaac_sim.md#when-it-fails) on the " +"How-To page. Clock and TF details stay in [Clock](2-fasim_isaac.md#clock) and [TF](2-fasim_isaac.md#tf)." +msgstr "**运行、检查和排障** — How-To 页的 [出了问题](../../2-how_to/2-simulation/4-isaac_sim.md#when-it-fails)。时钟和 TF 的细节仍在 [时钟](2-fasim_isaac.md#clock) 和 [TF](2-fasim_isaac.md#tf)。" -#: ../../source/4-reference/simulation/0-index.md -#: dc2b09dab13046a39acd96bcd75fdbf0 -msgid "FaSim / Isaac Sim" -msgstr "FaSim / Isaac Sim" +#: ../../source/4-reference/simulation/0-index.md:17 +#: 800fb9353c1844a7b9d702099c6a8e5a +msgid "" +"Isaac Sim is the recommended backend. Gazebo remains available as an " +"alternative: [Gazebo](1-gazebo.md), with steps in [Gazebo " +"Simulation](../../2-how_to/2-simulation/3-gazebo_sim.md)." +msgstr "推荐使用 Isaac Sim。Gazebo 仍可作为备选:[Gazebo](1-gazebo.md),步骤见 [Gazebo 仿真](../../2-how_to/2-simulation/3-gazebo_sim.md)。" -#: ../../source/4-reference/simulation/0-index.md -#: 60f24c77bad34ed49275134ee076aa55 -msgid "High-fidelity USD; same 运控 as hardware + sim ground truth" -msgstr "高保真 USD;与真机同一套运控,并带仿真真值" +#: ../../source/4-reference/simulation/0-index.md:19 +#: 715fb438e8bf4fbf811ec6dfd1fd2088 +msgid "" +"Isaac **datagen** (USD → orchestration → LeRobot export, not Gazebo): " +"[Synthetic Data](../../2-how_to/7-synthetic_data/0-index.md)." +msgstr "" +"Isaac **数据采集**(USD → 编排 → LeRobot 导出,不含 " +"Gazebo):[合成数据](../../2-how_to/7-synthetic_data/0-index.md)。" -#: ../../source/4-reference/simulation/0-index.md:15 -#: f460cc1157db47df9d597a7dd828e0bd +#: ../../source/4-reference/simulation/0-index.md:21 +#: 92915c6d79404eddbc9823a4fff28866 msgid "In This Section" msgstr "本节内容" -#: ../../source/4-reference/simulation/0-index.md:27 -#: 456d6ebf0e6946fa9b733dba957c72ed +#: ../../source/4-reference/simulation/0-index.md:32 +#: d883319334c44bb69f7e35ecf7dda331 msgid "Quick Comparison" msgstr "快速对比" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 03cdd23f7f154bbe8b76dff24a4e5741 +#: ../../source/4-reference/simulation/0-index.md +msgid "" +"Isaac Sim is the recommended path. The table still lists Mock and Gazebo " +"so you can compare backends; it does not change what each one supports." +msgstr "推荐路径是 Isaac Sim。表中仍列出 Mock 和 Gazebo,方便对比各后端;这并不改变它们各自的支持范围。" + +#: ../../source/4-reference/simulation/0-index.md:23 +#: d5bb9f35442646e4adfa036a3c04a684 msgid "Aspect" msgstr "方面" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 4d1c4d06c335458e895e44946540bdab +#: ../../source/4-reference/simulation/0-index.md:23 +#: eb45bb8f72af4946b328792532b738ba +msgid "Mock" +msgstr "Mock" + +#: ../../source/4-reference/simulation/0-index.md:23 +#: f0123459df6d4f608e6825ac4801e998 msgid "Gazebo" msgstr "Gazebo" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 0d42a45c3fb741e296f78243ea7a819a +#: ../../source/4-reference/simulation/0-index.md:23 +#: e32739ded5d44d2fb9533583d569c36e msgid "Isaac" msgstr "Isaac" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 6d30a0b937c6430898a7ca839a2d4a66 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 227fbd5eb3444dd5ae7389772181a465 msgid "Physics" msgstr "物理" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 35d1a1054ebb4058b175af801d377b8e 80fda27f2d6641e1ab9b2d10a2895435 -#: 9007a9732f1048cdb5c3989310add8b0 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 3d181ba92f95488e9031870c60a62258 665046d12866408aa96755c63a7907cf +#: cee0f6f324f24104bb11d50fba124302 msgid "No" msgstr "否" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 3c0c253aebee421ba8625119f6cf975d +#: ../../source/4-reference/simulation/0-index.md:23 +#: 189d489207dd4bfdb135b1d0faf0f31a msgid "Yes" msgstr "是" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 5bc0f86dbb8142b48357e31b18a97870 -msgid "Yes (PhysX)" -msgstr "是(PhysX)" +#: ../../source/4-reference/simulation/0-index.md:23 +#: 06a729fb4d7a4256bea2a2ef62d81a43 +msgid "Yes (PhysX or Newton, chosen in `./run.sh`)" +msgstr "有(PhysX 或 Newton,在 `./run.sh` 里选)" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 013a107dd9274a7ca77d031743c4a57c +#: ../../source/4-reference/simulation/0-index.md:23 +#: e2b07df351f243dfa2cd9df3faa5f56f msgid "Rendering" msgstr "渲染" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 5eb6d72646524a50a62ef9d8688294a0 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 81a72aedc61d4df1b664caba51e145c4 msgid "RViz only" msgstr "仅 RViz" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 9521f6c3671844e1b21fbcb4f274e5cf +#: ../../source/4-reference/simulation/0-index.md:23 +#: d342da44252c4a47a8d97f619bdb4869 msgid "Basic" msgstr "基本用法" -#: ../../source/4-reference/simulation/0-index.md:17 -#: f23caf7fb72840879d756dedb264c3c1 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 7351e96afab64a08861a16e3c4f9e5b5 msgid "Photorealistic" msgstr "照片级真实感" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 2c3727779985404f81dc48b3b117df0a +#: ../../source/4-reference/simulation/0-index.md:23 +#: 0a0ffc8b10ca45ff9c6a9bd9b4c4b032 msgid "Setup" msgstr "设置" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 9227f2d6e088455588347588a8e1b3f8 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 005b59d799e84a2dbdb272eeabc5a2ba msgid "None" msgstr "无" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 20131eafa2194d0b865988f6ae8588ef +#: ../../source/4-reference/simulation/0-index.md:23 +#: 367e0b5cd3ae4cf5a3155f8bdafa898c msgid "`apt install`" msgstr "`apt install`" -#: ../../source/4-reference/simulation/0-index.md:17 -#: fca5f39dda874ad99e6107878b69aa8a +#: ../../source/4-reference/simulation/0-index.md:23 +#: 587e4198d05441c5b50f82603240d418 msgid "FaSim-Isaac `./init.sh` + `./run.sh`" msgstr "FaSim-Isaac `./init.sh` + `./run.sh`" -#: ../../source/4-reference/simulation/0-index.md:17 -#: c8f6157c11d64b8699ceb444220e233d +#: ../../source/4-reference/simulation/0-index.md:23 +#: d1f0c089eb0c4c60880d71c0d8de6868 msgid "Speed" msgstr "速度" -#: ../../source/4-reference/simulation/0-index.md:17 -#: ab5b6edbcde242cb99eb0766bba3d1f5 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 861f787dc68e4679adfd5730fd5f9f7f msgid "Real-time" msgstr "实时" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 0bfd19423d4d4472861fa6f85c6be7cd +#: ../../source/4-reference/simulation/0-index.md:23 +#: d0ff3c5348254b2c940a26e05f5e12f7 msgid "~Real-time" msgstr "接近实时" -#: ../../source/4-reference/simulation/0-index.md:17 -#: be485115729646218c30f377d11a3e94 +#: ../../source/4-reference/simulation/0-index.md:23 +#: 387083239f00499bb9b3010b8689e444 msgid "Configurable" msgstr "可配置" -#: ../../source/4-reference/simulation/0-index.md:17 -#: bf0f0d67a4bc4414ae616aba383b1750 +#: ../../source/4-reference/simulation/0-index.md:23 +#: ae8a1a795bf84f6aa2b339c6b26010ed msgid "USD support" msgstr "USD 支持" -#: ../../source/4-reference/simulation/0-index.md:17 -#: 8a2946eefb6e47e9a9a562ecca00b7bc +#: ../../source/4-reference/simulation/0-index.md:23 +#: c4136a1dac7341cd9f1e0c1f5c5d6225 msgid "Native" msgstr "原生" -#: ../../source/4-reference/simulation/0-index.md:37 -#: d5ba5d354d724057a34df67f44725a2b +#: ../../source/4-reference/simulation/0-index.md:42 +#: c498e34ae9fc413499e1bf0c6e4dca25 msgid "Isaac Sim Requirements" msgstr "Isaac Sim 要求" -#: ../../source/4-reference/simulation/0-index.md:40 -#: 543df65c4ca646ee929c10574b718bbf +#: ../../source/4-reference/simulation/0-index.md:45 +#: a7f38e80cb944a2586747288a9477cbb msgid "" "Isaac Sim integration uses **FaSim-Isaac** (`./init.sh`, `./run.sh`). " -"Default path is `ISAACSIM_DIR` (`~/isaacsim`); version comes from FaSim " -"config / the init menu. See [FaSim-Isaac](2-fasim_isaac.md)." +"Default path is `ISAACSIM_DIR` (`~/isaacsim`); the optional ROS 2 overlay" +" version comes from FaSim config / the init menu. See [FaSim-" +"Isaac](2-fasim_isaac.md)." msgstr "" "Isaac Sim 集成使用 **FaSim-Isaac**(`./init.sh`、`./run.sh`)。默认路径是 " "`ISAACSIM_DIR`(`~/isaacsim`);版本来自 FaSim 配置 / init 菜单。见 [FaSim-" "Isaac](2-fasim_isaac.md)。" -#: ../../source/4-reference/simulation/0-index.md:43 -#: 5087483c71024a5894e632cc15d566c9 -msgid "" -"Isaac **datagen** (USD → orchestration → LeRobot export, no Gazebo): " -"[Synthetic Data](../../2-how_to/7-synthetic_data/0-index.md)." -msgstr "" -"Isaac **数据采集**(USD → 编排 → LeRobot 导出,不含 " -"Gazebo):[合成数据](../../2-how_to/7-synthetic_data/0-index.md)。" - #~ msgid "Omniverse" #~ msgstr "Omniverse" @@ -247,3 +278,44 @@ msgstr "" #~ msgid "High-fidelity, USD assets" #~ msgstr "高保真,使用 USD 资产" +#~ msgid "This section documents the simulation backends and USD assets." +#~ msgstr "本节介绍仿真后端和 USD 资产。" + +#~ msgid "Overview" +#~ msgstr "概述" + +#~ msgid "" +#~ "The stack supports multiple simulation " +#~ "backends. **FaSim** is Isaac Sim " +#~ "high-fidelity simulation combined with the" +#~ " same ROS 2 运控 as the real " +#~ "robot, so you get matching motion " +#~ "plus simulation ground truth." +#~ msgstr "" +#~ "本栈支持多种仿真后端。**FaSim** 是 Isaac Sim 高保真仿真叠上与真机同一套" +#~ " ROS 2 运控,因此运动对齐硬件,同时带有仿真真值。" + +#~ msgid "Backend" +#~ msgstr "后端" + +#~ msgid "Use Case" +#~ msgstr "使用场景" + +#~ msgid "Fast testing, no physics (`hardware:=mock_components`)" +#~ msgstr "快速测试、无物理(`hardware:=mock_components`)" + +#~ msgid "Gazebo Harmonic" +#~ msgstr "Gazebo Harmonic" + +#~ msgid "Physics simulation" +#~ msgstr "物理仿真" + +#~ msgid "FaSim / Isaac Sim" +#~ msgstr "FaSim / Isaac Sim" + +#~ msgid "High-fidelity USD; same 运控 as hardware + sim ground truth" +#~ msgstr "高保真 USD;与真机同一套运控,并带仿真真值" + +#~ msgid "Yes (PhysX)" +#~ msgstr "是(PhysX)" + 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 cac2164..97968bd 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 @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,12 +20,49 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/4-reference/simulation/2-fasim_isaac.md:1 -#: 1b8c15a30373477ea795023b2bb5e3c4 +#: 5e563fa481f54b8096cf8f7f864647a4 msgid "FaSim-Isaac" msgstr "FaSim-Isaac" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:3 +#: eca74de4c03e4b6784dc0c4cc67723e6 +msgid "" +"FaSim-Isaac is the Isaac Sim workspace for this stack. It holds robot and" +" scene USD, can install an optional Isaac ROS 2 Jazzy overlay, and " +"installs two OmniGraph extensions: one starts 运控 inside Sim, and one " +"computes swerve (舵轮) commands for a chassis. It is not only a launcher " +"for opening a USD." +msgstr "" +"FaSim-Isaac 是 Isaac Sim 工作区:机器人和场景 USD、可选的 Isaac ROS 2 Jazzy 叠加,以及在 Sim " +"里启动运控的扩展。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:5 +#: 969385b269184abd95f59253ef6a9f7c +msgid "" +"Use the [Isaac Sim How-To](../../2-how_to/2-simulation/4-isaac_sim.md) to" +" install, start Sim, pick a launch, and run the first checks. This page " +"explains the hardware keys, the two Kit extensions, and why a joint " +"topic, a clock, or a TF edge behaves the way it does." +msgstr "安装、启动 Sim、选择 launch 和第一次检查,请看 [Isaac Sim 操作说明](../../2-how_to/2-simulation/4-isaac_sim.md)。本页说明硬件键、两个 Kit 扩展,以及关节话题、时钟或 TF 边为什么会是现在这样。" + #: ../../source/4-reference/simulation/2-fasim_isaac.md:7 -#: b474fb23f02b4df5a3c1a92b809c1007 +#: 7d0b00b451674b6389bf2645353c05d0 +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`). The swerve extension is also on `main`. 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:9 +#: df98c599037c4b2a9f328dc6cd02a487 msgid "" "**README:** [README.md](https://github.com/fiveages-sim/FaSim-" "Isaac/blob/main/README.md)" @@ -34,505 +70,1236 @@ msgstr "" "**README:** [README.md](https://github.com/fiveages-sim/FaSim-" "Isaac/blob/main/README.md)" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:11 -#: 8d699bec8c44401cb0b0f93ee0ff2848 -msgid "Two hardware interfaces" -msgstr "两种驱动层" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:13 +#: 87c1ba509dd249a984837f41854d8176 +msgid "Hardware keys `isaac` and `isaac_sim`" +msgstr "硬件键 `isaac` 和 `isaac_sim`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:15 +#: 7d444f061a2743d4a8477f62bb37c0db +msgid "" +"These keys are ros2_control hardware interfaces in the robot description " +"xacro. They are not the FaSim Kit extensions below, and they are not a " +"second robot body. One stage uses one of them." +msgstr "这两个键是机器人描述 xacro 里的 ros2_control 硬件接口。它们不是下面的 FaSim Kit 扩展,也不是第二台机器人。一个舞台只用其中一种。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:17 +#: b40ecb01267e4e289943838e45605173 +msgid "" +"`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." +msgstr "" +"一个舞台用下面两种之一。`isaac` 是你在 ROS 2 launch 上传的话题桥。`isaac_sim` 是 Play 启动进程内节点时在 " +"Isaac 里设置的。它不是 `demo.launch.py` 的参数,也不是第二台机器人。" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 1d77c77e359b4d1aae6732e0441e6dbb +#: 4e04dc593c8f40309dee3f6b3919f5c9 msgid "Key" msgstr "Key" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 77885d05f1c24db38ea553d420dd55f7 +#: 1d2ac75e93a24e4eb81369db344d1f2c msgid "Where it is set" msgstr "在哪里设置" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 0af94d818f4e4308a2c50d126ff260da +#: af1d7f4f883c4390baf356ee20a8da1f msgid "Plugin" msgstr "Plugin" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 93cc7d8594eb4fdd884cb1792fa43799 +#: a95e5eae2b6047b6b5b07a452cf96611 msgid "Joint I/O" msgstr "关节输入输出" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 34598c5539984420a1f5c5bb0f769f15 +#: 391f5f67b9174d319e721870204206fa msgid "`isaac`" msgstr "`isaac`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: e40713e04e2d45c7a9fc86472ca0672a +#: 4b13362ff5554f3796071622ea20aef7 msgid "`ros2 launch … hardware:=isaac`" msgstr "`ros2 launch … hardware:=isaac`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 0ba719aaa1254f588c1120cea8b58912 +#: baa67527924644b79dc61d7ee126bce9 msgid "`topic_based_ros2_control/TopicBasedSystem`" msgstr "`topic_based_ros2_control/TopicBasedSystem`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 5ef9e83268d647a1949859c058098d87 +#: 70616daecd04441d97e048b987de479d msgid "`sensor_msgs/JointState` topics" msgstr "`sensor_msgs/JointState` 话题" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 181c59ba65204edd98ca66a5d46984a9 +#: fd3996722cd84ae898c134b236c223a4 msgid "`isaac_sim`" msgstr "`isaac_sim`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 3f44cad103ed402f9101fcd67813bda2 +#: 62bf3c2d18ea4c488372190e8566ddab +msgid "`emit_control` inside `ROS2ControlLaunch`" +msgstr "`ROS2ControlLaunch` 内部的 `emit_control`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: fbe66a605f36400daeda19dde8525b98 msgid "`isaacsim_ros2_control/IsaacSimSystem`" msgstr "`isaacsim_ros2_control/IsaacSimSystem`" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 8cd40c7389b848ad9785a4373767cc43 +msgid "The articulation in the Isaac process" +msgstr "Isaac 进程里的关节体" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:24 +#: 38af1a52bfca4a31b70a4b8b9b469309 +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:26 +#: 2df22190583c409e9ba64719e1d9ae74 +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:28 +#: 9320e4f63e1245bb9348d9d727854c64 +#, 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:30 -#: 1d63cc7f177c4f2ba721c98bf969edcb -msgid "In-process launch" -msgstr "进程内启动" +#: b3d5f48bcd9d4012b6e927cff84ac37f +msgid "Topic names follow the robot" +msgstr "话题名跟这台机器人走" #: ../../source/4-reference/simulation/2-fasim_isaac.md:32 -#: f96198b7829b4884982bffd860418eaa +#: 72ec23552553434b9f1d17c2ed8d0415 +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:34 +#: 00e57d77260948b98c3625c7e6da0ffe +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:38 +#: 2a251c5cf41b4e94beb2e46098925060 +msgid "FaSim Kit extensions" +msgstr "FaSim Kit 扩展" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:40 +#: b5af3f0e65d7481aaf531ca96a1b72fa msgid "" +"`./init.sh` operation 5 installs two extensions into this Isaac " +"(`ISAACSIM_DIR`, default `~/isaacsim`). The script symlinks `exts/`" +" into `extsUser/` and adds the extension to the full, Newton, and " +"streaming kit files. Reinstall Isaac, then run operation 5 again. Restart" +" a running Isaac so the extensions load." +msgstr "`./init.sh` 操作 5 把两个扩展装进这套 Isaac(`ISAACSIM_DIR`,默认 `~/isaacsim`)。脚本把 `exts/` 链到 `extsUser/`,并写入 full、Newton 和 streaming 的 kit 文件。重装 Isaac 后要再跑一次操作 5。正在运行的 Isaac 要重启后扩展才会加载。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:42 +#: 84ddcafa0a8448b3aa068a58dc93ff96 +msgid "" +"The two extensions have different entry points. Do not treat a " +"`SwerveController` graph as a ros2_control hardware key, and do not treat" +" `ROS2ControlLaunch` as `hardware:=isaac`." +msgstr "这两个扩展的入口不同。不要把 `SwerveController` 图当成 ros2_control 硬件键,也不要把 `ROS2ControlLaunch` 当成 `hardware:=isaac`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 8f46483fc7cb4db2a4d03d0da20068d2 +msgid "Extension" +msgstr "扩展" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 8591edf445d04903ac94588bd53a7622 +msgid "OmniGraph nodes" +msgstr "OmniGraph 节点" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 00fdeb994df044adb090cf895ac71820 +msgid "What it is for" +msgstr "用途" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: fb62556363af4b19aab54118664f496d +msgid "`exts/fasim.ros2.nodes`" +msgstr "`exts/fasim.ros2.nodes`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 8488da5572ac4ca1b1f4c654e0a7fe90 +msgid "`ROS2ControlLaunch`, `NavigationLaunch`" +msgstr "`ROS2ControlLaunch`、`NavigationLaunch`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 4fbffe1b1419468288a33a874e8beae2 +msgid "" +"Start the in-process controller manager (`hardware=isaac_sim`) and, " +"optionally, host Nav2" +msgstr "在进程内拉起控制器管理器(`hardware=isaac_sim`),并可以在主机上启动 Nav2" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: a8ee943845bc45c29e8681695dfeb946 +msgid "`exts/fasim.steering.nodes`" +msgstr "`exts/fasim.steering.nodes`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: d43377bdc96b49588eddf52a9e15c8bf +msgid "`SwerveController`" +msgstr "`SwerveController`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: c5096278556f4dac94124baf7989c74b +msgid "" +"Turn a planar twist into steer-position and wheel-velocity commands for a" +" four-wheel swerve chassis" +msgstr "把平面速度旋量换成四轮舵轮底盘的转向位置指令和轮速指令" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:51 +#: d27f8bddeac74aeaa5799971a50da2be +msgid "ROS 2 Control extension" +msgstr "ROS 2 Control 扩展" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:53 +#: 10c024494a6f4f4da5e4eb8728e1547b +msgid "" +"`fasim.ros2.nodes` is the in-process 运控 entry. After Play, " "`OgnROS2ControlLaunch` ([`OgnROS2ControlLaunch.ogn`](https://github.com" "/fiveages-sim/FaSim-" "Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn))" -" runs once after Play:" -msgstr "" -"`OgnROS2ControlLaunch`([`OgnROS2ControlLaunch.ogn`](https://github.com" -"/fiveages-sim/FaSim-" -"Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn))在播放后运行一次:" +" runs once and calls `emit_control`. That path sets `hardware=isaac_sim`," +" passes the ArticulationRoot as `isaac_prim_path`, and starts Isaac’s " +"ControllerManager in the same process. Examples on this path include G1D," +" G1, and W2. 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)." +msgstr "`fasim.ros2.nodes` 是进程内运控的入口。Play 之后,`OgnROS2ControlLaunch`([`OgnROS2ControlLaunch.ogn`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn))运行一次并调用 `emit_control`。这条路径会设置 `hardware=isaac_sim`,把 ArticulationRoot 作为 `isaac_prim_path` 传入,并在同一进程里启动 Isaac 的 ControllerManager。走这条路径的例子包括 G1D、G1 和 W2。W2 的进程内 payload 是 [`W2/payloads/ROS/fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-usds/blob/main/W2/payloads/ROS/fiveages.usda)。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:55 +#: aa6e0bacb47742cabe5e4d80abbd5ad4 +msgid "" +"This is not the topic-bridge path. A stage that only uses " +"`hardware:=isaac` does not go through this node." +msgstr "这不是话题桥路径。只使用 `hardware:=isaac` 的舞台不会经过这个节点。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:57 +#: 6791346df3e147ca9e4410ecb457cadb +msgid "`ROS2ControlLaunch` inputs" +msgstr "`ROS2ControlLaunch` 输入" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 43c23fc9ac664f8185bacd06a392a893 +#: 524bfc867bf84ca785eba618d51ce5bd msgid "Input" msgstr "Input" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 5ddb04895cbd4c6dba9ca62e0ef52a55 +#: 47d30ec0fa00456aa7cfc8fa856d5783 msgid "Role" msgstr "Role" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: f542dd2702a34460a346642d59190363 +#: 575c003b8aae4cdbb65172a5af68b88b msgid "`targetPrim`" msgstr "`targetPrim`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 66109e32640741ab8fd4d76e48769350 -msgid "One ArticulationRoot" -msgstr "一个 ArticulationRoot" +#: 4e35d1b8f2d0433aa6c6dc2338a2a794 +msgid "One ArticulationRoot, or a parent that contains exactly one" +msgstr "一个 ArticulationRoot,或恰好只包含一个 ArticulationRoot 的父级" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: c9e9c68bb49440f4adbdb3b882f90492 +#: dc1988eb14284fbabe9375474e3ca197 msgid "`robot`" msgstr "`robot`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 041f4826fd1f46129a275299ad3bfb90 +#: 02e9c302a6154e6f960d06ab27de894d msgid "" "Description stem (`unitree_g1d`, `fiveages_w2`). Empty reads the USD " "`Robot` variant" msgstr "描述包词干(`unitree_g1d`、`fiveages_w2`)。为空时读取 USD 的 `Robot` 变体" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 5cb874b7b8964e20933629b37c8b3907 +#: 8a32969fc56f49d39313db39ff7e34d5 msgid "`mode`" msgstr "`mode`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: bb1433c72352465086697549f725eb2b +#: 50e90aa844644650814f8b0e253c545a msgid "`demo`, `split_body`, or `full_body`" msgstr "`demo`、`split_body` 或 `full_body`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: f08ee7865b5d4f109e922b3760c56fed +#: 11ef5d12e10b496db4576e6536a8654b msgid "`type`" msgstr "`type`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 26ba73619cc7440592f129e6ef0adda2 +#: 8f5f90877f0a40c6b23dcaf9d7637b9f msgid "" "`robot_common_launch` end-effector key. Empty reads EE variants on the " "stage" msgstr "`robot_common_launch` 的末端键。为空时读取舞台上的末端变体" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 2fbaf623c57e4648ad43257c561588b0 +#: 505c6695542b45c1a1a8999e7d291cbf msgid "`namespace`" msgstr "`namespace`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 0b5e1cfce84c417a93e7c3efc452424d +#: b0f6bd2ae56f47f196776bc5cb34d5f8 msgid "Controller manager namespace. Empty is the global `/controller_manager`" msgstr "控制器管理器命名空间。为空则是全局 `/controller_manager`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 8ef60cde06694978bd0b8ea900d77a29 +#: d429ddb25db6428fb7f04f1be2e7b3ca msgid "`infoFile`" msgstr "`infoFile`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 4db9f93758e844da8acdc7bf6ff3661d +#: 292c5561f2034d54a92ea75bc2639d1a msgid "OCS2 `.info` basename. Empty keeps the description default" msgstr "OCS2 `.info` 的文件名。为空则保留描述包默认值" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: aeb0a78359494bc9b77b8726b04916a7 +#: 5940651752094ca28cd4647450ae1f2b msgid "`useSimTime`" msgstr "`useSimTime`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: c15e8184d7d940e0be49ae73a6fdf73a +#: 58eaad887f0845938581cedb3580d362 msgid "Forced true for `isaac_sim` (needs `/clock`)" msgstr "对 `isaac_sim` 强制为 true(需要 `/clock`)" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: f4a77cdc9175454bb0059af1ff913e3a +#: 029da3c8819e426d9dd2c4f75157487e msgid "`publishRobotDescription`" msgstr "`publishRobotDescription`" #: ../../source/4-reference/simulation/2-fasim_isaac.md -#: 37096dc40e7d4bf2a5fddb83f22463d3 +#: 367a9912346a41b69a937763361ce428 msgid "Latch the same xacro on `/robot_description` (default true)" msgstr "把同一份 xacro 锁存到 `/robot_description`(默认 true)" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:49 -#: 9655b69ace2d45f48d8fb4c970b7221d -msgid "CppAD cache" -msgstr "CppAD 缓存" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 5c5450d99b6a4cd387d75ac10c6f94ea f85cecd5b85344ba8efa6547843defef +msgid "`profile`" +msgstr "`infoFile`" -#: ../../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 +#: 052e4091752041199b680bee6cc1214a +msgid "Optional robot profile YAML path" +msgstr "可选的机器人 profile YAML 路径" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:65 -#: 063e6171adf4462d8c2a8fb2f8d66a14 -msgid "Clock" -msgstr "Clock" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 722f872f45504a6c89838814f83355db +msgid "`enableGripper`" +msgstr "`enableGripper`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:67 -#: 4526e9455929483cbb7d749ecac6bdec -msgid "" -"In-process W2 publishes `/clock` from a separate on-demand graph " -"`ROS_Clock`: `evaluationMode=OnDemand`, " -"`pipelineStage=pipelineStageOnDemand`, `OnPhysicsStep` → `PublishClock`, " -"`IsaacReadSimulationTime` with `resetOnStop=1` " -"([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-" -"usds/blob/main/W2/payloads/ROS/fiveages.usda)). `OnPhysicsStep` does not " -"run in the automatic `ROS_Control` graph, so the clock graph stays beside" -" it. `ROS_Control` still uses `OnPlaybackTick` to start " -"`ROS2ControlLaunch` once." -msgstr "" -"进程内的 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` 不会在自动的 " -"`ROS_Control` 图里跑,所以时钟图放在旁边。`ROS_Control` 仍用 `OnPlaybackTick` 把 " -"`ROS2ControlLaunch` 启动一次。" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 17eae607129944b6aba280f63b7ce77a +msgid "Same as `robot_common_launch` `enable_gripper`" +msgstr "与 `robot_common_launch` 的 `enable_gripper` 相同" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:69 -#: 26c46ee9a5b14eecbe36a9437efa7c9b -msgid "" -"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`." -msgstr "" -"同一台机器人的话题桥载荷([`ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2" -"-robot-usds/blob/main/W2/payloads/ROS/ros2.usda))仍从 `OnPlaybackTick` 驱动 " -"`PublishClock`,并把 `resetOnStop` 设为 0。" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: e9cf144de84641bba46b9473ccecc5e0 +msgid "`rosSetup`" +msgstr "`rosSetup`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:73 -#: aae16aa6d37c41da96b19915fe94f62c +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: cbfb72eaf056462b80f49f1ec3451d50 msgid "" -"`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." -msgstr "节点若拉起 `arms_target_manager`,它是宿主机进程,`use_sim_time:=false`,标记不跟物理步绑定。" +"Path to `install/setup.bash`. Empty: first non-`/opt/ros` install on " +"`AMENT_PREFIX_PATH`" +msgstr "`install/setup.bash` 的路径。留空时取 `AMENT_PREFIX_PATH` 里第一个不是 `/opt/ros` 的 install" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:75 -#: 8a62d92fd7cb434db4d12b6e4c1e6aa4 -msgid "TF" -msgstr "TF" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: acea3f3dcfe44d4ca18da530adc073a6 +msgid "`enableArmsTargetManager`" +msgstr "`enableArmsTargetManager`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:77 -#: 533ddb7744d947f199c52ba1570bb180 -msgid "" -"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`." -msgstr "" -"Isaac 的里程计图发布 `world → odom → base_*` 和 `/odom`。它不发布整棵 URDF " -"树。`robot_state_publisher` 发布 `base_footprint → " -"base_link`(两个连杆都存在时)以及手臂树,包括 `right_eef` 这类固定帧。" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 3fa1216853504d198f7a445df327c0c4 +msgid "Spawn `arms_target_manager` as a host process (default true)" +msgstr "把 `arms_target_manager` 作为主机进程拉起(默认 true)" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:81 -#: 2bb160eb89c84d6b929a1e0475b165bf -msgid "Several robots" -msgstr "多台机器人" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 9caf8c42e7b34da2a408c0a41c3b04e9 +msgid "`arms`" +msgstr "`arms`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:83 -#: b8c60e01ed564a5ea38ddd2a57efad24 +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 2a6b269404ed49b685afbcf5cccfad23 +msgid "`robot_common_launch` arms xacro key. Empty keeps the description default" +msgstr "OCS2 `.info` 的文件名。为空则保留描述包默认值" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:75 +#: d93143e748484bb7ac4bacd02be8b121 msgid "" -"One ArticulationRoot, one `ROS2ControlLaunch`, and one controller manager" -" per robot. Isolation is the graph `namespace` plus relative topic names " -"(`cmd_vel`, `fsm_command`, `robot_description`). `/clock` stays global." +"`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 "" -"每台机器人一个 ArticulationRoot、一个 `ROS2ControlLaunch`、一个控制器管理器。隔离靠图的 " -"`namespace` 加上相对话题名(`cmd_vel`、`fsm_command`、`robot_description`)。`/clock`" -" 保持全局。" +"`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:85 -#: 53907df20ae048f297f6b7175308625d +#: ../../source/4-reference/simulation/2-fasim_isaac.md:77 +#: e0940c7fc3c740f3b39f7810f34ef886 msgid "" -"A ROS namespace remaps topics (`//tf`, `//tf_static`). It does " -"not prefix `frame_id`. Each tree still has frames named `world`, `odom`, " -"and `base_link`. `world → odom` is that robot’s latched spawn pose on " -"**its** `//tf`, not a rewritten frame called `g1d/world`. RViz " -"listens to `/tf` unless you remap it, for example:" -msgstr "" -"ROS 命名空间会重映射话题(`//tf`、`//tf_static`)。它不会给 `frame_id` " -"加前缀。每棵树里的帧名仍是 `world`、`odom` 和 `base_link`。`world → odom` 是这台机器人在**自己的** " -"`//tf` 上锁存的出生位姿,不是改名为 `g1d/world` 的帧。RViz 默认听 `/tf`,需要时再重映射,例如:" +"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:87 -#: 84e77eda599f4430905ff8d19a331225 -msgid "" -"ros2 run tf2_ros tf2_echo world base_link --ros-args \\\n" -" -r /tf:=//tf -r /tf_static:=//tf_static" -msgstr "" -"ros2 run tf2_ros tf2_echo world base_link --ros-args \\\n" -" -r /tf:=//tf -r /tf_static:=//tf_static" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:79 +#: 6eb8c090c95a46f0a02ca6177a5cc297 +msgid "CppAD cache" +msgstr "CppAD 缓存" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:92 -#: dac62aef54504ab493c799b5af25a41e +#: ../../source/4-reference/simulation/2-fasim_isaac.md:81 +#: 23194477795d414c8432ed894cbbb31b +#, python-brace-format msgid "" -"`` is the string on that graph’s `namespace` input, not a " -"`demo.launch.py` argument. A stage with one graph and one controller " -"manager per robot has been run." +"`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 "" -"`` 是该图 `namespace` 输入上的字符串,不是 `demo.launch.py` " -"的参数。一个舞台、每台机器人一张图和一个控制器管理器,已经跑通过。" - -#: ../../source/4-reference/simulation/2-fasim_isaac.md:94 -#: 6807b08c51f541f49911861f82c3b9f6 -msgid "Navigation" -msgstr "Navigation" +"`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:96 -#: 9c82e9c7d7e440bea3494c5ed8f87695 +#: ../../source/4-reference/simulation/2-fasim_isaac.md:83 +#: e6e162b0315843dabcb88169f2cbd636 msgid "" -"`NavigationLaunch` ([`OgnNavigationLaunch.ogn`](https://github.com" -"/fiveages-sim/FaSim-" -"Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnNavigationLaunch.ogn))" -" starts `ros2 launch robot_common_launch navigation_isaac_gt.launch.py` " -"on Play when `enabled` is true. W2’s fiveages graph leaves `enabled` " -"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." msgstr "" -"`NavigationLaunch`([`OgnNavigationLaunch.ogn`](https://github.com" -"/fiveages-sim/FaSim-" -"Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnNavigationLaunch.ogn))在" -" `enabled` 为 true 时,于播放后启动 `ros2 launch robot_common_launch " -"navigation_isaac_gt.launch.py`。W2 的 fiveages 图把 `enabled` 留为 false。" +"在进程内这条路径上,`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:98 -#: b763c8cbe549495aa49268d9b0f2b6df +#: ../../source/4-reference/simulation/2-fasim_isaac.md:85 +#: c58ffa2498944925ad9562d0540035e6 msgid "" -"`map` and `paramsFile` are paths relative to the opened stage root, so an" -" `env/` layer can point at `../../maps//map.yaml` stored in the " -"same [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) " -"project. The node does not call composer `ros2-stack`. Default " -"`nav2Profile` is `map_only`. `publishMapWorldTf` defaults true (map drawn" -" in USD world). `publishMapOdomTf` defaults false because odometry comes " -"from Isaac." -msgstr "" -"`map` 和 `paramsFile` 相对已打开的舞台根解析,因此 `env/` 层可以指向同一 [fa-project-" -"usd](https://github.com/fiveages-sim/fa-project-usd) 项目里的 " -"`../../maps//map.yaml`。该节点不调用编排器的 `ros2-stack`。默认 `nav2Profile` 是 " -"`map_only`。`publishMapWorldTf` 默认 true(地图画在 USD 世界里)。`publishMapOdomTf` " -"默认 false,因为里程计来自 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." +msgstr "仿真机器人在 Isaac 里跑运控时,启动更快有两个原因:节点复用描述 xacro,并且复用这份 CppAD 缓存。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:100 -#: b4fa312c38d142b7a3bc918d6306482b -msgid "Project scenes" -msgstr "项目场景" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:87 +#: d5930563f2334e75a59a17bba900cf24 +msgid "`infoFile` and `BASE_LOCK`" +msgstr "`infoFile` 与 `BASE_LOCK`" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:106 -#: 77cf179e888945fea11685a88ccb0db4 -msgid "Layout" -msgstr "Layout" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:89 +#: 87b4fd93182443beb19d912aa3c75392 +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:108 -#: d1c4aafe82e44df08b4fae8ac39e827a +#: ../../source/4-reference/simulation/2-fasim_isaac.md:91 +#: 636757671d4748e2b0eb3ff390e52fc5 msgid "" -"FaSim-Isaac/\n" -"├── init.sh\n" -"├── run.sh\n" -"├── run_headless.sh\n" -"├── config/ # fa_sim.conf + optional " -"fa_sim.local.conf\n" -"├── exts/fasim.ros2.nodes/ # ROS2ControlLaunch, NavigationLaunch" -"\n" -"├── exts/fasim.steering.nodes/ # swerve graph node\n" -"├── tools/audit_mimic_joint_drives.py\n" -"├── robots/ # → robot_usds\n" -"└── environment/\n" -" ├── fiveages_env/\n" -" ├── fa-project-usd/ # private\n" -" ├── artvip-usd/\n" -" └── labutopia-usd/" +"`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 "" -"FaSim-Isaac/\n" -"├── init.sh\n" -"├── run.sh\n" -"├── run_headless.sh\n" -"├── config/ # fa_sim.conf + optional " -"fa_sim.local.conf\n" -"├── exts/fasim.ros2.nodes/ # ROS2ControlLaunch, NavigationLaunch" -"\n" -"├── exts/fasim.steering.nodes/ # swerve graph node\n" -"├── tools/audit_mimic_joint_drives.py\n" -"├── robots/ # → robot_usds\n" -"└── environment/\n" -" ├── fiveages_env/\n" -" ├── fa-project-usd/ # private\n" -" ├── artvip-usd/\n" -" └── labutopia-usd/" +"`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:125 -#: 97eb48423c954e11b6e41bd34339c742 +#: ../../source/4-reference/simulation/2-fasim_isaac.md:93 +#: fbeaf3f339bb4c00ad1e45f8bc4f55de msgid "" -"Submodule URLs: [`.gitmodules`](https://github.com/fiveages-sim/FaSim-" -"Isaac/blob/main/.gitmodules). Visibility: `submodules_visibility.conf`." +"`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. You can run the controller from the " +"deb without that private source checkout." msgstr "" -"子模块地址:[`.gitmodules`](https://github.com/fiveages-sim/FaSim-" -"Isaac/blob/main/.gitmodules)。可见性:`submodules_visibility.conf`。" +"`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:127 -#: 35b26ed0cd4a4ae4b21d9744b0e71a4b -msgid "Mimic joints" -msgstr "mimic 关节" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:95 +#: 49d25293272c4a63936d33224fae5a98 +msgid "Add a robot to the in-process path" +msgstr "把一台机器人接到进程内路径" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:129 -#: 531ab7c8c7ce4aa79e33ee93c46facee +#: ../../source/4-reference/simulation/2-fasim_isaac.md:97 +#: 6d2d5bdf30cc46a2a7cf273636583f39 +#, python-brace-format msgid "" -"`tools/audit_mimic_joint_drives.py` reports mimic joints that have no " -"drive. Assets that already use `PhysxMimicJointAPI` or `NewtonMimicAPI` " -"should not gain a second drive: the solver already enforces the mimic, " -"and a drive at `targetPosition=0` fights it. `--apply` is for a mimic " -"that has neither PhysX nor Newton mimic API." -msgstr "" -"`tools/audit_mimic_joint_drives.py` 报告没有驱动的 mimic 关节。已经使用 " -"`PhysxMimicJointAPI` 或 `NewtonMimicAPI` 的资产不要再加第二套驱动:求解器已经在执行 " -"mimic,`targetPosition=0` 的驱动会和它对着干。`--apply` 用于既没有 PhysX 也没有 Newton mimic" -" API 的关节。" +"The `{robot}_description` xacro includes `simulation_hardware_plugin` for" +" `isaac_sim`, or lists `isaac_sim` in `validated_hardware_type` if that " +"robot uses a whitelist." +msgstr "`{robot}_description` 的 xacro 为 `isaac_sim` 包含 `simulation_hardware_plugin`;如果该机用了白名单,还要把 `isaac_sim` 写进 `validated_hardware_type`。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:131 -#: 1c4b38ba1e3b4d9cbc5e44fdf73df4da -msgid "Related" -msgstr "相关内容" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:98 +#: f64003369ffa4acf9ac03b0d8767065b +msgid "" +"The USD has one ArticulationRoot and a payload that contains " +"`ROS2ControlLaunch`. Set `targetPrim`, `robot` or the `Robot` variant, " +"and `mode`." +msgstr "USD 里有一个 ArticulationRoot,以及包含 `ROS2ControlLaunch` 的 payload。设置 `targetPrim`、`robot` 或 `Robot` 变体,以及 `mode`。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:133 -#: a037e134ea7f4c1f9d5547bde37f3e88 -msgid "[Isaac Sim how-to](../../2-how_to/2-simulation/4-isaac_sim.md)" -msgstr "[Isaac Sim how-to](../../2-how_to/2-simulation/4-isaac_sim.md)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:99 +#: 3f1e37fe34784c8ea1909b8e60e09055 +msgid "" +"Operation 5 is installed and Isaac was restarted. The ROS variant on the " +"stage is the in-process payload, not the topic-bridge payload." +msgstr "已完成操作 5,并且重启过 Isaac。舞台上的 `ROS` 变体是进程内 payload,不是话题桥 payload。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:134 -#: 47ddc2fd746a4c2c8833c6809531bbfa -msgid "[topic_based_ros2_control](../hardware/1-topic_based.md)" -msgstr "[topic_based_ros2_control](../hardware/1-topic_based.md)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:100 +#: 9e1fb9bd5a1742c5970ace8182ee82a2 +msgid "" +"Press Play, then check as in the [How-" +"To](../../2-how_to/2-simulation/4-isaac_sim.md#in-process-hardware-" +"interface-isaac_sim)." +msgstr "按 Play,然后按 [How-To](../../2-how_to/2-simulation/4-isaac_sim.md#in-process-hardware-interface-isaac_sim) 检查。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:135 -#: 06eec2443aec44ae8c20576f7dc1956a -msgid "[robot_common_launch](../descriptions/2-common.md)" -msgstr "[robot_common_launch](../descriptions/2-common.md)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:102 +#: ../../source/4-reference/simulation/2-fasim_isaac.md:143 +#: 0f78cfd1cad14d06898385680482c353 241daa096a4f46259d5a155e48f094b2 +msgid "What you should see" +msgstr "你应该看到什么" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:136 -#: 8633157b6f804e90872fa1b0c679e653 -msgid "[lerobot_ros2](../python_apps/4-lerobot_ros2.md)" -msgstr "[lerobot_ros2](../python_apps/4-lerobot_ros2.md)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:104 +#: c5c45f45519743e8aee3294140cb93db +msgid "" +"`ros2 control list_controllers` lists the controllers for that `mode`. " +"`/joint_states` is the controller’s `joint_state_broadcaster`, not the " +"topic-bridge `/isaac/joint_*` pair. `/clock` ticks near the physics rate " +"(see [Clock](#clock)). A command moves the articulation in the " +"viewport. Arm degrees of freedom are not also bridged on " +"`/isaac/joint_command`." +msgstr "`ros2 control list_controllers` 会列出该 `mode` 下的控制器。这里的 `/joint_states` 来自控制器的 `joint_state_broadcaster`,不是话题桥的 `/isaac/joint_*`。`/clock` 的频率应接近物理步(见 [时钟](#clock))。一条指令能在视口里带动 articulation。手臂自由度不会再走 `/isaac/joint_command` 桥接。" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:137 -#: baa33fbbe8494b09ab7e449757fd39dc -msgid "[Environment assets](5-env_assets.md)" -msgstr "[Environment assets](5-env_assets.md)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:108 +#: 902523f3bdc2499ea3251b20040464bf +msgid "Swerve extension" +msgstr "舵轮扩展" -#~ msgid "" -#~ "FaSim-Isaac/\n" -#~ "├── robots/ # → robot_usds submodule\n" -#~ "├── environment/\n" -#~ "│ ├── fiveages_env/ # → fiveages-env-usds\n" -#~ "│ └── fa-project-usd/ # → fa-project-usd (private)\n" -#~ "├── jazzy_ws/ # Optional ROS 2 workspace\n" -#~ "├── init.sh\n" -#~ "└── run.sh\n" -#~ msgstr "" -#~ "FaSim-Isaac/\n" -#~ "├── robots/ # → robot_usds submodule\n" -#~ "├── environment/\n" -#~ "│ ├── fiveages_env/ # → fiveages-env-usds\n" -#~ "│ └── fa-project-usd/ # → fa-project-usd (private)\n" -#~ "├── jazzy_ws/ # Optional ROS 2 workspace\n" -#~ "├── init.sh\n" -#~ "└── run.sh\n" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:110 +#: 2da0e7befbf44989aa2ea9e10847021b +msgid "" +"`fasim.steering.nodes` provides `fasim.steering.nodes.SwerveController` " +"([`OgnSwerveController.ogn`](https://github.com/fiveages-sim/FaSim-" +"Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/ogn/python/nodes/OgnSwerveController.ogn)," +" kinematics in [`swerve.py`](https://github.com/fiveages-sim/FaSim-" +"Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/swerve.py))." +" It is an OmniGraph node, not a ros2_control hardware interface. A " +"ScriptNode used to hold the same kinematics in module globals, which made" +" Isaac disable every Action Graph until the user opted in. This node " +"keeps state on the instance instead." +msgstr "`fasim.steering.nodes` 提供 `fasim.steering.nodes.SwerveController`([`OgnSwerveController.ogn`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/ogn/python/nodes/OgnSwerveController.ogn),运动学在 [`swerve.py`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/swerve.py))。它是 OmniGraph 节点,不是 ros2_control 硬件接口。以前用 ScriptNode 把同一套运动学放在模块全局变量里,Isaac 会因此关掉所有 Action Graph,直到用户授权。现在状态保存在实例上。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:112 +#: 0ecd99179bdb480da6a794727f9020c9 +msgid "" +"It reads a planar twist in the body frame and writes two arrays, in the " +"same wheel order: front-left, rear-left, rear-right, front-right (`fl`, " +"`rl`, `rr`, `fr`)." +msgstr "它读取机体坐标系下的平面速度旋量,并写出两组数组,轮序相同:左前、左后、右后、右前(`fl`、`rl`、`rr`、`fr`)。" -#~ msgid "NVIDIA Omniverse Launcher" -#~ msgstr "NVIDIA Omniverse Launcher" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:114 +#: 10eacbdf821a46b69e4652ca80dad593 +msgid "" +"`Steer_Position_Command` and `Steer_Joints` — steer angles, in radians, " +"sent as position commands" +msgstr "`Steer_Position_Command` 和 `Steer_Joints` — 转向角,单位弧度,作为位置指令发出" -#~ msgid "Check Omniverse Launcher" -#~ msgstr "Check Omniverse Launcher" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:115 +#: e6a1df3659084776836216595e553ea0 +msgid "" +"`Wheel_Velocity_Command` and `Wheel_Joints` — wheel velocity commands, " +"sent as velocity commands" +msgstr "`Wheel_Velocity_Command` 和 `Wheel_Joints` — 轮速指令,作为速度指令发出" -#~ msgid "Verify GPU drivers" -#~ msgstr "Verify GPU drivers" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:117 +#: b9cfb55fd4614afc9917ea35594f171f +msgid "" +"The two command types go to two " +"`isaacsim.core.nodes.IsaacArticulationController` nodes. Do not wire " +"steer angles as wheel velocities, or the other way around." +msgstr "这两类指令分别进入两个 `isaacsim.core.nodes.IsaacArticulationController` 节点。不要把转向角接到轮速上,也不要反过来接。" -#~ msgid "Required Version and Path" -#~ msgstr "所需版本与路径" +#: ../../source/4-reference/simulation/2-fasim_isaac.md:119 +#: 5cc9ac2b11fd440fb56ec041ae7a3518 +msgid "" +"`Desired_Linear_Velocity_X` / `Y` are forward and lateral speed in metres" +" per second. `Desired_Angular_Velocity` is yaw rate in radians per " +"second. Wheel positions in the profiles are body-frame `(x, y)` in " +"metres, with `x` forward and `y` left. Inverse kinematics use `vx_total =" +" vx - ω y_i` and `vy_total = vy + ω x_i`." +msgstr "`Desired_Linear_Velocity_X` / `Y` 是前进和侧向速度,单位米每秒。`Desired_Angular_Velocity` 是偏航角速度,单位弧度每秒。各 profile 里的轮位是机体坐标系下的 `(x, y)`,单位米,`x` 向前、`y` 向左。逆运动学使用 `vx_total = vx - ω y_i` 和 `vy_total = vy + ω x_i`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:121 +#: 10aa2b7f27a14df690d2e82a5fa073e9 +msgid "" +"`linearGain` scales wheel speed after the inverse kinematics. " +"`angularGain` scales yaw rate before it. `flipVelocityScale` (clamped to " +"`[0, 1]`) scales wheel speed for one frame when the equivalent steer " +"solution flips sign. `simTime` is unused; it remains so existing Taku " +"graph connections still resolve." +msgstr "`linearGain` 在逆运动学之后缩放轮速。`angularGain` 在逆运动学之前缩放偏航角速度。`flipVelocityScale`(限制在 `[0, 1]`)在等效转向解翻转符号的那一帧缩放轮速。`simTime` 未被使用,保留它是为了让现有 Taku 图上的连接仍然能解析。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:123 +#: 2e56a206147841959acded8735e1e2a4 +msgid "" +"The node accepts only two profiles. An unknown `profile` raises " +"`ValueError`. There is no separate profile YAML." +msgstr "节点只接受两种 profile。未知的 `profile` 会抛出 `ValueError`。没有单独的 profile YAML。" -#~ msgid "" -#~ "FaSim-Isaac requires **Isaac Sim 6.1 " -#~ "binary** installed at **`~/isaacsim`**. The" -#~ " `run.sh` script and other utilities " -#~ "assume this exact path. Other versions" -#~ " or installation paths will not work" -#~ " without script modifications." -#~ msgstr "" -#~ "FaSim-Isaac 要求将 **Isaac Sim 6.1 " -#~ "二进制版本**安装在 **`~/isaacsim`**。`run.sh` " -#~ "脚本及其他工具均假定使用该路径。其他版本或安装路径需修改脚本后才能使用。" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: a62dbf402c93462586d77382ddbc782e +msgid "Steer joints" +msgstr "多台机器人" -#~ msgid "FaSim-Isaac provides:" -#~ msgstr "FaSim-Isaac 提供:" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 9179a686ddb04a118a08380d6e11c3fd +msgid "Drive (wheel) joints" +msgstr "驱动(轮)关节" -#~ msgid "One-click Isaac Sim setup" -#~ msgstr "一键完成 Isaac Sim 配置" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: d0bc090d72a945d09717aca56a6b72b1 +msgid "Wheel `(x, y)` (m)" +msgstr "轮位 `(x, y)`(m)" -#~ msgid "USD robot asset management" -#~ msgstr "USD 机器人资产管理" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 3212addf6f8741c08ace537916357c82 +msgid "Stop and command behaviour" +msgstr "停车与指令行为" -#~ msgid "ROS 2 Jazzy workspace integration" -#~ msgstr "ROS 2 Jazzy 工作空间集成" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: bcfead99023b4301a8c712797536f3af +msgid "`linkhou_s2_v1` (OGN default)" +msgstr "`linkhou_s2_v1`(OGN 默认)" -#~ msgid "Environment assets" -#~ msgstr "环境资产" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 33b6369f466847899d8ee1aa25cfa64a +msgid "`fl_steer_joint`, `rl_steer_joint`, `rr_steer_joint`, `fr_steer_joint`" +msgstr "`fl_steer_joint`、`rl_steer_joint`、`rr_steer_joint`、`fr_steer_joint`" -#~ msgid "**Isaac Sim 6.1** installed at `~/isaacsim`" -#~ msgstr "已将 **Isaac Sim 6.1** 安装到 `~/isaacsim`" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 57fe1b6aace04e23b47be64b685a3979 +msgid "`fl_wheel_joint`, `rl_wheel_joint`, `rr_wheel_joint`, `fr_wheel_joint`" +msgstr "`fl_wheel_joint`、`rl_wheel_joint`、`rr_wheel_joint`、`fr_wheel_joint`" -#~ msgid "NVIDIA GPU (RTX recommended)" -#~ msgstr "NVIDIA GPU(推荐 RTX)" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 7f33f94747d14d3191b417451bd6f9e8 +msgid "" +"`(0.23072, 0.21738)`, `(-0.22928, 0.21738)`, `(-0.23072, -0.21738)`, " +"`(0.22928, -0.21738)`" +msgstr "`(0.23072, 0.21738)`、`(-0.22928, 0.21738)`、`(-0.23072, -0.21738)`、`(0.22928, -0.21738)`" -#~ msgid "NVIDIA drivers compatible with Isaac Sim 6.1" -#~ msgstr "与 Isaac Sim 6.1 兼容的 NVIDIA 驱动" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 980cf613f7d04152b8595563fc5bfd0d +msgid "" +"When both linear speed and yaw rate are below `0.0001`, steer commands " +"snap to zero and wheel speeds go to zero" +msgstr "当前进速度和偏航角速度都低于 `0.0001` 时,转向指令打到零,轮速也归零" -#~ msgid "init.sh Operations" -#~ msgstr "init.sh 操作" +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 56e6143d6aa04ee2a012bd793ae5ff1c +msgid "`taku`" +msgstr "`taku`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: be37f6128b214990af041faf9fb5154f +msgid "" +"`agv_left_front_steering_joint`, `agv_left_back_steering_joint`, " +"`agv_right_back_steering_joint`, `agv_right_front_steering_joint`" +msgstr "`agv_left_front_steering_joint`、`agv_left_back_steering_joint`、`agv_right_back_steering_joint`、`agv_right_front_steering_joint`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: ddf0ff3c8c8441deaa8d24ccd2d36379 +msgid "" +"`agv_left_front_rotate_joint`, `agv_left_back_rotate_joint`, " +"`agv_right_back_rotate_joint`, `agv_right_front_rotate_joint`" +msgstr "`agv_left_front_rotate_joint`、`agv_left_back_rotate_joint`、`agv_right_back_rotate_joint`、`agv_right_front_rotate_joint`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 5ea850eb751d42d3bc6a22cdabee41c3 +msgid "" +"`(0.2745, 0.2045)`, `(-0.2745, 0.2045)`, `(-0.2745, -0.2045)`, `(0.2745, " +"-0.2045)`" +msgstr "`(0.2745, 0.2045)`、`(-0.2745, 0.2045)`、`(-0.2745, -0.2045)`、`(0.2745, -0.2045)`" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md +#: 901337c6cfc04f9699ed5a8141e37b64 +msgid "" +"On stop, steer holds; steer slew is limited to 180°/s; wheel speed is " +"scaled down until the steer error is small (full speed at 8°, zero at " +"35°). `msgCount` must keep changing: if it is unchanged for 0.25 s, the " +"last twist is dropped. Linear deadband 0.02 m/s, yaw deadband 0.05 rad/s." +" Flip choice uses a 20° hysteresis. `deltaSeconds` is the playback frame " +"dt (values `≤ 1e-6` or `> 0.1` fall back to `1/60`)" +msgstr "停车时转向角保持不变;转向角速度限制为 180°/s;转向误差变小之前会降低轮速(误差 8° 时全速度,35° 时为零)。`msgCount` 必须持续变化:若 0.25 秒没有变化,就丢掉上一条 twist。线速度死区 0.02 m/s,偏航死区 0.05 rad/s。翻转选择带 20° 回差。`deltaSeconds` 是回放帧的 dt(`≤ 1e-6` 或 `> 0.1` 时回退为 `1/60`)" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:130 +#: f187318e7a994ae6b72fddfd504fff5a +msgid "Graph wiring on current assets" +msgstr "当前资产里的图连接" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:132 +#: d4ccdcdbdf2746af803d2e08c44f5bf2 +msgid "" +"Both example graphs tick from `OnPlaybackTick`, subscribe to a " +"`geometry_msgs/Twist` with `ROS2SubscribeTwist`, break out linear `x`/`y`" +" and angular `z`, and run `SwerveController`. Linear velocity is passed " +"through `OgnIsaacScaleToFromStageUnit`." +msgstr "两个示例图都由 `OnPlaybackTick` 触发,用 `ROS2SubscribeTwist` 订阅 `geometry_msgs/Twist`,拆出线速度 `x`/`y` 和角速度 `z`,再进入 `SwerveController`。线速度会经过 `OgnIsaacScaleToFromStageUnit`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:134 +#: 03c06d9c737c4f219b033c0413922425 +msgid "" +"Linkhou S2: " +"[`mobile_base/Linkhou/S2_V1/payloads/ROS/ros2.usda`](https://github.com" +"/fiveages-" +"sim/robot_usds/blob/main/mobile_base/Linkhou/S2_V1/payloads/ROS/ros2.usda)," +" graph `ROS_Steering_Controller`, `profile` `linkhou_s2_v1`. `linearGain`" +" is 14.28, `angularGain` is 1.04. The ArticulationRoot target is " +"``. Joint name arrays come from the node outputs " +"`Steer_Joints` and `Wheel_Joints`. The `ROS2SubscribeTwist` `topicName` " +"attribute is present in that USDA but has no value; confirm the topic on " +"the opened stage before you publish." +msgstr "Linkhou S2:[`mobile_base/Linkhou/S2_V1/payloads/ROS/ros2.usda`](https://github.com/fiveages-sim/robot_usds/blob/main/mobile_base/Linkhou/S2_V1/payloads/ROS/ros2.usda),图是 `ROS_Steering_Controller`,`profile` 为 `linkhou_s2_v1`。`linearGain` 为 14.28,`angularGain` 为 1.04。ArticulationRoot 目标是 ``。关节名数组来自节点输出 `Steer_Joints` 和 `Wheel_Joints`。这份 USDA 里声明了 `ROS2SubscribeTwist` 的 `topicName`,但没有赋值;发布前先在打开的舞台上确认话题名。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:135 +#: deabc356d517426c8870efd656bf1356 +msgid "" +"Taku: " +"[`humanoid/Dyna/Taku/components/Taku_Chassis/payloads/Graph/enable.usda`](https://github.com" +"/fiveages-" +"sim/robot_usds/blob/main/humanoid/Dyna/Taku/components/Taku_Chassis/payloads/Graph/enable.usda)," +" graph `steering_wheel_controller`, `profile` `taku`. `topicName` is " +"`/cmd_vel`. `linearGain` is 16, `flipVelocityScale` is 0.15, " +"`angularGain` is 1. `deltaSeconds` comes from `OnPlaybackTick`, " +"`msgCount` from a Counter on the subscriber `execOut`, and `simTime` from" +" `IsaacReadSimulationTime` (the node does not use that last input). The " +"ArticulationRoot target is ``. The two " +"`IsaacArticulationController` nodes list the steer and drive joint names " +"explicitly, in the same `fl`, `rl`, `rr`, `fr` order as the profile." +msgstr "Taku:[`humanoid/Dyna/Taku/components/Taku_Chassis/payloads/Graph/enable.usda`](https://github.com/fiveages-sim/robot_usds/blob/main/humanoid/Dyna/Taku/components/Taku_Chassis/payloads/Graph/enable.usda),图是 `steering_wheel_controller`,`profile` 为 `taku`。`topicName` 是 `/cmd_vel`。`linearGain` 为 16,`flipVelocityScale` 为 0.15,`angularGain` 为 1。`deltaSeconds` 来自 `OnPlaybackTick`,`msgCount` 来自订阅节点 `execOut` 上的 Counter,`simTime` 来自 `IsaacReadSimulationTime`(节点并不使用最后这项输入)。ArticulationRoot 目标是 ``。两个 `IsaacArticulationController` 节点显式列出转向和驱动关节名,顺序与 profile 一样,是 `fl`、`rl`、`rr`、`fr`。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:137 +#: 1f699387269141a0a653b3839ba6af68 +msgid "" +"OGN defaults, if a graph leaves them unset, are `linearGain` 50, " +"`angularGain` 1, and `flipVelocityScale` 0.35." +msgstr "如果图没有设置这些值,OGN 默认是 `linearGain` 50、`angularGain` 1、`flipVelocityScale` 0.35。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:139 +#: f103a35c5ed44167b22d062f99f7ad6d +msgid "Add a swerve chassis" +msgstr "接入一套舵轮底盘" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:141 +#: df0a32f8fb25455489a7523d543637c2 +msgid "" +"A new chassis is not configured by pointing `profile` at a file. Add a " +"profile in [`swerve.py`](https://github.com/fiveages-sim/FaSim-" +"Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/swerve.py):" +" wheel `(x, y)`, steer and drive joint names, and the stop behaviour that" +" chassis needs. List the token in the OGN `allowedTokens`. Copy a graph " +"from Linkhou S2 or Taku: subscribe a twist, set `profile`, and connect " +"steer positions and wheel velocities to two `IsaacArticulationController`" +" nodes on the ArticulationRoot. Joint names on those controllers, or on " +"the node outputs, must match the USD and the profile, in `fl`, `rl`, " +"`rr`, `fr` order. Install operation 5 and restart Isaac so " +"`SwerveController` is available." +msgstr "新底盘不是靠把 `profile` 指到某个文件来配置的。要在 [`swerve.py`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/swerve.py) 里增加 profile:轮位 `(x, y)`、转向和驱动关节名,以及这套底盘需要的停车行为。把该 token 写进 OGN 的 `allowedTokens`。从图上仿 Linkhou S2 或 Taku:订阅 twist,设置 `profile`,再把转向位置和轮速接到 ArticulationRoot 上的两个 `IsaacArticulationController`。这些控制器上的关节名,或节点输出的关节名,必须与 USD 和 profile 一致,顺序是 `fl`、`rl`、`rr`、`fr`。安装操作 5 并重启 Isaac,`SwerveController` 才会可用。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:145 +#: 048c1ad99d2c4eb685c4482d3ffed402 +msgid "" +"After Play, a `geometry_msgs/Twist` on the graph’s subscribe topic moves " +"the chassis. Steer joints follow `Steer_Position_Command`; wheel joints " +"follow `Wheel_Velocity_Command`. On Linkhou S2, a zero command snaps the " +"steer joints to zero. On Taku, the steer joints hold, and a stale command" +" (no new `msgCount` for 0.25 s) stops the wheels. If the node type is " +"missing, operation 5 was not installed or Isaac was not restarted." +msgstr "Play 之后,往图的订阅话题发一条 `geometry_msgs/Twist`,底盘就会动。转向关节跟随 `Steer_Position_Command`,驱动关节跟随 `Wheel_Velocity_Command`。在 Linkhou S2 上,零指令会把转向关节打到零。在 Taku 上,转向关节保持角度,过期指令(0.25 秒没有新的 `msgCount`)会让轮子停下来。如果节点类型不存在,说明还没做操作 5,或没有重启 Isaac。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:149 +#: c6ed91a2384a474e95fa3f4ea0b73458 +msgid "Clock" +msgstr "Clock" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:151 +#: 726d4357949042a8a326aeb6a2dff0a6 +msgid "" +"In-process W2 publishes `/clock` from a separate on-demand graph " +"`ROS_Clock`: `evaluationMode=OnDemand`, " +"`pipelineStage=pipelineStageOnDemand`, `OnPhysicsStep` → `PublishClock`, " +"`IsaacReadSimulationTime` with `resetOnStop=1` " +"([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-robot-" +"usds/blob/main/W2/payloads/ROS/fiveages.usda)). `OnPhysicsStep` does not " +"run in the automatic `ROS_Control` graph, so the clock graph stays beside" +" it. `ROS_Control` still uses `OnPlaybackTick` to start " +"`ROS2ControlLaunch` once." +msgstr "" +"进程内的 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` 不会在自动的 " +"`ROS_Control` 图里跑,所以时钟图放在旁边。`ROS_Control` 仍用 `OnPlaybackTick` 把 " +"`ROS2ControlLaunch` 启动一次。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:153 +#: 1680c8a74b9c42a6a0fc2c943e279488 +msgid "" +"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`." +msgstr "" +"同一台机器人的话题桥载荷([`ros2.usda`](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds/blob/main/W2/payloads/ROS/ros2.usda))仍从 `OnPlaybackTick` 驱动 " +"`PublishClock`,并把 `resetOnStop` 设为 0。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:155 +#: 7407de67a5e44de483381efecfc38a29 +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:157 +#: 95e74d26df7b4484852fc731cabc3e45 +msgid "" +"`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." +msgstr "节点若拉起 `arms_target_manager`,它是宿主机进程,`use_sim_time:=false`,标记不跟物理步绑定。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:161 +#: 11a973191e7247ff8a7449f6dd9c051f +msgid "TF" +msgstr "TF" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:163 +#: 79ae53ca3a2d4bdc91a1d49cf47d73bf +msgid "" +"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`." +msgstr "" +"Isaac 的里程计图发布 `world → odom → base_*` 和 `/odom`。它不发布整棵 URDF " +"树。`robot_state_publisher` 发布 `base_footprint → " +"base_link`(两个连杆都存在时)以及手臂树,包括 `right_eef` 这类固定帧。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:165 +#: 431de94e917a4beb81183328b1643567 +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:167 +#: c88607882fa446b19a9abdfa9d0271f5 +msgid "Several robots" +msgstr "多台机器人" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:169 +#: 7d0d8aa001fd40cd884edccf5c2f2e22 +msgid "" +"One ArticulationRoot, one `ROS2ControlLaunch`, and one controller manager" +" per robot. Isolation is the graph `namespace` plus relative topic names " +"(`cmd_vel`, `fsm_command`, `robot_description`). `/clock` stays global." +msgstr "" +"每台机器人一个 ArticulationRoot、一个 `ROS2ControlLaunch`、一个控制器管理器。隔离靠图的 " +"`namespace` 加上相对话题名(`cmd_vel`、`fsm_command`、`robot_description`)。`/clock`" +" 保持全局。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:171 +#: 8bf1889882974bee893ce696dfaae377 +msgid "" +"A ROS namespace remaps topics (`//tf`, `//tf_static`). It does " +"not prefix `frame_id`. Each tree still has frames named `world`, `odom`, " +"and `base_link`. `world → odom` is that robot’s latched spawn pose on " +"**its** `//tf`, not a rewritten frame called `g1d/world`. RViz " +"listens to `/tf` unless you remap it, for example:" +msgstr "" +"ROS 命名空间会重映射话题(`//tf`、`//tf_static`)。它不会给 `frame_id` " +"加前缀。每棵树里的帧名仍是 `world`、`odom` 和 `base_link`。`world → odom` 是这台机器人在**自己的** " +"`//tf` 上锁存的出生位姿,不是改名为 `g1d/world` 的帧。RViz 默认听 `/tf`,需要时再重映射,例如:" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:173 +#: 7117ec6d344441bfaaaad93969c6219b +msgid "" +"ros2 run tf2_ros tf2_echo world base_link --ros-args \\\n" +" -r /tf:=//tf -r /tf_static:=//tf_static" +msgstr "" +"ros2 run tf2_ros tf2_echo world base_link --ros-args \\\n" +" -r /tf:=//tf -r /tf_static:=//tf_static" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:178 +#: 9a2b6beb8d8e42d78cb90d7814472057 +msgid "" +"`` is the string on that graph’s `namespace` input, not a " +"`demo.launch.py` argument. A stage with one graph and one controller " +"manager per robot has been run." +msgstr "" +"`` 是该图 `namespace` 输入上的字符串,不是 `demo.launch.py` " +"的参数。一个舞台、每台机器人一张图和一个控制器管理器,已经跑通过。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:182 +#: 88d84caa017a4401a1d3a8c95c37c13c +msgid "Navigation" +msgstr "Navigation" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:184 +#: 5513789bb1b649958f0c8693bd2bd97a +msgid "" +"`NavigationLaunch` ([`OgnNavigationLaunch.ogn`](https://github.com" +"/fiveages-sim/FaSim-" +"Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnNavigationLaunch.ogn))" +" starts `ros2 launch robot_common_launch navigation_isaac_gt.launch.py` " +"on Play when `enabled` is true. W2’s fiveages graph leaves `enabled` " +"false." +msgstr "" +"`NavigationLaunch`([`OgnNavigationLaunch.ogn`](https://github.com" +"/fiveages-sim/FaSim-" +"Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnNavigationLaunch.ogn))在" +" `enabled` 为 true 时,于播放后启动 `ros2 launch robot_common_launch " +"navigation_isaac_gt.launch.py`。W2 的 fiveages 图把 `enabled` 留为 false。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:186 +#: 1d6eff2023894524aadb0c95e7a3d564 +msgid "" +"`map` and `paramsFile` are paths relative to the opened stage root, so an" +" `env/` layer can point at `../../maps//map.yaml` stored in the " +"same [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) " +"project. The node does not call composer `ros2-stack`. Default " +"`nav2Profile` is `map_only`. `publishMapWorldTf` defaults true (map drawn" +" in USD world). `publishMapOdomTf` defaults false because odometry comes " +"from Isaac." +msgstr "" +"`map` 和 `paramsFile` 相对已打开的舞台根解析,因此 `env/` 层可以指向同一 [fa-project-" +"usd](https://github.com/fiveages-sim/fa-project-usd) 项目里的 " +"`../../maps//map.yaml`。该节点不调用编排器的 `ros2-stack`。默认 `nav2Profile` 是 " +"`map_only`。`publishMapWorldTf` 默认 true(地图画在 USD 世界里)。`publishMapOdomTf` " +"默认 false,因为里程计来自 Isaac。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:188 +#: a43ee2f5f2074ebea6ab35b7b24f04a8 +msgid "" +"Where those map files and `robot.yaml` currently live: [Environment " +"assets](5-env_assets.md#fa-project-usd)." +msgstr "这些地图文件和 `robot.yaml` 目前在:[环境资产](5-env_assets.md#fa-project-usd)。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:192 +#: d1787a6146a6474092fa428cd0592170 +msgid "Layout" +msgstr "Layout" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:194 +#: d5c2cb703e4f4410ab7fa68497c5b0a9 +msgid "" +"FaSim-Isaac/\n" +"├── init.sh\n" +"├── run.sh\n" +"├── run_headless.sh\n" +"├── config/ # fa_sim.conf + optional " +"fa_sim.local.conf\n" +"├── exts/fasim.ros2.nodes/ # ROS2ControlLaunch, NavigationLaunch" +"\n" +"├── exts/fasim.steering.nodes/ # SwerveController\n" +"├── tools/audit_mimic_joint_drives.py\n" +"├── robots/ # → robot_usds\n" +"└── environment/\n" +" ├── fiveages_env/\n" +" ├── fa-project-usd/ # private\n" +" ├── artvip-usd/\n" +" └── labutopia-usd/ # private" +msgstr "" +"FaSim-Isaac/\n" +"├── init.sh\n" +"├── run.sh\n" +"├── run_headless.sh\n" +"├── config/ # fa_sim.conf + optional " +"fa_sim.local.conf\n" +"├── exts/fasim.ros2.nodes/ # ROS2ControlLaunch, NavigationLaunch" +"\n" +"├── exts/fasim.steering.nodes/ # swerve graph node\n" +"├── tools/audit_mimic_joint_drives.py\n" +"├── robots/ # → robot_usds\n" +"└── environment/\n" +" ├── fiveages_env/\n" +" ├── fa-project-usd/ # private\n" +" ├── artvip-usd/\n" +" └── labutopia-usd/" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:211 +#: 18ac9ecfd0f048e69adc3e608b3ad723 +msgid "" +"Submodule URLs: [`.gitmodules`](https://github.com/fiveages-sim/FaSim-" +"Isaac/blob/main/.gitmodules). Visibility: `submodules_visibility.conf`. " +"Robot tree: [robot_usds](3-robot_usds.md). Scene trees: [Environment " +"assets](5-env_assets.md)." +msgstr "子模块地址:[`.gitmodules`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/.gitmodules)。可见性:`submodules_visibility.conf`。机器人树:[robot_usds](3-robot_usds.md)。场景树:[环境资产](5-env_assets.md)。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:213 +#: b5a44134b66648189025e9f29482308d +msgid "Mimic joints" +msgstr "mimic 关节" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:215 +#: dd161f8717e84a3488667e2d77059369 +msgid "" +"`tools/audit_mimic_joint_drives.py` reports mimic joints that have no " +"drive. Assets that already use `PhysxMimicJointAPI` or `NewtonMimicAPI` " +"should not gain a second drive: the solver already enforces the mimic, " +"and a drive at `targetPosition=0` fights it. `--apply` is for a mimic " +"that has neither PhysX nor Newton mimic API." +msgstr "" +"`tools/audit_mimic_joint_drives.py` 报告没有驱动的 mimic 关节。已经使用 " +"`PhysxMimicJointAPI` 或 `NewtonMimicAPI` 的资产不要再加第二套驱动:求解器已经在执行 " +"mimic,`targetPosition=0` 的驱动会和它对着干。`--apply` 用于既没有 PhysX 也没有 Newton mimic" +" API 的关节。" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:217 +#: 8aa37edf03e244afb9a53838ee253d67 +msgid "Related" +msgstr "相关内容" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:219 +#: d23d965d441644b28d96e73a808bb477 +msgid "[Isaac Sim how-to](../../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:220 +#: fe5a911f1edc4aaa8796b20836a550ad +msgid "[robot_usds](3-robot_usds.md)" +msgstr "[robot_usds](3-robot_usds.md)" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:221 +#: e9b0d697412643a7856f71a1c93525fa +msgid "[Environment assets](5-env_assets.md)" +msgstr "[环境资产](5-env_assets.md)" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:222 +#: 8660af32923b47e6a20104d760d014e4 +msgid "[topic_based_ros2_control](../hardware/1-topic_based.md)" +msgstr "[topic_based_ros2_control](../hardware/1-topic_based.md)" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:223 +#: 2b95ef58f2fb4634b43c356d9600358d +msgid "[robot_common_launch](../descriptions/2-common.md)" +msgstr "[robot_common_launch](../descriptions/2-common.md)" + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:224 +#: a7e3acc32cd14f37b199ac957de9abfe +msgid "[lerobot_ros2](../python_apps/4-lerobot_ros2.md)" +msgstr "[lerobot_ros2](../python_apps/4-lerobot_ros2.md)" + + +#: ../../source/4-reference/simulation/2-fasim_isaac.md:106 +#: 64cfc481cf5e4ce9bdd83a839bd50348 +msgid "" +"A G1-D demonstration of full-body control and chassis motion in Isaac Sim " +"is on the [How-To](../../2-how_to/2-simulation/4-isaac_sim.md#g1-d-full-" +"body-control-and-chassis-motion)." +msgstr "" +"Isaac Sim 中 G1-D 全身控制与底盘运动的演示,见 [How-" +"To](../../2-how_to/2-simulation/4-isaac_sim.md#g1-d-full-body-control-and-" +"chassis-motion)。" + +#~ msgid "" +#~ "FaSim-Isaac/\n" +#~ "├── robots/ # → robot_usds submodule\n" +#~ "├── environment/\n" +#~ "│ ├── fiveages_env/ # → fiveages-env-usds\n" +#~ "│ └── fa-project-usd/ # → fa-project-usd (private)\n" +#~ "├── jazzy_ws/ # Optional ROS 2 workspace\n" +#~ "├── init.sh\n" +#~ "└── run.sh\n" +#~ msgstr "" +#~ "FaSim-Isaac/\n" +#~ "├── robots/ # → robot_usds submodule\n" +#~ "├── environment/\n" +#~ "│ ├── fiveages_env/ # → fiveages-env-usds\n" +#~ "│ └── fa-project-usd/ # → fa-project-usd (private)\n" +#~ "├── jazzy_ws/ # Optional ROS 2 workspace\n" +#~ "├── init.sh\n" +#~ "└── run.sh\n" + +#~ msgid "NVIDIA Omniverse Launcher" +#~ msgstr "NVIDIA Omniverse Launcher" + +#~ msgid "Check Omniverse Launcher" +#~ msgstr "Check Omniverse Launcher" + +#~ msgid "Verify GPU drivers" +#~ msgstr "Verify GPU drivers" + +#~ msgid "Required Version and Path" +#~ msgstr "所需版本与路径" + +#~ msgid "" +#~ "FaSim-Isaac requires **Isaac Sim 6.1 " +#~ "binary** installed at **`~/isaacsim`**. The" +#~ " `run.sh` script and other utilities " +#~ "assume this exact path. Other versions" +#~ " or installation paths will not work" +#~ " without script modifications." +#~ msgstr "" +#~ "FaSim-Isaac 要求将 **Isaac Sim 6.1 " +#~ "二进制版本**安装在 **`~/isaacsim`**。`run.sh` " +#~ "脚本及其他工具均假定使用该路径。其他版本或安装路径需修改脚本后才能使用。" + +#~ msgid "FaSim-Isaac provides:" +#~ msgstr "FaSim-Isaac 提供:" + +#~ msgid "One-click Isaac Sim setup" +#~ msgstr "一键完成 Isaac Sim 配置" + +#~ msgid "USD robot asset management" +#~ msgstr "USD 机器人资产管理" + +#~ msgid "ROS 2 Jazzy workspace integration" +#~ msgstr "ROS 2 Jazzy 工作空间集成" + +#~ msgid "Environment assets" +#~ msgstr "环境资产" + +#~ msgid "**Isaac Sim 6.1** installed at `~/isaacsim`" +#~ msgstr "已将 **Isaac Sim 6.1** 安装到 `~/isaacsim`" + +#~ msgid "NVIDIA GPU (RTX recommended)" +#~ msgstr "NVIDIA GPU(推荐 RTX)" + +#~ msgid "NVIDIA drivers compatible with Isaac Sim 6.1" +#~ msgstr "与 Isaac Sim 6.1 兼容的 NVIDIA 驱动" + +#~ msgid "init.sh Operations" +#~ msgstr "init.sh 操作" #~ msgid "Initialize `robot_usds` submodule" #~ msgstr "初始化 `robot_usds` 子模块" @@ -809,419 +1576,84 @@ msgstr "[Environment assets](5-env_assets.md)" #~ msgid "Topic Bridge" #~ msgstr "话题桥接" -#~ msgid "FaSim-Isaac bridges Isaac Sim to ROS 2:" -#~ msgstr "FaSim-Isaac 将 Isaac Sim 桥接到 ROS 2:" - -#~ msgid "Isaac Topic" -#~ msgstr "Isaac 话题" - -#~ msgid "ROS 2 Topic" -#~ msgstr "ROS 2 话题" - -#~ msgid "Direction" -#~ msgstr "方向" - -#~ msgid "Joint positions" -#~ msgstr "关节位置" - -#~ msgid "`/joint_states`" -#~ msgstr "`/joint_states`" - -#~ msgid "Isaac → ROS" -#~ msgstr "Isaac → ROS" - -#~ msgid "`/joint_commands`" -#~ msgstr "`/joint_commands`" - -#~ msgid "ROS → Isaac" -#~ msgstr "ROS → Isaac" - -#~ msgid "" -#~ "Open robot USD from `robots/` and " -#~ "scene USD from `environment/` in Isaac." -#~ " Selection is not a `run.sh` CLI " -#~ "flag." -#~ msgstr "" -#~ "在 Isaac 中从 `robots/` 打开机器人 USD、从 " -#~ "`environment/` 打开场景 USD。选择不是 `run.sh` 的 " -#~ "CLI 参数。" - -#~ msgid "Troubleshooting" -#~ msgstr "故障排除" - -#~ msgid "Isaac Sim Won't Start" -#~ msgstr "Isaac Sim 无法启动" - -#~ msgid "" -#~ "Confirm `ISAACSIM_DIR` contains `isaac-sim.sh`" -#~ " (and the Newton / streaming " -#~ "launchers named in `fa_sim.conf`)" -#~ msgstr "" -#~ "确认 `ISAACSIM_DIR` 包含 `isaac-sim.sh`(以及 " -#~ "`fa_sim.conf` 中的 Newton / streaming " -#~ "启动脚本)" - -#~ msgid "Override the path in `config/fa_sim.local.conf`" -#~ msgstr "在 `config/fa_sim.local.conf` 中覆盖路径" - -#~ msgid "Check GPU drivers: `nvidia-smi`" -#~ msgstr "检查 GPU 驱动:`nvidia-smi`" - -#~ msgid "Check logs: `~/.nvidia-omniverse/logs/`" -#~ msgstr "检查日志:`~/.nvidia-omniverse/logs/`" - -#~ msgid "No ROS 2 Connection" -#~ msgstr "无法连接 ROS 2" - -#~ msgid "Check domain ID matches" -#~ msgstr "检查 Domain ID 是否一致" - -#~ msgid "Verify ROS 2 bridge extension enabled" -#~ msgstr "确认已启用 ROS 2 桥接扩展" - -#~ msgid "Restart `./run.sh` and the ROS 2 nodes" -#~ msgstr "重启 `./run.sh` 和 ROS 2 节点" - -#~ msgid "[robot_usds](3-robot_usds.md)" -#~ msgstr "[robot_usds](3-robot_usds.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 会故意失败。" +#~ msgid "FaSim-Isaac bridges Isaac Sim to ROS 2:" +#~ msgstr "FaSim-Isaac 将 Isaac Sim 桥接到 ROS 2:" -#: ../../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` 的文件。" +#~ msgid "Isaac Topic" +#~ msgstr "Isaac 话题" -#: ../../source/4-reference/simulation/2-fasim_isaac.md:26 -#: 45749d7f47384eea927215344f5a92ad -msgid "Topic names follow the robot" -msgstr "话题名跟这台机器人走" +#~ msgid "ROS 2 Topic" +#~ msgstr "ROS 2 话题" -#: ../../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 参数。" +#~ msgid "Direction" +#~ msgstr "方向" -#: ../../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 图上。" +#~ msgid "Joint positions" +#~ msgstr "关节位置" -#: ../../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` " -"发布者作为后备。资源管理器因此只加载一次描述。" +#~ msgid "`/joint_states`" +#~ msgstr "`/joint_states`" -#: ../../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。" +#~ msgid "Isaac → ROS" +#~ msgstr "Isaac → ROS" -#: ../../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/`。" +#~ msgid "`/joint_commands`" +#~ msgstr "`/joint_commands`" -#: ../../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。" +#~ msgid "ROS → Isaac" +#~ msgstr "ROS → Isaac" -#: ../../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 缓存。" +#~ msgid "" +#~ "Open robot USD from `robots/` and " +#~ "scene USD from `environment/` in Isaac." +#~ " Selection is not a `run.sh` CLI " +#~ "flag." +#~ msgstr "" +#~ "在 Isaac 中从 `robots/` 打开机器人 USD、从 " +#~ "`environment/` 打开场景 USD。选择不是 `run.sh` 的 " +#~ "CLI 参数。" -#: ../../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),全身规划就只覆盖身体和手臂。" +#~ msgid "Troubleshooting" +#~ msgstr "故障排除" -#: ../../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`。" +#~ msgid "Isaac Sim Won't Start" +#~ msgstr "Isaac Sim 无法启动" -#: ../../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)。" +#~ msgid "" +#~ "Confirm `ISAACSIM_DIR` contains `isaac-sim.sh`" +#~ " (and the Newton / streaming " +#~ "launchers named in `fa_sim.conf`)" +#~ msgstr "" +#~ "确认 `ISAACSIM_DIR` 包含 `isaac-sim.sh`(以及 " +#~ "`fa_sim.conf` 中的 Newton / streaming " +#~ "启动脚本)" -#: ../../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` 的时间戳仍然有效。相机放在场景载荷上,不要放在这个时钟图上。" +#~ msgid "Override the path in `config/fa_sim.local.conf`" +#~ msgstr "在 `config/fa_sim.local.conf` 中覆盖路径" -#: ../../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` 里的连杆名。" +#~ msgid "Check GPU drivers: `nvidia-smi`" +#~ msgstr "检查 GPU 驱动:`nvidia-smi`" -#: ../../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))。" +#~ msgid "Check logs: `~/.nvidia-omniverse/logs/`" +#~ msgstr "检查日志:`~/.nvidia-omniverse/logs/`" -#: ../../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 "No ROS 2 Connection" +#~ msgstr "无法连接 ROS 2" + +#~ msgid "Check domain ID matches" +#~ msgstr "检查 Domain ID 是否一致" + +#~ msgid "Verify ROS 2 bridge extension enabled" +#~ msgstr "确认已启用 ROS 2 桥接扩展" + +#~ msgid "Restart `./run.sh` and the ROS 2 nodes" +#~ msgstr "重启 `./run.sh` 和 ROS 2 节点" + +#~ msgid "[robot_usds](3-robot_usds.md)" +#~ msgstr "[robot_usds](3-robot_usds.md)" + +#~ msgid "[Synthetic Data](../../2-how_to/7-synthetic_data/0-index.md)" +#~ msgstr "[合成数据](../../2-how_to/7-synthetic_data/0-index.md)" #~ msgid "In-process articulation" #~ msgstr "进程内关节体" @@ -1242,3 +1674,85 @@ msgstr "" #~ "全身控制需要 [ocs2-wbc-controller](https://github.com" #~ "/fiveages-sim/ocs2-wbc-controller)(私有;开通后打开)。" +#~ msgid "Two hardware interfaces" +#~ msgstr "两种驱动层" + +#~ msgid "In-process launch" +#~ msgstr "进程内启动" + +#~ msgid "" +#~ "`OgnROS2ControlLaunch` " +#~ "([`OgnROS2ControlLaunch.ogn`](https://github.com/fiveages-sim" +#~ "/FaSim-" +#~ "Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn))" +#~ " runs once after Play:" +#~ msgstr "" +#~ "`OgnROS2ControlLaunch`([`OgnROS2ControlLaunch.ogn`](https://github.com" +#~ "/fiveages-sim/FaSim-" +#~ "Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn))在播放后运行一次:" + +#~ msgid "One ArticulationRoot" +#~ msgstr "一个 ArticulationRoot" + +#~ msgid "Project scenes" +#~ msgstr "项目场景" + +#~ 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)。" + +#~ 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))。" + +#~ 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 里。" + 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 83d9a2e..5cff65a 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 @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-13 02:56+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,17 +20,19 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/4-reference/simulation/3-robot_usds.md:1 -#: 3353490419244a058a2501d4e25749a6 +#: 2685a53a0c5b407cb3491014e00772cb msgid "robot_usds" msgstr "robot_usds" #: ../../source/4-reference/simulation/3-robot_usds.md:3 -#: eda6d0b0ff924de5b3ea951653317bd4 -msgid "USD robot asset superproject for Isaac Sim." +#: 168f7626cf6e44018ea3385fdd3891fc +msgid "" +"USD robot asset superproject for Isaac Sim. In FaSim-Isaac this tree is " +"the `robots/` submodule." msgstr "面向 Isaac Sim 的 USD 机器人资产超级项目。" #: ../../source/4-reference/simulation/3-robot_usds.md:5 -#: 9fe2e1073149443b8508e41e51ca4e78 +#: ced9b450966e4462ab3b767e5341eed5 msgid "" "**Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-" "sim/robot_usds)" @@ -39,169 +40,185 @@ msgstr "" "**仓库:** [fiveages-sim/robot_usds](https://github.com/fiveages-" "sim/robot_usds)" +#: ../../source/4-reference/simulation/3-robot_usds.md:7 +#: b67662659c2143d897bd22dc793fb30a +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:9 -#: b685a006a190457291f95294eb86bba3 -msgid "Purpose" -msgstr "用途" +#: 36e91290fd464c5a966df5dc5dff25d0 +msgid "" +"The [upstream README](https://github.com/fiveages-" +"sim/robot_usds/blob/main/README.md) is the gallery and the full model " +"list. This page records how the tree is checked out and which paths are " +"git submodules." +msgstr "[上游 README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) 是图册和完整机型列表。本页记录这棵树怎么检出,以及哪些路径是 git 子模块。" #: ../../source/4-reference/simulation/3-robot_usds.md:11 -#: ba6b3d6e13ff42daa002661d35bf2171 -msgid "`robot_usds` provides:" -msgstr "`robot_usds` 提供:" - -#: ../../source/4-reference/simulation/3-robot_usds.md:12 -#: e1e722e11b404e95a5503ab1e73fe7af -msgid "USD robot models for Isaac Sim" -msgstr "用于 Isaac Sim 的 USD 机器人模型" +#: 5c06eee1d2694d5bb131a469c116670b +msgid "Purpose" +msgstr "用途" #: ../../source/4-reference/simulation/3-robot_usds.md:13 -#: e8a74cd39b474869981cc8b9127f6848 -msgid "Organized asset hierarchy" -msgstr "结构化的资产层级" - -#: ../../source/4-reference/simulation/3-robot_usds.md:14 -#: ec7bcd0c9f2f4cddbb979b01c0a4db72 -msgid "Submodule management for brand-specific assets" -msgstr "按品牌管理的资产子模块" - -#: ../../source/4-reference/simulation/3-robot_usds.md:16 -#: eb0feca2d2054c6bb24e20d74c2e79e5 -msgid "Structure" -msgstr "结构" - -#: ../../source/4-reference/simulation/3-robot_usds.md:33 -#: 5235ee7a7d1b49558d9fb6d23bd84b6d -msgid "Submodules" -msgstr "子模块" - -#: ../../source/4-reference/simulation/3-robot_usds.md:35 -#: 9e83c2846aa7479580ad7834e96087c2 -msgid "The following are managed as Git submodules:" -msgstr "以下内容作为 Git 子模块管理:" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 0cb21922c72545dbad6f33bdebeecc6d -msgid "Path" -msgstr "路径" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 12728ceb8982447f961246e035a6901f -msgid "Repository" -msgstr "仓库" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: debf06815a48428a8353a8055f5e53fa -msgid "Branch" -msgstr "分支" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 1eb8ff9e5c064a1cb254b09186cbf71d -msgid "Visibility" +#: f7399d88aece45fea2a4d3e05c49f5ed +msgid "" +"`robot_usds` holds the robot USD models used in Isaac Sim, including in-" +"tree brand folders and a small set of git submodules. Environment and " +"project scenes are not in this repository; they sit beside it under FaSim" +" `environment/`. See [Environment assets](5-env_assets.md)." +msgstr "`robot_usds` 存放 Isaac Sim 用的机器人 USD,包括仓库内的品牌目录和少量 git 子模块。环境和项目场景不在这个仓库里,它们放在 FaSim 的 `environment/` 下,与它同级。见 [环境资产](5-env_assets.md)。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:15 +#: 9e20923fda8147b38279bf93da9d24ed +msgid "Checkout" +msgstr "检出" + +#: ../../source/4-reference/simulation/3-robot_usds.md:17 +#: 91cc169d89b9441582f5469cfdf7dcf3 +msgid "" +"**Primary path:** inside FaSim-Isaac, `./init.sh` operation 1 initializes" +" `robots/` according to `submodules_visibility.conf`. Start Sim with " +"`./run.sh`. There is no `./run.sh --robot`; open the USD from `robots/` " +"or from a scene under `environment/`. Steps: [Isaac " +"Sim](../../2-how_to/2-simulation/4-isaac_sim.md)." +msgstr "**主路径:** 在 FaSim-Isaac 里,`./init.sh` 操作 1 按 `submodules_visibility.conf` 初始化 `robots/`。用 `./run.sh` 启动 Sim。没有 `./run.sh --robot`;从 `robots/` 或 `environment/` 下的场景打开 USD。步骤见 [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md)。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:19 +#: 86f03ed96259485793cf32b54d96fd3e +msgid "" +"FaSim’s visibility file, as checked on 2026-11-13 " +"(`submodules_visibility.conf` on FaSim-Isaac `main`), marks:" +msgstr "以 2026-11-13 核对的 FaSim-Isaac `main` 上的 `submodules_visibility.conf` 为准,可见性是:" + +#: ../../source/4-reference/simulation/3-robot_usds.md +#: e32f492656c44639bf703f13bf301c35 +msgid "Path under `robots/`" +msgstr "`robots/` 下的路径" + +#: ../../source/4-reference/simulation/3-robot_usds.md +#: 486ee036db394b56b5dbcd565bb38257 +msgid "Visibility in FaSim" msgstr "可见性" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: e439a43528a04e589fcf2b749d9f5e77 +#: ../../source/4-reference/simulation/3-robot_usds.md +#: 6018578f31364f3a829ad02d257f169f +msgid "GitHub remote" +msgstr "GitHub 远程仓库" + +#: ../../source/4-reference/simulation/3-robot_usds.md +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 92e2c5bc39b2471d9040a66b41a4223c f757fe86dfea4668ac8fb9ccbd2347d5 msgid "`humanoid/FiveAges/Gen1`" msgstr "`humanoid/FiveAges/Gen1`" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: b9b016f4277a4c43a1b05aa19d2dafa4 +#: ../../source/4-reference/simulation/3-robot_usds.md +#: a44a990ca4b8472bacf1a7db66ea5c0e cd68b6ce2e6a47688c64a0b7078dc5cf +#: d3270e1df7b34751a979fb8f6cdc24eb +msgid "public" +msgstr "公开" + +#: ../../source/4-reference/simulation/3-robot_usds.md +#: 333013af22b243049482b85ce27dac37 msgid "" "[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1" -"-robot-usds)" +"-robot-usds) (public)" msgstr "" -"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds)" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 4e52234b347949b79f3caaf27c124a7f 6e22515242324f668d0520b94e9a3cc7 -#: 7d35a7f8dddc47839038122fa67ae000 cc68d3833ce44da2ade1489fc9c8ce34 -#: f4fca2a1039c41d3bc2bae8d339ae18d -msgid "main" -msgstr "main" - -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 31b385c693644cbdb8a52c8e6da3b19d 891a86763813457b8419bd5725e28123 -msgid "Public" -msgstr "公开" +"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1" +"-robot-usds)" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 4e1695444c9949c4a9819c0a63912735 +#: ../../source/4-reference/simulation/3-robot_usds.md +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 33a56a67aa9543d999007331bf11c08e 9d1388be17534046aa2ca04967d92b6b msgid "`humanoid/FiveAges/Gen2`" msgstr "`humanoid/FiveAges/Gen2`" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: ba1126286c004ec7a4ac9102f407a023 +#: ../../source/4-reference/simulation/3-robot_usds.md +#: b3ee752fd8444ecd9231777afc495973 msgid "" "[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" -"-robot-usds)" +"-robot-usds) (public)" msgstr "" -"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds)" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 8bce69c7a19c4c31aa73c489a5e86f2e -msgid "Public (`W2/`, `S2/`, `components/`)" -msgstr "公开(`W2/`、`S2/`、`components/`)" +#: ../../source/4-reference/simulation/3-robot_usds.md +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 25b395aec0004cf98acf98e9727f6142 8306bc94eb3346c39090c3897c3432a2 +msgid "`humanoid/FiveAges/Gen3`" +msgstr "`humanoid/FiveAges/Gen2`" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 2a7b871864664bed95fbaee336f37ca4 66e6e26603954e3fb50b7cde937ebaa7 -msgid "Private" +#: ../../source/4-reference/simulation/3-robot_usds.md +#: 0340e3dfeeb04ca59e46dbe8baaf990a 717507b7283e4887a86cbc36ed8c227d +msgid "private" msgstr "私有" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 508755808af24fe7a15cc374659ba8b7 +#: ../../source/4-reference/simulation/3-robot_usds.md +#: dbb9bd47142f45a6af1760ddd91ad5b9 +msgid "" +"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" +"-robot-usds) (private; needs access)" +msgstr "" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" + +#: ../../source/4-reference/simulation/3-robot_usds.md +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 402f95da7dfb421683a978cc46d90f00 df197a787e4d45d08c2b2f89f7810df5 msgid "`humanoid/Galbot`" msgstr "`humanoid/Galbot`" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: e5e4c6a533ca473a865265800e795a7b -msgid "galbot-usds" -msgstr "galbot-usds" +#: ../../source/4-reference/simulation/3-robot_usds.md +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 7ffe2bc75ae14ff8bdbc1e61c8f56cbb b4255e241fb044fabee38419ee3b6e1d +msgid "[galbot-usds](https://github.com/fiveages-sim/galbot-usds)" +msgstr "" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 55e5041d43264d3e96be515af6605ad4 +#: ../../source/4-reference/simulation/3-robot_usds.md +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 4a6906ed980f473898c7ca2246175b72 c7d6ee73d0564c5192c5e04a96aa70a9 msgid "`humanoid/Ubtech`" msgstr "`humanoid/Ubtech`" -#: ../../source/4-reference/simulation/3-robot_usds.md:18 -#: 85f9ac01c680436abcc4eaf20c8b9daa -msgid "ubtech-usds" -msgstr "ubtech-usds" - -#: ../../source/4-reference/simulation/3-robot_usds.md:45 -#: d4f07594fdb043ad88c53a154c34894f -msgid "Usage" -msgstr "使用方法" - -#: ../../source/4-reference/simulation/3-robot_usds.md:47 -#: 15d5d7e73e0d4a57b1ae7a12cf880acc -msgid "" -"**Primary path:** inside FaSim-Isaac, `./init.sh` operation 1 initializes" -" `robots/` (this superproject) according to `submodules_visibility.conf`." +#: ../../source/4-reference/simulation/3-robot_usds.md +#: baf13969dbe64c008eff6205e4a7e941 +msgid "[ubtech-usds](https://github.com/fiveages-sim/ubtech-usds) (needs access)" msgstr "" -"**主路径:** 在 FaSim-Isaac 内,`./init.sh` 操作 1 按 `submodules_visibility.conf` " -"初始化 `robots/`(本超级工程)。" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" -#: ../../source/4-reference/simulation/3-robot_usds.md:49 -#: acee3d1124cb48608ebc5bcd1017f126 +#: ../../source/4-reference/simulation/3-robot_usds.md:29 +#: 0854260da74949309043bf2dea949129 msgid "" -"cd FaSim-Isaac\n" -"./init.sh" -msgstr "" -"cd FaSim-Isaac\n" -"./init.sh" +"Public rows start checked in operation 1. Private rows stay unchecked " +"until you can open them. A later run only adds what you check." +msgstr "操作 1 默认勾选公开项。私有项在你有权限之前保持不勾选。以后再跑,只追加你新勾选的内容。" -#: ../../source/4-reference/simulation/3-robot_usds.md:54 -#: 3477a1feecb14b90b3e804d967f7dd37 +#: ../../source/4-reference/simulation/3-robot_usds.md:31 +#: 6432672df9b44a939629d4fdce31fbc7 msgid "Manual fallback" msgstr "手动回退" -#: ../../source/4-reference/simulation/3-robot_usds.md:57 -#: 8102caa9e83946bca216e927c7b8fe22 -msgid "Standalone clone only if you are not using FaSim:" -msgstr "仅当你不使用 FaSim 时才单独克隆:" +#: ../../source/4-reference/simulation/3-robot_usds.md:34 +#: d40e18fb269f4601a2c2e329c2aeecf3 +msgid "" +"Standalone clone only if you are not using FaSim. After a plain clone, " +"submodule directories are empty until you init them at the paths in " +"`.gitmodules`:" +msgstr "只有不走 FaSim 时才单独克隆。普通 clone 之后,子模块目录是空的,要按 `.gitmodules` 里的路径做 init:" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 3b47db7f215e4e7ca3c62db2550aa2ef +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 4df6f3131b6742b8b7bca0a859d82a56 msgid "" "git clone https://github.com/fiveages-sim/robot_usds.git\n" "cd robot_usds\n" @@ -211,129 +228,278 @@ msgstr "" "cd robot_usds\n" "git submodule update --init" -#: ../../source/4-reference/simulation/3-robot_usds.md:66 -#: d275c606640a4a118e4c5c40ab6d994d -msgid "In-Tree Assets" -msgstr "仓库内资产" +#: ../../source/4-reference/simulation/3-robot_usds.md:42 +#: 5f348c6c859544a8880e3bc07a9a96e0 +msgid "" +"To init one public gitlink, for example Gen2: `git submodule update " +"--init humanoid/FiveAges/Gen2`. If you use robot_usds outside FaSim, put " +"`environment/fiveages_env` next to this tree so scene USDs can reference " +"it ([environment README note](https://github.com/fiveages-" +"sim/robot_usds/blob/main/README.md))." +msgstr "只初始化某一个公开 gitlink 时,以 Gen2 为例:`git submodule update --init humanoid/FiveAges/Gen2`。如果在 FaSim 之外使用 robot_usds,把 `environment/fiveages_env` 放在这棵树旁边,场景 USD 才能引用它([环境 README 说明](https://github.com/fiveages-sim/robot_usds/blob/main/README.md))。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:47 +#: 0737a57cc7db4afea670d3d05d9517aa +msgid "Git submodules" +msgstr "子模块" + +#: ../../source/4-reference/simulation/3-robot_usds.md:49 +#: 7bdd2c149acb4d3586a6d7844517904e +msgid "" +"These are the only USD remotes in `robot_usds/.gitmodules` on `main`. " +"Each gitlink has `branch = main`. The superproject still pins a commit; " +"`git submodule update` checks out that revision." +msgstr "这些是 `robot_usds/.gitmodules` 在 `main` 上仅有的 USD 远程。每个 gitlink 的 `branch` 都是 `main`。超仓库仍然钉住一次提交;`git submodule update` 检出的是那个修订。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: bba0bfb2d3e04b15bff8896f5ac23b82 +msgid "Path" +msgstr "路径" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 48008af5568548e9b761a169550828f7 +msgid "Repository" +msgstr "仓库" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 6cc018ca46294d18822733b12cf85cb3 +msgid "What is in the public tree" +msgstr "公开树里有什么" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 39ebbae8a6164bddbda00609a8af0f46 +msgid "" +"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1" +"-robot-usds)" +msgstr "" +"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1" +"-robot-usds)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: aa2bda03ac8948ad90ef10bbe80675f4 +msgid "W1 / Gen1 (public)" +msgstr "W1 / Gen1(公开)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 67cca9ad0f634156b49d5df8aa44ce66 +msgid "" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" +msgstr "" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: fd5e0ca472eb44788b63a46c58f81222 +msgid "" +"W2 / S2 / Gen2 (public; `W2/`, `S2/`, `components/`). W2R and S2R are not" +" in this repo. Their URDF remotes stay private." +msgstr "W2 / S2 / Gen2(公开;`W2/`、`S2/`、`components/`)。W2R 和 S2R 不在这个仓库里。它们的 URDF 远程仓库仍是私有的。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 01d1adca8078400f92de6a26bc20c463 +msgid "" +"[fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3" +"-robot-usds)" +msgstr "" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: a8c5266015534841a62a3bb56afabf70 +msgid "Gen3 (private remote; needs access)" +msgstr "Gen3(私有远程仓库,需要权限)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: ef112a92c48b4f4eadb849cd7bef3df5 +msgid "Galbot mobile manipulator USD" +msgstr "`mobile_manipulators/`" -#: ../../source/4-reference/simulation/3-robot_usds.md:68 -#: 3d12af762b0d466eac5b7aab2a4ca734 -msgid "Assets directly in `robot_usds` (not submodules):" -msgstr "`robot_usds` 仓库内直接包含的资产(非子模块):" +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 7446b9d4a7fa418493cca4625898179d +msgid "[ubtech-usds](https://github.com/fiveages-sim/ubtech-usds)" +msgstr "" +"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" +"-robot-usds)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:36 +#: 68ec71c1247041de912901cd70de1347 +msgid "Ubtech humanoid USD (private remote; needs access)" +msgstr "Ubtech 人形 USD(私有远程仓库,需要权限)" #: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: f8ed60e5e9e3468ba48873230e4d6bdf +#: f7159a307e5c4649981247721753d715 +msgid "" +"URDF / deploy for FiveAges robots: [FiveAges robot " +"descriptions](../descriptions/4-fiveages_umbrella.md). Gen1 and Gen2 " +"under `humanoid/FiveAges/` are wheeled-arm USD. They are not bipeds." +msgstr "URDF / 部署:[FiveAges 机器人描述](../descriptions/4-fiveages_umbrella.md)。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:61 +#: 25bd8a5901b94fd290ea2e1aa0a93583 +msgid "To see the pin, or to move one submodule (example: Galbot):" +msgstr "查看钉住的提交,或移动某个子模块(以 Galbot 为例):" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: a51842969890410bae1a929c6dc10366 +msgid "" +"cd robot_usds\n" +"git submodule status\n" +"git submodule update --remote humanoid/Galbot\n" +"# or pin: cd humanoid/Galbot && git checkout && cd ../.. && git " +"add humanoid/Galbot\n" +msgstr "cd robot_usds\ngit submodule status\ngit submodule update --remote humanoid/Galbot\n# or pin: cd humanoid/Galbot && git checkout && cd ../.. && git add humanoid/Galbot\n" + +#: ../../source/4-reference/simulation/3-robot_usds.md:70 +#: c301ddb4732b4f4f80188e5e10cc6a1b +msgid "" +"Prefer FaSim `./init.sh --update` when you work inside the Isaac " +"workspace." +msgstr "在 Isaac 工作区里工作时,优先用 FaSim 的 `./init.sh --update`。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:72 +#: c20b42ff560a4cacbc32d5662acd8ff9 +msgid "In-tree categories" +msgstr "仓库内资产" + +#: ../../source/4-reference/simulation/3-robot_usds.md:74 +#: ed53db6c323c4146bc61d5229cf4e7f6 +msgid "" +"Assets that are not git submodules live in the superproject itself. " +"Category roots on `main`:" +msgstr "不是 git 子模块的资产就在超仓库本身。`main` 上的分类根目录:" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: a7153e2931644ba99133c5dc01ea7a68 msgid "Directory" msgstr "目录" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 74a0109ac50944639bc95ae38196ff57 +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: ba1afba02dba4cfe87b5de9d93e2b888 msgid "Content" msgstr "内容" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 661a2e41fa59483181c7c48e18207006 -msgid "`grippers/`" -msgstr "`grippers/`" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 3094256f757d4a5b968c4f17c3870555 +msgid "`humanoid/`" +msgstr "`humanoid/Ubtech`" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 4c2d9d7806d049fda5b5745f4dd2b41e -msgid "Gripper USD models" -msgstr "夹爪 USD 模型" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 5d4877b1c1b347db9ca0a17d0da8fa9c +msgid "" +"Humanoid and wheeled-arm USD, including the FiveAges, Galbot, and Ubtech " +"gitlinks above, and in-tree brands such as Dyna Taku " +"(`humanoid/Dyna/Taku`)" +msgstr "人形与轮式臂 USD,包括上面的 FiveAges、Galbot、Ubtech gitlink,以及仓库内的品牌,例如 Dyna Taku(`humanoid/Dyna/Taku`)" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 067b447a8fb04bcab41d8d2de4f94796 +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 84b2d3c9fef54d18af3e0c4046bf8e1d msgid "`manipulators/`" msgstr "`manipulators/`" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 89328ac27a91430686b91246a21e007f +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 6f5e3610966c489797c0d53c76dd9d78 msgid "Arm models" msgstr "机械臂模型" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: 720a2c9a5d3d40bca521cc3d422f8034 -msgid "`mobile_manipulators/`" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 1daf32c0acb44ce1b38f44686bf858e8 +msgid "`mobile_base/`" msgstr "`mobile_manipulators/`" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: eba303d4d84f4edcbc8c4b0024f7ace1 -msgid "Mobile + arm" -msgstr "移动底盘 + 机械臂" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 6d39db899f1448c1baf65a142467697b +msgid "Chassis models, including Linkhou S2 (`mobile_base/Linkhou/S2_V1`)" +msgstr "底盘模型,包括 Linkhou S2(`mobile_base/Linkhou/S2_V1`)" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: aa20a44a67794ea99410c6d9066678e3 -msgid "`sensors/`" -msgstr "`sensors/`" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 3504eae27bd342eab50fe5d5b425e859 +msgid "`mobile_manipulator/`" +msgstr "`mobile_manipulators/`" -#: ../../source/4-reference/simulation/3-robot_usds.md:59 -#: ab5dfbf7a15d4f57895f88819d8e5852 -msgid "Camera, lidar models" -msgstr "相机、激光雷达模型" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 2dbf90b76f37403eb7f1ae59a0f92890 +msgid "Mobile + arm (singular directory name)" +msgstr "移动底盘加手臂(目录名是单数)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 78bd468aa7d64899a9fbe717f69cf73a +msgid "`grippers/`" +msgstr "`grippers/`" -#: ../../source/4-reference/simulation/3-robot_usds.md:77 -#: 3218bca6b28b4f36bee51106467efd24 -msgid "Asset Naming" -msgstr "资产命名" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: f330b97e89c64a96899cf000771772f9 +msgid "Gripper USD" +msgstr "夹爪 USD 模型" -#: ../../source/4-reference/simulation/3-robot_usds.md:81 -#: 20b7a950baab4f86a9581874c8e76135 -msgid "" -"From the [robot_usds README](https://github.com/fiveages-" -"sim/robot_usds/blob/main/README.md) Humanoid → FiveAges table:" -msgstr "" -"摘自 [robot_usds README](https://github.com/fiveages-" -"sim/robot_usds/blob/main/README.md) Humanoid → FiveAges 表(不是自造名称):" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 94569cff95ea4d799bc60f363a2062bc +msgid "`dexhands/`" +msgstr "`dexhands/`" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 31eb721249b74d5db95096799d73bb92 +msgid "Dexterous-hand USD" +msgstr "灵巧手 USD" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 41b3300945434c32ab29078bf34e0a34 +msgid "`suction_cup/`" +msgstr "`suction_cup/`" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: e72a406fdbcd4976a570bf1b233757c7 +msgid "Suction-cup USD" +msgstr "吸盘 USD" + +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 664eab2341df4da6b20f4bde15d27aba +msgid "`components/`" +msgstr "内容" -#: ../../source/4-reference/simulation/3-robot_usds.md:83 -#: a36837c7db154732b477192be52d32ba -msgid "" -"**Gen1** — W1 (`humanoid/FiveAges/Gen1` → [fiveages-gen1-robot-" -"usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds), public)" -msgstr "" -"**Gen1** — W1(`humanoid/FiveAges/Gen1` →" -"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds)" -",公开)" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 9d2585da39ee4b29995f9dbab34b54fa +msgid "Shared wheels and fixtures" +msgstr "共用的轮子和夹具" -#: ../../source/4-reference/simulation/3-robot_usds.md:87 -#: cd76c293e5954f648f0f589f94d2609f -msgid "" -"URDF / deploy: [FiveAges robot " -"descriptions](../descriptions/4-fiveages_umbrella.md)." -msgstr "URDF / 部署:[FiveAges 机器人描述](../descriptions/4-fiveages_umbrella.md)。" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 4ecfa18aaf0c4ef88015e5ccf9155223 +msgid "`sensors/`" +msgstr "`sensors/`" -#: ../../source/4-reference/simulation/3-robot_usds.md:89 -#: 307b43ac8f86412e96186e73a70b89de -msgid "" -"Load assets through FaSim-Isaac (`./init.sh` / `./run.sh`) and that " -"robot’s USDA. FaSim `submodules_visibility.conf` still marks the FiveAges" -" Gen\\* trees `private`, so they are not selected by default; you can " -"init the public Gen1/Gen2 gitlinks from `robot_usds` as in that README " -"§2.1." -msgstr "" -"通过 FaSim-Isaac(`./init.sh` / `./run.sh`)和该机器人的 USDA 加载资产。FaSim" -"`submodules_visibility.conf`仍把 FiveAges Gen\\* 树标成 `private`,因此默认不勾选;可按该" -"README §2.1 从 `robot_usds`初始化公开的 Gen1/Gen2 gitlink。" +#: ../../source/4-reference/simulation/3-robot_usds.md:63 +#: 611dbfcbf1eb40dc8f4b5bf00d5af536 +msgid "Camera, lidar, and related models" +msgstr "相机、激光雷达模型" -#: ../../source/4-reference/simulation/3-robot_usds.md:91 -#: da526835e3f14f128d18437e4fa83635 +#: ../../source/4-reference/simulation/3-robot_usds.md:88 +#: 366ef2e57bf74811a8a6ff59b83041ca +msgid "" +"The full product list is in the [robot_usds README §3](https://github.com" +"/fiveages-sim/robot_usds/blob/main/README.md). Swerve graph examples used" +" by the FaSim steering extension: [Swerve extension](2-fasim_isaac.md" +"#swerve-extension)." +msgstr "完整产品列表见 [robot_usds README §3](https://github.com/fiveages-sim/robot_usds/blob/main/README.md)。FaSim 舵轮扩展用到的图示例见 [舵轮扩展](2-fasim_isaac.md#swerve-extension)。" + +#: ../../source/4-reference/simulation/3-robot_usds.md:90 +#: c3d52825a1f64eaabb33785edd712a7c msgid "Related" msgstr "相关" -#: ../../source/4-reference/simulation/3-robot_usds.md:93 -#: 73db9614a86246e5a478ea188b7994ba -msgid "[USD Submodules](4-usd_submodules.md)" -msgstr "[USD 子模块](4-usd_submodules.md)" - -#: ../../source/4-reference/simulation/3-robot_usds.md:94 -#: b4d38857a53840c2926248654c026be4 +#: ../../source/4-reference/simulation/3-robot_usds.md:92 +#: 83333fbfef0e497390950c75e560d08a msgid "[FaSim-Isaac](2-fasim_isaac.md)" msgstr "[FaSim-Isaac](2-fasim_isaac.md)" -#: ../../source/4-reference/simulation/3-robot_usds.md:95 -#: a4774865275d4d8b9d78203187bcf120 -msgid "[Synthetic Data](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)" -msgstr "[合成数据](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)" +#: ../../source/4-reference/simulation/3-robot_usds.md:93 +#: 288337a92e0e42779746963a9043c35a +msgid "[Environment assets](5-env_assets.md)" +msgstr "[环境资产](5-env_assets.md)" + +#: ../../source/4-reference/simulation/3-robot_usds.md:94 +#: 70806fb097d8403ba0f3aea39c6f3f4e +msgid "[Isaac Sim how-to](../../2-how_to/2-simulation/4-isaac_sim.md)" +msgstr "[Isaac Sim 操作说明](../../2-how_to/2-simulation/4-isaac_sim.md)" #~ msgid "Initialize" #~ msgstr "初始化" @@ -400,66 +566,152 @@ 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" +#~ msgid "`robot_usds` provides:" +#~ msgstr "`robot_usds` 提供:" + +#~ msgid "USD robot models for Isaac Sim" +#~ msgstr "用于 Isaac Sim 的 USD 机器人模型" + +#~ msgid "Organized asset hierarchy" +#~ msgstr "结构化的资产层级" + +#~ msgid "Submodule management for brand-specific assets" +#~ msgstr "按品牌管理的资产子模块" + +#~ msgid "Structure" +#~ msgstr "结构" + +#~ msgid "The following are managed as Git submodules:" +#~ msgstr "以下内容作为 Git 子模块管理:" + +#~ msgid "Branch" +#~ msgstr "分支" + +#~ msgid "main" +#~ msgstr "main" + +#~ msgid "Public (`W2/`, `S2/`, `components/`)" +#~ msgstr "公开(`W2/`、`S2/`、`components/`)" + +#~ msgid "galbot-usds" +#~ msgstr "galbot-usds" + +#~ msgid "ubtech-usds" +#~ msgstr "ubtech-usds" + +#~ msgid "Usage" +#~ msgstr "使用方法" + +#~ msgid "" +#~ "**Primary path:** inside FaSim-Isaac, " +#~ "`./init.sh` operation 1 initializes `robots/`" +#~ " (this superproject) according to " +#~ "`submodules_visibility.conf`." +#~ msgstr "" +#~ "**主路径:** 在 FaSim-Isaac 内,`./init.sh` 操作" +#~ " 1 按 `submodules_visibility.conf` 初始化 " +#~ "`robots/`(本超级工程)。" + +#~ msgid "" +#~ "cd FaSim-Isaac\n" +#~ "./init.sh" +#~ msgstr "" +#~ "cd FaSim-Isaac\n" +#~ "./init.sh" + +#~ msgid "Standalone clone only if you are not using FaSim:" +#~ msgstr "仅当你不使用 FaSim 时才单独克隆:" + +#~ msgid "Assets directly in `robot_usds` (not submodules):" +#~ msgstr "`robot_usds` 仓库内直接包含的资产(非子模块):" + +#~ msgid "Mobile + arm" +#~ msgstr "移动底盘 + 机械臂" + +#~ msgid "Asset Naming" +#~ msgstr "资产命名" + +#~ msgid "" +#~ "From the [robot_usds README](https://github.com" +#~ "/fiveages-sim/robot_usds/blob/main/README.md) Humanoid " +#~ "→ FiveAges table:" +#~ msgstr "" +#~ "摘自 [robot_usds README](https://github.com/fiveages-" +#~ "sim/robot_usds/blob/main/README.md) Humanoid → " +#~ "FiveAges 表(不是自造名称):" + +#~ msgid "" +#~ "**Gen1** — W1 (`humanoid/FiveAges/Gen1` → " +#~ "[fiveages-gen1-robot-usds](https://github.com/fiveages-" +#~ "sim/fiveages-gen1-robot-usds), public)" +#~ msgstr "" +#~ "**Gen1** — W1(`humanoid/FiveAges/Gen1` " +#~ "→[fiveages-gen1-robot-usds](https://github.com/fiveages-" +#~ "sim/fiveages-gen1-robot-usds),公开)" + +#~ msgid "" +#~ "Load assets through FaSim-Isaac " +#~ "(`./init.sh` / `./run.sh`) and that " +#~ "robot’s USDA. FaSim `submodules_visibility.conf` " +#~ "still marks the FiveAges Gen\\* trees" +#~ " `private`, so they are not selected" +#~ " by default; you can init the " +#~ "public Gen1/Gen2 gitlinks from `robot_usds`" +#~ " as in that README §2.1." +#~ msgstr "" +#~ "通过 FaSim-Isaac(`./init.sh` / `./run.sh`)和该机器人的" +#~ " USDA 加载资产。FaSim`submodules_visibility.conf`仍把 FiveAges" +#~ " Gen\\* 树标成 `private`,因此默认不勾选;可按该README §2.1 " +#~ "从 `robot_usds`初始化公开的 Gen1/Gen2 gitlink。" + +#~ msgid "[USD Submodules](4-usd_submodules.md)" +#~ msgstr "[USD 子模块](4-usd_submodules.md)" + +#~ 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/" + +#~ msgid "Gen1 and Gen2" +#~ msgstr "Gen1 和 Gen2" + +#~ 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 " +#~ "不在这个仓库里。" + 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 deleted file mode 100644 index 16e02d6..0000000 --- a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/4-usd_submodules.po +++ /dev/null @@ -1,388 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2024-2026, FiveAges -# This file is distributed under the same license as the FiveAges Sim -# package. -# FIRST AUTHOR , 2026. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: FiveAges Sim \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-10-13 02:56+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language: zh_CN\n" -"Language-Team: zh_CN \n" -"Plural-Forms: nplurals=1; plural=0;\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.18.0\n" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:1 -#: c353d53d365b47f1a31399a663b81e06 -msgid "USD Submodules" -msgstr "USD 子模块" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:3 -#: ce82d4885ba64915b96c166dfba80ac2 -msgid "Details on USD submodules referenced by `robot_usds`." -msgstr "`robot_usds` 所引用的 USD 子模块详情。" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:5 -#: b4ce9572902e48d9b95fe684b6022cab -msgid "In-Scope Submodules" -msgstr "范围内的子模块" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:7 -#: a037bb1a54d44624821387315fe5a984 -msgid "" -"These are the only USD repositories in scope for this documentation " -"(based on `robot_usds/.gitmodules`):" -msgstr "根据 `robot_usds/.gitmodules`,本文档仅覆盖以下 USD 仓库:" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 05b8bad5c0c942ad938d7b24ad47c486 -msgid "Path" -msgstr "路径" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: a4c3383f89794fc290410074ffa32477 -msgid "Repository" -msgstr "仓库" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: c6b8fd8e65804dbcb6b9ba475534a580 -msgid "Description" -msgstr "描述" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: eba0d298d1c24275828a792c8ad41e07 -msgid "`humanoid/FiveAges/Gen1`" -msgstr "`humanoid/FiveAges/Gen1`" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 3b6d2f7d8b244c0ba0f9abee108a8535 -msgid "" -"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1" -"-robot-usds)" -msgstr "" -"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 678d435c1891413691f2e2c978555fbf -msgid "W1 / Gen1 (public)" -msgstr "W1 / Gen1(公开)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 9709ada9d00c438ca13202cf520c6149 -msgid "`humanoid/FiveAges/Gen2`" -msgstr "`humanoid/FiveAges/Gen2`" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: dc85e0f4ca924624914f987d32dc93e3 -msgid "" -"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2" -"-robot-usds)" -msgstr "" -"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 0b9a28705579411eba72b53c4b79d5e2 -msgid "W2 / S2 / Gen2 (public; `W2/`, `S2/`, `components/`)" -msgstr "W2 / S2 / Gen2(公开;`W2/`、`S2/`、`components/`)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 47c364e73ca447178768a60f177435ed -msgid "`humanoid/Galbot`" -msgstr "`humanoid/Galbot`" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 2eca2a59a1084960a2a94fc7d97f7b9f -msgid "galbot-usds" -msgstr "galbot-usds" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: ed17403038cf4d9e930190fb83eff416 -msgid "Galbot mobile manipulator" -msgstr "Galbot 移动操作臂" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 261334e40e1b4a14b46ced856f833f13 -msgid "`humanoid/Ubtech`" -msgstr "`humanoid/Ubtech`" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 2f53380d9a134e9491a7e156e0e2f537 -msgid "ubtech-usds" -msgstr "ubtech-usds" - -#: ../../source/4-reference/simulation/4-usd_submodules.md -#: 229a89da90bb46e3a3444df450224b07 -msgid "Ubtech humanoid" -msgstr "Ubtech 人形机器人" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:21 -#: b3a4ca7208c84f628ae45fc5ba6394d3 -msgid "Gen1" -msgstr "Gen1" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:23 -#: d87c98bf089549adb71a22b4be51f39d -msgid "" -"**Repository:** [fiveages-gen1-robot-usds](https://github.com/fiveages-" -"sim/fiveages-gen1-robot-usds)" -msgstr "" -"**仓库:**" -"[fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:25 -#: 51072db02ca54f5b90d93f51ab76a897 -msgid "README name: **W1**. Path: `humanoid/FiveAges/Gen1`. Public." -msgstr "README 名称:**W1**。路径:`humanoid/FiveAges/Gen1`。公开。" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:27 -#: 87269ec9bb554adcb4ef59dd4f9b96aa -msgid "Gen2" -msgstr "Gen2" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:29 -#: 0e25cb84d79044c08634aa7b243a9871 -msgid "" -"**Repository:** [fiveages-gen2-robot-usds](https://github.com/fiveages-" -"sim/fiveages-gen2-robot-usds)" -msgstr "" -"**仓库:**" -"[fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:39 -#: 4a0e2f07ec9242f298ccb49c528868fe -msgid "Galbot" -msgstr "Galbot" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:41 -#: 1ac2deded7924dfda6c469cbf4febf33 -msgid "" -"**Repository:** [fiveages-sim/galbot-usds](https://github.com/fiveages-" -"sim/galbot-usds)" -msgstr "" -"**仓库:** [fiveages-sim/galbot-usds](https://github.com/fiveages-sim" -"/galbot-usds)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:43 -#: c26d8542a4b94784b0d45b3a35ccdc63 -msgid "Galbot mobile manipulator USD assets." -msgstr "Galbot 移动操作臂 USD 资产。" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:45 -#: 40c978b95ec144b9ade8b325ea321cbf -msgid "Contents" -msgstr "内容" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:47 -#: 648fd4f06d5f4579b6c90745b9b4c123 -msgid "Robot USD model" -msgstr "机器人 USD 模型" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:48 -#: 3dba39b2acb34f8499e22d3509928c72 -msgid "Textures and materials" -msgstr "纹理与材质" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:49 -#: bf6ea4ec26f542659a3f35ae1ebc3584 -msgid "Physics properties" -msgstr "物理属性" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:51 -#: 549ec929a2904f468a1c2139f296d95c -msgid "Ubtech" -msgstr "Ubtech" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:53 -#: 69ffe60ae9ae477fa8bd54af5312f947 -msgid "**Repository:** ubtech-usds" -msgstr "**仓库:** ubtech-usds" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:55 -#: fa8f8b33941c4919b10ebb4d356e40be -msgid "Ubtech humanoid USD assets." -msgstr "Ubtech 人形机器人 USD 资产。" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:57 -#: c00eda4fdfa546e2a5e73f2520cb6db0 -msgid "" -"Note: Referenced as a `robot_usds` submodule; minimal separate " -"documentation." -msgstr "注意:作为 `robot_usds` 子模块引用,无单独详细文档。" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:59 -#: 6ea8f608da8845dd89edd22e120c9ce0 -msgid "Out of Scope" -msgstr "超出范围" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:61 -#: fb389515b4f74597bda69604229ba2cd -msgid "" -"The following USD repositories are **not** documented as they are not " -"referenced in `robot_usds/.gitmodules`:" -msgstr "以下 USD 仓库未在 `robot_usds/.gitmodules` 中引用,因此**不在**本文档范围内:" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:63 -#: 7da37954043a49f3a4d70c0e000e14ad -msgid "`fa-w2-usds` — Not in current gitmodules" -msgstr "`fa-w2-usds` — 不在当前 gitmodules 中" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:64 -#: 41645b7494334f84bd20d439a6e2a31e -msgid "`agibot-g2-usds` — Not in current gitmodules" -msgstr "`agibot-g2-usds` — 不在当前 gitmodules 中" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:65 -#: 032da973bfaf41b2a68f4b051f6b37c1 -msgid "`marvin-usds` — Obsolete/unreferenced" -msgstr "`marvin-usds` — 已过时/未被引用" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:67 -#: 5a456184b27f4e04b2a14ec195a26a18 -msgid "Updating Submodules" -msgstr "更新子模块" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:69 -#: 667a7efa06e14d3e84d1253a80656a45 -msgid "Check Current Pins" -msgstr "查看当前固定版本" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:71 -#: ec9963d569e7488aaccd874b83b2c929 -msgid "" -"cd robot_usds\n" -"git submodule status\n" -msgstr "" -"cd robot_usds\n" -"git submodule status\n" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:76 -#: 6553c0314cd94403a9253144880491fd -msgid "Update to Latest" -msgstr "更新到最新版本" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:78 -#: c36ad0130f2c4aa2a7eb11450984ea00 -msgid "git submodule update --remote humanoid/Galbot\n" -msgstr "git submodule update --remote humanoid/Galbot\n" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:82 -#: a4ace102ddd947debfa519a245c2522d -msgid "Pin to Specific Commit" -msgstr "固定到指定提交" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:84 -#: 0e8b1b513c42492b9ccb94e8112a0b78 -msgid "" -"cd humanoid/Galbot\n" -"git checkout \n" -"cd ../..\n" -"git add humanoid/Galbot\n" -"git commit -m \"Pin Galbot to \"\n" -msgstr "" -"cd humanoid/Galbot\n" -"git checkout \n" -"cd ../..\n" -"git add humanoid/Galbot\n" -"git commit -m \"Pin Galbot to \"\n" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:92 -#: 41f8f43453b942f9b39f500702349059 -msgid "Related" -msgstr "相关内容" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:94 -#: e2f7aefc634f4a9d8435fbc8a654c2cc -msgid "[robot_usds](3-robot_usds.md)" -msgstr "[robot_usds](3-robot_usds.md)" - -#: ../../source/4-reference/simulation/4-usd_submodules.md:95 -#: 1220def66f0844d48922111d5c764d80 -msgid "[FaSim-Isaac](2-fasim_isaac.md)" -msgstr "[FaSim-Isaac](2-fasim_isaac.md)" - -#~ msgid "Gen1 humanoid" -#~ msgstr "Gen1 人形机器人" - -#~ msgid "Gen2 humanoid" -#~ msgstr "Gen2 人形机器人" - -#~ msgid "Gen3 humanoid" -#~ msgstr "Gen3 人形机器人" - -#~ msgid "FiveAges robot USD assets organized by development generation." -#~ msgstr "按研发代际组织的 FiveAges 机器人 USD 资产。" - -#~ msgid "First generation humanoid assets." -#~ msgstr "第一代人形机器人资产。" - -#~ msgid "Second generation humanoid assets." -#~ msgstr "第二代人形机器人资产。" - -#~ msgid "Third generation humanoid assets." -#~ msgstr "第三代人形机器人资产。" - -#~ msgid "fiveages-gen1-robot-usds" -#~ msgstr "fiveages-gen1-robot-usds" - -#~ msgid "fiveages-gen2-robot-usds" -#~ msgstr "fiveages-gen2-robot-usds" - -#~ msgid "W2 / S2 / Gen2 (private remote)" -#~ msgstr "W2 / S2 / Gen2(私有远端)" - -#~ msgid "**Repository:** fiveages-gen1-robot-usds" -#~ msgstr "**仓库:** fiveages-gen1-robot-usds" - -#~ msgid "**Repository:** fiveages-gen2-robot-usds" -#~ msgstr "**仓库:** fiveages-gen2-robot-usds" - -#~ 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/4-reference/simulation/5-env_assets.po b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/5-env_assets.po index bf9ef60..44781da 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/simulation/5-env_assets.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/simulation/5-env_assets.po @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,116 +20,153 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/4-reference/simulation/5-env_assets.md:1 -#: c340b61731534cc8858ba84b18a4ee71 +#: 25a6385bbdf442b7a5357f23cfe26f79 msgid "Environment Assets" msgstr "环境资产" #: ../../source/4-reference/simulation/5-env_assets.md:3 -#: a4c2b3493f3b4bf685ecbfddaf834607 -msgid "USD environment and scene assets for simulation." -msgstr "用于仿真的 USD 环境与场景资产。" +#: 00b53a89f6814d0bb591cda12e08964e +msgid "" +"USD environment and project scenes used with Isaac Sim. These trees are " +"siblings of `robots/`, not submodules of `robot_usds`." +msgstr "与 Isaac Sim 一起用的环境和项目场景 USD。这些树和 `robots/` 同级,不是 `robot_usds` 的子模块。" #: ../../source/4-reference/simulation/5-env_assets.md:5 -#: 8fb11de8a2cc4a949435df3985e2ec54 -msgid "Overview" -msgstr "概述" +#: d4c358f5ba73407997cdeead7336d817 +msgid "" +"Robot models: [robot_usds](3-robot_usds.md). How to start Sim and open a " +"file: [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md). There is " +"no `./run.sh --env` flag; open the scene USD from `environment/` after " +"`./run.sh`." +msgstr "机器人模型见 [robot_usds](3-robot_usds.md)。如何启动 Sim 并打开文件见 [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md)。没有 `./run.sh --env`;`./run.sh` 之后从 `environment/` 打开场景 USD。" #: ../../source/4-reference/simulation/5-env_assets.md:7 -#: f03d22a6eef84f59be9fdee6521d8d81 -msgid "Environment assets are separate from robot assets:" -msgstr "环境资产与机器人资产相互独立:" - -#: ../../source/4-reference/simulation/5-env_assets.md:8 -#: 5e3739e20cf74f0b878ea6bd5e4b3132 -msgid "**robot_usds** — Robot models" -msgstr "**robot_usds** — 机器人模型" +#: 65572fd2481e40fab84c26447dc5e247 +msgid "Location in FaSim-Isaac" +msgstr "在 FaSim-Isaac 中:" #: ../../source/4-reference/simulation/5-env_assets.md:9 -#: 4b73304d2b9e47fbb097930eb6c35039 -msgid "**Environment assets** — Scenes, objects, terrain" -msgstr "**环境资产** — 场景、物体、地形" +#: af3efdd399f143e681075a111e728aa8 +msgid "" +"FaSim-Isaac/\n" +"├── robots/ # robot_usds\n" +"└── environment/\n" +" ├── fiveages_env/ # → fiveages-env-usds\n" +" ├── fa-project-usd/ # private project scenes\n" +" ├── artvip-usd/ # ArtVIP components\n" +" ├── labutopia-usd/ # LabUtopia components (private)\n" +" └── ArtVIP/ # official ArtVIP download (gitignore)" +msgstr "FaSim-Isaac/\n├── robots/ # robot_usds\n└── environment/\n ├── fiveages_env/ # → fiveages-env-usds\n ├── fa-project-usd/ # 私有项目场景\n ├── artvip-usd/ # ArtVIP 组件\n ├── labutopia-usd/ # LabUtopia 组件(私有)\n └── ArtVIP/ # 官方 ArtVIP 下载(gitignore)\n" + +#: ../../source/4-reference/simulation/5-env_assets.md:20 +#: 304572ad8a1c4cc7a846ef6dbe664614 +msgid "" +"Top-level URLs: [FaSim-Isaac `.gitmodules`](https://github.com/fiveages-" +"sim/FaSim-Isaac/blob/main/.gitmodules). `./init.sh` operation 1 uses " +"`submodules_visibility.conf`. As checked on 2026-11-13, `environment/fa-" +"project-usd` and `environment/labutopia-usd` are marked private " +"(unchecked until you have access). `environment/artvip-usd` is not listed" +" as private in that file, so operation 1 checks it with the other public-" +"marked items. The GitHub repository itself is still private; cloning it " +"needs access." +msgstr "顶层地址见 [FaSim-Isaac `.gitmodules`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/.gitmodules)。`./init.sh` 操作 1 使用 `submodules_visibility.conf`。以 2026-11-13 的核对为准,`environment/fa-project-usd` 和 `environment/labutopia-usd` 被标为私有(有权限之前不勾选)。`environment/artvip-usd` 没有在该文件里标成私有,所以操作 1 会把它和其他公开项一起勾上。GitHub 仓库本身仍是私有的,克隆需要权限。" -#: ../../source/4-reference/simulation/5-env_assets.md:11 -#: 5abe9d0582284fc2b33399334e88b7a0 -msgid "fiveages-env-usds" +#: ../../source/4-reference/simulation/5-env_assets.md:22 +#: 169230441d594997bb62e82a9aa7f3a9 +msgid "fiveages_env" msgstr "fiveages-env-usds" -#: ../../source/4-reference/simulation/5-env_assets.md:13 -#: acb8f2b4fe584e5ebb21f23c77fa0fa1 +#: ../../source/4-reference/simulation/5-env_assets.md:24 +#: 46bab6f9f8674d48bc8dcf9552312f6b msgid "" "**Repository:** [fiveages-sim/fiveages-env-usds](https://github.com" -"/fiveages-sim/fiveages-env-usds)" +"/fiveages-sim/fiveages-env-usds) (public)" msgstr "" "**仓库:** [fiveages-sim/fiveages-env-usds](https://github.com/fiveages-sim" "/fiveages-env-usds)" -#: ../../source/4-reference/simulation/5-env_assets.md:15 -#: ../../source/4-reference/simulation/5-env_assets.md:45 -#: 24e3d30f03ad40e1a102320408eb5a84 f0033160313e474b919d951d81033e65 -msgid "Purpose" -msgstr "用途" +#: ../../source/4-reference/simulation/5-env_assets.md:26 +#: 753f41ea19e14abe8ffc552e9e2e9960 +msgid "" +"Shared Isaac scenes and task composition, as described in that " +"[README](https://github.com/fiveages-sim/fiveages-env-" +"usds/blob/main/README.md):" +msgstr "共用的 Isaac 场景和任务组合,见该仓库 [README](https://github.com/fiveages-sim/fiveages-env-usds/blob/main/README.md):" -#: ../../source/4-reference/simulation/5-env_assets.md:17 -#: 64fd13bfb6c845bdabff931ffe8cba33 -msgid "Public environment USD assets:" -msgstr "公开的环境 USD 资产:" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: 3edd68e14d3b48b3b2fa9a61e04b6ed8 +msgid "Directory" +msgstr "目录" -#: ../../source/4-reference/simulation/5-env_assets.md:18 -#: 5e13eac82d0942cfb3824ef6f1de95ca -msgid "Indoor scenes (office, lab)" -msgstr "室内场景(办公室、实验室)" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: d8d9710f604848728380a2fb3c80c0fe +msgid "Content" +msgstr "内容" -#: ../../source/4-reference/simulation/5-env_assets.md:19 -#: 456d57dd41d5448bba3e441e4a487717 -msgid "Objects for manipulation" -msgstr "操作物体" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: 64b29abd8ae94cebb99d0edfdaa7f3f0 +msgid "`static/`" +msgstr "`static/`" -#: ../../source/4-reference/simulation/5-env_assets.md:20 -#: 70f294dd31664aad88b9d71b1dc25fef -msgid "Terrain" -msgstr "地形" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: cfbc97e87dbe421389100f2ab76609b3 +msgid "Static parts: tables, boxes, shelves" +msgstr "静态部件:桌子、箱子、货架" -#: ../../source/4-reference/simulation/5-env_assets.md:22 -#: ../../source/4-reference/simulation/5-env_assets.md:49 -#: 8b12a331a2d24052bb7eece1106b0c3b d3df7f1faa4441e2ab2a172173d9da55 -msgid "Location" -msgstr "位置" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: 1ba62e04c80b4643bf0e245963ae388c +msgid "`moveable/`" +msgstr "`moveable/`" -#: ../../source/4-reference/simulation/5-env_assets.md:24 -#: 876ccea5726747b898713123fb9d72de -msgid "In FaSim-Isaac:" -msgstr "在 FaSim-Isaac 中:" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: f18b210d7a184a1ca76afe8ec503f762 +msgid "Small movable objects" +msgstr "可移动的小物体" -#: ../../source/4-reference/simulation/5-env_assets.md:25 -#: 86a8894ae4e74f77b0dbdf61e1fee2f3 -msgid "" -"FaSim-Isaac/\n" -"└── environment/\n" -" └── fiveages_env/ # → fiveages-env-usds" -msgstr "" -"FaSim-Isaac/\n" -"└── environment/\n" -" └── fiveages_env/ # → fiveages-env-usds" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: d16b4d19dadf4c6ab13d16130edca370 +msgid "`articulation/`" +msgstr "`articulation/`" -#: ../../source/4-reference/simulation/5-env_assets.md:31 -#: c4d045eab484453c990872ceebdd8799 -msgid "Usage" -msgstr "使用方法" +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: 6e1262b426b74f45b1dcc1b48e45591f +msgid "Articulated mechanisms such as drawers" +msgstr "带关节的机构,例如抽屉" -#: ../../source/4-reference/simulation/5-env_assets.md:33 -#: 85460f0378ef4190a5149a27244aa9c1 +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: da9b307a5d424a63968fdc7cf83088c3 +msgid "`background/`" +msgstr "`background/`" + +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: e47d70282751475d9ba2bdca92fbbcc8 +msgid "Room and background geometry" +msgstr "房间和背景几何" + +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: f404e7d11a0348198e6d1c740d23fd34 +msgid "`tasks/`" +msgstr "`tasks/`" + +#: ../../source/4-reference/simulation/5-env_assets.md:9 +#: c6844abb66b64d9e8edccc20cb7366c5 +msgid "Composed task scenes that reference the directories above" +msgstr "引用上述目录的组合任务场景" + +#: ../../source/4-reference/simulation/5-env_assets.md:36 +#: 32485af91cf3408b9c0f530419666181 msgid "" -"Start Isaac with FaSim `./run.sh` and open the scene USD under " -"`environment/fiveages_env/`." -msgstr "用 FaSim 的 `./run.sh` 启动 Isaac,并打开 `environment/fiveages_env/` 下的场景 USD。" +"Browse the repository for the current USD files. Open a scene under " +"`environment/fiveages_env/` in Isaac after `./run.sh`." +msgstr "当前的 USD 文件可直接在仓库里浏览。`./run.sh` 之后,在 Isaac 中打开 `environment/fiveages_env/` 下的场景。" -#: ../../source/4-reference/simulation/5-env_assets.md:35 -#: af6785ab6b60477098021d9d001740af +#: ../../source/4-reference/simulation/5-env_assets.md:40 +#: 01ed30b46d414a679461ac887a55da2a msgid "fa-project-usd" msgstr "fa-project-usd" -#: ../../source/4-reference/simulation/5-env_assets.md:37 -#: ec106c16665041b6b880cf8f50de6776 +#: ../../source/4-reference/simulation/5-env_assets.md:42 +#: 585283fb34854077a95e405c65709f08 msgid "" "**Repository:** [fa-project-usd](https://github.com/fiveages-sim/fa-" "project-usd) (private; the link needs access)" @@ -138,121 +174,116 @@ msgstr "" "**仓库:** [fa-project-usd](https://github.com/fiveages-sim/fa-project-" "usd)(私有;链接需要权限)" -#: ../../source/4-reference/simulation/5-env_assets.md:39 -#: 641fb2827f8b4085adf583428d086b9d -msgid "Access Required" -msgstr "需要访问权限" - -#: ../../source/4-reference/simulation/5-env_assets.md:42 -#: 34b2e17e16d346258121ef2b10514673 -msgid "This repository is private." -msgstr "该仓库为私有仓库。" - -#: ../../source/4-reference/simulation/5-env_assets.md:47 -#: aac3bbf2c9d3418e8ee100a039118ebe -msgid "Internal project-specific USD scenes and assets." -msgstr "内部项目专用的 USD 场景与资产。" - -#: ../../source/4-reference/simulation/5-env_assets.md:51 -#: e6343b19cd824c95afd432b398b09e84 +#: ../../source/4-reference/simulation/5-env_assets.md:44 +#: a0207f20731544e7bd38178248490137 msgid "" -"FaSim-Isaac/\n" -"└── environment/\n" -" └── fa-project-usd/" +"Internal project scenes. 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)). Projects may sit at the " +"repository root or under a customer or series directory." msgstr "" -"FaSim-Isaac/\n" -"└── environment/\n" -" └── fa-project-usd/" - -#: ../../source/4-reference/simulation/5-env_assets.md:57 -#: 2b497a455b0b4437817f6cec0397927a -msgid "Not robot_usds Submodules" -msgstr "不是 robot_usds 的子模块" - -#: ../../source/4-reference/simulation/5-env_assets.md:59 -#: b4c8e8e28bc049aa8ef7d1af128788f9 -msgid "Important" -msgstr "重要" - -#: ../../source/4-reference/simulation/5-env_assets.md:62 -#: 78fe321f6ad64377a2831fa7f382bf04 -msgid "Environment assets are **not** submodules of `robot_usds`. They are:" -msgstr "环境资产**不是** `robot_usds` 的子模块。它们是:" - -#: ../../source/4-reference/simulation/5-env_assets.md:63 -#: cfa384529b8f48c7b8ffbf5f50bc59fe -msgid "Sibling directories in FaSim-Isaac" -msgstr "FaSim-Isaac 中的同级目录" - -#: ../../source/4-reference/simulation/5-env_assets.md:64 -#: b4e25c9f8d5c4ca59bf73af9104bc7de -msgid "Separate submodules of FaSim-Isaac itself" -msgstr "FaSim-Isaac 自身的独立子模块" - -#: ../../source/4-reference/simulation/5-env_assets.md:67 -#: 9dc3f7e9bd6844c1a1138c3f74539022 -msgid "Usage in FaSim" -msgstr "在 FaSim 中的用法" +"用 `./run.sh` 打开该文件。在 `main` 上,一个项目是 `scene.usd(a)`、`objects/` 和 " +"`env/`([README](https://github.com/fiveages-sim/fa-project-" +"usd/blob/main/README.md))。`robot.yaml`、`task_configs/` 以及 `maps/` 或 " +"`map/` 在分支 `feature/sinopec-test-tube-picking` 上(领先 `main`,尚未合入)。" -#: ../../source/4-reference/simulation/5-env_assets.md:69 -#: aa37f20aa306473a92c3686e6faed112 +#: ../../source/4-reference/simulation/5-env_assets.md:46 +#: 742ac2cdcb9d4fb9ab52cfdf5496f3ba msgid "" -"Start Isaac with FaSim `./run.sh` (PhysX / Newton / Headless Streaming " -"menu). Open the scene USD under `environment/fiveages_env/` (or `fa-" -"project-usd/`) in Isaac. There is no `./run.sh --env` flag." -msgstr "" -"用 FaSim `./run.sh` 启动 Isaac(PhysX / Newton / Headless Streaming 菜单)。在 " -"Isaac 中打开 `environment/fiveages_env/`(或 `fa-project-usd/`)下的场景 USD。没有 " -"`./run.sh --env` 参数。" - -#: ../../source/4-reference/simulation/5-env_assets.md:71 -#: f23104095df54a988191b10f45ba4256 -msgid "Creating Custom Environments" -msgstr "创建自定义环境" - -#: ../../source/4-reference/simulation/5-env_assets.md:73 -#: 85fdecf665e44ce188fdc63693bfde46 +"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." +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`。打开该分支需要权限。" + +#: ../../source/4-reference/simulation/5-env_assets.md:48 +#: eb2d5af888314ecb9759c935d29c2f68 +msgid "" +"`NavigationLaunch` can point `map` at a `map.yaml` stored in that " +"project, as a path relative to the opened `env/` layer. The node itself " +"is documented under [FaSim-Isaac Navigation](2-fasim_isaac.md#navigation). 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 "`NavigationLaunch` 可以把 `map` 指到该项目中的 `map.yaml`,路径相对于打开的 `env/` 层。节点本身写在 [FaSim-Isaac 导航](2-fasim_isaac.md#navigation)。公开的项目目录运行方式见 [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/5-env_assets.md:50 +#: 0d8f84f05690413f8d971f5617619a0c +msgid "ArtVIP and LabUtopia" +msgstr "ArtVIP 与 LabUtopia" + +#: ../../source/4-reference/simulation/5-env_assets.md:52 +#: 4b3dc61372b948bf8a8d2627bba2bb0c +msgid "" +"`environment/artvip-usd` ([artvip-usd](https://github.com/fiveages-sim" +"/artvip-usd)) holds ArtVIP scene components that payload the official " +"dataset. `./init.sh` operation 3 downloads the official data into " +"`environment/ArtVIP/` with `tools/artvip_kitchen.py`. The FaSim README: " +"scene components stay in `artvip-usd`; the official data is not " +"committed." +msgstr "`environment/artvip-usd`([artvip-usd](https://github.com/fiveages-sim/artvip-usd))存放 payload 官方数据集的 ArtVIP 场景组件。`./init.sh` 操作 3 用 `tools/artvip_kitchen.py` 把官方数据下到 `environment/ArtVIP/`。FaSim README:场景组件留在 `artvip-usd`,官方数据不入库。" + +#: ../../source/4-reference/simulation/5-env_assets.md:54 +#: 0995e43013fd4fb19e34084dc9cf4552 +msgid "" +"`environment/labutopia-usd` ([labutopia-usd](https://github.com/fiveages-" +"sim/labutopia-usd)) holds LabUtopia components. The repository is " +"private, and FaSim marks the submodule private." +msgstr "`environment/labutopia-usd`([labutopia-usd](https://github.com/fiveages-sim/labutopia-usd))存放 LabUtopia 组件。仓库是私有的,FaSim 也把该子模块标为私有。" + +#: ../../source/4-reference/simulation/5-env_assets.md:56 +#: 294d29d4a70e4e4d8a26ebd96b48e341 +msgid "Creating a custom scene" +msgstr "创建自定义场景" + +#: ../../source/4-reference/simulation/5-env_assets.md:58 +#: 7537c82870a543f9b87998906ac66e20 msgid "Create the USD scene in Isaac Sim." msgstr "在 Isaac Sim 里创建 USD 场景。" -#: ../../source/4-reference/simulation/5-env_assets.md:74 -#: 04a5991f850048268079666458604b4e +#: ../../source/4-reference/simulation/5-env_assets.md:59 +#: ec5a15f5c3c64f648925ba43f91d6282 msgid "" "Put it under `environment/fiveages_env/` or, with access, under [fa-" -"project-usd](https://github.com/fiveages-sim/fa-project-usd)." -msgstr "" -"放到 `environment/fiveages_env/`,或有权限时放到 [fa-project-" -"usd](https://github.com/fiveages-sim/fa-project-usd)。" +"project-usd](https://github.com/fiveages-sim/fa-project-usd) using the " +"`scene` / `objects` / `env` layout on `main`." +msgstr "放到 `environment/fiveages_env/`,或有权限时放到 [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd),并使用 `main` 上的 `scene` / `objects` / `env` 布局。" -#: ../../source/4-reference/simulation/5-env_assets.md:75 -#: 6bce1b50b4934a479240ca6900b732ff -msgid "" -"Open that file from `./run.sh`. On `main`, a project is `scene.usd(a)`, " -"`objects/`, and `env/` ([README](https://github.com/fiveages-sim/fa-" -"project-usd/blob/main/README.md)). `robot.yaml`, `task_configs/`, and " -"`maps/` or `map/` sit on branch `feature/sinopec-test-tube-picking` " -"(ahead of `main`, not merged)." -msgstr "" -"用 `./run.sh` 打开该文件。在 `main` 上,一个项目是 `scene.usd(a)`、`objects/` 和 " -"`env/`([README](https://github.com/fiveages-sim/fa-project-" -"usd/blob/main/README.md))。`robot.yaml`、`task_configs/` 以及 `maps/` 或 " -"`map/` 在分支 `feature/sinopec-test-tube-picking` 上(领先 `main`,尚未合入)。" +#: ../../source/4-reference/simulation/5-env_assets.md:60 +#: 32f2b8c2b3084d4d83747da9d0d7e7f9 +msgid "Open that file from `./run.sh`." +msgstr "用 `./run.sh` 打开那份文件。" -#: ../../source/4-reference/simulation/5-env_assets.md:77 -#: 6e8a35c96f894237a9aaf6e9b65eb56e +#: ../../source/4-reference/simulation/5-env_assets.md:62 +#: 702c156a647f49eeabdb03cd648a22d3 msgid "Related" msgstr "相关内容" -#: ../../source/4-reference/simulation/5-env_assets.md:79 -#: 9118f77b0e074ac78ed4b7bcb3a98208 +#: ../../source/4-reference/simulation/5-env_assets.md:64 +#: d23dcb0f32a14114896e767b79809ac7 msgid "[robot_usds](3-robot_usds.md)" msgstr "[robot_usds](3-robot_usds.md)" -#: ../../source/4-reference/simulation/5-env_assets.md:80 -#: 683649b091dd42dfae0cec74343eb9cd +#: ../../source/4-reference/simulation/5-env_assets.md:65 +#: 68398ec6c1fc407e8287cfb9e5787715 msgid "[FaSim-Isaac](2-fasim_isaac.md)" msgstr "[FaSim-Isaac](2-fasim_isaac.md)" +#: ../../source/4-reference/simulation/5-env_assets.md:66 +#: a2d69b05a64d46c281e09a66ee6f922c +msgid "[Isaac Sim how-to](../../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/5-env_assets.md:67 +#: 90d604586d2e4785802bcf249153ccc2 +msgid "" +"[Isaac Scenes and USD](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)" +" (datagen pipeline)" +msgstr "[Isaac 场景与 USD](../../2-how_to/7-synthetic_data/1-isaac_scenes.md)(数采流水线)" + #~ msgid "" #~ "FaSim-Isaac/\n" #~ "└── environment/\n" @@ -324,3 +355,104 @@ msgstr "[FaSim-Isaac](2-fasim_isaac.md)" #~ "# Custom scene setup\n" #~ "scene_path = \"environment/custom_scene.usd\"\n" +#~ msgid "USD environment and scene assets for simulation." +#~ msgstr "用于仿真的 USD 环境与场景资产。" + +#~ msgid "Overview" +#~ msgstr "概述" + +#~ msgid "Environment assets are separate from robot assets:" +#~ msgstr "环境资产与机器人资产相互独立:" + +#~ msgid "**robot_usds** — Robot models" +#~ msgstr "**robot_usds** — 机器人模型" + +#~ msgid "**Environment assets** — Scenes, objects, terrain" +#~ msgstr "**环境资产** — 场景、物体、地形" + +#~ msgid "Purpose" +#~ msgstr "用途" + +#~ msgid "Public environment USD assets:" +#~ msgstr "公开的环境 USD 资产:" + +#~ msgid "Indoor scenes (office, lab)" +#~ msgstr "室内场景(办公室、实验室)" + +#~ msgid "Objects for manipulation" +#~ msgstr "操作物体" + +#~ msgid "Terrain" +#~ msgstr "地形" + +#~ msgid "Location" +#~ msgstr "位置" + +#~ msgid "" +#~ "FaSim-Isaac/\n" +#~ "└── environment/\n" +#~ " └── fiveages_env/ # → fiveages-env-usds" +#~ msgstr "" +#~ "FaSim-Isaac/\n" +#~ "└── environment/\n" +#~ " └── fiveages_env/ # → fiveages-env-usds" + +#~ msgid "Usage" +#~ msgstr "使用方法" + +#~ msgid "" +#~ "Start Isaac with FaSim `./run.sh` and" +#~ " open the scene USD under " +#~ "`environment/fiveages_env/`." +#~ msgstr "用 FaSim 的 `./run.sh` 启动 Isaac,并打开 `environment/fiveages_env/` 下的场景 USD。" + +#~ msgid "Access Required" +#~ msgstr "需要访问权限" + +#~ msgid "This repository is private." +#~ msgstr "该仓库为私有仓库。" + +#~ msgid "Internal project-specific USD scenes and assets." +#~ msgstr "内部项目专用的 USD 场景与资产。" + +#~ msgid "" +#~ "FaSim-Isaac/\n" +#~ "└── environment/\n" +#~ " └── fa-project-usd/" +#~ msgstr "" +#~ "FaSim-Isaac/\n" +#~ "└── environment/\n" +#~ " └── fa-project-usd/" + +#~ msgid "Not robot_usds Submodules" +#~ msgstr "不是 robot_usds 的子模块" + +#~ msgid "Important" +#~ msgstr "重要" + +#~ msgid "Environment assets are **not** submodules of `robot_usds`. They are:" +#~ msgstr "环境资产**不是** `robot_usds` 的子模块。它们是:" + +#~ msgid "Sibling directories in FaSim-Isaac" +#~ msgstr "FaSim-Isaac 中的同级目录" + +#~ msgid "Separate submodules of FaSim-Isaac itself" +#~ msgstr "FaSim-Isaac 自身的独立子模块" + +#~ msgid "Usage in FaSim" +#~ msgstr "在 FaSim 中的用法" + +#~ msgid "" +#~ "Start Isaac with FaSim `./run.sh` (PhysX" +#~ " / Newton / Headless Streaming menu)." +#~ " Open the scene USD under " +#~ "`environment/fiveages_env/` (or `fa-project-" +#~ "usd/`) in Isaac. There is no " +#~ "`./run.sh --env` flag." +#~ msgstr "" +#~ "用 FaSim `./run.sh` 启动 Isaac(PhysX / " +#~ "Newton / Headless Streaming 菜单)。在 Isaac" +#~ " 中打开 `environment/fiveages_env/`(或 `fa-" +#~ "project-usd/`)下的场景 USD。没有 `./run.sh --env` " +#~ "参数。" + diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/teleop/0-index.po b/locale/zh_CN/LC_MESSAGES/4-reference/teleop/0-index.po index ea15e46..b84b51f 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/teleop/0-index.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/teleop/0-index.po @@ -193,6 +193,139 @@ msgstr "`/teleop/head_pose`" msgid "Head tracking" msgstr "头部追踪" + +#: ../../source/4-reference/teleop/0-index.md:7 +#: 9766153d8a1547af9080abf73350f802 +msgid "" +"The stack supports several teleoperation inputs. They are not " +"interchangeable: some supply **end-effector pose**, some follow in **joint" +" space**, some drive **fingers or grippers**, and some only send **enable " +"/ pause / FSM** assists. For a first run, use " +"[VR](../../2-how_to/5-teleoperation/6-vr_teleop.md) or a [game " +"controller](../../2-how_to/5-teleoperation/9-joystick_teleop.md)." +msgstr "" +"本系统支持多种遥操作输入,彼此不能互相替代:有的提供**末端位姿**,有的在**关节空间**跟随,有的驱动**手指或夹爪**,有的只发送**使能 /" +" 暂停 / FSM** 辅助。第一次上手,用 [VR](../../2-how_to/5-teleoperation/6-vr_teleop.md)" +" 或 [游戏手柄](../../2-how_to/5-teleoperation/9-joystick_teleop.md)。" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 88c3b67f0e9d4c0e838523fcba6d337f +msgid "Input" +msgstr "输入" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 9108af5315d94eb8b144a2744ae8633b +msgid "Role" +msgstr "职责" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 106e6405454344b4a6196bbc37bd8170 +msgid "Headset + VR controllers (Pico Enterprise / consumer, Meta Quest)" +msgstr "头显 + VR 手柄(Pico Enterprise / 消费版、Meta Quest)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: e8741034d4dd4939942b94edd1bb14a3 +msgid "" +"End-effector pose; triggers for gripper/hand; buttons for FSM and pause. " +"The current `./run.sh vr` path starts controller mode; this docs set does " +"not document a launch entry for VR gesture / hand-tracking recognition." +msgstr "" +"末端位姿;扳机关夹爪或手;按键处理 FSM 和暂停。当前的 `./run.sh vr` 路径启动的是头显手柄模式;本页文档没有给出打开 VR " +"手势或手部追踪识别的启动入口。" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: ad3439c70f004679a0549dc62c4f941e +msgid "Game controller" +msgstr "游戏手柄" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 50ea95abb64b4e4189d3c5547930530d +msgid "Joystick / gamepad (`arms_teleop`)" +msgstr "摇杆 / 游戏手柄(`arms_teleop`)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 11bf3c1e6000486f98c26f909ecbdccd +msgid "" +"Arm velocity via `control_input` → twist; chassis `/cmd_vel` in chassis " +"mode" +msgstr "通过 `control_input` → twist 控制手臂速度;底盘模式下发 `/cmd_vel`" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: bc9d50a9f1034319bbf3aa45a08a5b95 +msgid "DexCap (internal)" +msgstr "DexCap(内部)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 1459b56a9b204405bf6426480aeede94 +msgid "Exoskeleton + gloves" +msgstr "外骨骼 + 手套" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: e613b023c352470481ac9f71b1d2fdc2 +msgid "Waist/arm joints from the exoskeleton; finger joints from the gloves" +msgstr "外骨骼提供腰部和手臂关节,手套提供手指关节" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: acfc6d5819e642a8950ccdc4c9b73b77 +msgid "Wuji gloves (internal)" +msgstr "Wuji 手套(内部)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 2dbd2f74255041bab30b7514b5c8522d +msgid "Gloves, optional Vive Tracker" +msgstr "手套,可选配 Vive Tracker" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 674dcfb4f2d54aff953e093d8a51fcac +msgid "Finger / hand joints; optional arm pose from Vive Tracker" +msgstr "手指 / 手部关节;可选由 Vive Tracker 提供手臂位姿" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: c3f92cc6ae344d0189cf6cbc3d07af1a +msgid "Vive Tracker (internal)" +msgstr "Vive Tracker(内部)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 1a4dc949f2534b53b44f8cc08d5393fc +msgid "SteamVR Vive Tracker (`vive_tracker_teleop`)" +msgstr "SteamVR Vive Tracker(`vive_tracker_teleop`)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 8ff9565e04304cf68863a770ab2df65b +msgid "" +"Arm end-effector pose. Named **Vive Tracker** in the package and in these " +"docs, not “Valve Tracker”." +msgstr "手臂末端位姿。软件包和本文档中的名称是 **Vive Tracker**,而不是 “Valve Tracker”。" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: 2b1c0b84019b4e54b247e25908a8a2a8 +msgid "Foot pedal" +msgstr "脚踏板" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: e36fd37bb52744bda67f0715909d13a3 +msgid "USB pedal (`arms_teleop`, SayoDevice CM6K)" +msgstr "USB 脚踏板(`arms_teleop`,SayoDevice CM6K)" + +#: ../../source/4-reference/teleop/0-index.md:0 +#: bfe58a54f8f44dfd8fa696f19931f485 +msgid "" +"Assist only: events on `/teleop/controller_state`. Not a complete teleop " +"setup." +msgstr "仅作辅助:在 `/teleop/controller_state` 上发布事件。不是完整的遥操作方案。" + +#: ../../source/4-reference/teleop/0-index.md:41 +#: af105193dfc04342bc3ec15460c45a15 +msgid "" +"Pose-based VR, Wuji, and Vive Tracker paths publish to these end-effector " +"topics. Joystick teleop uses `control_input`, twist, `/cmd_vel`, and " +"`/fsm_command` instead. The foot pedal publishes " +"`/teleop/controller_state` only." +msgstr "" +"基于位姿的 VR、Wuji 和 Vive Tracker 路径会发布到这些末端话题。手柄遥操作改用 " +"`control_input`、twist、`/cmd_vel` 和 `/fsm_command`。脚踏板只发布 " +"`/teleop/controller_state`。" + #~ msgid "VR headset" #~ msgstr "VR headset" diff --git a/locale/zh_CN/LC_MESSAGES/4-reference/teleop/3-dexcap.po b/locale/zh_CN/LC_MESSAGES/4-reference/teleop/3-dexcap.po index 72713cf..d27b05f 100644 --- a/locale/zh_CN/LC_MESSAGES/4-reference/teleop/3-dexcap.po +++ b/locale/zh_CN/LC_MESSAGES/4-reference/teleop/3-dexcap.po @@ -234,6 +234,97 @@ msgstr "[DexCap 遥操作指南](../../2-how_to/5-teleoperation/8-dexcap_teleop. msgid "[teleop-joint-mapper](4-teleop_joint_mapper.md)" msgstr "[teleop-joint-mapper](4-teleop_joint_mapper.md)" + +#: ../../source/4-reference/teleop/3-dexcap.md:3 +#: c6aa353f0bf540bdb7aa2ede1654047e +msgid "DexCap V4 exoskeleton and glove teleoperation system." +msgstr "DexCap V4 外骨骼和手套遥操作系统。" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: fba86f88944e42a081dfc1269675e4d6 +msgid "V4 exoskeleton and glove driver" +msgstr "V4 外骨骼和手套驱动" + +#: ../../source/4-reference/teleop/3-dexcap.md:23 +#: 4200781cc7ee4014847300f53a638b22 +msgid "ROS 2 driver for the DexCap V4 exoskeleton and gloves:" +msgstr "DexCap V4 外骨骼和手套的 ROS 2 驱动:" + +#: ../../source/4-reference/teleop/3-dexcap.md:24 +#: 8137c83d415d494090fc25ff207ff406 +msgid "Waist, arm, and glove joint publication" +msgstr "发布腰部、手臂和手套关节" + +#: ../../source/4-reference/teleop/3-dexcap.md:26 +#: 86c90b44d35743f9baec648e6df179b4 +msgid "Mapper launches for grippers and LinkerHand O6" +msgstr "夹爪和 LinkerHand O6 的映射启动" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 522916f52b4947298fa84a08c4c758f1 +msgid "`/dexcap/waist`" +msgstr "`/dexcap/waist`" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 52e6e6be5bbc441a8428b6c087f03acd +msgid "Waist joints" +msgstr "腰部关节" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 8e1175947f164b4697c20c5b30973073 +msgid "`/dexcap/left_arm`" +msgstr "`/dexcap/left_arm`" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: e09612243c544a608c13be6ae90b0032 +msgid "Left arm joints" +msgstr "左臂关节" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 8e1175947f164b4697c20c5b30973073 +msgid "`/dexcap/right_arm`" +msgstr "`/dexcap/right_arm`" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 586c557564ee4cac93466b1b7584b0cc +msgid "Right arm joints" +msgstr "右臂关节" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 8e1175947f164b4697c20c5b30973073 +msgid "`/dexcap/left_hand`" +msgstr "`/dexcap/left_hand`" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 9fcf29e977914aaf9aa4f49b88228cb7 +msgid "Left glove, 21 joints" +msgstr "左手套,21 个关节" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 8e1175947f164b4697c20c5b30973073 +msgid "`/dexcap/right_hand`" +msgstr "`/dexcap/right_hand`" + +#: ../../source/4-reference/teleop/3-dexcap.md:5 +#: 886580d33bd24bc782aee7558411f949 +msgid "Right glove, 21 joints" +msgstr "右手套,21 个关节" + +#: ../../source/4-reference/teleop/3-dexcap.md:40 +#: 4e783764a48d4c7faf80906e768b32b4 +msgid "ros2 launch dexcap_ros2_control dexcap_driver.launch.py\n" +msgstr "ros2 launch dexcap_ros2_control dexcap_driver.launch.py\n" + +#: ../../source/4-reference/teleop/3-dexcap.md:44 +#: 61fc1a1d442a42f88e042a28c254bfcf +msgid "" +"Optional `start_upper_body`, `start_left_hand`, and `start_right_hand` " +"flags are in the private package README. `publish_command` is not a " +"current launch argument." +msgstr "" +"可选的 `start_upper_body`、`start_left_hand` 和 `start_right_hand` 参数见私有软件包 " +"README。`publish_command` 不是当前的启动参数。" + #~ msgid "" #~ "# Conda environment\n" #~ "conda create -n dexcap python=3.12\n" diff --git a/locale/zh_CN/LC_MESSAGES/6-more_applications/4-simulation_engineer.po b/locale/zh_CN/LC_MESSAGES/6-more_applications/4-simulation_engineer.po index 8e58b77..5c60966 100644 --- a/locale/zh_CN/LC_MESSAGES/6-more_applications/4-simulation_engineer.po +++ b/locale/zh_CN/LC_MESSAGES/6-more_applications/4-simulation_engineer.po @@ -4,12 +4,11 @@ # package. # FIRST AUTHOR , 2026. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: FiveAges Sim \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-13 09:17+0000\n" +"POT-Creation-Date: 2026-11-13 19:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -21,24 +20,24 @@ msgstr "" "Generated-By: Babel 2.18.0\n" #: ../../source/6-more_applications/4-simulation_engineer.md:1 -#: 7706a19c08a542a7914f9c42478dfa29 +#: 8eaf365f47134e7bbd81da495a447537 msgid "Simulation engineer" msgstr "仿真工程师" #: ../../source/6-more_applications/4-simulation_engineer.md:3 -#: 3bc877aafb074de0986dd006bb21d488 +#: 065c2866c7e8486f9f36a85560cbe38c msgid "" "For engineers who import sim assets, configure a robot in this stack, and" " compose motions in Isaac (not Gazebo-only beginners)." msgstr "面向导入仿真资产、在本栈配置机器人、并在 Isaac 里编排动作的工程师(不是只做 Gazebo 的新手路径)。" #: ../../source/6-more_applications/4-simulation_engineer.md:5 -#: 11deec552a63426dbc3ff1a694b9ac1f +#: 2ea312884a034edd9e823e94501a7f9a msgid "1. Isaac line and USD assets" msgstr "1. Isaac 线与 USD 资产" #: ../../source/6-more_applications/4-simulation_engineer.md:7 -#: 9946e2f9e7044a0f81de4cbf331d5c34 +#: 1b567a30aefa416085af3d19b024ae92 msgid "" "[Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) — FaSim-Isaac " "`./init.sh` then `./run.sh`. ROS 2 is either `hardware:=isaac` (topic " @@ -49,34 +48,35 @@ msgstr "" "`isaac_sim`。" #: ../../source/6-more_applications/4-simulation_engineer.md:8 -#: 707f60aeab7e4f67bec296c76b958a98 +#: 5fb18aec038e4128ace2673bb6e886a5 msgid "" -"[Isaac Scenes and USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md) — " -"how FaSim pulls [robot_usds](../4-reference/simulation/3-robot_usds.md)." -msgstr "" -"[Isaac 场景与 USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md) — FaSim " -"如何拉取 [robot_usds](../4-reference/simulation/3-robot_usds.md)。" +"[Simulation reference](../4-reference/simulation/0-index.md) — reading " +"order for assets, FaSim extensions, and scenes." +msgstr "[仿真参考](../4-reference/simulation/0-index.md) — 资产、FaSim 扩展和场景的阅读顺序。" #: ../../source/6-more_applications/4-simulation_engineer.md:9 -#: 8aaaf63b2ed44380a64b158ce7491d50 +#: e1d1af8b00de423ab5807ef9b80314e8 msgid "" -"[robot_usds](../4-reference/simulation/3-robot_usds.md) and [USD " -"submodules](../4-reference/simulation/4-usd_submodules.md) — brand " -"folders, public vs private trees." -msgstr "" -"[robot_usds](../4-reference/simulation/3-robot_usds.md) 与 [USD " -"子模块](../4-reference/simulation/4-usd_submodules.md) — 品牌目录、公开与私有树。" +"[robot_usds](../4-reference/simulation/3-robot_usds.md) — brand folders " +"and public versus private gitlinks." +msgstr "[robot_usds](../4-reference/simulation/3-robot_usds.md) — 品牌目录,以及公开与私有 gitlink。" #: ../../source/6-more_applications/4-simulation_engineer.md:10 -#: e71199b9281d48eca0163f306b4fda67 +#: 8ab36eabecc44623b6f4a2294a88c229 msgid "" -"Environment assets: [env " -"assets](../4-reference/simulation/5-env_assets.md) when the scene needs " -"more than the robot." +"[Environment assets](../4-reference/simulation/5-env_assets.md) when the " +"scene needs more than the robot." msgstr "环境资产:场景不只是机器人时见[环境资产](../4-reference/simulation/5-env_assets.md)。" -#: ../../source/6-more_applications/4-simulation_engineer.md:12 -#: b8324689d0a641f084d9c690751d33e6 +#: ../../source/6-more_applications/4-simulation_engineer.md:11 +#: 6bb3fee448ec4ebdab81a55146029fa6 +msgid "" +"Datagen-only scene notes: [Isaac Scenes and " +"USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md)." +msgstr "只与数采相关的场景说明:[Isaac 场景与 USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md)。" + +#: ../../source/6-more_applications/4-simulation_engineer.md:13 +#: f9ceb89b0d0a47e49af97d1b1e5267e8 msgid "" "Gazebo (different backend): [Gazebo " "Simulation](../2-how_to/2-simulation/3-gazebo_sim.md), [Gazebo " @@ -90,13 +90,13 @@ msgstr "" "`hardware:=mock`; keys are `mock_components` / `gz` / `isaac` / " "`isaac_sim` / `real`." -#: ../../source/6-more_applications/4-simulation_engineer.md:14 -#: 946b6070cb9c467ebb6d005749f5c05b +#: ../../source/6-more_applications/4-simulation_engineer.md:15 +#: c20ffc0ba3314416bae1963b09a1a1c5 msgid "2. Robot configuration" msgstr "2. 机器人配置" -#: ../../source/6-more_applications/4-simulation_engineer.md:16 -#: 2ac72a47e6ed460dafdbc16cca42371d +#: ../../source/6-more_applications/4-simulation_engineer.md:17 +#: f0d903bc5d1147e9a084f448226fe88d msgid "" "[Switch Robot](../2-how_to/1-basic_operations/2-switch_robot.md) — " "`robot:=` and EEF `type` / `left_type` / `right_type`." @@ -104,8 +104,8 @@ msgstr "" "[切换机器人](../2-how_to/1-basic_operations/2-switch_robot.md) — `robot:=` 和末端" " `type` / `left_type` / `right_type`。" -#: ../../source/6-more_applications/4-simulation_engineer.md:17 -#: 3c8a270290574965bc295dcb0dfe1fac +#: ../../source/6-more_applications/4-simulation_engineer.md:18 +#: 753851ca541c43fc8cbe88a23c04c340 msgid "" "[robot_common_launch](../4-reference/descriptions/2-common.md) — launch " "args, machine profile, merge order." @@ -113,13 +113,13 @@ msgstr "" "[robot_common_launch](../4-reference/descriptions/2-common.md) — launch " "参数、机台配置、合并顺序。" -#: ../../source/6-more_applications/4-simulation_engineer.md:18 -#: 4ac4d263532b4ce68a956530057cd8f7 +#: ../../source/6-more_applications/4-simulation_engineer.md:19 +#: 52522586cf034c21a5c977ad1a7ee09b msgid "[Naming Conventions](../3-concepts/3-naming_conventions.md)." msgstr "[命名约定](../3-concepts/3-naming_conventions.md)。" -#: ../../source/6-more_applications/4-simulation_engineer.md:19 -#: 52882b93655f40728c97bb9c3f5f1965 +#: ../../source/6-more_applications/4-simulation_engineer.md:20 +#: 131a9d9a21164e708d9a95d855ab149d msgid "" "[Add a Robot](../2-how_to/6-deployment/10-add_a_robot.md) — copy a real " "description package; use the plugin class from that robot’s " @@ -128,8 +128,8 @@ msgstr "" "[添加机器人](../2-how_to/6-deployment/10-add_a_robot.md) — 复制真实描述包;插件类用该机器人 " "`xacro/ros2_control/*.xacro` 里的。" -#: ../../source/6-more_applications/4-simulation_engineer.md:20 -#: 1d6f61efc1aa4d03bd48d9f945123956 +#: ../../source/6-more_applications/4-simulation_engineer.md:21 +#: acb714250b5b4ebea06eea4e68ce3f17 msgid "" "Brand packages: [Brand Packages " "(Public)](../4-reference/descriptions/3-brand_public.md). FiveAges " @@ -140,25 +140,25 @@ msgstr "" "gitlink:[FiveAges " "描述](../4-reference/descriptions/4-fiveages_umbrella.md)。" -#: ../../source/6-more_applications/4-simulation_engineer.md:22 -#: 139da41f278548ca9397e1d3133afc4f +#: ../../source/6-more_applications/4-simulation_engineer.md:23 +#: 7773a4b22f554c7599ec60bd50827a1f msgid "3. Action composition / orchestration" msgstr "3. 动作编排" -#: ../../source/6-more_applications/4-simulation_engineer.md:24 -#: 7768862e901c4e9e85da31c09105af9b +#: ../../source/6-more_applications/4-simulation_engineer.md:25 +#: 185f9569dc9f4f5e93d8938755b1723e msgid "" "Isaac datagen motions are **task_queue YAML skills**, not a Python " "`ActionSequence` API." msgstr "Isaac 数据生成动作是 **task_queue YAML skill**,不是 Python `ActionSequence` API。" -#: ../../source/6-more_applications/4-simulation_engineer.md:26 -#: e4460d79b9824134ba7493f367789531 +#: ../../source/6-more_applications/4-simulation_engineer.md:27 +#: 23b891ef9b8b4899873c49ac9d3e5e6d msgid "[Synthetic Data](../2-how_to/7-synthetic_data/0-index.md) — pipeline map." msgstr "[合成数据](../2-how_to/7-synthetic_data/0-index.md) — 流水线总览。" -#: ../../source/6-more_applications/4-simulation_engineer.md:27 -#: dce2a757c0934a46a57ad9f80e789728 +#: ../../source/6-more_applications/4-simulation_engineer.md:28 +#: b770d257bf0242d492f5f39933d52c70 msgid "" "[Interface and " "Orchestration](../2-how_to/7-synthetic_data/2-orchestration.md) — " @@ -167,8 +167,8 @@ msgstr "" "[接口与编排](../2-how_to/7-synthetic_data/2-orchestration.md) — `./init.sh " "all-motion`、`motion-generation`、`ros2-stack`。" -#: ../../source/6-more_applications/4-simulation_engineer.md:28 -#: 47d10bb321f543f3ba38fa03e4a67a9e +#: ../../source/6-more_applications/4-simulation_engineer.md:29 +#: 59c5546dcd3e4eedb0d07670396d52bd msgid "" "[robot_action_composer](../4-reference/python_apps/5-robot_action_composer.md)" " — `main`; skill names and flags on that README / `docs/`." @@ -176,8 +176,8 @@ msgstr "" "[robot_action_composer](../4-reference/python_apps/5-robot_action_composer.md):`main`;技能名和参数见该" " README / `docs/`。" -#: ../../source/6-more_applications/4-simulation_engineer.md:30 -#: f10dda23f58f4dea8bf0ebb7bb0f3c32 +#: ../../source/6-more_applications/4-simulation_engineer.md:31 +#: c1c76780d67c4b3e89013ca3f518fa63 msgid "" "Composer `--robot fiveages_w2` is a real key on composer `ROS2_STACK.md`." " It is **not** an `./init_repo.sh --robot` flag." @@ -185,26 +185,37 @@ msgstr "" "composer 的 `--robot fiveages_w2` 是 `ROS2_STACK.md` 上的真实键。它 **不是** " "`./init_repo.sh --robot` 参数。" -#: ../../source/6-more_applications/4-simulation_engineer.md:32 -#: 7930dfc32c154082a7c073df383e7de8 +#: ../../source/6-more_applications/4-simulation_engineer.md:33 +#: 0585ee0570ac4d1984932c0915d7b750 msgid "Related" msgstr "相关" -#: ../../source/6-more_applications/4-simulation_engineer.md:34 -#: 011f649d4f334c06bb2b3521fb27f6ca +#: ../../source/6-more_applications/4-simulation_engineer.md:35 +#: 360ba9412c324cfd8fa9940bfeab0bad msgid "[FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md)" msgstr "[FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md)" -#: ../../source/6-more_applications/4-simulation_engineer.md:35 -#: f32e08987abf4ef7ae182ac956b4de6e +#: ../../source/6-more_applications/4-simulation_engineer.md:36 +#: 6f6c4f334c1e40b68098285749fd7b21 msgid "[ros2_control here](../3-concepts/1-ros2_control_here.md)" msgstr "[本栈中的 ros2_control](../3-concepts/1-ros2_control_here.md)" -#: ../../source/6-more_applications/4-simulation_engineer.md:36 -#: 4aecc9d8a2674075b341e0a333c3474b +#: ../../source/6-more_applications/4-simulation_engineer.md:37 +#: af384c42dbca46a39d16b6930bd93598 msgid "" "[LeRobot Record and " "Export](../2-how_to/7-synthetic_data/3-record_export.md) — stop at the " "dataset" msgstr "[LeRobot 录制与导出](../2-how_to/7-synthetic_data/3-record_export.md) — 停在数据集" +#~ msgid "" +#~ "[Isaac Scenes and " +#~ "USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md) — how" +#~ " FaSim pulls " +#~ "[robot_usds](../4-reference/simulation/3-robot_usds.md)." +#~ msgstr "" +#~ "[Isaac 场景与 " +#~ "USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md) — " +#~ "FaSim 如何拉取 " +#~ "[robot_usds](../4-reference/simulation/3-robot_usds.md)。" + diff --git a/locale/zh_CN/LC_MESSAGES/index.po b/locale/zh_CN/LC_MESSAGES/index.po index 4178788..db667fd 100644 --- a/locale/zh_CN/LC_MESSAGES/index.po +++ b/locale/zh_CN/LC_MESSAGES/index.po @@ -96,11 +96,11 @@ msgstr "**MPC 控制器** — 基于 OCS2 的机械臂(分体控制)与全 #: ../../source/index.md:18 0ae63b14f49d474d91366de5f4f4be4b msgid "" -"**Simulation backends** — Gazebo Harmonic, and **FaSim** (Isaac Sim high-" -"fidelity + ROS 2 运控, matching real-robot motion plus ground truth)" +"**Simulation backends** — **FaSim** (Isaac Sim high-fidelity + ROS 2 运控, " +"matching real-robot motion plus ground truth) is the default physics path; " +"Gazebo Harmonic remains available" msgstr "" -"**仿真后端** — Gazebo Harmonic,以及 **FaSim**(Isaac Sim 高保真 + ROS 2 " -"运控,运动对齐真机并带仿真真值)" +"**仿真后端** — **FaSim**(Isaac Sim 高保真 + ROS 2 运控,运动对齐真机并带仿真真值)是默认的物理仿真路径;Gazebo Harmonic 仍可使用" #: ../../source/index.md:19 5a3e9d2c1a25444890972159948449cd msgid "" diff --git a/source/0-overview/0-index.md b/source/0-overview/0-index.md index 46f1ae0..3d0f2b5 100644 --- a/source/0-overview/0-index.md +++ b/source/0-overview/0-index.md @@ -9,7 +9,7 @@ FiveAges Sim is a collection of ROS 2 packages and workspaces that enable: - **Robot Description** — URDF/xacro models with ros2_control integration - **Hardware interfaces** — ros2_control hardware plugins for real or simulated robots - **MPC Controllers** — OCS2-based motion planning and control (分体控制 / 全身控制) -- **Simulation** — Gazebo Harmonic, and **FaSim** (Isaac Sim high-fidelity + the same ROS 2 运控 as the real robot, plus simulation ground truth) +- **Simulation** — **FaSim** (Isaac Sim high-fidelity + the same ROS 2 运控 as the real robot, plus simulation ground truth) is the default physics path; Gazebo Harmonic remains available - **Teleoperation** — VR, isomorphic teleop, and glove-based control - **Python Applications** — High-level APIs for data collection and autonomous tasks - **Synthetic data** — Isaac Sim USD → interface → composer → LeRobot record/export ([Synthetic Data](../2-how_to/7-synthetic_data/0-index.md)) diff --git a/source/0-overview/2-learning_path.md b/source/0-overview/2-learning_path.md index 5b5465d..936712c 100644 --- a/source/0-overview/2-learning_path.md +++ b/source/0-overview/2-learning_path.md @@ -9,8 +9,8 @@ This guide provides a structured day-by-day approach to learning the FiveAges Si | Day 0 | Map the stack | 1-2 hours reading | | Day 1 | First motion in sim | 2-4 hours | | Day 2 | Switch robots | 1-2 hours | -| Day 3 | Gazebo / Isaac | 2-4 hours | -| Day 4 | Python interface | 2-3 hours | +| Day 3 | fa-py-libraries and Viser | 2-3 hours | +| Day 4 | Isaac Sim | 2-4 hours | | Day 5 | Teleoperation | 2-4 hours | | Day 6 | Real hardware | Varies | | Day 7 | Bring one new robot into FaSim | One robot, mock then sim | @@ -55,6 +55,14 @@ This guide provides a structured day-by-day approach to learning the FiveAges Si ros2 launch ocs2_arm_controller demo.launch.py ``` +After this launch, the clip below shows the effect in RViz (a single arm): drag the end-effector target, adjust joints with the JointControlPanel sliders, and use HOME to reset. It does not show the terminal or the launch command, so it is not a complete startup recording, and it is not Isaac physics verification. + +```{raw} html + +``` + **Primary sources:** [open-deploy-ws](https://github.com/fiveages-sim/open-deploy-ws), [arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control) **Outcome:** RViz opens with the OCS2 demo; FSM starts in HOLD. See [Quick Demo](../1-getting_started/1-quick_demo_public.md). @@ -66,118 +74,145 @@ This guide provides a structured day-by-day approach to learning the FiveAges Si **Tasks:** 1. Prefer `./init_repo.sh` so nested modules under `src/robot-descriptions/` match `submodules_visibility.conf` (do not recursive-init). 2. Rebuild the packages you need, then `source install/setup.bash`. -3. Launch with the new robot (omit `hardware:=` to keep `mock_components`): - ```bash - ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone - ``` - `arx_acone` is **Acone** (dual-arm), not Lift 2S. Full-body ARX Lift 2S uses the `arx-lift2s` branch scripts — see [ARX Lift 2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md). +3. Launch one of the robots below. Omit `hardware:=`; the launch default is `mock_components`. -**Primary sources:** [robot_descriptions](https://github.com/fiveages-sim/robot_descriptions), brand-specific READMEs +### ARX Lift 2S + +Use the `arx-lift2s` branch of `open-deploy-ws` for this robot, not the Day 1 default tree. Clone and `./init_repo.sh` are on [ARX Lift 2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md). -**Outcome:** You can switch between Dobot CR5, Acone (dual-arm), Galbot, etc. +```bash +ros2 launch ocs2_arm_controller full_body.launch.py robot:=arx_lift2s +``` -## Day 3: Gazebo and Isaac Simulation +`arx_lift2s` is **ARX Lift 2S** (方舟无限), the full-body mobile manipulator (arms, lift, and chassis). It is not **Acone** / **AC One** (`arx_acone`, dual-arm). `full_body.launch.py` starts `ocs2_wbc_controller`, which ships in the `ros-jazzy-arms-ros2-control` deb. -**Goal:** Run physics simulation instead of mock hardware. +### FiveAges W2 with xhand1 -### Gazebo Harmonic +W2 is a FiveAges wheeled-arm robot. Its URDF is public ([fa-w2-description](https://github.com/fiveages-sim/fa-w2-description)); the usual workspace is [fa-deploy-ws](https://github.com/fiveages-sim/fa-deploy-ws) (default branch `fa-w2`). See [FiveAges robot descriptions](../4-reference/descriptions/4-fiveages_umbrella.md) and [fa-deploy-ws Setup](../1-getting_started/4-fa_deploy_ws.md). ```bash -# Install Gazebo packages (if not already) -sudo apt install ros-jazzy-gz-* - -# Launch with Gazebo -ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz +ros2 launch ocs2_arm_controller full_body.launch.py robot:=fiveages_w2 type:=xhand1 ``` -### Isaac Sim (FaSim) +This clip is a W2 with xhand1 operation demo: in RViz, drag the dual-arm end-effector targets, reset both arms, and adjust the head joints with JointControlPanel. -**FaSim** pairs NVIDIA Isaac Sim high-fidelity simulation with the same ROS 2 运控 stack as the real robot, so motion matches hardware while the sim supplies ground truth. Assets: [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac) (one-click USD + scene pull), [robot_usds](https://github.com/fiveages-sim/robot_usds). - -```{admonition} FaSim-Isaac scripts -:class: warning - -Use **FaSim-Isaac** `./init.sh` then `./run.sh`. Default Isaac path is `ISAACSIM_DIR` (`~/isaacsim`); override in `config/fa_sim.local.conf`. Version for the optional ROS 2 workspace comes from the init menu (fallback list in `config/fa_sim.conf`), not a hardcoded minor version in these docs. +```{raw} html + ``` -1. Install NVIDIA Isaac Sim (default directory `~/isaacsim`, or set `ISAACSIM_DIR`). -2. Clone and initialize FaSim-Isaac: - ```bash - git clone git@github.com:fiveages-sim/FaSim-Isaac.git - cd FaSim-Isaac - ./init.sh - ``` -3. Start Isaac (`./run.sh` menu: PhysX / Newton / Headless Streaming): - ```bash - ./run.sh - ``` -4. Connect ROS 2 using **one** of the two Isaac paths in [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md): - - Topic bridge, from the workspace terminal: `ros2 launch ocs2_arm_controller demo.launch.py hardware:=isaac` - - In-process: open a USD whose ROS payload contains `ROS2ControlLaunch` and press Play. That path sets `hardware=isaac_sim` inside Isaac. It is not a second `hardware:=` on `demo.launch.py`. +**Primary sources:** [robot_descriptions](https://github.com/fiveages-sim/robot_descriptions), brand-specific READMEs -**Primary sources:** [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac), [robot_usds](https://github.com/fiveages-sim/robot_usds) +**Outcome:** You have switched from the Day 1 CR5 `demo.launch.py` to a `full_body.launch.py` robot, for example ARX Lift 2S or FiveAges W2 with xhand1. -**Outcome:** Physics-based simulation with Gazebo, or FaSim (Isaac + ROS 2 运控, matching real-robot motion plus ground truth). +## Day 3: fa-py-libraries and Viser -## Day 4: Python Interface +**Goal:** Install fa-py-libraries and open Viser in a browser, so you can see the robot and send basic commands before you start Isaac Sim. -**Goal:** Control the robot programmatically. +Viser is the browser 3D view and control page from [ros2-viser](https://github.com/fiveages-sim/ros2-viser). Launch it from **fa-py-libraries**, not as a standalone product and not from lerobot_ros2. **Tasks:** -1. Install fa-py-libraries: + +1. Keep a robot demo from Day 1 or Day 2 running. The ros2-viser README asks you to start the control stack first; `/robot_description` must be available. +2. Install fa-py-libraries (Python 3.12 env; this also installs `ros2_robot_interface` and `ros2-viser`): ```bash - cd ~/ git clone https://github.com/fiveages-sim/fa-py-libraries.git cd fa-py-libraries - ./init.sh all # Python 3.12 env; installs ros2_robot_interface and related submodules + ./init.sh all ``` -2. Write a simple script: - ```python - from ros2_robot_interface import ROS2RobotInterface, ROS2RobotInterfaceConfig - - interface = ROS2RobotInterface(ROS2RobotInterfaceConfig()) - interface.connect() - joint_state = interface.get_joint_state() - pose = interface.left_arm_handler.get_pose() +3. Start Viser from that repository: + ```bash + ./run.sh viser ``` + `./run.sh` with no arguments opens a menu; item 1 is `ros2-viser launch`. The command runs `ros2-viser/launch.py`. +4. In a browser, open the URL that Viser prints in the terminal (`访问 URL`). The same output shows the host and port; this launch has no separate host/port flag. You can also scan the QR code it prints. +5. The page starts as an empty scene. If only one robot is present, it loads automatically. If there are several, pick one under “选择命名空间”. If the robot comes up later, click “刷新命名空间列表”. +6. Confirm the model is visible. For a first control check: use HOME / HOLD on the state panel; switch to OCS2 and drag the end-effector handles; or switch to MOVEJ, move the joint sliders, and send the target. On a mobile base such as G1-D, `launch.py` sets the visualization frame to `world`; you can also choose `map` or `odom` on the page so the model and the handles share the same ground. + +Do not copy the rest of the Python API here. Full Viser UI: [ros2-viser](../4-reference/python_apps/3-ros2_viser.md). Writing scripts with `ROS2RobotInterface`: [Python Interface](../2-how_to/3-programming/5-python_interface.md). + +**Primary sources:** [fa-py-libraries](https://github.com/fiveages-sim/fa-py-libraries), [ros2-viser](https://github.com/fiveages-sim/ros2-viser) + +**Outcome:** You can open Viser in a browser, see the robot, and use the page to move it while a demo is running. + +## Day 4: Isaac Sim -**Primary sources:** [fa-py-libraries](https://github.com/fiveages-sim/fa-py-libraries), [ros2_robot_interface](https://github.com/fiveages-sim/ros2_robot_interface) +**Goal:** Run physics simulation in Isaac Sim (FaSim), instead of mock hardware. This is the default simulation path. -**Outcome:** You can script robot motions in Python. +**FaSim** pairs NVIDIA Isaac Sim with the same ROS 2 运控 stack as the real robot. Follow [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md): clone [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac), run `./init.sh`, then `./run.sh`, and connect with **one** of the two paths on that page (`hardware:=isaac`, or Play on a `ROS2ControlLaunch` payload). Default Isaac path is `ISAACSIM_DIR` (`~/isaacsim`); override in `config/fa_sim.local.conf`. + +Start Viser the way you did on Day 3, after the Isaac / ROS 2 stack is up, so you can view and control the robot in the browser: [Start Viser](../2-how_to/3-programming/5-python_interface.md#start-viser). A G1-D demonstration of full-body control and chassis motion is on that How-To page: [G1-D full-body control and chassis motion](../2-how_to/2-simulation/4-isaac_sim.md#g1-d-full-body-control-and-chassis-motion). + +What the two connections and the Kit extensions do: [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md). Assets: [robot_usds](../4-reference/simulation/3-robot_usds.md), [Environment assets](../4-reference/simulation/5-env_assets.md). + +**Primary sources:** [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac), [robot_usds](https://github.com/fiveages-sim/robot_usds) + +**Outcome:** You can start FaSim and see the robot move in Isaac Sim with the same ROS 2 运控 as the real robot, plus simulation ground truth. + +### Gazebo (alternative) + +If you need Gazebo Harmonic instead, follow [Gazebo Simulation](../2-how_to/2-simulation/3-gazebo_sim.md): + +```bash +# Install Gazebo packages (if not already) +sudo apt install ros-jazzy-gz-* + +# Launch with Gazebo +ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz +``` ## Day 5: Teleoperation -**Goal:** Control the robot via VR or isomorphic teleop. +**Goal:** Start with VR or a game controller, then know what the other input methods are for. + +Keep the robot stack from Days 1–4 running. Teleop only publishes targets or assist events into that stack; it does not replace it. + +Inputs in this stack have different jobs: **end-effector pose** (VR controllers, Vive Tracker, DexCap exoskeleton arms), **joint-space following** (isomorphic teleop), **fingers / grippers** (VR triggers, Wuji gloves, DexCap gloves), and **enable / pause / FSM assists** (some VR buttons, the joystick enable switch, the foot pedal). + +### Start here: VR -### VR Teleoperation +**What it is for.** Drive the arms from the headset controllers’ end-effector pose. Triggers operate the gripper or hand. Buttons handle FSM, pause, and — on 全身 — some arm enable/disable assists. Use this path when you have a Pico or Quest headset. -**Supported headsets:** Pico Enterprise (recommended; USB 网络共享, Enterprise App), Pico consumer (different App), and Meta Quest. Backends: WebXR (`./run.sh vr`) or XRoboToolkit (`./run.sh vr-xrt`). +**Minimum steps.** Follow [VR Teleoperation](../2-how_to/5-teleoperation/6-vr_teleop.md). You need fa-py-libraries from Day 3, `enable_vr: true` in the description’s `config/ocs2/target_manager.yaml` (most robots default off), and a network to the headset. Then: ```bash -cd fa-py-libraries +cd ~/fa-py-libraries ./run.sh vr ``` -```{admonition} Pico Enterprise vs consumer -:class: tip +Open the URL shown in the headset browser (WebXR). For the lower-latency XRoboToolkit path, use `./run.sh vr-xrt-service` then `./run.sh vr-xrt` as on that page. Pico **Enterprise** is the preferred Pico SKU (USB 网络共享, and a **different App** from Pico consumer). -Pico **Enterprise** and Pico **consumer** are different SKUs: Enterprise supports USB 网络共享 and uses a **different App**. Install the App that matches the headset edition. -``` +**What you should see.** The arms follow the VR controllers, and you can change FSM and the gripper from the controller buttons. + +### Start here: game controller (joystick) -### Isomorphic Teleop (HighTorque Panthera HT) +**What it is for.** A gamepad or joystick, without a headset, to command arm velocity (`control_input` → `/left_target/twist` and `/right_target/twist`) and, in chassis mode, `/cmd_vel`. Use this path when you only have a game controller. -Master–slave **isomorphic teleop** (同构遥操作). On the `panthera-ht` branch, real-robot teleop is `./teleop_start.sh` — see [HighTorque Panthera HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md). Mock (package README): +**Minimum steps.** With the robot stack already running, follow [Joystick teleop](../2-how_to/5-teleoperation/9-joystick_teleop.md): ```bash -ros2 launch drag_teleop_controller drag_teleop_controller.launch.py \ - role:=master hardware:=mock_components -ros2 launch drag_teleop_controller drag_teleop_controller.launch.py \ - role:=slave hardware:=mock_components +ros2 launch arms_teleop joystick_teleop.launch.py ``` -**Primary sources:** VR pose publisher, [drag_teleop_controller](https://github.com/fiveages-sim/drag_teleop_controller) +Joystick control starts disabled; press the right stick to enable it (package README). Most mapped gamepads use the generic SDL layout automatically. -**Outcome:** Real-time control via VR headset or master–slave isomorphic teleop. +**What you should see.** After you enable the controller, stick motion changes the arm target, or the chassis in chassis mode. + +### Other methods + +These are additional ways to supply pose, finger, or assist signals. Use the linked pages for setup; this day does not walk through them. + +- **Isomorphic teleop** (同构遥操作) — Master–slave joint following on HighTorque Panthera HT, not end-effector pose. On the `panthera-ht` branch, real-robot teleop is `./teleop_start.sh`: [HighTorque Panthera HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md), [Isomorphic Teleop](../2-how_to/5-teleoperation/7-isomorphic_teleop.md). +- **DexCap exoskeleton and gloves** (internal) — The exoskeleton measures waist and arm joints; the gloves measure finger joints. Combined arm + hand teleop: [DexCap Teleoperation](../2-how_to/5-teleoperation/8-dexcap_teleop.md). +- **VR gesture / hand tracking** — The current `./run.sh vr` path starts **controller** mode. This docs set does not document a launch entry that turns on VR gesture or hand-tracking recognition. +- **Wuji gloves** (internal) — Finger and hand joint teleop, with optional Vive Tracker for arm pose: [wuji_glove_teleop](../4-reference/teleop/5-wuji_glove.md). +- **Foot pedal** — An assist, not a complete teleop setup. `foot_pedal_teleop` in `arms_teleop` publishes events on `/teleop/controller_state` (FSM up/down, arm enable, STORAGE/UPDATE, mirror). It does not replace VR or the game controller: [Joystick teleop](../2-how_to/5-teleoperation/9-joystick_teleop.md#foot-pedal-assist-only). +- **Vive Tracker** (internal) — SteamVR **Vive Tracker** poses mapped to arm end-effector targets (`vive_tracker_teleop`). That is the name used in the package and in these docs; it is not documented as “Valve Tracker”: [Vive Tracker](../4-reference/teleop/6-vive_tracker.md). + +**Primary sources:** [VR Teleoperation](../2-how_to/5-teleoperation/6-vr_teleop.md), [arms_teleop README](https://github.com/fiveages-sim/arms_ros2_control/blob/main/command/arms_teleop/README.md) + +**Outcome:** You can run either the VR path or the game-controller path, and you can tell which of the other devices is for pose, fingers, or enable/pause assists. ## Day 6: Real Hardware @@ -216,23 +251,22 @@ You can run whole-body control without those two source checkouts. The standard **Safety:** Prove the motion in `mock_components`, or in the sim path that workspace documents, before you set `hardware:=real`. +(day-7-bring-one-new-robot-into-fasim)= ## Day 7: Bring one new robot into FaSim -**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. +**Goal:** Independently connect a robot that is not already a demo, so Isaac and the ROS 2 stack move it. This is the exam, not a walkthrough of CR5 or W2. You are done when a command moves that robot in the viewport and you can hand in the items below. -**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`. +**Before you start.** Finish Days 0–4. You can reach HOLD with `hardware:=mock_components`, Viser opens in the browser, Isaac Sim is installed, `ISAACSIM_DIR` is set, and you have run FaSim `./init.sh` and `./run.sh`. -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). +Package layout: [Add a Robot](../2-how_to/6-deployment/10-add_a_robot.md). Start Sim and choose a connection: [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md). In-process inputs, swerve chassis graphs, clock, and TF: [FaSim-Isaac](../4-reference/simulation/2-fasim_isaac.md). ### Build these four pieces 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. -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`. +2. **A USD stage.** `./run.sh` opens it, and the stage has one ArticulationRoot for this robot. Put it under [robot_usds](../4-reference/simulation/3-robot_usds.md), or in a project scene you can open. There is no `./run.sh --robot`. -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`. +3. **One connection for those joints.** Use the topic bridge *or* the in-process graph, as in [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md). For `isaac_sim`, the xacro must accept that hardware key, and the payload must contain `ROS2ControlLaunch` ([ROS 2 Control extension](../4-reference/simulation/2-fasim_isaac.md#ros-2-control-extension)). On a four-wheel swerve chassis such as Linkhou S2 or Taku, the steer and drive joints are commanded by `SwerveController`, not by that hardware key ([Swerve extension](../4-reference/simulation/2-fasim_isaac.md#swerve-extension)). 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`. @@ -246,24 +280,23 @@ File layout: [Add a Robot](../2-how_to/6-deployment/10-add_a_robot.md). Starting ### What you hand in - The description package, or the branch, and the USD path you opened. -- The launch line, or the `ROS2ControlLaunch` prim you played. +- The launch line, or the `ROS2ControlLaunch` prim you played (and the swerve graph, if you used one). - The joint-state topic or the controller list, and the motion you sent. +- A short note of known limits, plus steps another person can replay, and a demo recording. ### How you know it works -Check joint control, base motion, the end effector, and sensor data against the robot you chose. +Check the functions that belong to the robot you chose: joint control, chassis motion, end effector, and sensor data. For a wheeled robot, show that the base drives; for a robot with a dexterous hand, show that the hand opens and closes. -**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. +**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. -**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. +**Base.** Follow the [TF](../4-reference/simulation/2-fasim_isaac.md#tf) and, if the robot drives on a map, [Navigation](../4-reference/simulation/2-fasim_isaac.md#navigation) sections. A ROS namespace does not rename `frame_id`. 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. **Sensors.** While Play is running, the camera or lidar topics from the scene are publishing. Camera rigs stay on the scene USD. -**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 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. +If a timed motion finishes much too fast, check `/clock` against [Clock](../4-reference/simulation/2-fasim_isaac.md#clock) before you edit joint gains. ## Optional: Synthetic data (Isaac) diff --git a/source/1-getting_started/1-quick_demo_public.md b/source/1-getting_started/1-quick_demo_public.md index c80b742..68d805d 100644 --- a/source/1-getting_started/1-quick_demo_public.md +++ b/source/1-getting_started/1-quick_demo_public.md @@ -108,8 +108,10 @@ source install/setup.bash ## Next Steps - [Switch to different robots](../2-how_to/1-basic_operations/2-switch_robot.md) -- [Run Gazebo simulation](../2-how_to/2-simulation/3-gazebo_sim.md) -- [Connect Python interface](../2-how_to/3-programming/5-python_interface.md) +- [Start Viser](../2-how_to/3-programming/5-python_interface.md#start-viser) — browser view and control +- [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) — the default physics path +- [Gazebo Simulation](../2-how_to/2-simulation/3-gazebo_sim.md) — alternative backend +- [Python Interface](../2-how_to/3-programming/5-python_interface.md) ## Video Demo diff --git a/source/1-getting_started/3-open_deploy_ws.md b/source/1-getting_started/3-open_deploy_ws.md index 36e9aea..7c86f00 100644 --- a/source/1-getting_started/3-open_deploy_ws.md +++ b/source/1-getting_started/3-open_deploy_ws.md @@ -327,4 +327,6 @@ sudo ip link set up - [Switch robots](../2-how_to/1-basic_operations/2-switch_robot.md) - [ARX Lift 2S](../2-how_to/6-deployment/9-go_real_hardware/1-arx_lift2s.md) - [HighTorque Panthera HT](../2-how_to/6-deployment/9-go_real_hardware/2-panthera_ht.md) -- [Gazebo simulation](../2-how_to/2-simulation/3-gazebo_sim.md) +- [Start Viser](../2-how_to/3-programming/5-python_interface.md#start-viser) +- [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) +- [Gazebo Simulation](../2-how_to/2-simulation/3-gazebo_sim.md) diff --git a/source/2-how_to/0-index.md b/source/2-how_to/0-index.md index 79a4124..7669165 100644 --- a/source/2-how_to/0-index.md +++ b/source/2-how_to/0-index.md @@ -11,8 +11,8 @@ This section contains task-oriented recipes for common operations. Each guide fo ### Simulation -- [Gazebo Simulation](2-simulation/3-gazebo_sim.md) — Physics simulation with Gazebo -- [Isaac Sim](2-simulation/4-isaac_sim.md) — NVIDIA Isaac Sim integration +- [Isaac Sim](2-simulation/4-isaac_sim.md) — NVIDIA Isaac Sim (FaSim); the default physics path +- [Gazebo Simulation](2-simulation/3-gazebo_sim.md) — Gazebo as an alternative backend ### Programming diff --git a/source/2-how_to/2-simulation/0-index.md b/source/2-how_to/2-simulation/0-index.md index 9f239ce..1925ced 100644 --- a/source/2-how_to/2-simulation/0-index.md +++ b/source/2-how_to/2-simulation/0-index.md @@ -1,14 +1,16 @@ # Simulation -Physics simulation with Gazebo or NVIDIA Isaac Sim. +The default physics simulation path is NVIDIA Isaac Sim (FaSim). Start Isaac and run the first checks: [Isaac Sim](4-isaac_sim.md). To view and control the robot in a browser while Sim is running, start Viser first: [Start Viser](../3-programming/5-python_interface.md#start-viser). Mechanisms, extensions, and USD layout: [Simulation reference](../../4-reference/simulation/0-index.md). -`hardware:=mock_components` / `gz` / `isaac` are launch keys, not vendor hardware-interface packages under `hardwares/`. Plugin table: [ros2_control in This Stack](../../3-concepts/1-ros2_control_here.md). Isaac topic `` names: [topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md). +`hardware:=mock_components` / `gz` / `isaac` are launch keys, not vendor hardware-interface packages under `hardwares/`. `isaac_sim` is set inside Isaac on the in-process path; it is not a `demo.launch.py` flag. Plugin table: [ros2_control in This Stack](../../3-concepts/1-ros2_control_here.md). Isaac topic `` names: [topic_based_ros2_control](../../4-reference/hardware/1-topic_based.md). + +Gazebo remains available as an alternative backend: [Gazebo Simulation](3-gazebo_sim.md). Isaac USD → composer → LeRobot datagen is the [Synthetic Data](../7-synthetic_data/0-index.md) How-To category, not Gazebo. ```{toctree} :maxdepth: 1 -3-gazebo_sim 4-isaac_sim +3-gazebo_sim ``` 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 a862038..a0859dc 100644 --- a/source/2-how_to/2-simulation/4-isaac_sim.md +++ b/source/2-how_to/2-simulation/4-isaac_sim.md @@ -2,22 +2,25 @@ Open a robot in NVIDIA Isaac Sim and drive it with the same ROS 2 stack you use on the real machine. -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`. +FaSim-Isaac holds the assets and installs the OmniGraph extensions. 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`. -Connect ROS 2 in one of two ways. Use one of them for a given stage. +Connect ROS 2 in one of two ways. Use one of them for a given stage. These are description hardware keys, not the FaSim Kit extensions. | What you start | Plugin | What moves the joints | |----------------|--------|------------------------| | `hardware:=isaac` | `topic_based_ros2_control/TopicBasedSystem` | OmniGraph joint topics | | 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 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). +`isaac_sim` is the hardware interface for that in-process controller. It is not a second robot. A swerve chassis uses a different node, `SwerveController`, which is not a hardware key. Mechanism, parameters, and clock/TF: [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md). ## Before you start - 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`. +- The topic bridge needs `topic_based_ros2_control` in that workspace. The in-process graph and a swerve graph both need `./init.sh` operation 5 (the FaSim extensions) and a restart of Isaac. The in-process path also needs a description xacro that accepts `hardware` `isaac_sim`. +- To view and control the robot in a browser, install fa-py-libraries and start Viser first. After the Isaac / ROS 2 stack is up, run `./run.sh viser` and open the URL printed in the terminal. Steps: [Start Viser](../3-programming/5-python_interface.md#start-viser). + +(start-fasim)= ## Start FaSim @@ -30,11 +33,11 @@ cd FaSim-Isaac `./init.sh` asks you to ([README](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/README.md)): -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. +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) and [labutopia-usd](https://github.com/fiveages-sim/labutopia-usd), stay unchecked until you can open them. A later run only adds what you check. Current public versus private rows: [robot_usds](../../4-reference/simulation/3-robot_usds.md) and [Environment assets](../../4-reference/simulation/5-env_assets.md). 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. 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. +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. What each extension does: [FaSim Kit extensions](../../4-reference/simulation/2-fasim_isaac.md#fasim-kit-extensions). `./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: @@ -47,7 +50,9 @@ cd FaSim-Isaac `config/fa_sim.conf` kit profiles (`--kit-profile` / `--list-kit-profiles`): `none`, `newton-physx-min`, `newton-physx`, `physx-compat`, `physx-compat-full`. `--asset-region` is `none`, `us`, or `china`. Copy `config/fa_sim.local.template.conf` to `config/fa_sim.local.conf` for a machine override. When `RMW_IMPLEMENTATION=rmw_zenoh_cpp`, `./run.sh` starts a Zenoh router and stops it on exit. -Open the robot USD under `robots/` (robot_usds) or a scene under `environment/`. Operation 5 must already be done before a stage that uses `ROS2ControlLaunch`. +Open the robot USD under `robots/` (robot_usds) or a scene under `environment/`. Operation 5 must already be done before a stage that uses `ROS2ControlLaunch` or `SwerveController`. + +(topic-bridge)= ## Topic bridge (`hardware:=isaac`) @@ -82,7 +87,7 @@ A joint command on the matching command topic moves the articulation. There is n 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. -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. +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)). Graph inputs, CppAD cache, and `infoFile`: [ROS 2 Control extension](../../4-reference/simulation/2-fasim_isaac.md#ros-2-control-extension). An empty `robot` reads the USD `Robot` variant. That string is the description package stem. After Play, check: @@ -94,31 +99,47 @@ ros2 topic hz /clock `/joint_states` here is the controller’s `joint_state_broadcaster`, not the topic-bridge pair. `/clock` should tick near the physics rate. Arm degrees of freedom are not also bridged on `/isaac/joint_command`. -`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`. +`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 [TF](../../4-reference/simulation/2-fasim_isaac.md#tf). 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`. +If the opened USD uses `SwerveController` (Linkhou S2 or Taku chassis graphs), that is the [swerve extension](../../4-reference/simulation/2-fasim_isaac.md#swerve-extension), not this hardware key. After Play, publish a `geometry_msgs/Twist` on the graph’s subscribe topic and check that steer joints move in position and wheel joints in velocity. + ## What to open | Tree | Content | |------|---------| -| `robots/` → [robot_usds](https://github.com/fiveages-sim/robot_usds) | Robot USD | +| `robots/` → [robot_usds](https://github.com/fiveages-sim/robot_usds) | Robot USD. Folder map: [robot_usds](../../4-reference/simulation/3-robot_usds.md) | | `environment/fiveages_env/` | Public scenes | | `environment/fa-project-usd/` → [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) | Project scenes (private; needs access) | | `environment/artvip-usd/` | ArtVIP components | -Gen labels and brand folders: [robot_usds reference](../../4-reference/simulation/3-robot_usds.md). +Scene trees and project layout: [Environment assets](../../4-reference/simulation/5-env_assets.md). + +(g1-d-full-body-control-and-chassis-motion)= + +## G1-D full-body control and chassis motion + +This clip is a G1-D demonstration of full-body control in Isaac Sim. On the Viser web control interface, drag the dual-arm end-effector targets and move the chassis in rotation and translation; G1-D in Isaac Sim moves with it. Start Viser as in [Start Viser](../3-programming/5-python_interface.md#start-viser) after the stack is up. + +```{raw} html + +``` + +(when-it-fails)= ## When it fails **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/`. -**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. +**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. For a swerve graph, the `SwerveController` node type must be available (same operation 5 and restart). -**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). +**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 Clock](../../4-reference/simulation/2-fasim_isaac.md#clock) section. ## Next - [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md) -- [Add a Robot](../6-deployment/10-add_a_robot.md) and the [Day 7 exam](../../0-overview/2-learning_path.md) +- [Add a Robot](../6-deployment/10-add_a_robot.md) and the [Day 7 exam](../../0-overview/2-learning_path.md#day-7-bring-one-new-robot-into-fasim) - [Synthetic Data](../7-synthetic_data/0-index.md) diff --git a/source/2-how_to/3-programming/5-python_interface.md b/source/2-how_to/3-programming/5-python_interface.md index 3a34004..3a48baf 100644 --- a/source/2-how_to/3-programming/5-python_interface.md +++ b/source/2-how_to/3-programming/5-python_interface.md @@ -5,7 +5,7 @@ Control robots from Python with `ROS2RobotInterface`. ## Prerequisites - ROS 2 Jazzy installed -- Robot demo running (mock, Gazebo, or real) +- Robot demo running (mock, Isaac Sim, or real; Gazebo is an alternative) - **Python 3.12** (ROS 2 Jazzy) ## Install fa-py-libraries @@ -66,16 +66,22 @@ interface.disconnect() `right_arm_handler` / `right_gripper_handler` exist in dual-arm mode after `connect()` sees `/right_current_pose`. Cartesian vs joint vs gripper topics (including `*/twist`, `*/relative`, `target_percent`, and waist `waist_*`), plus `execute_*_action` and `execute_path`: [ros2_robot_interface](../../4-reference/python_apps/1-ros2_robot_interface.md) (Topic / Action / Service ↔ API map). -## With Viser visualization +(start-viser)= -Launch Viser from **fa-py-libraries** (`./run.sh viser`). That is the primary entry; do not start it from lerobot_ros2 or treat `pip install ros2-viser` as the product launcher. +## Start Viser + +Viser is the browser 3D view and control page from [ros2-viser](../../4-reference/python_apps/3-ros2_viser.md). Start the robot control stack first (`/robot_description` must be available), then launch Viser from **fa-py-libraries**. That is the primary entry; do not start it from lerobot_ros2 or treat `pip install ros2-viser` as the product launcher. :::{code-block} bash cd ~/fa-py-libraries ./run.sh viser ::: -`ros2_viser` is a library dependency of that command. Embedding `ROS2ViserVisualizer` in your own script is covered on [ros2-viser](../../4-reference/python_apps/3-ros2_viser.md). +`./run.sh` with no arguments opens a menu; item 1 is `ros2-viser launch`. The command runs `ros2-viser/launch.py`. In a browser, open the URL printed in the terminal (`访问 URL`). The same output shows the host and port; this launch has no separate host/port flag. You can also scan the QR code it prints. + +The page starts as an empty scene. If only one robot is present, it loads automatically. If there are several, pick one under “选择命名空间”. If the robot comes up later, click “刷新命名空间列表”. Then confirm the model is visible. For a first control check: use HOME / HOLD on the state panel; switch to OCS2 and drag the end-effector handles; or switch to MOVEJ, move the joint sliders, and send the target. On a mobile base such as G1-D, `launch.py` sets the visualization frame to `world`; you can also choose `map` or `odom` on the page so the model and the handles share the same ground. + +`ros2_viser` is a library dependency of that command. The full UI and embedding `ROS2ViserVisualizer` in your own script are on [ros2-viser](../../4-reference/python_apps/3-ros2_viser.md). Use this page before you rely on Viser while running [Isaac Sim](../2-simulation/4-isaac_sim.md). ## FSM commands diff --git a/source/2-how_to/5-teleoperation/0-index.md b/source/2-how_to/5-teleoperation/0-index.md index 01d2b92..b49eb0d 100644 --- a/source/2-how_to/5-teleoperation/0-index.md +++ b/source/2-how_to/5-teleoperation/0-index.md @@ -1,11 +1,12 @@ # Teleoperation -VR, isomorphic teleop, and DexCap. Drag teaching (拖动遥操作) is not implemented. +Start with [VR](6-vr_teleop.md) or a [game controller](9-joystick_teleop.md). The other pages cover isomorphic teleop, DexCap, Wuji gloves, Vive Tracker, and related assists. Drag teaching (拖动遥操作) is not implemented. ```{toctree} :maxdepth: 1 6-vr_teleop +9-joystick_teleop 7-isomorphic_teleop 7-drag_teleop 8-dexcap_teleop diff --git a/source/2-how_to/5-teleoperation/8-dexcap_teleop.md b/source/2-how_to/5-teleoperation/8-dexcap_teleop.md index 5b9483a..ce2584b 100644 --- a/source/2-how_to/5-teleoperation/8-dexcap_teleop.md +++ b/source/2-how_to/5-teleoperation/8-dexcap_teleop.md @@ -1,6 +1,6 @@ # DexCap Teleoperation -Use DexCap gloves for dexterous hand teleoperation. +Use the DexCap V4 exoskeleton and gloves for combined arm and hand teleoperation. The exoskeleton measures waist and arm joints; the gloves measure finger joints. ```{admonition} Internal Access Required :class: warning @@ -11,8 +11,8 @@ DexCap components require access to private repositories. Contact your team lead ## Overview DexCap teleoperation enables: -- High-fidelity hand tracking via glove sensors -- Finger joint mapping to robot hands +- Waist and arm joint measurement from the exoskeleton +- Finger joint mapping from the gloves to robot hands - Combined arm + hand teleoperation ## Components @@ -38,14 +38,14 @@ cd dexcap_teleop_ws Follow that **private workspace’s README** for its init / setup scripts. -### 3. Initialize Connection - -First connection should disable commands for safety: +### 3. Start the driver ```bash -ros2 launch dexcap_ros2_control driver.launch.py publish_command:=false +ros2 launch dexcap_ros2_control dexcap_driver.launch.py ``` +To start only the exoskeleton or only one glove, pass `start_upper_body`, `start_left_hand`, and `start_right_hand` as in the private package README. That README is also the place to look for first-connection safety; `publish_command` is not a current launch argument. + ## Launch Order ```{admonition} Important @@ -63,9 +63,13 @@ Launch order, package names, and topics: the **private README**. | Topic | Type | Description | |-------|------|-------------| -| `/dexcap/joint_states` | `JointState` | Raw glove joint angles | -| `/dexcap/hand_pose` | `PoseStamped` | Hand position/orientation | -| `/teleop/target_hand_joints` | `JointState` | Mapped robot hand targets | +| `/dexcap/waist` | `JointState` | Waist joints from the exoskeleton | +| `/dexcap/left_arm` | `JointState` | Left arm joints from the exoskeleton | +| `/dexcap/right_arm` | `JointState` | Right arm joints from the exoskeleton | +| `/dexcap/left_hand` | `JointState` | Left glove, 21 joints | +| `/dexcap/right_hand` | `JointState` | Right glove, 21 joints | + +Mapper outputs and further topics are in the private README. ## Joint Mapping @@ -94,9 +98,8 @@ Before each session: ## Verification 1. DexCap driver shows connected status -2. `/dexcap/joint_states` publishes hand joint angles -3. Robot hand follows glove motion -4. Arm follows hand position (if arm teleop enabled) +2. `/dexcap/left_hand` and `/dexcap/right_hand` publish glove joint angles; `/dexcap/waist`, `/dexcap/left_arm`, and `/dexcap/right_arm` publish when the exoskeleton is started +3. The robot hand follows the gloves; the arms follow the exoskeleton when arm mapping is enabled ## Troubleshooting diff --git a/source/2-how_to/5-teleoperation/9-joystick_teleop.md b/source/2-how_to/5-teleoperation/9-joystick_teleop.md new file mode 100644 index 0000000..0127897 --- /dev/null +++ b/source/2-how_to/5-teleoperation/9-joystick_teleop.md @@ -0,0 +1,55 @@ +# Joystick teleop + +Use a game controller (joystick / gamepad) to command the arms and, in chassis mode, the mobile base. The package is [`arms_teleop`](https://github.com/fiveages-sim/arms_ros2_control/blob/main/command/arms_teleop/README.md) in [arms_ros2_control](https://github.com/fiveages-sim/arms_ros2_control). It also contains a foot-pedal assist, which is not a complete teleop setup. + +## Prerequisites + +- A robot stack is already running (mock, Isaac Sim, or real). This launch does not start the controller. +- A game controller is connected. The default device is `/dev/input/js0`. + +## Start the joystick + +:::{code-block} bash +source install/setup.bash +ros2 launch arms_teleop joystick_teleop.launch.py +::: + +By default `joy_driver:=auto` uses `game_controller_node` when `joy_enumerate_devices` reports the device as mapped, with `generic_gamepad.yaml` (SDL standard layout). Unmapped devices fall back to `joy_node` and `default.yaml`. The package README lists typical mapped gamepads; do not treat that list as a compatibility guarantee for an untested device. + +Joystick control starts **disabled**. Press the **right stick** to enable it, then move the sticks. Press the right stick again to disable. + +List connected devices: + +:::{code-block} bash +ros2 run joy joy_enumerate_devices +::: + +If more than one controller is connected, pass the device you want, for example `joy_dev:=/dev/input/js1`. Mapping overrides and keyboard teleop are in the [package README](https://github.com/fiveages-sim/arms_ros2_control/blob/main/command/arms_teleop/README.md). Do not run `joystick_teleop` and `keyboard_teleop` at the same time if they would publish to the same topics. + +## What it publishes + +The joystick node publishes `control_input` (`arms_ros2_control_msgs/Inputs`). [arms_target_manager](../../4-reference/controllers/6-gripper_teleop_plugins.md) scales that message into `/left_target/twist` and `/right_target/twist`. In chassis mode it publishes `/cmd_vel`. The joystick stack also publishes `/fsm_command`. + +## What you should see + +After you enable the controller, stick motion changes the active arm’s target, or the chassis when you are in chassis mode. `teleop_mode` reports whether the joystick is active. + +(foot-pedal)= + +## Foot pedal (assist only) + +`foot_pedal_teleop` is an **assist**, not a standalone teleop path. It reads one USB foot pedal (the packaged udev rule is for the SayoDevice CM6K) and publishes events on `/teleop/controller_state`. It does **not** publish `/fsm_command`. FSM transitions and teleop toggles are handled by `VRInputHandler`. + +With exactly one supported pedal connected: + +:::{code-block} bash +ros2 run arms_teleop foot_pedal_teleop +::: + +The package README documents the event map (FSM up/down, left/right arm teleop enable, STORAGE/UPDATE, mirror), udev setup, and how to choose a device when more than one pedal is connected. + +## Related + +- [VR Teleoperation](6-vr_teleop.md) — headset controllers for end-effector pose +- [arms_teleop README](https://github.com/fiveages-sim/arms_ros2_control/blob/main/command/arms_teleop/README.md) +- [FSM and Topics](../../3-concepts/4-fsm_and_topics.md) 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 23ef4b2..1f9de30 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 @@ -4,88 +4,25 @@ Synthetic datagen in this stack is an **Isaac Sim** line. Gazebo is not part of Scene assets live in **FaSim-Isaac**. Robot USD files are the **robot_usds** superproject (FaSim submodule `robots/`). Environment and private project USDs sit beside that tree, not inside it. -## FaSim-Isaac (scene host) +## Prepare the workspace -**Repository:** [fiveages-sim/FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac) +Clone [FaSim-Isaac](https://github.com/fiveages-sim/FaSim-Isaac), run `./init.sh`, then `./run.sh`. The menu, flags, and first ROS 2 connection are on [Isaac Sim](../2-simulation/4-isaac_sim.md). Do not hand-assemble the tree. -FaSim-Isaac is the one-click Isaac asset workspace: it clones USD submodules, can install the Isaac ROS 2 Jazzy overlay, and starts Sim. Prefer the scripts; do not hand-assemble the tree. +The datagen example README ([`examples/IsaacSim/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md) on `main`) still lists Ubuntu 24.04, ROS 2 Jazzy, and Isaac Sim 6.0. Keep path and version in FaSim config. The FaSim fallback list (`6.2.0`, `6.1.0`, `6.0.1` in `config/fa_sim.conf`) is newer than that 6.0 line. -:::{code-block} bash -git clone git@github.com:fiveages-sim/FaSim-Isaac.git -cd FaSim-Isaac -./init.sh -./run.sh -::: +Open the target robot or scene USD in Isaac and run the simulation. Enable Isaac’s ROS 2 simulation-control and prim services as in the [NVIDIA Isaac ROS 2 workspace docs](https://docs.isaacsim.omniverse.nvidia.com/latest/installation/install_ros.html#setup-ros-2-workspaces) linked from the example README (`/set_simulation_state`, prim service for object pose). -`./init.sh` menu and `./run.sh` flags: [Isaac Sim](../2-simulation/4-isaac_sim.md). Operation 1 selects submodules (`public` checked, private unchecked until you have access). Operation 4 is the optional Isaac ROS 2 Jazzy overlay. The version menu queries GitHub stable tags; `config/fa_sim.conf` falls back to `6.2.0` / `6.1.0` / `6.0.1`. Override with `ISAAC_SIM_VERSION=… ./init.sh`. Operation 5 installs `fasim.ros2.nodes` (needed before Play on an in-process `ROS2ControlLaunch` graph). +Workspace layout, Kit extensions, and in-process 运控: [FaSim-Isaac](../../4-reference/simulation/2-fasim_isaac.md). -The datagen example README ([`examples/IsaacSim/README.md`](https://github.com/fiveages-sim/lerobot_ros2/blob/main/examples/IsaacSim/README.md) on `main`) still lists Ubuntu 24.04, ROS 2 Jazzy, and Isaac Sim 6.0. Keep path and version in FaSim config. The FaSim fallback list above is newer than that 6.0 line. +## Which tree to open -Layout from that README: +| Tree | Role | Reference | +|------|------|-----------| +| `robots/` → [robot_usds](https://github.com/fiveages-sim/robot_usds) | Robot USD, including FiveAges Gen1/Gen2 gitlinks and in-tree models such as Taku | [robot_usds](../../4-reference/simulation/3-robot_usds.md) | +| `environment/fiveages_env/` → [fiveages-env-usds](https://github.com/fiveages-sim/fiveages-env-usds) | Public scenes (`static/`, `moveable/`, `articulation/`, `background/`, `tasks/`) | [Environment assets](../../4-reference/simulation/5-env_assets.md) | +| `environment/fa-project-usd/` → [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) | Private project scenes. `robot.yaml` / `task_configs/` / maps are on branch `feature/sinopec-test-tube-picking`, not on `main` | [fa-project-usd](../../4-reference/simulation/5-env_assets.md#fa-project-usd) | -:::{code-block} none -FaSim-Isaac/ -├── init.sh -├── run.sh -├── config/ # fa_sim.conf + optional fa_sim.local.conf -├── robots/ # → robot_usds -├── environment/ -│ ├── fiveages_env/ # → fiveages-env-usds (public scenes) -│ └── fa-project-usd/ # → fa-project-usd (private project USD) -└── isaac_jazzy_ws/ # created by init.sh operation 4 -::: - -Open the target robot USD from `robots/` (robot_usds) in Isaac and run the simulation. Enable Isaac’s ROS 2 simulation-control and prim services as in the [NVIDIA Isaac ROS 2 workspace docs](https://docs.isaacsim.omniverse.nvidia.com/latest/installation/install_ros.html#setup-ros-2-workspaces) linked from the example README (`/set_simulation_state`, prim service for object pose). - -Package details: [FaSim-Isaac reference](../../4-reference/simulation/2-fasim_isaac.md). - -## robot_usds (robot USD only) - -**Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-sim/robot_usds) - -This chapter documents USD **as referenced by robot_usds** (and as the FaSim `robots/` submodule). **Primary path:** FaSim `./init.sh` operation 1 initializes that submodule (public items by default). - -:::{admonition} Manual fallback -:class: note - -After a plain clone of robot_usds (outside FaSim), submodule directories are empty until: - -:::{code-block} bash -git clone git@github.com:fiveages-sim/robot_usds.git -cd robot_usds -git submodule update --init --recursive -::: -::: - -Git submodules recorded there: - -| Path | Upstream | -|------|----------| -| `humanoid/FiveAges/Gen1` | fiveages-gen1-robot-usds | -| `humanoid/FiveAges/Gen2` | fiveages-gen2-robot-usds | -| `humanoid/Ubtech` | ubtech-usds | -| `humanoid/Galbot` | galbot-usds | - -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. - -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). - -## Environment and private project USD - -Environment assets are **siblings** of `robots/`, not robot_usds submodules. - -| Tree | Visibility | Role | -|------|------------|------| -| `environment/fiveages_env/` → [fiveages-env-usds](https://github.com/fiveages-sim/fiveages-env-usds) | Public | Shared Isaac scenes: `static/` (tables, shelves, boxes), `moveable/` (small objects), `articulation/` (drawers, …), `background/`, `tasks/` (composed task scenes). | -| `environment/fa-project-usd/` → fa-project-usd | Private | Project-specific USD used by internal task scenes. `./init.sh` leaves this unchecked unless you have access. | - -robot_usds README: if you use robot_usds **outside** FaSim, put `environment/fiveages_env` next to `robots/` so scene USDs can reference it. - -`fa-project-usd` is a private project scene tree, not a public robot model. Product names on this page follow the public robot_usds gallery text. - -[Environment assets reference](../../4-reference/simulation/5-env_assets.md). +If you use robot_usds **outside** FaSim, put `environment/fiveages_env` next to `robots/` so scene USDs can reference it. `fa-project-usd` is a project scene tree, not a public robot model. Product names on this page follow the public robot_usds gallery text. Keep camera rigs in the scene USD. ## Next on the pipeline diff --git a/source/4-reference/descriptions/4-fiveages_umbrella.md b/source/4-reference/descriptions/4-fiveages_umbrella.md index 9414fa3..0443762 100644 --- a/source/4-reference/descriptions/4-fiveages_umbrella.md +++ b/source/4-reference/descriptions/4-fiveages_umbrella.md @@ -80,7 +80,7 @@ After access to a private remote, init the path named in `.gitmodules` (or let ` Gen2 USD is **W2 and S2** only. It does **not** publish W2R or S2R. -Checkout: standalone `git submodule update --init humanoid/FiveAges/Gen2` (and `…/Gen1`) as in the [robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) §2.1, or FaSim-Isaac **`./init.sh`** (operation that inits `robots/` via `submodules_visibility.conf`), then **`./run.sh`**. FaSim’s visibility file still marks the FiveAges Gen\* trees `private`, so `./init.sh` does not select them by default. See [robot_usds](../simulation/3-robot_usds.md). +Checkout: standalone `git submodule update --init humanoid/FiveAges/Gen2` (and `…/Gen1`) as in the [robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) §2.1, or FaSim-Isaac **`./init.sh`** (operation 1 inits `robots/` via `submodules_visibility.conf`), then **`./run.sh`**. On FaSim-Isaac `main` as checked on 2026-11-13, Gen1 and Gen2 are marked public, so operation 1 selects them by default. Gen3 stays private and still needs access. See [robot_usds](../simulation/3-robot_usds.md). ## Private: deploy diff --git a/source/4-reference/simulation/0-index.md b/source/4-reference/simulation/0-index.md index d6bba67..bc5933c 100644 --- a/source/4-reference/simulation/0-index.md +++ b/source/4-reference/simulation/0-index.md @@ -1,34 +1,41 @@ # Simulation Reference -This section documents the simulation backends and USD assets. +This section is the reference for the simulation backends and their USD assets. It explains what each piece is, how the pieces fit, and which parameters or layouts are in the current trees. Step-by-step start, launch, and first checks live in the How-To pages. -## Overview +**FaSim** is NVIDIA Isaac Sim plus the same ROS 2 运控 stack used on the real robot, so motion can match hardware while the sim supplies ground truth. FaSim-Isaac is more than a place to open a USD: it also installs the OmniGraph extensions that start 运控 inside Sim and that drive a swerve chassis. -The stack supports multiple simulation backends. **FaSim** is Isaac Sim high-fidelity simulation combined with the same ROS 2 运控 as the real robot, so you get matching motion plus simulation ground truth. +## Isaac Sim reading order -| Backend | Use Case | -|---------|----------| -| Mock | Fast testing, no physics (`hardware:=mock_components`) | -| Gazebo Harmonic | Physics simulation | -| FaSim / Isaac Sim | High-fidelity USD; same 运控 as hardware + sim ground truth | +Use the pages in this order. Each one points at a specific section when you need more detail; they do not repeat the full mechanism. + +1. **Prepare the machine and start Sim** — [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md): `./init.sh`, `./run.sh`, and the first ROS 2 connection. +2. **Robot USD assets** — [robot_usds](3-robot_usds.md): the `robots/` tree, its git submodules, and public versus private checkout. +3. **FaSim extensions** — [FaSim-Isaac](2-fasim_isaac.md): how the `isaac` / `isaac_sim` hardware keys differ from the Kit extensions, then the [ROS 2 Control extension](2-fasim_isaac.md#ros-2-control-extension) and the [swerve extension](2-fasim_isaac.md#swerve-extension). +4. **Scenes and project layout** — [Environment assets](5-env_assets.md): public scenes, ArtVIP / LabUtopia components, and private project USD (including where `robot.yaml` currently lives). +5. **Run, check, and debug** — [When it fails](../../2-how_to/2-simulation/4-isaac_sim.md#when-it-fails) on the How-To page. Clock and TF details stay in [Clock](2-fasim_isaac.md#clock) and [TF](2-fasim_isaac.md#tf). + +Isaac Sim is the recommended backend. Gazebo remains available as an alternative: [Gazebo](1-gazebo.md), with steps in [Gazebo Simulation](../../2-how_to/2-simulation/3-gazebo_sim.md). + +Isaac **datagen** (USD → orchestration → LeRobot export, not Gazebo): [Synthetic Data](../../2-how_to/7-synthetic_data/0-index.md). ## In This Section ```{toctree} :maxdepth: 1 -1-gazebo 2-fasim_isaac 3-robot_usds -4-usd_submodules 5-env_assets +1-gazebo ``` ## Quick Comparison +Isaac Sim is the recommended path. The table still lists Mock and Gazebo so you can compare backends; it does not change what each one supports. + | Aspect | Mock | Gazebo | Isaac | |--------|------|--------|-------| -| Physics | No | Yes | Yes (PhysX) | +| Physics | No | Yes | Yes (PhysX or Newton, chosen in `./run.sh`) | | Rendering | RViz only | Basic | Photorealistic | | Setup | None | `apt install` | FaSim-Isaac `./init.sh` + `./run.sh` | | Speed | Real-time | ~Real-time | Configurable | @@ -37,7 +44,5 @@ The stack supports multiple simulation backends. **FaSim** is Isaac Sim high-fid ```{admonition} Isaac Sim Requirements :class: warning -Isaac Sim integration uses **FaSim-Isaac** (`./init.sh`, `./run.sh`). Default path is `ISAACSIM_DIR` (`~/isaacsim`); version comes from FaSim config / the init menu. See [FaSim-Isaac](2-fasim_isaac.md). +Isaac Sim integration uses **FaSim-Isaac** (`./init.sh`, `./run.sh`). Default path is `ISAACSIM_DIR` (`~/isaacsim`); the optional ROS 2 overlay version comes from FaSim config / the init menu. See [FaSim-Isaac](2-fasim_isaac.md). ``` - -Isaac **datagen** (USD → orchestration → LeRobot export, no Gazebo): [Synthetic Data](../../2-how_to/7-synthetic_data/0-index.md). diff --git a/source/4-reference/simulation/2-fasim_isaac.md b/source/4-reference/simulation/2-fasim_isaac.md index 9bd6da6..f42c1a1 100644 --- a/source/4-reference/simulation/2-fasim_isaac.md +++ b/source/4-reference/simulation/2-fasim_isaac.md @@ -1,16 +1,20 @@ # FaSim-Isaac -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. +FaSim-Isaac is the Isaac Sim workspace for this stack. It holds robot and scene USD, can install an optional Isaac ROS 2 Jazzy overlay, and installs two OmniGraph extensions: one starts 运控 inside Sim, and one computes swerve (舵轮) commands for a chassis. It is not only a launcher for opening a USD. -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). +Use the [Isaac Sim How-To](../../2-how_to/2-simulation/4-isaac_sim.md) to install, start Sim, pick a launch, and run the first checks. This page explains the hardware keys, the two Kit extensions, and why a joint topic, a clock, or a TF edge behaves the way it does. -**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`. +**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`). The swerve extension is also on `main`. Replicator capture (`exts/fasim.replicator.sdg`) is on `feature/ros2-control-node`, not on `main`. **README:** [README.md](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/README.md) -## Two hardware interfaces +(fasim-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. +## Hardware keys `isaac` and `isaac_sim` + +These keys are ros2_control hardware interfaces in the robot description xacro. They are not the FaSim Kit extensions below, and they are not a second robot body. One stage uses one of them. + +`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. | Key | Where it is set | Plugin | Joint I/O | |-----|-----------------|--------|-----------| @@ -29,13 +33,32 @@ The shared macro’s `/isaac/joint_*` pair is the topic-bridge default. Acone us 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 +(fasim-kit-extensions)= + +## FaSim Kit extensions + +`./init.sh` operation 5 installs two extensions into this Isaac (`ISAACSIM_DIR`, default `~/isaacsim`). The script symlinks `exts/` into `extsUser/` and adds the extension to the full, Newton, and streaming kit files. Reinstall Isaac, then run operation 5 again. Restart a running Isaac so the extensions load. + +The two extensions have different entry points. Do not treat a `SwerveController` graph as a ros2_control hardware key, and do not treat `ROS2ControlLaunch` as `hardware:=isaac`. + +| Extension | OmniGraph nodes | What it is for | +|-----------|-----------------|----------------| +| `exts/fasim.ros2.nodes` | `ROS2ControlLaunch`, `NavigationLaunch` | Start the in-process controller manager (`hardware=isaac_sim`) and, optionally, host Nav2 | +| `exts/fasim.steering.nodes` | `SwerveController` | Turn a planar twist into steer-position and wheel-velocity commands for a four-wheel swerve chassis | + +(fasim-ros2-control)= + +## ROS 2 Control extension + +`fasim.ros2.nodes` is the in-process 运控 entry. After Play, `OgnROS2ControlLaunch` ([`OgnROS2ControlLaunch.ogn`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn)) runs once and calls `emit_control`. That path sets `hardware=isaac_sim`, passes the ArticulationRoot as `isaac_prim_path`, and starts Isaac’s ControllerManager in the same process. Examples on this path include G1D, G1, and W2. 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). + +This is not the topic-bridge path. A stage that only uses `hardware:=isaac` does not go through this node. -`OgnROS2ControlLaunch` ([`OgnROS2ControlLaunch.ogn`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnROS2ControlLaunch.ogn)) runs once after Play: +### `ROS2ControlLaunch` inputs | Input | Role | |-------|------| -| `targetPrim` | One ArticulationRoot | +| `targetPrim` | One ArticulationRoot, or a parent that contains exactly one | | `robot` | Description stem (`unitree_g1d`, `fiveages_w2`). Empty reads the USD `Robot` variant | | `mode` | `demo`, `split_body`, or `full_body` | | `type` | `robot_common_launch` end-effector key. Empty reads EE variants on the stage | @@ -43,6 +66,11 @@ In-process W2 ([`fiveages.usda`](https://github.com/fiveages-sim/fiveages-gen2-r | `infoFile` | OCS2 `.info` basename. Empty keeps the description default | | `useSimTime` | Forced true for `isaac_sim` (needs `/clock`) | | `publishRobotDescription` | Latch the same xacro on `/robot_description` (default true) | +| `profile` | Optional robot profile YAML path | +| `enableGripper` | Same as `robot_common_launch` `enable_gripper` | +| `rosSetup` | Path to `install/setup.bash`. Empty: first non-`/opt/ros` install on `AMENT_PREFIX_PATH` | +| `enableArmsTargetManager` | Spawn `arms_target_manager` as a host process (default true) | +| `arms` | `robot_common_launch` arms xacro key. Empty keeps the description default | `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. @@ -62,7 +90,63 @@ A simulated robot that runs 运控 inside Isaac starts faster for two reasons: t `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`. -`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. +`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. You can run the controller from the deb without that private source checkout. + +### Add a robot to the in-process path + +1. The `{robot}_description` xacro includes `simulation_hardware_plugin` for `isaac_sim`, or lists `isaac_sim` in `validated_hardware_type` if that robot uses a whitelist. +2. The USD has one ArticulationRoot and a payload that contains `ROS2ControlLaunch`. Set `targetPrim`, `robot` or the `Robot` variant, and `mode`. +3. Operation 5 is installed and Isaac was restarted. The ROS variant on the stage is the in-process payload, not the topic-bridge payload. +4. Press Play, then check as in the [How-To](../../2-how_to/2-simulation/4-isaac_sim.md#in-process-hardware-interface-isaac_sim). + +### What you should see + +`ros2 control list_controllers` lists the controllers for that `mode`. `/joint_states` is the controller’s `joint_state_broadcaster`, not the topic-bridge `/isaac/joint_*` pair. `/clock` ticks near the physics rate (see [Clock](#clock)). A command moves the articulation in the viewport. Arm degrees of freedom are not also bridged on `/isaac/joint_command`. + +A G1-D demonstration of full-body control and chassis motion in Isaac Sim is on the [How-To](../../2-how_to/2-simulation/4-isaac_sim.md#g1-d-full-body-control-and-chassis-motion). + +(fasim-swerve)= + +## Swerve extension + +`fasim.steering.nodes` provides `fasim.steering.nodes.SwerveController` ([`OgnSwerveController.ogn`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/ogn/python/nodes/OgnSwerveController.ogn), kinematics in [`swerve.py`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/swerve.py)). It is an OmniGraph node, not a ros2_control hardware interface. A ScriptNode used to hold the same kinematics in module globals, which made Isaac disable every Action Graph until the user opted in. This node keeps state on the instance instead. + +It reads a planar twist in the body frame and writes two arrays, in the same wheel order: front-left, rear-left, rear-right, front-right (`fl`, `rl`, `rr`, `fr`). + +- `Steer_Position_Command` and `Steer_Joints` — steer angles, in radians, sent as position commands +- `Wheel_Velocity_Command` and `Wheel_Joints` — wheel velocity commands, sent as velocity commands + +The two command types go to two `isaacsim.core.nodes.IsaacArticulationController` nodes. Do not wire steer angles as wheel velocities, or the other way around. + +`Desired_Linear_Velocity_X` / `Y` are forward and lateral speed in metres per second. `Desired_Angular_Velocity` is yaw rate in radians per second. Wheel positions in the profiles are body-frame `(x, y)` in metres, with `x` forward and `y` left. Inverse kinematics use `vx_total = vx - ω y_i` and `vy_total = vy + ω x_i`. + +`linearGain` scales wheel speed after the inverse kinematics. `angularGain` scales yaw rate before it. `flipVelocityScale` (clamped to `[0, 1]`) scales wheel speed for one frame when the equivalent steer solution flips sign. `simTime` is unused; it remains so existing Taku graph connections still resolve. + +The node accepts only two profiles. An unknown `profile` raises `ValueError`. There is no separate profile YAML. + +| `profile` | Steer joints | Drive (wheel) joints | Wheel `(x, y)` (m) | Stop and command behaviour | +|-----------|----------------|----------------------|--------------------|----------------------------| +| `linkhou_s2_v1` (OGN default) | `fl_steer_joint`, `rl_steer_joint`, `rr_steer_joint`, `fr_steer_joint` | `fl_wheel_joint`, `rl_wheel_joint`, `rr_wheel_joint`, `fr_wheel_joint` | `(0.23072, 0.21738)`, `(-0.22928, 0.21738)`, `(-0.23072, -0.21738)`, `(0.22928, -0.21738)` | When both linear speed and yaw rate are below `0.0001`, steer commands snap to zero and wheel speeds go to zero | +| `taku` | `agv_left_front_steering_joint`, `agv_left_back_steering_joint`, `agv_right_back_steering_joint`, `agv_right_front_steering_joint` | `agv_left_front_rotate_joint`, `agv_left_back_rotate_joint`, `agv_right_back_rotate_joint`, `agv_right_front_rotate_joint` | `(0.2745, 0.2045)`, `(-0.2745, 0.2045)`, `(-0.2745, -0.2045)`, `(0.2745, -0.2045)` | On stop, steer holds; steer slew is limited to 180°/s; wheel speed is scaled down until the steer error is small (full speed at 8°, zero at 35°). `msgCount` must keep changing: if it is unchanged for 0.25 s, the last twist is dropped. Linear deadband 0.02 m/s, yaw deadband 0.05 rad/s. Flip choice uses a 20° hysteresis. `deltaSeconds` is the playback frame dt (values `≤ 1e-6` or `> 0.1` fall back to `1/60`) | + +### Graph wiring on current assets + +Both example graphs tick from `OnPlaybackTick`, subscribe to a `geometry_msgs/Twist` with `ROS2SubscribeTwist`, break out linear `x`/`y` and angular `z`, and run `SwerveController`. Linear velocity is passed through `OgnIsaacScaleToFromStageUnit`. + +- Linkhou S2: [`mobile_base/Linkhou/S2_V1/payloads/ROS/ros2.usda`](https://github.com/fiveages-sim/robot_usds/blob/main/mobile_base/Linkhou/S2_V1/payloads/ROS/ros2.usda), graph `ROS_Steering_Controller`, `profile` `linkhou_s2_v1`. `linearGain` is 14.28, `angularGain` is 1.04. The ArticulationRoot target is ``. Joint name arrays come from the node outputs `Steer_Joints` and `Wheel_Joints`. The `ROS2SubscribeTwist` `topicName` attribute is present in that USDA but has no value; confirm the topic on the opened stage before you publish. +- Taku: [`humanoid/Dyna/Taku/components/Taku_Chassis/payloads/Graph/enable.usda`](https://github.com/fiveages-sim/robot_usds/blob/main/humanoid/Dyna/Taku/components/Taku_Chassis/payloads/Graph/enable.usda), graph `steering_wheel_controller`, `profile` `taku`. `topicName` is `/cmd_vel`. `linearGain` is 16, `flipVelocityScale` is 0.15, `angularGain` is 1. `deltaSeconds` comes from `OnPlaybackTick`, `msgCount` from a Counter on the subscriber `execOut`, and `simTime` from `IsaacReadSimulationTime` (the node does not use that last input). The ArticulationRoot target is ``. The two `IsaacArticulationController` nodes list the steer and drive joint names explicitly, in the same `fl`, `rl`, `rr`, `fr` order as the profile. + +OGN defaults, if a graph leaves them unset, are `linearGain` 50, `angularGain` 1, and `flipVelocityScale` 0.35. + +### Add a swerve chassis + +A new chassis is not configured by pointing `profile` at a file. Add a profile in [`swerve.py`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.steering.nodes/fasim/steering/nodes/swerve.py): wheel `(x, y)`, steer and drive joint names, and the stop behaviour that chassis needs. List the token in the OGN `allowedTokens`. Copy a graph from Linkhou S2 or Taku: subscribe a twist, set `profile`, and connect steer positions and wheel velocities to two `IsaacArticulationController` nodes on the ArticulationRoot. Joint names on those controllers, or on the node outputs, must match the USD and the profile, in `fl`, `rl`, `rr`, `fr` order. Install operation 5 and restart Isaac so `SwerveController` is available. + +### What you should see + +After Play, a `geometry_msgs/Twist` on the graph’s subscribe topic moves the chassis. Steer joints follow `Steer_Position_Command`; wheel joints follow `Wheel_Velocity_Command`. On Linkhou S2, a zero command snaps the steer joints to zero. On Taku, the steer joints hold, and a stale command (no new `msgCount` for 0.25 s) stops the wheels. If the node type is missing, operation 5 was not installed or Isaac was not restarted. + +(fasim-clock)= ## Clock @@ -74,6 +158,8 @@ The topic-bridge payload on the same robot ([`ros2.usda`](https://github.com/fiv `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. +(fasim-tf)= + ## TF 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`. @@ -93,17 +179,17 @@ ros2 run tf2_ros tf2_echo world base_link --ros-args \ `` is the string on that graph’s `namespace` input, not a `demo.launch.py` argument. A stage with one graph and one controller manager per robot has been run. +(fasim-navigation)= + ## Navigation `NavigationLaunch` ([`OgnNavigationLaunch.ogn`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/exts/fasim.ros2.nodes/fasim/ros2/nodes/ogn/python/nodes/OgnNavigationLaunch.ogn)) starts `ros2 launch robot_common_launch navigation_isaac_gt.launch.py` on Play when `enabled` is true. W2’s fiveages graph leaves `enabled` false. `map` and `paramsFile` are paths relative to the opened stage root, so an `env/` layer can point at `../../maps//map.yaml` stored in the same [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) project. The node does not call composer `ros2-stack`. Default `nav2Profile` is `map_only`. `publishMapWorldTf` defaults true (map drawn in USD world). `publishMapOdomTf` defaults false because odometry comes from Isaac. -## Project scenes - -[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)). +Where those map files and `robot.yaml` currently live: [Environment assets](5-env_assets.md#fa-project-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. +(fasim-layout)= ## Layout @@ -114,17 +200,17 @@ FaSim-Isaac/ ├── run_headless.sh ├── config/ # fa_sim.conf + optional fa_sim.local.conf ├── exts/fasim.ros2.nodes/ # ROS2ControlLaunch, NavigationLaunch -├── exts/fasim.steering.nodes/ # swerve graph node +├── exts/fasim.steering.nodes/ # SwerveController ├── tools/audit_mimic_joint_drives.py ├── robots/ # → robot_usds └── environment/ ├── fiveages_env/ ├── fa-project-usd/ # private ├── artvip-usd/ - └── labutopia-usd/ + └── labutopia-usd/ # private ::: -Submodule URLs: [`.gitmodules`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/.gitmodules). Visibility: `submodules_visibility.conf`. +Submodule URLs: [`.gitmodules`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/.gitmodules). Visibility: `submodules_visibility.conf`. Robot tree: [robot_usds](3-robot_usds.md). Scene trees: [Environment assets](5-env_assets.md). ## Mimic joints @@ -133,7 +219,8 @@ Submodule URLs: [`.gitmodules`](https://github.com/fiveages-sim/FaSim-Isaac/blob ## Related - [Isaac Sim how-to](../../2-how_to/2-simulation/4-isaac_sim.md) +- [robot_usds](3-robot_usds.md) +- [Environment assets](5-env_assets.md) - [topic_based_ros2_control](../hardware/1-topic_based.md) - [robot_common_launch](../descriptions/2-common.md) - [lerobot_ros2](../python_apps/4-lerobot_ros2.md) -- [Environment assets](5-env_assets.md) diff --git a/source/4-reference/simulation/3-robot_usds.md b/source/4-reference/simulation/3-robot_usds.md index c18118b..fd74121 100644 --- a/source/4-reference/simulation/3-robot_usds.md +++ b/source/4-reference/simulation/3-robot_usds.md @@ -1,92 +1,94 @@ # robot_usds -USD robot asset superproject for Isaac Sim. +USD robot asset superproject for Isaac Sim. In FaSim-Isaac this tree is the `robots/` submodule. **Repository:** [fiveages-sim/robot_usds](https://github.com/fiveages-sim/robot_usds) 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 +The [upstream README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) is the gallery and the full model list. This page records how the tree is checked out and which paths are git submodules. -`robot_usds` provides: -- USD robot models for Isaac Sim -- Organized asset hierarchy -- Submodule management for brand-specific assets - -## Structure - -:::{code-block} none -robot_usds/ -├── humanoid/ -│ ├── FiveAges/ -│ │ ├── Gen1/ # → fiveages-gen1-robot-usds -│ │ └── Gen2/ # → fiveages-gen2-robot-usds -│ ├── Galbot/ # → galbot-usds -│ └── Ubtech/ # → ubtech-usds -├── manipulators/ # Arm USD assets -├── mobile_manipulators/ -├── grippers/ -└── sensors/ -::: +## Purpose -## Submodules +`robot_usds` holds the robot USD models used in Isaac Sim, including in-tree brand folders and a small set of git submodules. Environment and project scenes are not in this repository; they sit beside it under FaSim `environment/`. See [Environment assets](5-env_assets.md). -The following are managed as Git submodules: +## Checkout -| Path | Repository | Branch | Visibility | -|------|------------|--------|------------| -| `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/Galbot` | galbot-usds | main | Public | -| `humanoid/Ubtech` | ubtech-usds | main | Private | +**Primary path:** inside FaSim-Isaac, `./init.sh` operation 1 initializes `robots/` according to `submodules_visibility.conf`. Start Sim with `./run.sh`. There is no `./run.sh --robot`; open the USD from `robots/` or from a scene under `environment/`. Steps: [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md). -## Usage +FaSim’s visibility file, as checked on 2026-11-13 (`submodules_visibility.conf` on FaSim-Isaac `main`), marks: -**Primary path:** inside FaSim-Isaac, `./init.sh` operation 1 initializes `robots/` (this superproject) according to `submodules_visibility.conf`. +| Path under `robots/` | Visibility in FaSim | GitHub remote | +|----------------------|---------------------|---------------| +| `humanoid/FiveAges/Gen1` | public | [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds) (public) | +| `humanoid/FiveAges/Gen2` | public | [fiveages-gen2-robot-usds](https://github.com/fiveages-sim/fiveages-gen2-robot-usds) (public) | +| `humanoid/FiveAges/Gen3` | private | [fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3-robot-usds) (private; needs access) | +| `humanoid/Galbot` | public | [galbot-usds](https://github.com/fiveages-sim/galbot-usds) | +| `humanoid/Ubtech` | private | [ubtech-usds](https://github.com/fiveages-sim/ubtech-usds) (needs access) | -:::{code-block} bash -cd FaSim-Isaac -./init.sh -::: +Public rows start checked in operation 1. Private rows stay unchecked until you can open them. A later run only adds what you check. :::{admonition} Manual fallback :class: note -Standalone clone only if you are not using FaSim: +Standalone clone only if you are not using FaSim. After a plain clone, submodule directories are empty until you init them at the paths in `.gitmodules`: :::{code-block} bash git clone https://github.com/fiveages-sim/robot_usds.git cd robot_usds git submodule update --init ::: + +To init one public gitlink, for example Gen2: `git submodule update --init humanoid/FiveAges/Gen2`. If you use robot_usds outside FaSim, put `environment/fiveages_env` next to this tree so scene USDs can reference it ([environment README note](https://github.com/fiveages-sim/robot_usds/blob/main/README.md)). ::: -## In-Tree Assets +(robot-usds-submodules)= -Assets directly in `robot_usds` (not submodules): +## Git submodules -| Directory | Content | -|-----------|---------| -| `grippers/` | Gripper USD models | -| `manipulators/` | Arm models | -| `mobile_manipulators/` | Mobile + arm | -| `sensors/` | Camera, lidar models | +These are the only USD remotes in `robot_usds/.gitmodules` on `main`. Each gitlink has `branch = main`. The superproject still pins a commit; `git submodule update` checks out that revision. -## Asset Naming +| Path | Repository | What is in the public tree | +|------|------------|----------------------------| +| `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/`). W2R and S2R are not in this repo. Their URDF remotes stay private. | +| `humanoid/FiveAges/Gen3` | [fiveages-gen3-robot-usds](https://github.com/fiveages-sim/fiveages-gen3-robot-usds) | Gen3 (private remote; needs access) | +| `humanoid/Galbot` | [galbot-usds](https://github.com/fiveages-sim/galbot-usds) | Galbot mobile manipulator USD | +| `humanoid/Ubtech` | [ubtech-usds](https://github.com/fiveages-sim/ubtech-usds) | Ubtech humanoid USD (private remote; needs access) | -### Gen1 and Gen2 +URDF / deploy for FiveAges robots: [FiveAges robot descriptions](../descriptions/4-fiveages_umbrella.md). Gen1 and Gen2 under `humanoid/FiveAges/` are wheeled-arm USD. They are not bipeds. -From the [robot_usds README](https://github.com/fiveages-sim/robot_usds/blob/main/README.md) Humanoid → FiveAges table: +To see the pin, or to move one submodule (example: Galbot): -- **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. +:::{code-block} bash +cd robot_usds +git submodule status +git submodule update --remote humanoid/Galbot +# or pin: cd humanoid/Galbot && git checkout && cd ../.. && git add humanoid/Galbot +::: + +Prefer FaSim `./init.sh --update` when you work inside the Isaac workspace. + +## In-tree categories -URDF / deploy: [FiveAges robot descriptions](../descriptions/4-fiveages_umbrella.md). +Assets that are not git submodules live in the superproject itself. Category roots on `main`: + +| Directory | Content | +|-----------|---------| +| `humanoid/` | Humanoid and wheeled-arm USD, including the FiveAges, Galbot, and Ubtech gitlinks above, and in-tree brands such as Dyna Taku (`humanoid/Dyna/Taku`) | +| `manipulators/` | Arm models | +| `mobile_base/` | Chassis models, including Linkhou S2 (`mobile_base/Linkhou/S2_V1`) | +| `mobile_manipulator/` | Mobile + arm (singular directory name) | +| `grippers/` | Gripper USD | +| `dexhands/` | Dexterous-hand USD | +| `suction_cup/` | Suction-cup USD | +| `components/` | Shared wheels and fixtures | +| `sensors/` | Camera, lidar, and related models | -Load assets through FaSim-Isaac (`./init.sh` / `./run.sh`) and that robot’s USDA. FaSim `submodules_visibility.conf` still marks the FiveAges Gen\* trees `private`, so they are not selected by default; you can init the public Gen1/Gen2 gitlinks from `robot_usds` as in that README §2.1. +The full product list is in the [robot_usds README §3](https://github.com/fiveages-sim/robot_usds/blob/main/README.md). Swerve graph examples used by the FaSim steering extension: [Swerve extension](2-fasim_isaac.md#swerve-extension). ## Related -- [USD Submodules](4-usd_submodules.md) - [FaSim-Isaac](2-fasim_isaac.md) -- [Synthetic Data](../../2-how_to/7-synthetic_data/1-isaac_scenes.md) +- [Environment assets](5-env_assets.md) +- [Isaac Sim how-to](../../2-how_to/2-simulation/4-isaac_sim.md) diff --git a/source/4-reference/simulation/4-usd_submodules.md b/source/4-reference/simulation/4-usd_submodules.md deleted file mode 100644 index 2c3872a..0000000 --- a/source/4-reference/simulation/4-usd_submodules.md +++ /dev/null @@ -1,88 +0,0 @@ -# USD Submodules - -Details on USD submodules referenced by `robot_usds`. - -## In-Scope Submodules - -These are the only USD repositories in scope for this documentation (based on `robot_usds/.gitmodules`): - -| Path | Repository | Description | -|------|------------|-------------| -| `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/Galbot` | galbot-usds | Galbot mobile manipulator | -| `humanoid/Ubtech` | ubtech-usds | Ubtech humanoid | - -## Gen1 and Gen2 - -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 - -**Repository:** [fiveages-gen1-robot-usds](https://github.com/fiveages-sim/fiveages-gen1-robot-usds) - -README name: **W1**. Path: `humanoid/FiveAges/Gen1`. Public. - -### Gen2 - -**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 in this repo. Their URDF remotes stay private. - -## Galbot - -**Repository:** [fiveages-sim/galbot-usds](https://github.com/fiveages-sim/galbot-usds) - -Galbot mobile manipulator USD assets. - -### Contents - -- Robot USD model -- Textures and materials -- Physics properties - -## Ubtech - -**Repository:** ubtech-usds - -Ubtech humanoid USD assets. - -Note: Referenced as a `robot_usds` submodule; minimal separate documentation. - -## Out of Scope - -The following USD repositories are **not** documented as they are not referenced in `robot_usds/.gitmodules`: - -- `fa-w2-usds` — Not in current gitmodules -- `agibot-g2-usds` — Not in current gitmodules -- `marvin-usds` — Obsolete/unreferenced - -## Updating Submodules - -### Check Current Pins - -```bash -cd robot_usds -git submodule status -``` - -### Update to Latest - -```bash -git submodule update --remote humanoid/Galbot -``` - -### Pin to Specific Commit - -```bash -cd humanoid/Galbot -git checkout -cd ../.. -git add humanoid/Galbot -git commit -m "Pin Galbot to " -``` - -## Related - -- [robot_usds](3-robot_usds.md) -- [FaSim-Isaac](2-fasim_isaac.md) diff --git a/source/4-reference/simulation/5-env_assets.md b/source/4-reference/simulation/5-env_assets.md index 7b4453d..c3940cb 100644 --- a/source/4-reference/simulation/5-env_assets.md +++ b/source/4-reference/simulation/5-env_assets.md @@ -1,80 +1,67 @@ # Environment Assets -USD environment and scene assets for simulation. +USD environment and project scenes used with Isaac Sim. These trees are siblings of `robots/`, not submodules of `robot_usds`. -## Overview +Robot models: [robot_usds](3-robot_usds.md). How to start Sim and open a file: [Isaac Sim](../../2-how_to/2-simulation/4-isaac_sim.md). There is no `./run.sh --env` flag; open the scene USD from `environment/` after `./run.sh`. -Environment assets are separate from robot assets: -- **robot_usds** — Robot models -- **Environment assets** — Scenes, objects, terrain +## Location in FaSim-Isaac -## fiveages-env-usds - -**Repository:** [fiveages-sim/fiveages-env-usds](https://github.com/fiveages-sim/fiveages-env-usds) - -### Purpose - -Public environment USD assets: -- Indoor scenes (office, lab) -- Objects for manipulation -- Terrain - -### Location - -In FaSim-Isaac: :::{code-block} none FaSim-Isaac/ +├── robots/ # robot_usds └── environment/ - └── fiveages_env/ # → fiveages-env-usds + ├── fiveages_env/ # → fiveages-env-usds + ├── fa-project-usd/ # private project scenes + ├── artvip-usd/ # ArtVIP components + ├── labutopia-usd/ # LabUtopia components (private) + └── ArtVIP/ # official ArtVIP download (gitignore) ::: -### Usage +Top-level URLs: [FaSim-Isaac `.gitmodules`](https://github.com/fiveages-sim/FaSim-Isaac/blob/main/.gitmodules). `./init.sh` operation 1 uses `submodules_visibility.conf`. As checked on 2026-11-13, `environment/fa-project-usd` and `environment/labutopia-usd` are marked private (unchecked until you have access). `environment/artvip-usd` is not listed as private in that file, so operation 1 checks it with the other public-marked items. The GitHub repository itself is still private; cloning it needs access. -Start Isaac with FaSim `./run.sh` and open the scene USD under `environment/fiveages_env/`. +## fiveages_env -## fa-project-usd +**Repository:** [fiveages-sim/fiveages-env-usds](https://github.com/fiveages-sim/fiveages-env-usds) (public) -**Repository:** [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) (private; the link needs access) +Shared Isaac scenes and task composition, as described in that [README](https://github.com/fiveages-sim/fiveages-env-usds/blob/main/README.md): -```{admonition} Access Required -:class: warning +| Directory | Content | +|-----------|---------| +| `static/` | Static parts: tables, boxes, shelves | +| `moveable/` | Small movable objects | +| `articulation/` | Articulated mechanisms such as drawers | +| `background/` | Room and background geometry | +| `tasks/` | Composed task scenes that reference the directories above | -This repository is private. -``` +Browse the repository for the current USD files. Open a scene under `environment/fiveages_env/` in Isaac after `./run.sh`. -### Purpose +(fa-project-usd)= -Internal project-specific USD scenes and assets. +## fa-project-usd -### Location +**Repository:** [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) (private; the link needs access) -:::{code-block} none -FaSim-Isaac/ -└── environment/ - └── fa-project-usd/ -::: +Internal project scenes. 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)). Projects may sit at the repository root or under a customer or series directory. -## Not robot_usds Submodules +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. -```{admonition} Important -:class: note +`NavigationLaunch` can point `map` at a `map.yaml` stored in that project, as a path relative to the opened `env/` layer. The node itself is documented under [FaSim-Isaac Navigation](2-fasim_isaac.md#navigation). 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. -Environment assets are **not** submodules of `robot_usds`. They are: -- Sibling directories in FaSim-Isaac -- Separate submodules of FaSim-Isaac itself -``` +## ArtVIP and LabUtopia -## Usage in FaSim +`environment/artvip-usd` ([artvip-usd](https://github.com/fiveages-sim/artvip-usd)) holds ArtVIP scene components that payload the official dataset. `./init.sh` operation 3 downloads the official data into `environment/ArtVIP/` with `tools/artvip_kitchen.py`. The FaSim README: scene components stay in `artvip-usd`; the official data is not committed. -Start Isaac with FaSim `./run.sh` (PhysX / Newton / Headless Streaming menu). Open the scene USD under `environment/fiveages_env/` (or `fa-project-usd/`) in Isaac. There is no `./run.sh --env` flag. +`environment/labutopia-usd` ([labutopia-usd](https://github.com/fiveages-sim/labutopia-usd)) holds LabUtopia components. The repository is private, and FaSim marks the submodule private. -## Creating Custom Environments +## Creating a custom scene 1. Create the USD scene in Isaac Sim. -2. Put it under `environment/fiveages_env/` or, with access, under [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd). -3. Open that file from `./run.sh`. On `main`, a project is `scene.usd(a)`, `objects/`, and `env/` ([README](https://github.com/fiveages-sim/fa-project-usd/blob/main/README.md)). `robot.yaml`, `task_configs/`, and `maps/` or `map/` sit on branch `feature/sinopec-test-tube-picking` (ahead of `main`, not merged). +2. Put it under `environment/fiveages_env/` or, with access, under [fa-project-usd](https://github.com/fiveages-sim/fa-project-usd) using the `scene` / `objects` / `env` layout on `main`. +3. Open that file from `./run.sh`. ## Related - [robot_usds](3-robot_usds.md) - [FaSim-Isaac](2-fasim_isaac.md) +- [Isaac Sim how-to](../../2-how_to/2-simulation/4-isaac_sim.md) +- [Isaac Scenes and USD](../../2-how_to/7-synthetic_data/1-isaac_scenes.md) (datagen pipeline) diff --git a/source/4-reference/teleop/0-index.md b/source/4-reference/teleop/0-index.md index 6fdee56..2ff7eb0 100644 --- a/source/4-reference/teleop/0-index.md +++ b/source/4-reference/teleop/0-index.md @@ -4,15 +4,17 @@ This section documents the teleoperation systems. ## Overview -The stack supports multiple teleoperation methods: +The stack supports several teleoperation inputs. They are not interchangeable: some supply **end-effector pose**, some follow in **joint space**, some drive **fingers or grippers**, and some only send **enable / pause / FSM** assists. For a first run, use [VR](../../2-how_to/5-teleoperation/6-vr_teleop.md) or a [game controller](../../2-how_to/5-teleoperation/9-joystick_teleop.md). -| Method | Input Device | Use Case | -|--------|-------------|----------| -| VR | VR headset (Pico Enterprise / consumer, Meta Quest) | Remote manipulation | +| Method | Input | Role | +|--------|-------|------| +| VR | Headset + VR controllers (Pico Enterprise / consumer, Meta Quest) | End-effector pose; triggers for gripper/hand; buttons for FSM and pause. The current `./run.sh vr` path starts controller mode; this docs set does not document a launch entry for VR gesture / hand-tracking recognition. | +| Game controller | Joystick / gamepad (`arms_teleop`) | Arm velocity via `control_input` → twist; chassis `/cmd_vel` in chassis mode | | Isomorphic | Master–slave (HighTorque Panthera HT) | Joint-space following | -| DexCap | Gloves | Dexterous teleop | -| Vive | Trackers | Arm tracking | -| Wuji | Gloves | Hand tracking | +| DexCap (internal) | Exoskeleton + gloves | Waist/arm joints from the exoskeleton; finger joints from the gloves | +| Wuji gloves (internal) | Gloves, optional Vive Tracker | Finger / hand joints; optional arm pose from Vive Tracker | +| Vive Tracker (internal) | SteamVR Vive Tracker (`vive_tracker_teleop`) | Arm end-effector pose. Named **Vive Tracker** in the package and in these docs, not “Valve Tracker”. | +| Foot pedal | USB pedal (`arms_teleop`, SayoDevice CM6K) | Assist only: events on `/teleop/controller_state`. Not a complete teleop setup. | ```{admonition} VR Headset Recommendation :class: tip @@ -36,7 +38,8 @@ For VR teleoperation, **Pico** and **Meta Quest** are the primary tested headset ## Topic Contracts -All teleop systems publish to standard topics: +Pose-based VR, Wuji, and Vive Tracker paths publish to these end-effector topics. Joystick teleop uses `control_input`, twist, `/cmd_vel`, and `/fsm_command` instead. The foot pedal publishes `/teleop/controller_state` only. + | Topic | Type | Description | |-------|------|-------------| diff --git a/source/4-reference/teleop/3-dexcap.md b/source/4-reference/teleop/3-dexcap.md index 356d0e8..8da7c92 100644 --- a/source/4-reference/teleop/3-dexcap.md +++ b/source/4-reference/teleop/3-dexcap.md @@ -1,6 +1,6 @@ # DexCap System -DexCap glove teleoperation system. +DexCap V4 exoskeleton and glove teleoperation system. ```{admonition} Access Required :class: warning @@ -12,7 +12,7 @@ DexCap components require private repository access. | Component | Repository | Purpose | |-----------|------------|---------| -| dexcap-ros2-control | Private | V4 driver | +| dexcap-ros2-control | Private | V4 exoskeleton and glove driver | | dexcap_teleop_ws | Private | Workspace | | teleop-joint-mapper | Private | Joint mapping | @@ -20,30 +20,28 @@ DexCap components require private repository access. ### Purpose -ROS 2 driver for DexCap V4 gloves: -- Sensor reading +ROS 2 driver for the DexCap V4 exoskeleton and gloves: +- Waist, arm, and glove joint publication - Calibration -- Joint angle output +- Mapper launches for grippers and LinkerHand O6 ### Topics | Topic | Type | Description | |-------|------|-------------| -| `/dexcap/joint_states` | `JointState` | Glove joint angles | -| `/dexcap/hand_pose` | `PoseStamped` | Hand position | -| `/dexcap/calibration_status` | `Bool` | Calibration state | +| `/dexcap/waist` | `JointState` | Waist joints | +| `/dexcap/left_arm` | `JointState` | Left arm joints | +| `/dexcap/right_arm` | `JointState` | Right arm joints | +| `/dexcap/left_hand` | `JointState` | Left glove, 21 joints | +| `/dexcap/right_hand` | `JointState` | Right glove, 21 joints | ### Usage ```bash -ros2 launch dexcap_ros2_control driver.launch.py +ros2 launch dexcap_ros2_control dexcap_driver.launch.py ``` -First connection with safety: - -```bash -ros2 launch dexcap_ros2_control driver.launch.py publish_command:=false -``` +Optional `start_upper_body`, `start_left_hand`, and `start_right_hand` flags are in the private package README. `publish_command` is not a current launch argument. ## dexcap_teleop_ws diff --git a/source/6-more_applications/4-simulation_engineer.md b/source/6-more_applications/4-simulation_engineer.md index ab4763b..4fac8c9 100644 --- a/source/6-more_applications/4-simulation_engineer.md +++ b/source/6-more_applications/4-simulation_engineer.md @@ -5,9 +5,10 @@ For engineers who import sim assets, configure a robot in this stack, and compos ## 1. Isaac line and USD assets 1. [Isaac Sim](../2-how_to/2-simulation/4-isaac_sim.md) — FaSim-Isaac `./init.sh` then `./run.sh`. ROS 2 is either `hardware:=isaac` (topic bridge) or in-process `isaac_sim` on Play. -2. [Isaac Scenes and USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md) — how FaSim pulls [robot_usds](../4-reference/simulation/3-robot_usds.md). -3. [robot_usds](../4-reference/simulation/3-robot_usds.md) and [USD submodules](../4-reference/simulation/4-usd_submodules.md) — brand folders, public vs private trees. -4. Environment assets: [env assets](../4-reference/simulation/5-env_assets.md) when the scene needs more than the robot. +2. [Simulation reference](../4-reference/simulation/0-index.md) — reading order for assets, FaSim extensions, and scenes. +3. [robot_usds](../4-reference/simulation/3-robot_usds.md) — brand folders and public versus private gitlinks. +4. [Environment assets](../4-reference/simulation/5-env_assets.md) when the scene needs more than the robot. +5. Datagen-only scene notes: [Isaac Scenes and USD](../2-how_to/7-synthetic_data/1-isaac_scenes.md). Gazebo (different backend): [Gazebo Simulation](../2-how_to/2-simulation/3-gazebo_sim.md), [Gazebo reference](../4-reference/simulation/1-gazebo.md). There is **no** `hardware:=mock`; keys are `mock_components` / `gz` / `isaac` / `isaac_sim` / `real`. diff --git a/source/_static/custom.css b/source/_static/custom.css index 2fb8ba1..8233fd2 100644 --- a/source/_static/custom.css +++ b/source/_static/custom.css @@ -36,3 +36,11 @@ .sidebar-lang-switcher__select:hover { border-color: var(--color-brand-primary); } + +/* Embedded tutorial videos: no autoplay; scale to the content column */ +.content video { + max-width: 100%; + height: auto; + display: block; + margin: 1em 0; +} diff --git a/source/_static/videos/day1-first-motion-rviz-single-arm.mp4 b/source/_static/videos/day1-first-motion-rviz-single-arm.mp4 new file mode 100644 index 0000000..7b09d92 Binary files /dev/null and b/source/_static/videos/day1-first-motion-rviz-single-arm.mp4 differ diff --git a/source/_static/videos/day2-fiveages-w2-xhand1.mp4 b/source/_static/videos/day2-fiveages-w2-xhand1.mp4 new file mode 100644 index 0000000..6515631 Binary files /dev/null and b/source/_static/videos/day2-fiveages-w2-xhand1.mp4 differ diff --git a/source/_static/videos/isaac-g1d-full-body-mobile.mp4 b/source/_static/videos/isaac-g1d-full-body-mobile.mp4 new file mode 100644 index 0000000..d85e366 Binary files /dev/null and b/source/_static/videos/isaac-g1d-full-body-mobile.mp4 differ diff --git a/source/index.md b/source/index.md index 5e46697..088e6b2 100644 --- a/source/index.md +++ b/source/index.md @@ -15,7 +15,7 @@ FiveAges Sim provides: - **Unified robot descriptions** — URDF/xacro packages for wheeled-arm humanoids, manipulators, and mobile robots - **Hardware interfaces** — ROS 2 control hardware plugins for various robot platforms (Dobot, ARX, Galbot, HighTorque, and more) - **MPC controllers** — OCS2-based arm (分体控制) and 全身控制 -- **Simulation backends** — Gazebo Harmonic, and **FaSim** (Isaac Sim high-fidelity + ROS 2 运控, matching real-robot motion plus ground truth) +- **Simulation backends** — **FaSim** (Isaac Sim high-fidelity + ROS 2 运控, matching real-robot motion plus ground truth) is the default physics path; Gazebo Harmonic remains available - **Teleop solutions** — VR, isomorphic teleop, DexCap, and glove-based teleoperation - **Python libraries** — High-level interfaces for robot control and data collection - **Synthetic data pipeline** — Isaac USD scenes, task-queue orchestration, LeRobot record/export