Implementation:Haosulab ManiSkill SO100
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, Manipulation |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete tool for simulating the SO-100 low-cost robot arm in ManiSkill environments.
Description
The SO100 is a 6-DOF low-cost robot arm with 5 arm joints (shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll) and 1 gripper joint. The gripper consists of a Fixed_Jaw and Moving_Jaw with high-friction materials (static=2.0, dynamic=2.0). The robot uses conservative delta limits (0.05 for arm joints, 0.2 for gripper) since the real hardware can shake with fast movements. Stiffness is 1e3 and damping is 1e2 for all joints. TCP is computed as the midpoint between Fixed_Jaw_tip and Moving_Jaw_tip links. Provides grasping detection, static checking, and grasp pose construction methods.
uid: so100
URDF path: {PACKAGE_ASSET_DIR}/robots/so100/so100.urdf
Supported control modes: pd_joint_delta_pos, pd_joint_pos, pd_joint_target_delta_pos
Usage
Use SO100 for low-cost arm manipulation tasks targeting sim-to-real transfer to the SO-100 hardware. Well-suited for pick-and-place and basic manipulation with budget-friendly robot setups.
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/agents/robots/so100/so_100.py
Signature
@register_agent()
class SO100(BaseAgent):
uid = "so100"
urdf_path = f"{PACKAGE_ASSET_DIR}/robots/so100/so100.urdf"
arm_joint_names = ["shoulder_pan", "shoulder_lift", "elbow_flex", "wrist_flex", "wrist_roll"]
gripper_joint_names = ["gripper"]
keyframes = dict(
rest=Keyframe(qpos=np.array([0, -1.5708, 1.5708, 0.66, 0, -1.1]), ...),
zero=Keyframe(qpos=np.zeros(6), ...),
)
Import
from mani_skill.agents.robots.so100.so_100 import SO100
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| (inherited from BaseAgent) |
Outputs
| Name | Type | Description |
|---|---|---|
| robot agent | SO100 | Configured 6-DOF low-cost arm with gripper and conservative delta limits |
Usage Examples
Creating Environment with Robot
import gymnasium as gym
import mani_skill.envs
env = gym.make("PickCube-v1", robot_uids="so100")
obs, info = env.reset()