Isaac Lab Integration
Safety middleware for NVIDIA Isaac Lab robot learning environments using THSP validation protocol.
Installation
pip install sentinelseed
# Isaac Lab (separate installation required)
# See: https://isaac-sim.github.io/IsaacLab/
Quick Start
from sentinelseed.integrations.isaac_lab import (
SentinelSafetyWrapper,
RobotConstraints,
)
# Create Isaac Lab environment
env = gym.make("Isaac-Reach-Franka-v0", cfg=cfg)
# Wrap with safety validation
env = SentinelSafetyWrapper(
env,
constraints=RobotConstraints.franka_default(),
mode="clamp", # clamp, block, warn, monitor
)
# Use normally - actions validated automatically
obs, reward, done, truncated, info = env.step(action)
Safety Modes
| Mode | Behavior |
|---|---|
clamp | Project unsafe actions to safe region |
block | Reject unsafe actions (use zero/previous) |
warn | Log violations but execute unchanged |
monitor | Collect statistics without intervention |
Robot Constraints
Pre-built
# Franka Emika Panda (7 DOF)
constraints = RobotConstraints.franka_default()
# Universal Robots UR10 (6 DOF)
constraints = RobotConstraints.ur10_default()
# Joint limits
limits = JointLimits.franka_panda()
limits = JointLimits.ur10()
limits = JointLimits.allegro_hand()
Custom
from sentinelseed.integrations.isaac_lab import (
JointLimits,
WorkspaceLimits,
RobotConstraints,
CollisionZone,
)
joint_limits = JointLimits(
num_joints=6,
position_lower=[-3.14, -2.0, -3.14, -3.14, -3.14, -3.14],
position_upper=[3.14, 2.0, 3.14, 3.14, 3.14, 3.14],
velocity_max=[2.0, 2.0, 2.0, 2.5, 2.5, 2.5],
)
workspace = WorkspaceLimits(
x_min=-0.5, x_max=0.5,
y_min=-0.5, y_max=0.5,
z_min=0.0, z_max=1.0,
)
constraints = RobotConstraints(
joint_limits=joint_limits,
workspace_limits=workspace,
)
constraints.add_collision_zone(
CollisionZone.sphere("human", center=(0.3, 0.0, 0.5), radius=0.2)
)
THSP Gates for Robotics
Truth Gate
- No NaN or Inf values
- Values within expected range
- Action dimensions match robot
Harm Gate
- Joint velocities within limits
- Forces/torques within safe ranges
Scope Gate
- Joint positions within mechanical limits
- End-effector within workspace
- No collision zone violations
Training Integration
Stable-Baselines3
from stable_baselines3 import PPO
from sentinelseed.integrations.isaac_lab import SentinelSB3Callback
env = SentinelSafetyWrapper(base_env, mode="clamp")
model = PPO("MlpPolicy", env)
callback = SentinelSB3Callback(env, log_interval=1000)
model.learn(total_timesteps=100000, callback=callback.get_sb3_callback())
Weights & Biases
from sentinelseed.integrations.isaac_lab import create_wandb_callback
callback = create_wandb_callback(
env,
project="my-robot-training",
log_interval=100,
)