161 lines
5.2 KiB
Python
161 lines
5.2 KiB
Python
# Copyright (c) 2024-2025 Ziqi Fan
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
"""Configuration for Unitree robots.
|
|
Reference: https://github.com/unitreerobotics/unitree_ros
|
|
"""
|
|
|
|
import os
|
|
import isaaclab.sim as sim_utils
|
|
from isaaclab.actuators import DCMotorCfg
|
|
from isaaclab.assets.articulation import ArticulationCfg
|
|
from isaaclab.utils import configclass
|
|
|
|
from robot_lab.assets import ISAACLAB_ASSETS_DATA_DIR
|
|
from robot_lab.assets.unitree_actuator import UnitreeActuatorCfg_Go2HV
|
|
|
|
##
|
|
# Configuration
|
|
##
|
|
@configclass
|
|
class UnitreeArticulationCfg(ArticulationCfg):
|
|
"""Configuration for Unitree articulations."""
|
|
|
|
joint_sdk_names: list[str] = None
|
|
|
|
soft_joint_pos_limit_factor = 0.9
|
|
|
|
|
|
@configclass
|
|
class UnitreeUrdfFileCfg(sim_utils.UrdfFileCfg):
|
|
fix_base: bool = False
|
|
activate_contact_sensors: bool = True
|
|
replace_cylinders_with_capsules = True
|
|
joint_drive = sim_utils.UrdfConverterCfg.JointDriveCfg(
|
|
gains=sim_utils.UrdfConverterCfg.JointDriveCfg.PDGainsCfg(stiffness=0, damping=0)
|
|
)
|
|
articulation_props = sim_utils.ArticulationRootPropertiesCfg(
|
|
enabled_self_collisions=True,
|
|
solver_position_iteration_count=8,
|
|
solver_velocity_iteration_count=4,
|
|
)
|
|
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,
|
|
)
|
|
|
|
def replace_asset(self, meshes_dir, urdf_path):
|
|
"""Replace the asset with a temporary copy to avoid modifying the original asset.
|
|
|
|
When need to change the collisions, place the modified URDF file separately in this repository,
|
|
and let `meshes_dir` be provided by `unitree_ros`.
|
|
This function will auto construct a complete `robot_description` file structure in the `/tmp` directory.
|
|
Note: The mesh references inside the URDF should be in the same directory level as the URDF itself.
|
|
"""
|
|
tmp_meshes_dir = "/tmp/IsaacLab/unitree_rl_lab/meshes"
|
|
if os.path.exists(tmp_meshes_dir):
|
|
os.remove(tmp_meshes_dir)
|
|
os.makedirs("/tmp/IsaacLab/unitree_rl_lab", exist_ok=True)
|
|
os.symlink(meshes_dir, tmp_meshes_dir)
|
|
|
|
self.asset_path = "/tmp/IsaacLab/unitree_rl_lab/robot.urdf"
|
|
if os.path.exists(self.asset_path):
|
|
os.remove(self.asset_path)
|
|
os.symlink(urdf_path, self.asset_path)
|
|
|
|
# Go2 config from robot_lab [https://github.com/fan-ziqi/robot_lab]
|
|
GO2_CFG_ROBOTLAB = ArticulationCfg(
|
|
spawn=sim_utils.UrdfFileCfg(
|
|
fix_base=False,
|
|
merge_fixed_joints=True,
|
|
replace_cylinders_with_capsules=True,
|
|
asset_path=f"{ISAACLAB_ASSETS_DATA_DIR}/go2/urdf/go2.urdf",
|
|
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=True,
|
|
solver_position_iteration_count=4,
|
|
solver_velocity_iteration_count=0,
|
|
),
|
|
joint_drive=sim_utils.UrdfConverterCfg.JointDriveCfg(
|
|
gains=sim_utils.UrdfConverterCfg.JointDriveCfg.PDGainsCfg(
|
|
stiffness=0, damping=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.*_thigh_joint": 0.8,
|
|
"R.*_thigh_joint": 1.0,
|
|
".*_calf_joint": -1.5,
|
|
},
|
|
joint_vel={".*": 0.0},
|
|
),
|
|
soft_joint_pos_limit_factor=0.9,
|
|
actuators={
|
|
"legs": DCMotorCfg(
|
|
joint_names_expr=[".*"],
|
|
effort_limit=23.5,
|
|
saturation_effort=23.5,
|
|
velocity_limit=30.0,
|
|
stiffness=20.0,
|
|
damping=0.5,
|
|
friction=0.0,
|
|
),
|
|
},
|
|
)
|
|
|
|
|
|
|
|
# Go2 config from unitree_rl_lab [https://github.com/unitreerobotics/unitree_rl_lab]
|
|
GO2_CFG_UNITREE = UnitreeArticulationCfg(
|
|
spawn=UnitreeUrdfFileCfg(
|
|
asset_path=f"{ISAACLAB_ASSETS_DATA_DIR}/go2/urdf/go2.urdf",
|
|
),
|
|
init_state=ArticulationCfg.InitialStateCfg(
|
|
pos=(0.0, 0.0, 0.4),
|
|
joint_pos={
|
|
".*R_hip_joint": -0.1,
|
|
".*L_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},
|
|
),
|
|
actuators={
|
|
"GO2HV": UnitreeActuatorCfg_Go2HV(
|
|
joint_names_expr=[".*"],
|
|
stiffness=25.0,
|
|
damping=0.5,
|
|
friction=0.01,
|
|
min_delay=0,
|
|
max_delay=4,
|
|
),
|
|
},
|
|
# fmt: off
|
|
joint_sdk_names=[
|
|
"FR_hip_joint", "FR_thigh_joint", "FR_calf_joint",
|
|
"FL_hip_joint", "FL_thigh_joint", "FL_calf_joint",
|
|
"RR_hip_joint", "RR_thigh_joint", "RR_calf_joint",
|
|
"RL_hip_joint", "RL_thigh_joint", "RL_calf_joint"
|
|
],
|
|
# fmt: on
|
|
)
|