Merge origin/pro6000_xh: differential drive, record/replay tools, scene assets

Conflicts resolved:
- assets.py: keep /home/tangger/LYT path (ours)
- mindrobot_cfg.py: keep our initial poses + fix path separator \\ → /
- mindrobot_left_arm_ik_env_cfg.py: keep our wheel_action using
  MINDBOT_WHEEL_JOINTS constant (cleaner than remote's hardcoded list)

From origin/pro6000_xh:
- scripts/tools/: record_demos.py, replay_demos.py, hdf5 tools (Isaac Lab copy)
- assets/: dryingbox.py, lab.py, table.py scene asset definitions
- tele_se3_with_wheel_agent.py: WheelKeyboard inlined, differential drive keys

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 13:44:02 +08:00
25 changed files with 3709 additions and 87 deletions

View File

@@ -0,0 +1,39 @@
import isaaclab.sim as sim_utils
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 mindbot.utils.assets import MINDBOT_ASSETS_DIR
DRYINGBOX_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=r"c:\Users\PC\workpalce\maic_usd_assets_moudle\devices\DryingBox\Equipment_BB_13.usd",
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=True, max_depenetration_velocity=1.0
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False,
solver_position_iteration_count=32,
solver_velocity_iteration_count=16,
stabilization_threshold=1e-6,
),
),
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,
),
},
)

View File

@@ -0,0 +1,18 @@
import isaaclab.sim as sim_utils
from isaaclab.actuators import ImplicitActuatorCfg
from isaaclab.assets import ArticulationCfg, AssetBaseCfg
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 mindbot.utils.assets import MINDBOT_ASSETS_DIR
ROOM_CFG = AssetBaseCfg(
# prim_path="{ENV_REGEX_NS}/Room",
spawn=UsdFileCfg(
usd_path=f"{MINDBOT_ASSETS_DIR}\\sences\\Lab\\lab.usd",
),
)

View File

@@ -0,0 +1,32 @@
import isaaclab.sim as sim_utils
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 mindbot.utils.assets import MINDBOT_ASSETS_DIR
TABLE_CFG = AssetBaseCfg(
# prim_path="{ENV_REGEX_NS}/Table",
init_state=AssetBaseCfg.InitialStateCfg(
pos=[1.95, -0.3, 0.005],
rot=[0.7071, 0.0, 0.0, -0.7071],
),
spawn=UsdFileCfg(
usd_path=f"{MINDBOT_ASSETS_DIR}\\sences\\Table_C\\Table_C.usd",
rigid_props=RigidBodyPropertiesCfg(
rigid_body_enabled=True,
solver_position_iteration_count=32,
solver_velocity_iteration_count=16,
disable_gravity=False,
),
collision_props=CollisionPropertiesCfg(
collision_enabled=True,
contact_offset=0.0005, # original 0.02
rest_offset=0,
),
),
)

View File

@@ -51,7 +51,9 @@ from .mindrobot_cfg import (
# 在文件开头添加
import isaaclab.utils.assets as assets_utils
from mindbot.utils.assets import MINDBOT_ASSETS_DIR
from mindbot.assets.lab import ROOM_CFG
from mindbot.assets.table import TABLE_CFG
from mindbot.assets.dryingbox import DRYINGBOX_CFG
# # 然后在 scene 配置中使用
# spawn=sim_utils.UsdFileCfg(
# usd_path=f"{assets_utils.ISAAC_NUCLEUS_DIR}/Props/Mounts/SeattleLabTable/table_instanceable.usd"
@@ -93,7 +95,10 @@ class MindRobotTeleopSceneCfg(InteractiveSceneCfg):
),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.5, 0.0, 0.45)),
)
room = ROOM_CFG.replace(prim_path="{ENV_REGEX_NS}/Room")
table = TABLE_CFG.replace(prim_path="{ENV_REGEX_NS}/Table")
drying_box = DRYINGBOX_CFG.replace(prim_path="{ENV_REGEX_NS}/DryingBox")
# room = AssetBaseCfg(
# prim_path="{ENV_REGEX_NS}/Room",
# spawn=sim_utils.UsdFileCfg(