烘箱和unitree

This commit is contained in:
2026-04-16 09:49:00 +08:00
parent 579cd5f8c1
commit 1281ca5209
7 changed files with 1000 additions and 37 deletions

View File

@@ -3,21 +3,29 @@ from isaaclab.actuators import ImplicitActuatorCfg
from isaaclab.assets import ArticulationCfg, AssetBaseCfg, RigidObjectCfg
from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR
from isaaclab.sim.spawners.from_files.from_files_cfg import UsdFileCfg
from isaaclab.sim.schemas.schemas_cfg import (
RigidBodyPropertiesCfg,
CollisionPropertiesCfg,
)
# from isaaclab.sim.schemas.schemas_cfg import (
# RigidBodyPropertiesCfg,
# CollisionPropertiesCfg,
# )
from mindbot.utils.assets import MINDBOT_ASSETS_DIR
DRYINGBOX_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{MINDBOT_ASSETS_DIR}/devices/DryingBox/Equipment_BB_13.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/devices/Collected_Equipment_BB_13(1)/Collected_Equipment_BB_13/Equipment_BB_13.usd",
activate_contact_sensors=False,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
max_depenetration_velocity=1.0
max_depenetration_velocity=100.0, # 增大:穿透后更快弹出
linear_damping=0.5,
angular_damping=0.5,
),
collision_props=sim_utils.CollisionPropertiesCfg(
collision_enabled=True,
contact_offset=0.01, # 增大到10mm提前检测接触避免高速漏检
rest_offset=0.001, # 略小于 contact_offset
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
fix_root_link=False,
# fix_root_link=True, # 固定烘箱根节点,防止碰撞时整体位移加剧穿透
enabled_self_collisions=False,
solver_position_iteration_count=32,
solver_velocity_iteration_count=16,
@@ -27,15 +35,28 @@ DRYINGBOX_CFG = ArticulationCfg(
init_state=ArticulationCfg.InitialStateCfg(
pos=[1.95, -0.45, 0.9], rot=[-0.7071, 0.0, 0.0, 0.7071]
),
# actuators={}
actuators={
"passive_damper": ImplicitActuatorCfg(
# ".*" 表示匹配该USD文件内的所有关节无论是轮子、屏幕转轴还是其他
joint_names_expr=["RevoluteJoint"],
stiffness=10000.0,
damping=1000.0,
effort_limit_sim=10000.0,
velocity_limit_sim=100.0,
"door_joint": ImplicitActuatorCfg(
joint_names_expr=["door_revoluteJoint"],
damping=0.5,
stiffness=0.0, # 初始被动teleop 主循环触发后锁定
effort_limit_sim=200.0,
),
"hand_joint": ImplicitActuatorCfg(
joint_names_expr=["hand_revoluteJoint"],
stiffness=0.0, # 初始被动event term 动态切换到 1000.0 触发锁定
damping=0.5,
effort_limit_sim=200.0, # 锁定时 stiffness=1000 需要足够的驱动力
),
},
# actuators={
# "passive_damper": ImplicitActuatorCfg(
# # ".*" 表示匹配该USD文件内的所有关节无论是轮子、屏幕转轴还是其他
# joint_names_expr=["RevoluteJoint"],
# stiffness=2e3,
# damping=1e2,
# effort_limit_sim=200.0,
# velocity_limit_sim=20.0,
# ),
# },
)

View File

@@ -0,0 +1,612 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""Configuration for Unitree robots.
The following configurations are available:
* :obj:`UNITREE_A1_CFG`: Unitree A1 robot with DC motor model for the legs
* :obj:`UNITREE_GO1_CFG`: Unitree Go1 robot with actuator net model for the legs
* :obj:`UNITREE_GO2_CFG`: Unitree Go2 robot with DC motor model for the legs
* :obj:`H1_CFG`: H1 humanoid robot
* :obj:`H1_MINIMAL_CFG`: H1 humanoid robot with minimal collision bodies
* :obj:`G1_CFG`: G1 humanoid robot
* :obj:`G1_MINIMAL_CFG`: G1 humanoid robot with minimal collision bodies
* :obj:`G1_29DOF_CFG`: G1 humanoid robot configured for locomanipulation tasks
* :obj:`G1_INSPIRE_FTP_CFG`: G1 29DOF humanoid robot with Inspire 5-finger hand
Reference: https://github.com/unitreerobotics/unitree_ros
"""
import isaaclab.sim as sim_utils
from isaaclab.actuators import ActuatorNetMLPCfg, DCMotorCfg, ImplicitActuatorCfg
from isaaclab.assets.articulation import ArticulationCfg
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR, ISAACLAB_NUCLEUS_DIR
from mindbot.utils.assets import MINDBOT_ASSETS_DIR
##
# Configuration - Actuators.
##
GO1_ACTUATOR_CFG = ActuatorNetMLPCfg(
joint_names_expr=[".*_hip_joint", ".*_thigh_joint", ".*_calf_joint"],
network_file=f"{ISAACLAB_NUCLEUS_DIR}/ActuatorNets/Unitree/unitree_go1.pt",
pos_scale=-1.0,
vel_scale=1.0,
torque_scale=1.0,
input_order="pos_vel",
input_idx=[0, 1, 2],
effort_limit=23.7, # taken from spec sheet
velocity_limit=30.0, # taken from spec sheet
saturation_effort=23.7, # same as effort limit
)
"""Configuration of Go1 actuators using MLP model.
Actuator specifications: https://shop.unitree.com/products/go1-motor
This model is taken from: https://github.com/Improbable-AI/walk-these-ways
"""
##
# Configuration
##
UNITREE_A1_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/A1/a1.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False, solver_position_iteration_count=4, solver_velocity_iteration_count=0
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.42),
joint_pos={
".*L_hip_joint": 0.1,
".*R_hip_joint": -0.1,
"F[L,R]_thigh_joint": 0.8,
"R[L,R]_thigh_joint": 1.0,
".*_calf_joint": -1.5,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"base_legs": DCMotorCfg(
joint_names_expr=[".*_hip_joint", ".*_thigh_joint", ".*_calf_joint"],
effort_limit=33.5,
saturation_effort=33.5,
velocity_limit=21.0,
stiffness=25.0,
damping=0.5,
friction=0.0,
),
},
)
"""Configuration of Unitree A1 using DC motor.
Note: Specifications taken from: https://www.trossenrobotics.com/a1-quadruped#specifications
"""
UNITREE_GO1_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/Go1/go1.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False, solver_position_iteration_count=4, solver_velocity_iteration_count=0
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.4),
joint_pos={
".*L_hip_joint": 0.1,
".*R_hip_joint": -0.1,
"F[L,R]_thigh_joint": 0.8,
"R[L,R]_thigh_joint": 1.0,
".*_calf_joint": -1.5,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"base_legs": GO1_ACTUATOR_CFG,
},
)
"""Configuration of Unitree Go1 using MLP-based actuator model."""
UNITREE_GO2_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/Go2/go2.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False, solver_position_iteration_count=4, solver_velocity_iteration_count=0
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.4),
joint_pos={
".*L_hip_joint": 0.1,
".*R_hip_joint": -0.1,
"F[L,R]_thigh_joint": 0.8,
"R[L,R]_thigh_joint": 1.0,
".*_calf_joint": -1.5,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"base_legs": DCMotorCfg(
joint_names_expr=[".*_hip_joint", ".*_thigh_joint", ".*_calf_joint"],
effort_limit=23.5,
saturation_effort=23.5,
velocity_limit=30.0,
stiffness=25.0,
damping=0.5,
friction=0.0,
),
},
)
"""Configuration of Unitree Go2 using DC-Motor actuator model."""
H1_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/H1/h1.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False, solver_position_iteration_count=4, solver_velocity_iteration_count=4
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 1.05),
joint_pos={
".*_hip_yaw": 0.0,
".*_hip_roll": 0.0,
".*_hip_pitch": -0.28, # -16 degrees
".*_knee": 0.79, # 45 degrees
".*_ankle": -0.52, # -30 degrees
"torso": 0.0,
".*_shoulder_pitch": 0.28,
".*_shoulder_roll": 0.0,
".*_shoulder_yaw": 0.0,
".*_elbow": 0.52,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"legs": ImplicitActuatorCfg(
joint_names_expr=[".*_hip_yaw", ".*_hip_roll", ".*_hip_pitch", ".*_knee", "torso"],
effort_limit_sim=300,
stiffness={
".*_hip_yaw": 150.0,
".*_hip_roll": 150.0,
".*_hip_pitch": 200.0,
".*_knee": 200.0,
"torso": 200.0,
},
damping={
".*_hip_yaw": 5.0,
".*_hip_roll": 5.0,
".*_hip_pitch": 5.0,
".*_knee": 5.0,
"torso": 5.0,
},
),
"feet": ImplicitActuatorCfg(
joint_names_expr=[".*_ankle"],
effort_limit_sim=100,
stiffness={".*_ankle": 20.0},
damping={".*_ankle": 4.0},
),
"arms": ImplicitActuatorCfg(
joint_names_expr=[".*_shoulder_pitch", ".*_shoulder_roll", ".*_shoulder_yaw", ".*_elbow"],
effort_limit_sim=300,
stiffness={
".*_shoulder_pitch": 40.0,
".*_shoulder_roll": 40.0,
".*_shoulder_yaw": 40.0,
".*_elbow": 40.0,
},
damping={
".*_shoulder_pitch": 10.0,
".*_shoulder_roll": 10.0,
".*_shoulder_yaw": 10.0,
".*_elbow": 10.0,
},
),
},
)
"""Configuration for the Unitree H1 Humanoid robot."""
H1_MINIMAL_CFG = H1_CFG.copy()
H1_MINIMAL_CFG.spawn.usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/H1/h1_minimal.usd"
"""Configuration for the Unitree H1 Humanoid robot with fewer collision meshes.
This configuration removes most collision meshes to speed up simulation.
"""
G1_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/G1/g1.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False, solver_position_iteration_count=8, solver_velocity_iteration_count=4
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.74),
joint_pos={
".*_hip_pitch_joint": -0.20,
".*_knee_joint": 0.42,
".*_ankle_pitch_joint": -0.23,
".*_elbow_pitch_joint": 0.87,
"left_shoulder_roll_joint": 0.16,
"left_shoulder_pitch_joint": 0.35,
"right_shoulder_roll_joint": -0.16,
"right_shoulder_pitch_joint": 0.35,
"left_one_joint": 1.0,
"right_one_joint": -1.0,
"left_two_joint": 0.52,
"right_two_joint": -0.52,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"legs": ImplicitActuatorCfg(
joint_names_expr=[
".*_hip_yaw_joint",
".*_hip_roll_joint",
".*_hip_pitch_joint",
".*_knee_joint",
"torso_joint",
],
effort_limit_sim=300,
stiffness={
".*_hip_yaw_joint": 150.0,
".*_hip_roll_joint": 150.0,
".*_hip_pitch_joint": 200.0,
".*_knee_joint": 200.0,
"torso_joint": 200.0,
},
damping={
".*_hip_yaw_joint": 5.0,
".*_hip_roll_joint": 5.0,
".*_hip_pitch_joint": 5.0,
".*_knee_joint": 5.0,
"torso_joint": 5.0,
},
armature={
".*_hip_.*": 0.01,
".*_knee_joint": 0.01,
"torso_joint": 0.01,
},
),
"feet": ImplicitActuatorCfg(
effort_limit_sim=20,
joint_names_expr=[".*_ankle_pitch_joint", ".*_ankle_roll_joint"],
stiffness=20.0,
damping=2.0,
armature=0.01,
),
"arms": ImplicitActuatorCfg(
joint_names_expr=[
".*_shoulder_pitch_joint",
".*_shoulder_roll_joint",
".*_shoulder_yaw_joint",
".*_elbow_pitch_joint",
".*_elbow_roll_joint",
".*_five_joint",
".*_three_joint",
".*_six_joint",
".*_four_joint",
".*_zero_joint",
".*_one_joint",
".*_two_joint",
],
effort_limit_sim=300,
stiffness=40.0,
damping=10.0,
armature={
".*_shoulder_.*": 0.01,
".*_elbow_.*": 0.01,
".*_five_joint": 0.001,
".*_three_joint": 0.001,
".*_six_joint": 0.001,
".*_four_joint": 0.001,
".*_zero_joint": 0.001,
".*_one_joint": 0.001,
".*_two_joint": 0.001,
},
),
},
)
"""Configuration for the Unitree G1 Humanoid robot."""
G1_MINIMAL_CFG = G1_CFG.copy()
G1_MINIMAL_CFG.spawn.usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/G1/g1_minimal.usd"
"""Configuration for the Unitree G1 Humanoid robot with fewer collision meshes.
This configuration removes most collision meshes to speed up simulation.
"""
G1_29DOF_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAAC_NUCLEUS_DIR}/Robots/Unitree/G1/g1.usd",
activate_contact_sensors=False,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False,
fix_root_link=False, # Configurable - can be set to True for fixed base
solver_position_iteration_count=8,
solver_velocity_iteration_count=4,
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.75),
rot=(0.7071, 0, 0, 0.7071),
joint_pos={
".*_hip_pitch_joint": -0.10,
".*_knee_joint": 0.30,
".*_ankle_pitch_joint": -0.20,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"legs": DCMotorCfg(
joint_names_expr=[
".*_hip_yaw_joint",
".*_hip_roll_joint",
".*_hip_pitch_joint",
".*_knee_joint",
],
effort_limit={
".*_hip_yaw_joint": 88.0,
".*_hip_roll_joint": 88.0,
".*_hip_pitch_joint": 88.0,
".*_knee_joint": 139.0,
},
velocity_limit={
".*_hip_yaw_joint": 32.0,
".*_hip_roll_joint": 32.0,
".*_hip_pitch_joint": 32.0,
".*_knee_joint": 20.0,
},
stiffness={
".*_hip_yaw_joint": 100.0,
".*_hip_roll_joint": 100.0,
".*_hip_pitch_joint": 100.0,
".*_knee_joint": 200.0,
},
damping={
".*_hip_yaw_joint": 2.5,
".*_hip_roll_joint": 2.5,
".*_hip_pitch_joint": 2.5,
".*_knee_joint": 5.0,
},
armature={
".*_hip_.*": 0.03,
".*_knee_joint": 0.03,
},
saturation_effort=180.0,
),
"feet": DCMotorCfg(
joint_names_expr=[".*_ankle_pitch_joint", ".*_ankle_roll_joint"],
stiffness={
".*_ankle_pitch_joint": 20.0,
".*_ankle_roll_joint": 20.0,
},
damping={
".*_ankle_pitch_joint": 0.2,
".*_ankle_roll_joint": 0.1,
},
effort_limit={
".*_ankle_pitch_joint": 50.0,
".*_ankle_roll_joint": 50.0,
},
velocity_limit={
".*_ankle_pitch_joint": 37.0,
".*_ankle_roll_joint": 37.0,
},
armature=0.03,
saturation_effort=80.0,
),
"waist": ImplicitActuatorCfg(
joint_names_expr=[
"waist_.*_joint",
],
effort_limit={
"waist_yaw_joint": 88.0,
"waist_roll_joint": 50.0,
"waist_pitch_joint": 50.0,
},
velocity_limit={
"waist_yaw_joint": 32.0,
"waist_roll_joint": 37.0,
"waist_pitch_joint": 37.0,
},
stiffness={
"waist_yaw_joint": 5000.0,
"waist_roll_joint": 5000.0,
"waist_pitch_joint": 5000.0,
},
damping={
"waist_yaw_joint": 5.0,
"waist_roll_joint": 5.0,
"waist_pitch_joint": 5.0,
},
armature=0.001,
),
"arms": ImplicitActuatorCfg(
joint_names_expr=[
".*_shoulder_pitch_joint",
".*_shoulder_roll_joint",
".*_shoulder_yaw_joint",
".*_elbow_joint",
".*_wrist_.*_joint",
],
effort_limit=300,
velocity_limit=100,
stiffness=3000.0,
damping=10.0,
armature={
".*_shoulder_.*": 0.001,
".*_elbow_.*": 0.001,
".*_wrist_.*_joint": 0.001,
},
),
"hands": ImplicitActuatorCfg(
joint_names_expr=[
".*_index_.*",
".*_middle_.*",
".*_thumb_.*",
],
effort_limit=300,
velocity_limit=100,
stiffness=20,
damping=2,
armature=0.001,
),
},
prim_path="/World/envs/env_.*/Robot",
)
"""Configuration for the Unitree G1 Humanoid robot for locomanipulation tasks.
This configuration sets up the G1 humanoid robot for locomanipulation tasks,
allowing both locomotion and manipulation capabilities. The robot can be configured
for either fixed base or mobile scenarios by modifying the fix_root_link parameter.
Key features:
- Configurable base (fixed or mobile) via fix_root_link parameter
- Optimized actuator parameters for locomanipulation tasks
- Enhanced hand and arm configurations for manipulation
Usage examples:
# For fixed base scenarios (upper body manipulation only)
fixed_base_cfg = G1_29DOF_CFG.copy()
fixed_base_cfg.spawn.articulation_props.fix_root_link = True
# For mobile scenarios (locomotion + manipulation)
mobile_cfg = G1_29DOF_CFG.copy()
mobile_cfg.spawn.articulation_props.fix_root_link = False
"""
"""
Configuration for the Unitree G1 Humanoid robot with Inspire 5fingers hand.
The Unitree G1 URDF can be found here: https://github.com/unitreerobotics/unitree_ros/tree/master/robots/g1_description/g1_29dof_with_hand_rev_1_0.urdf
The Inspire hand URDF is available at: https://github.com/unitreerobotics/xr_teleoperate/tree/main/assets/inspire_hand
The merging code for the hand and robot can be found here: https://github.com/unitreerobotics/unitree_ros/blob/master/robots/g1_description/merge_g1_29dof_and_inspire_hand.ipynb,
Necessary modifications should be made to ensure the correct parentchild relationship.
"""
# Inherit PD settings from G1_29DOF_CFG, with minor adjustments for grasping task
G1_INSPIRE_FTP_CFG = G1_29DOF_CFG.copy()
G1_INSPIRE_FTP_CFG.spawn.usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/G1/g1_29dof_inspire_hand.usd"
G1_INSPIRE_FTP_CFG.spawn.activate_contact_sensors = True
G1_INSPIRE_FTP_CFG.spawn.rigid_props.disable_gravity = True
G1_INSPIRE_FTP_CFG.spawn.articulation_props.fix_root_link = True
G1_INSPIRE_FTP_CFG.init_state = ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 1.0),
joint_pos={".*": 0.0},
joint_vel={".*": 0.0},
)
# Actuator configuration for arms (stability focused for manipulation)
# Increased damping improves stability of arm movements
G1_INSPIRE_FTP_CFG.actuators["arms"] = ImplicitActuatorCfg(
joint_names_expr=[
".*_shoulder_pitch_joint",
".*_shoulder_roll_joint",
".*_shoulder_yaw_joint",
".*_elbow_joint",
".*_wrist_.*_joint",
],
effort_limit=300,
velocity_limit=100,
stiffness=3000.0,
damping=100.0,
armature={
".*_shoulder_.*": 0.001,
".*_elbow_.*": 0.001,
".*_wrist_.*_joint": 0.001,
},
)
# Actuator configuration for hands (flexibility focused for grasping)
# Lower stiffness and damping to improve finger flexibility when grasping objects
G1_INSPIRE_FTP_CFG.actuators["hands"] = ImplicitActuatorCfg(
joint_names_expr=[
".*_index_.*",
".*_middle_.*",
".*_thumb_.*",
".*_ring_.*",
".*_pinky_.*",
],
effort_limit_sim=30.0,
velocity_limit_sim=10.0,
stiffness=10.0,
damping=0.2,
armature=0.001,
)

View File

@@ -0,0 +1,313 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""Configuration for the Unitree G1 robot with BrainCo hands.
Available configurations:
* :obj:`G1_BRAINCO_29DOF_CFG`: Mobile-base BrainCo G1 for locomanipulation tasks.
* :obj:`G1_BRAINCO_CFG`: Alias of :obj:`G1_BRAINCO_29DOF_CFG`.
* :obj:`G1_BRAINCO_FTP_CFG`: Fixed-base variant for teleoperation / demo collection.
"""
import isaaclab.sim as sim_utils
from isaaclab.actuators import DCMotorCfg, ImplicitActuatorCfg
from isaaclab.assets.articulation import ArticulationCfg
from mindbot.utils.assets import MINDBOT_ASSETS_DIR
G1_BRAINCO_ASSET_DIR = f"{MINDBOT_ASSETS_DIR}/robots/g1_with_brainco_hand"
"""Asset directory for the rewritten BrainCo-hand G1 robot."""
G1_BRAINCO_USD_PATH = f"{G1_BRAINCO_ASSET_DIR}/g1_29dof_mode_15_brainco_hand.usd"
"""Default USD path for the BrainCo-hand G1 asset."""
G1_BRAINCO_URDF_PATH = f"{G1_BRAINCO_ASSET_DIR}/g1_29dof_mode_15_brainco_hand.urdf"
"""URDF path used by Pinocchio / Pink IK for the BrainCo-hand G1 asset."""
G1_BRAINCO_URDF_MESH_DIR = G1_BRAINCO_ASSET_DIR
"""Root mesh directory for resolving relative URDF mesh paths."""
G1_BRAINCO_LEFT_HAND_JOINT_NAMES = [
"left_index_proximal_joint",
"left_middle_proximal_joint",
"left_ring_proximal_joint",
"left_pinky_proximal_joint",
"left_thumb_metacarpal_joint",
"left_thumb_proximal_joint",
]
"""Actuated left-hand joints in the rewritten BrainCo asset."""
G1_BRAINCO_RIGHT_HAND_JOINT_NAMES = [
"right_index_proximal_joint",
"right_middle_proximal_joint",
"right_ring_proximal_joint",
"right_pinky_proximal_joint",
"right_thumb_metacarpal_joint",
"right_thumb_proximal_joint",
]
"""Actuated right-hand joints in the rewritten BrainCo asset."""
G1_BRAINCO_HAND_JOINT_NAMES = G1_BRAINCO_LEFT_HAND_JOINT_NAMES + G1_BRAINCO_RIGHT_HAND_JOINT_NAMES
"""Ordered actuated hand joints used by teleoperation and Pink IK action terms."""
G1_BRAINCO_HAND_JOINT_PATTERNS = [
".*_index_proximal_joint",
".*_middle_proximal_joint",
".*_ring_proximal_joint",
".*_pinky_proximal_joint",
".*_thumb_metacarpal_joint",
".*_thumb_proximal_joint",
]
"""Regex patterns that match actuated BrainCo finger joints in the rewritten USD."""
G1_BRAINCO_29DOF_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=G1_BRAINCO_USD_PATH,
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False,
fix_root_link=False,
solver_position_iteration_count=8,
solver_velocity_iteration_count=4,
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.75),
rot=(0.7071, 0.0, 0.0, 0.7071),
joint_pos={
".*_hip_pitch_joint": -0.10,
".*_knee_joint": 0.30,
".*_ankle_pitch_joint": -0.20,
".*_shoulder_pitch_joint": 0.35,
"left_shoulder_roll_joint": 0.16,
"right_shoulder_roll_joint": -0.16,
".*_elbow_joint": 0.50,
# ".*": 0.0,
},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.9,
actuators={
"legs": DCMotorCfg(
joint_names_expr=[
".*_hip_yaw_joint",
".*_hip_roll_joint",
".*_hip_pitch_joint",
".*_knee_joint",
],
effort_limit={
".*_hip_yaw_joint": 88.0,
".*_hip_roll_joint": 139.0,
".*_hip_pitch_joint": 88.0,
".*_knee_joint": 139.0,
},
velocity_limit={
".*_hip_yaw_joint": 32.0,
".*_hip_roll_joint": 32.0,
".*_hip_pitch_joint": 32.0,
".*_knee_joint": 20.0,
},
stiffness={
".*_hip_yaw_joint": 150.4769,
".*_hip_roll_joint": 62.1413,
".*_hip_pitch_joint": 24.8449,
".*_knee_joint": 230.0900,
},
damping={
".*_hip_yaw_joint": 0.0602,
".*_hip_roll_joint": 0.0249,
".*_hip_pitch_joint": 0.0099,
".*_knee_joint": 0.0920,
},
armature={
".*_hip_.*": 0.03,
".*_knee_joint": 0.03,
},
saturation_effort=180.0,
),
"feet": DCMotorCfg(
joint_names_expr=[".*_ankle_pitch_joint", ".*_ankle_roll_joint"],
effort_limit={
".*_ankle_pitch_joint": 50.0,
".*_ankle_roll_joint": 50.0,
},
velocity_limit={
".*_ankle_pitch_joint": 37.0,
".*_ankle_roll_joint": 37.0,
},
stiffness={
".*_ankle_pitch_joint": 64.9368,
".*_ankle_roll_joint": 2.3020,
},
damping={
".*_ankle_pitch_joint": 0.0260,
".*_ankle_roll_joint": 0.0009,
},
armature=0.03,
saturation_effort=80.0,
),
"waist": ImplicitActuatorCfg(
joint_names_expr=["waist_.*_joint"],
effort_limit={
"waist_yaw_joint": 88.0,
"waist_roll_joint": 50.0,
"waist_pitch_joint": 50.0,
},
velocity_limit={
"waist_yaw_joint": 32.0,
"waist_roll_joint": 37.0,
"waist_pitch_joint": 37.0,
},
stiffness={
"waist_yaw_joint": 27.7928,
"waist_roll_joint": 54.2666,
"waist_pitch_joint": 53.3254,
},
damping={
"waist_yaw_joint": 0.0111,
"waist_roll_joint": 0.0217,
"waist_pitch_joint": 0.0213,
},
armature=0.001,
),
"arms": ImplicitActuatorCfg(
joint_names_expr=[
".*_shoulder_pitch_joint",
".*_shoulder_roll_joint",
".*_shoulder_yaw_joint",
".*_elbow_joint",
".*_wrist_.*_joint",
],
effort_limit={
".*_shoulder_pitch_joint": 25.0,
".*_shoulder_roll_joint": 25.0,
".*_shoulder_yaw_joint": 25.0,
".*_elbow_joint": 25.0,
".*_wrist_roll_joint": 25.0,
".*_wrist_pitch_joint": 5.0,
".*_wrist_yaw_joint": 5.0,
},
velocity_limit=100.0,
stiffness={
".*_shoulder_pitch_joint": 168.7152,
".*_shoulder_roll_joint": 151.6808,
".*_shoulder_yaw_joint": 141.6967,
".*_elbow_joint": 88.9802,
".*_wrist_roll_joint": 66.6865,
".*_wrist_pitch_joint": 26.5734,
".*_wrist_yaw_joint": 16.3066,
},
damping={
".*_shoulder_pitch_joint": 0.0675,
".*_shoulder_roll_joint": 0.0607,
".*_shoulder_yaw_joint": 0.0567,
".*_elbow_joint": 0.0356,
".*_wrist_roll_joint": 0.0267,
".*_wrist_pitch_joint": 0.0106,
".*_wrist_yaw_joint": 0.0065,
},
armature={
".*_shoulder_.*": 0.001,
".*_elbow_.*": 0.001,
".*_wrist_.*_joint": 0.001,
},
),
"hands": ImplicitActuatorCfg(
joint_names_expr=G1_BRAINCO_HAND_JOINT_PATTERNS,
effort_limit_sim=30.0,
velocity_limit_sim=10.0,
stiffness={
".*_(index|middle|ring|pinky)_proximal_joint": 0.25,
".*_thumb_metacarpal_joint": 0.31,
".*_thumb_proximal_joint": 0.13,
},
damping={
".*_(index|middle|ring|pinky)_proximal_joint": 0.0001,
".*_thumb_metacarpal_joint": 0.0001,
".*_thumb_proximal_joint": 0.00005,
},
armature=0.001,
),
},
prim_path="/World/envs/env_.*/Robot",
)
"""Mobile-base BrainCo G1 configuration for locomotion + manipulation tasks."""
G1_BRAINCO_CFG = G1_BRAINCO_29DOF_CFG
"""Backward-compatible alias used by task configuration files."""
G1_BRAINCO_FTP_CFG = G1_BRAINCO_29DOF_CFG.copy()
G1_BRAINCO_FTP_CFG.spawn.activate_contact_sensors = True
G1_BRAINCO_FTP_CFG.spawn.articulation_props.fix_root_link = True
G1_BRAINCO_FTP_CFG.init_state = ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 1.0),
joint_pos={
".*_hip_pitch_joint": -0.10,
".*_knee_joint": 0.30,
".*_ankle_pitch_joint": -0.20,
".*_shoulder_pitch_joint": 0.35,
"left_shoulder_roll_joint": 0.16,
"right_shoulder_roll_joint": -0.16,
".*_elbow_joint": 0.50,
".*": 0.0,
},
joint_vel={".*": 0.0},
)
G1_BRAINCO_FTP_CFG.actuators["arms"] = ImplicitActuatorCfg(
joint_names_expr=[
".*_shoulder_pitch_joint",
".*_shoulder_roll_joint",
".*_shoulder_yaw_joint",
".*_elbow_joint",
".*_wrist_.*_joint",
],
effort_limit={
".*_shoulder_pitch_joint": 25.0,
".*_shoulder_roll_joint": 25.0,
".*_shoulder_yaw_joint": 25.0,
".*_elbow_joint": 25.0,
".*_wrist_roll_joint": 25.0,
".*_wrist_pitch_joint": 5.0,
".*_wrist_yaw_joint": 5.0,
},
velocity_limit=100.0,
stiffness=3000.0,
damping=100.0,
armature={
".*_shoulder_.*": 0.001,
".*_elbow_.*": 0.001,
".*_wrist_.*_joint": 0.001,
},
)
G1_BRAINCO_FTP_CFG.actuators["hands"] = ImplicitActuatorCfg(
joint_names_expr=G1_BRAINCO_HAND_JOINT_PATTERNS,
effort_limit_sim=30.0,
velocity_limit_sim=10.0,
stiffness=10.0,
damping=0.2,
armature=0.001,
)
"""Fixed-base BrainCo G1 configuration suited for teleoperation and demo recording."""

View File

@@ -51,7 +51,8 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
prim_path="/World/envs/env_.*/PackingTable",
init_state=AssetBaseCfg.InitialStateCfg(pos=[0.0, 0.55, -0.1], rot=[1.0, 0.0, 0.0, 0.0]),
spawn=UsdFileCfg(
usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/PackingTable/packing_table.usd",
# usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/PackingTable/packing_table.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/PackingTable/packing_table_v2.usd",
rigid_props=sim_utils.RigidBodyPropertiesCfg(kinematic_enabled=True),
),
)
@@ -67,14 +68,14 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
dryingbox = DRYINGBOX_CFG.replace(
prim_path="{ENV_REGEX_NS}/Dryingbox",
init_state=ArticulationCfg.InitialStateCfg(
pos=[0.0, 0.45, 0.90],
pos=[-0.05, 0.65, 0.90],
rot=[1.0, 0.0, 0.0, 0.0],
# joint_pos={"RevoluteJoint": -1.7453}, # -100°
),
)
rack= RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Rack",
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.4,0.4,0.8996],rot=[1,0,0,0]),
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.5,0.4,0.8996],rot=[1,0,0,0]),
spawn=UsdFileCfg(
# usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Test_Tube_Rack (2)/tube.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Test_Tube_Rack (2)/Test_Tube_Rack_AA_01.usdc",
@@ -84,7 +85,7 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
)
tube= RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Tube",
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.42374,0.32415,0.912],rot=[1,0,0,0]),
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.52374,0.32415,0.912],rot=[1,0,0,0]),
spawn=UsdFileCfg(
# usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Test_Tube_Rack (2)/tube.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Collected_Test_Tube_AA_01/Test_Tube_AA_01.usdc",
@@ -96,7 +97,7 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
beaker = RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Beaker",
init_state=RigidObjectCfg.InitialStateCfg(
pos=[-0.20, 0.324, 0.93], # 根据你的天平中心位置微调
pos=[-0.30, 0.324, 0.93], # 根据你的天平中心位置微调
rot=[1, 0, 0, 0]
),
spawn=UsdFileCfg(
@@ -129,7 +130,7 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
"right_shoulder_pitch_joint": 0.0,
"right_shoulder_roll_joint": 0.0,
"right_shoulder_yaw_joint": 0.0,
"right_elbow_pitch_joint": -1.5708,
"right_elbow_pitch_joint": 0.0,#-1.5708
"right_wrist_yaw_joint": 0.0,
"right_wrist_roll_joint": 0.0,
"right_wrist_pitch_joint": 0.0,
@@ -137,7 +138,7 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
"left_shoulder_pitch_joint": 0.0,
"left_shoulder_roll_joint": 0.0,
"left_shoulder_yaw_joint": 0.0,
"left_elbow_pitch_joint": -1.5708,
"left_elbow_pitch_joint": 0.0,#-1.5708
"left_wrist_yaw_joint": 0.0,
"left_wrist_roll_joint": 0.0,
"left_wrist_pitch_joint": 0.0,

View File

@@ -49,9 +49,10 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
# Table
packing_table = AssetBaseCfg(
prim_path="/World/envs/env_.*/PackingTable",
init_state=AssetBaseCfg.InitialStateCfg(pos=[0.0, 0.55, -0.1], rot=[1.0, 0.0, 0.0, 0.0]),
init_state=AssetBaseCfg.InitialStateCfg(pos=[0.0, 0.55, 0.0], rot=[1.0, 0.0, 0.0, 0.0]),
spawn=UsdFileCfg(
usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/PackingTable/packing_table.usd",
# usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/PackingTable/packing_table.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/PackingTable/packing_table_v2.usd",
rigid_props=sim_utils.RigidBodyPropertiesCfg(kinematic_enabled=True),
),
)
@@ -67,14 +68,14 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
dryingoven = DRYINGOVEN_CFG.replace(
prim_path="{ENV_REGEX_NS}/Dryingoven",
init_state=ArticulationCfg.InitialStateCfg(
pos=[0.0, 0.45, 0.90],
pos=[0.0, 0.5, 1.0],
rot=[1.0, 0.0, 0.0, 0.0],
# joint_pos={"RevoluteJoint": -1.7453}, # -100°
),
)
rack= RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Rack",
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.4,0.4,0.8996],rot=[1,0,0,0]),
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.4,0.4,0.9996],rot=[1,0,0,0]),
spawn=UsdFileCfg(
# usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Test_Tube_Rack (2)/tube.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Test_Tube_Rack (2)/Test_Tube_Rack_AA_01.usdc",
@@ -84,7 +85,7 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
)
tube= RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Tube",
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.42374,0.32415,0.912],rot=[1,0,0,0]),
init_state=RigidObjectCfg.InitialStateCfg(pos=[-0.42374,0.32415,1.012],rot=[1,0,0,0]),
spawn=UsdFileCfg(
# usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Test_Tube_Rack (2)/tube.usd",
usd_path=f"{MINDBOT_ASSETS_DIR}/laboratory_equipment/Collected_Test_Tube_AA_01/Test_Tube_AA_01.usdc",
@@ -96,7 +97,7 @@ class ObjectTableSceneCfg(InteractiveSceneCfg):
beaker = RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Beaker",
init_state=RigidObjectCfg.InitialStateCfg(
pos=[-0.20, 0.324, 0.93], # 根据你的天平中心位置微调
pos=[-0.20, 0.324, 1.03], # 根据你的天平中心位置微调
rot=[1, 0, 0, 0]
),
spawn=UsdFileCfg(