Isaac Gym utils¶
Utilities for ease of programming of Isaac Gym environments.
Control of robotic manipulators¶
Inverse kinematics using damped least squares method¶
This implementation attempts to unify under a single and reusable function the whole set of procedures used to calculate the inverse kinematics of a robotic manipulator shown in Isaac Gym’s example: Franka IK Picking (franka_cube_ik_osc.py
)
\(\Delta\theta = J^T (JJ^T + \lambda^2 I)^{-1} \, \vec{e}\)
where
API¶
- skrl.utils.isaacgym_utils.ik(jacobian_end_effector: torch.Tensor, current_position: torch.Tensor, current_orientation: torch.Tensor, goal_position: torch.Tensor, goal_orientation: torch.Tensor | None = None, damping_factor: float = 0.05, squeeze_output: bool = True) torch.Tensor ¶
Inverse kinematics using damped least squares method
- Parameters:
jacobian_end_effector (torch.Tensor) – End effector’s jacobian
current_position (torch.Tensor) – End effector’s current position
current_orientation (torch.Tensor) – End effector’s current orientation
goal_position (torch.Tensor) – End effector’s goal position
goal_orientation (torch.Tensor or None) – End effector’s goal orientation (default: None)
damping_factor (float) – Damping factor (default: 0.05)
squeeze_output (bool) – Squeeze output (default: True)
- Returns:
Change in joint angles
- Return type:
Web viewer for development without X server¶
This library provides an API for instantiating a lightweight web viewer useful, mostly, for designing Isaac Gym environments in remote workstations or docker containers without X server
Gestures and actions¶
Gestures / actions |
Key |
Mouse |
---|---|---|
Orbit (rotate view around a point) |
Alt |
Left click |
Pan (rotate view around itself) |
Right click |
|
Walk mode (move view linearly to the current alignment) |
Middle click |
|
Zoom in/out |
Scroll wheel |
|
Freeze view |
V |
|
Toggle image type (color, depth) |
T |
Watch an animation of the gestures and actions in the following video
Requirements¶
The web viewer is build on top of Flask and requires the following package to be installed
pip install Flask
Also, to be launched in Visual Studio Code (Preview in Editor), the Live Preview - VS Code Extension must be installed
Usage¶
import math
from isaacgym import gymapi
from skrl.utils import isaacgym_utils
# create a web viewer instance
web_viewer = isaacgym_utils.WebViewer()
# configure and create simulation
sim_params = gymapi.SimParams()
sim_params.up_axis = gymapi.UP_AXIS_Z
sim_params.gravity = gymapi.Vec3(0.0, 0.0, -9.8)
sim_params.physx.solver_type = 1
sim_params.physx.num_position_iterations = 4
sim_params.physx.num_velocity_iterations = 1
sim_params.physx.use_gpu = True
sim_params.use_gpu_pipeline = True
gym = gymapi.acquire_gym()
sim = gym.create_sim(compute_device=0, graphics_device=0, type=gymapi.SIM_PHYSX, params=sim_params)
# setup num_envs and env's grid
num_envs = 1
spacing = 2.0
env_lower = gymapi.Vec3(-spacing, -spacing, 0.0)
env_upper = gymapi.Vec3(spacing, 0.0, spacing)
# add ground plane
plane_params = gymapi.PlaneParams()
plane_params.normal = gymapi.Vec3(0.0, 0.0, 1.0)
gym.add_ground(sim, plane_params)
envs = []
cameras = []
for i in range(num_envs):
# create env
env = gym.create_env(sim, env_lower, env_upper, int(math.sqrt(num_envs)))
# add sphere
pose = gymapi.Transform()
pose.p, pose.r = gymapi.Vec3(0.0, 0.0, 1.0), gymapi.Quat(0.0, 0.0, 0.0, 1.0)
gym.create_actor(env, gym.create_sphere(sim, 0.2, None), pose, "sphere", i, 0)
# add camera
cam_props = gymapi.CameraProperties()
cam_props.width, cam_props.height = 300, 300
cam_handle = gym.create_camera_sensor(env, cam_props)
gym.set_camera_location(cam_handle, env, gymapi.Vec3(1, 1, 1), gymapi.Vec3(0, 0, 0))
envs.append(env)
cameras.append(cam_handle)
# setup web viewer
web_viewer.setup(gym, sim, envs, cameras)
gym.prepare_sim(sim)
for i in range(100000):
gym.simulate(sim)
# render the scene
web_viewer.render(fetch_results=True,
step_graphics=True,
render_all_camera_sensors=True,
wait_for_page_load=True)
API¶
- class skrl.utils.isaacgym_utils.WebViewer(host: str = '127.0.0.1', port: int = 5000)¶
Bases:
object
Web viewer for Isaac Gym
- Parameters:
- _route_index() flask.Response ¶
Render the web page
- Returns:
Flask response
- Return type:
flask.Response
- _route_input_event() flask.Response ¶
Handle keyboard and mouse input
- Returns:
Flask response
- Return type:
flask.Response
- _route_stream() flask.Response ¶
Stream the image to the web page
- Returns:
Flask response
- Return type:
flask.Response
- _stream() bytes ¶
Format the image to be streamed
- Returns:
Image encoded as Content-Type
- Return type:
- render(fetch_results: bool = True, step_graphics: bool = True, render_all_camera_sensors: bool = True, wait_for_page_load: bool = True) None ¶
Render and get the image from the current camera
This function must be called after the simulation is stepped (post_physics_step). The following Isaac Gym functions are called before get the image. Their calling can be skipped by setting the corresponding argument to False
fetch_results
step_graphics
render_all_camera_sensors
- Parameters:
fetch_results (bool) – Call Gym.fetch_results method (default: True)
step_graphics (bool) – Call Gym.step_graphics method (default: True)
render_all_camera_sensors (bool) – Call Gym.render_all_camera_sensors method (default: True)
wait_for_page_load (bool) – Wait for the page to load (default: True)