{"id":51556088,"url":"https://github.com/seeed-projects/rebot-isaacsim","last_synced_at":"2026-07-10T05:02:25.438Z","repository":{"id":368813933,"uuid":"1265850566","full_name":"Seeed-Projects/reBot-Isaacsim","owner":"Seeed-Projects","description":"reBot Demo for Isaac Sim","archived":false,"fork":false,"pushed_at":"2026-07-02T09:10:49.000Z","size":44420,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T11:11:57.727Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Seeed-Projects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-11T06:09:40.000Z","updated_at":"2026-07-02T07:27:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Seeed-Projects/reBot-Isaacsim","commit_stats":null,"previous_names":["seeed-projects/rebot-isaacsim"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Seeed-Projects/reBot-Isaacsim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seeed-Projects%2FreBot-Isaacsim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seeed-Projects%2FreBot-Isaacsim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seeed-Projects%2FreBot-Isaacsim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seeed-Projects%2FreBot-Isaacsim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Seeed-Projects","download_url":"https://codeload.github.com/Seeed-Projects/reBot-Isaacsim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seeed-Projects%2FreBot-Isaacsim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35321224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-10T05:02:24.454Z","updated_at":"2026-07-10T05:02:25.433Z","avatar_url":"https://github.com/Seeed-Projects.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# reBot-Isaacsim\n\nreBot-Isaacsim 是一个专为 reBotArm 设计的 NVIDIA Isaac Sim 仿真项目。它利用 Isaac Sim 的高保真物理引擎，在虚拟环境中精确复现机械臂的运动学特性与夹爪联动逻辑，为控制算法开发、轨迹规划验证及通信协议测试提供独立的纯仿真环境。\n\n## 功能组件概览\n\n本项目提供多种发送端，以满足不同的使用场景：\n\n| 组件 | 说明 |\n|------|------|\n| `gravity_joint_sender` | **重力补偿手柄模式**：改装机械臂（拆卸夹爪，加装手柄），通过重力补偿模式允许手动掰动，实时同步关节角到 Isaac Sim |\n| `isaacsim_ik_sender` | **逆运动学（IK）模式**：输入末端位姿，通过 IK 求解器得到关节角，发送到 Isaac Sim |\n| `isaacsim_traj_sender` | **轨迹规划（Traj）模式**：在 IK 基础上增加关节空间轨迹规划（MIN_JERK 时间剖面），实现平滑运动控制 |\n| `isaacsim_joint_test_sender` | **关节测试模式**：无需真实机械臂，发送预设关节角轨迹，用于验证 Isaac Sim 接收端和通讯是否正常 |\n| `joint_reader_sender` | **Real-to-Sim 映射模式**：只读关节角并映射到 Isaac Sim，适合与其他控制项目配合使用（例如：实际机械臂在运行其他任务时，同步映射到 Isaac Sim 进行可视化） |\n\n## 系统架构\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│                         reBot-Isaacsim                           │\n│                                                                  │\n│   ┌──────────────────────┐        ┌─────────────────────────┐    │\n│   │ 发送端 (Terminal 1)   │  UDP   │   接收端 (Terminal 2)    │    │\n│   │                      │  JSON  │                         │    │\n│   │ gravity_joint_sender │──────▶ │ isaacsim_joint_receiver │    │\n│   │                      │ 5005   │                         │    │\n│   │  • reBotArm_control  │        │  • Isaac Sim 仿真        │    │\n│   │    _py uv 环境        │        │  • 地面 + 机械臂 USD      │   │\n│   │  • MIT + 重力前馈     │        │  • 关节角同步             │    │\n│   │  • 允许手动掰动        │        │  • 夹爪双关节联动         │    │\n│   └──────────────────────┘        └─────────────────────────┘    │\n└──────────────────────────────────────────────────────────────────┘\n```\n\n## 目录结构\n\n```\nreBot-Isaacsim/\n├── pyproject.toml                           # uv 工作空间配置\n├── README.md\n├── README_EN.md\n├── reBotArm_Isaacsim/                       # 主示例目录\n│   ├── gravity_joint_sender.py              # 重力补偿手柄模式（改装机械臂，手动掰动）\n│   ├── isaacsim_ik_sender.py                # 逆运动学模式（IK 控制）\n│   ├── isaacsim_traj_sender.py              # 轨迹规划模式（IK + 关节空间轨迹）\n│   ├── isaacsim_joint_test_sender.py        # 关节测试模式（预设轨迹，无需硬件）\n│   ├── joint_reader_sender.py                # Real-to-Sim 映射模式（只读关节，同步可视化）\n│   ├── isaacsim_joint_receiver.py           # Isaac Sim 接收端（关节角同步）\n│   ├── live_sync.py                         # 启动说明脚本\n│   ├── run_sender.sh                        # 启动发送端\n│   └── run_isaacsim_receiver.sh             # 启动 Isaac Sim 接收端\n├── third_party/\n│   └── reBotArm_control_py/                 # 核心控制库（独立 uv 环境）\n│       ├── pyproject.toml\n│       └── ...\n└── usd/\n    └── RS-rebot-dev-arm/\n        └── 00-arm-rs_asm-v3.usda            # Isaac Sim 机械臂资产\n```\n\n## 依赖与前提条件\n\n| 组件 | 要求 |\n|------|------|\n| Isaac Sim | 已安装并配置 `ISAACSIM_ROOT` 环境变量 |\n| reBotArm 固件 | 机械臂固件已烧录，CAN 总线已连接（`can0`） |\n| CAN 接口 | `can0` 已 up 且 bitrate 为 1 Mbps（`can_restart can0`） |\n| Python | 3.10+ |\n| uv | 推荐使用 uv 管理 Python 环境 |\n| reBotArm_control_py | 已在 `third_party/reBotArm_control_py` 中运行 `uv sync` |\n\n### 检查 CAN 接口\n\n```bash\n# 查看 CAN 接口状态\nip link show can0\n# 确保状态为 UP，bitrate 为 1000000\n\n# 如需配置或重启 CAN：\nsudo ip link set can0 down\nsudo ip link set can0 up type can bitrate 1000000 restart-ms 100\n```\n\n## 环境准备\n\n### 1. Isaac Sim 环境变量\n\n确保 `.bashrc` 或 shell 配置中已设置：\n\n```bash\nexport ISAACSIM_ROOT=/home/seeed/IsaacSim/_build/linux-x86_64/release\n```\n\n### 2. reBotArm_control_py 环境\n\n```bash\ncd third_party/reBotArm_control_py\nuv sync\n```\n\n## 启动（双终端模式）\n\n需要两个独立终端。**终端 1 始终是 Isaac Sim 接收端**，**终端 2 根据不同功能选择对应的发送端**。\n\n### 终端 1 — 启动 Isaac Sim 接收端（所有模式共用）\n\n```bash\ncd reBotArm_Isaacsim\n./run_isaacsim_receiver.sh\n```\n\n**预期输出：**\n- 启动 Isaac Sim 图形界面\n- 加载地面和机械臂 USD 资产\n- 监听 UDP `127.0.0.1:5005`\n- 等待发送端连接\n\n### 终端 2 — 根据功能选择对应的发送端\n\n**启动顺序：先接收端，再发送端。**\n\n#### ① 重力补偿手柄模式（`gravity_joint_sender`）\n\n适用于改装后的机械臂（拆卸夹爪、加装手柄），手动掰动控制 Isaac Sim 仿真：\n\n```bash\ncd reBotArm_Isaacsim\n./run_sender.sh\n```\n\n**预期行为：**\n- 连接真实机械臂，启用 MIT + 重力前馈补偿\n- 机械臂可自由掰动\n- 关节角以 60 Hz 持续通过 UDP 发送\n\n#### ② 逆运动学模式（`isaacsim_ik_sender`）\n\n输入末端位姿（位置/姿态），IK 求解后驱动 Isaac Sim 仿真机械臂。在 `reBotArm_Isaacsim/` 目录下直接 `uv run`：\n\n```bash\ncd reBotArm_Isaacsim\nuv run python isaacsim_ik_sender.py\n```\n\n**输入格式（每行一条）：**\n```\nx y z                       # 位置 (米)，姿态保持当前\nx y z r p y                 # 位置 + 姿态 (米/度)\nq j1 j2 j3 j4 j5 j6         # 直接发送关节角 (度)\ngripper \u003c0~1\u003e                # 单独更新夹爪\n```\n\n#### ③ 轨迹规划模式（`isaacsim_traj_sender`）\n\n在 IK 基础上增加关节空间轨迹规划（MIN_JERK），实现平滑运动。在 `reBotArm_Isaacsim/` 目录下直接 `uv run`：\n\n```bash\ncd reBotArm_Isaacsim\nuv run python isaacsim_traj_sender.py\n```\n\n**输入格式（每行一条）：**\n```\nx y z                       # 位置 (米)\nx y z r p y                 # 位置 + 姿态 (米/度)\nq j1 j2 j3 j4 j5 j6         # 关节空间直发 (度)\ngripper \u003c0~1\u003e                # 单独更新夹爪\nspeed \u003cscale\u003e                # 调整轨迹时长比例\nresync                       # 重新从仿真端读取当前关节角\n```\n\n#### ④ 关节测试模式（`isaacsim_joint_test_sender`）\n\n无需真实硬件，预设轨迹循环发送，用于验证通讯和 Isaac Sim 接收端：\n\n```bash\ncd reBotArm_Isaacsim\nuv run python isaacsim_joint_test_sender.py\n```\n\n测试发送端在几个预设关节姿态之间缓慢插值循环发送，无需 CAN 连接。\n\n#### ⑤ Real-to-Sim 映射模式（`joint_reader_sender`）\n\n只读关节角并映射到 Isaac Sim，适合实际机械臂在运行其他任务时同步映射可视化。在 `reBotArm_Isaacsim/` 目录下直接 `uv run`：\n\n```bash\ncd reBotArm_Isaacsim\nuv run python joint_reader_sender.py\n```\n\n**预期行为：**\n- 仅读取关节角（被动反馈模式），不发送任何控制指令\n- 关节角以 60 Hz 持续通过 UDP 发送\n- 实际机械臂由其他项目控制时，可同时在 Isaac Sim 中可视化\n\n## 通信协议\n\nUDP JSON，端口 `127.0.0.1:5005`。\n\n**发送端每帧 Payload：**\n\n```json\n{\n  \"sequence\": 123,\n  \"timestamp\": 1718000000.123,\n  \"joint_positions\": [0.0, 0.1, 0.2, -0.1, 0.0, -0.02],\n  \"gripper_position\": 0.05\n}\n```\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `sequence` | int | 递增序号 |\n| `timestamp` | float | Unix 时间戳（秒） |\n| `joint_positions` | float[6] | 前 6 个关节角（rad） |\n| `gripper_position` | float | 夹爪位置（m），由发送端通过 `GRIPPER_POSITION_SCALE=0.03` 转换 |\n\n**夹爪控制链：**\n发送端 `gripper_q` → `gripper_position = -gripper_q × 0.03` → 接收端 `× 0.01` → 双关节位置目标\n\n## 配置参数\n\n### 发送端 (`gravity_joint_sender.py`)\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| `ARM_JOINT_COUNT` | 6 | 关节数 |\n| `DEFAULT_PORT` | 5005 | UDP 端口 |\n| `DEFAULT_SEND_HZ` | 60.0 | 发送频率（Hz） |\n| `GRIPPER_POSITION_SCALE` | 0.03 | 夹爪角到位置的缩放系数 |\n| `position_alpha` | 0.2 | 低通滤波系数 |\n\n### 接收端 (`isaacsim_joint_receiver.py`)\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| `ARM_JOINT_COUNT` | 6 | 关节数 |\n| `DEFAULT_PORT` | 5005 | UDP 端口 |\n| `DEFAULT_RENDER_HZ` | 120.0 | 仿真渲染频率（Hz） |\n| `GRIPPER_POSITION_SCALE` | 0.01 | 夹爪位置再缩放系数 |\n| `ROBOT_PRIM_PATH` | `/World/reBotArm` | Isaac Sim 中的机械臂 Prim 路径 |\n| `ASSET_RELATIVE_PATH` | `usd/RS-rebot-dev-arm/00-arm-rs_asm-v3.usda` | USD 资产相对路径 |\n\n## 常见问题\n\n### `OSError: [Errno 98] Address already in use`\n\n端口 5005 已被占用。先确认并终止占用进程：\n\n```bash\n# 查看占用端口的进程\nsudo lsof -i :5005\n\n# 终止进程（将 PID 替换为实际值）\nkill \u003cPID\u003e\n```\n\n### Isaac Sim 资产未找到\n\n确认 USD 资产路径存在，或检查 `REPO_ROOT` 是否正确：\n\n```bash\nls usd/RS-rebot-dev-arm/00-arm-rs_asm-v3.usda\n```\n\n### CAN 总线未就绪\n\n确保 CAN 接口 up 且 bitrate 正确：\n\n```bash\ncan_restart can0\n# 验证：\nip -details link show can0 | grep bitrate\n```\n\n### 关节角不同步\n\n- 确认发送端和接收端端口一致（均为 5005）\n- 检查发送端日志中 `[send]` 是否有持续输出\n- 检查接收端日志中 `[recv]` 是否有持续输出\n- 尝试使用 `isaacsim_joint_test_sender.py` 排除硬件问题\n\n## 组件与 Python 环境\n\n| 组件 | Python 环境 | 启动脚本 |\n|------|------------|---------|\n| 发送端（真实机械臂） | `reBotArm_control_py` uv 环境 | `run_sender.sh` |\n| 发送端（测试模式） | `reBotArm_control_py` uv 环境 | `isaacsim_joint_test_sender.py` |\n| 接收端 | Isaac Sim 官方 Python (`python.sh`) | `run_isaacsim_receiver.sh` |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseeed-projects%2Frebot-isaacsim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseeed-projects%2Frebot-isaacsim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseeed-projects%2Frebot-isaacsim/lists"}