Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Bug] SO-101 can make discontinuous joint jumps during Grip motion and stationary re-clutch

Đang mở
#790 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
robotics

Hướng nghiên cứu

Bắt đầu với entry point examples.isaac_teleop_to_so101.teleoperate và tái hiện hai kịch bản ly hợp bằng các thông tin chi tiết về lệnh và nền tảng đã cung cấp. So sánh hành vi của Isaac Teleop với bản sửa lỗi downstream f611bba và xác định liệu engage-frame hold hoặc joint-state rebase có thuộc ranh giới tích hợp hay không; hoàn thành có nghĩa là chuyển động giữa các khớp liên tục và không có chuyển động khi kích hoạt lại một controller đang đứng yên.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Describe the bug

When teleoperating an SO-101 with a Meta Quest 3S Touch Plus controller through CloudXR and Isaac Teleop, I observed sudden discontinuous robot motion in two situations:

  1. A joint jump while continuously holding Grip/Squeeze and moving the controller.
  2. A downward jump after moving the robot to a pose, releasing Grip, keeping the controller stationary, and pressing Grip again to re-engage the clutch.

The Quest controller pose and button input otherwise reached the Ubuntu host correctly. Grip/Squeeze acted as the clutch and Trigger controlled the gripper.

This was reproduced through the LeRobot SO-101 integration. I am filing it here because I would like guidance on the intended Isaac Teleop clutch/re-engagement behavior for underactuated arms and whether joint-continuity handling should be exposed or documented at the Isaac Teleop integration boundary.

To reproduce

  1. Start CloudXR Runtime 6.2.0 on Ubuntu and connect a Quest 3S through the official CloudXR web client.
  2. Connect an SO-101 follower and run the LeRobot Isaac Teleop example:
python -m examples.isaac_teleop_to_so101.teleoperate \
  --robot.type=so101_follower \
  --robot.port=/dev/serial/by-id/<SO101_SERIAL_DEVICE> \
  --robot.id=so101_follower_main \
  --teleop.type=xr_controller \
  --reset_to_origin=false
  1. Reproduction A:

    • Hold Grip continuously.
    • Move the right Quest controller through the workspace.
    • Observe that the arm can suddenly switch to a discontinuous elbow/wrist configuration.
  2. Reproduction B:

    • Hold Grip and move the arm to a reachable pose.
    • Release Grip and confirm that the arm holds.
    • Keep the controller stationary.
    • Press Grip again.
    • Observe an immediate downward jump on re-engagement.

Expected behavior

  • Motion should remain joint-continuous while Grip is held.
  • Releasing Grip should hold the robot.
  • Re-engaging Grip with a stationary controller should produce no robot movement on the engage frame.
  • The following IK frames should continue from the measured/current joint configuration rather than switching to another local solution.

Observed behavior

In a quantified re-clutch run before the downstream fix, three physical Grip re-engagements produced first-frame maximum joint-target changes of:

  • 6.422 degrees with 14.006 mm end-effector position change
  • 3.116 degrees with 6.815 mm end-effector position change
  • 3.186 degrees with 7.151 mm end-effector position change

The reported orientation change was 0 degrees in all three cases. The largest changes were mainly in elbow_flex, with wrist_flex also visibly involved in another event.

Videos

Platforms

  • Isaac Teleop Version: 1.3.131
  • CloudXR Runtime: 6.2.0
  • OS: Ubuntu 24.04 LTS, kernel 6.8.0-134-generic, x86_64
  • GPU: NVIDIA GeForce RTX 4080, driver 595.71.05
  • Integration: LeRobot v0.6.0, examples/isaac_teleop_to_so101
  • XR Device: Meta Quest 3S with Touch Plus controllers
  • Robot: SO-101 follower, 5-DoF arm plus gripper
  • Control target rate: 30 Hz

Investigation and downstream workaround

The investigation in the LeRobot integration found two relevant behaviors:

  • A calibrated/measured joint value can be slightly outside the URDF nominal limit (for example, shoulder_lift=-103 degrees while the URDF lower limit is approximately -100 degrees). A same-pose q -> FK(q) -> IK(FK(q)) operation can therefore project the state into the solver's feasible joint space instead of returning the measured joint configuration.
  • On this 5-DoF arm, the same-pose projection may require multiple solves to settle, and a small first controller displacement near an underconstrained or near-singular pose can select a more distant local joint solution.

A downstream fix was implemented in commit f611bba, currently included in the independent draft LeRobot PR #4046.

The workaround keeps the measured arm joints exactly unchanged on the engage frame, pre-converges the same-pose IK state, adds native dq regularization, and rebases subsequent solver increments onto the measured joint configuration. The gripper remains an absolute 0-100 command.

After the fix, 47 physical re-engagements on the SO-101 produced a 0.000000-degree engage-frame joint jump, and the original elbow/wrist jump did not recur during small and larger XYZ motions.

Questions

  1. Is there an intended Isaac Teleop pattern for guaranteeing joint-space continuity at clutch re-engagement on underactuated arms?
  2. Should the clutch/integration API provide an engage-frame hold or joint-state rebase hook before Cartesian IK resumes?
  3. Would NVIDIA prefer this behavior to remain entirely integration-specific, or should the Isaac Teleop documentation/example cover it?

Additional context

No hand tracking was used. The test used only the Quest 3S right Touch Plus controller. No cameras, data recording, or leader arm were involved.

Ngôn ngữ chính
Python
Star
412
Fork
97
Merge trung bình
2 ngày 3 giờ
Pull request đã merge (30 ngày)
141

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của NVIDIA/IsaacCapture

Tất cả issue của NVIDIA/IsaacCapture

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.