Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Google deepmind Dm control Jaco Arm Hand

From Leeroopedia
Revision as of 12:42, 16 February 2026 by Admin (talk | contribs) (Auto-imported from implementations/Google_deepmind_Dm_control_Jaco_Arm_Hand.md)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Metadata
Knowledge Sources dm_control
Domains Reinforcement Learning, Robotics Simulation, Robot Modelling
Last Updated 2026-02-15 00:00 GMT

Overview

Concrete tool for configuring the Kinova Jaco 6-DOF arm and 3-finger hand as composer entities with velocity actuators, torque sensors, and manipulation-specific observation defaults.

Description

The dm_control manipulation suite uses the Kinova Jaco robot, modelled as two composer entities:

JacoArm (jaco_arm.py):

  • Loads the jaco_arm.xml MJCF model.
  • Contains 6 revolute joints split into 3 large joints (joint_1, joint_2, joint_3) and 3 small joints (joint_4, joint_5, joint_6).
  • Adds a velocity actuator to each joint with torque and velocity limits from the Kinova datasheet: large joints get a peak torque of 30.5 Nm and max velocity of 36 deg/s; small joints get 6.8 Nm and 48 deg/s.
  • Adds a 3-axis torque sensor per joint.
  • The JacoArmObservables class returns joint positions as sin/cos pairs (bounded) and projects torque sensor readings onto the joint axis.

JacoHand (jaco_hand.py):

  • Loads the jaco_hand.xml MJCF model.
  • Contains 3 finger joints, each with a velocity actuator (gain=10, force range +/-1 N, ctrl range +/-5).
  • Exposes a tool_center_point property (either the grip site or the pinch site, configurable via use_pinch_site_as_tcp).
  • Provides a set_grasp(physics, close_factors) method that positions fingers to a desired open/close fraction (0 = fully open, 1 = fully closed).
  • The JacoHandObservables class provides pinch-site position and rotation matrix observables.

Factory functions (robots.py):

  • make_arm(obs_settings) -- constructs a JacoArm with the observation options derived from JACO_ARM_OBSERVABLES (proprio: joints_pos, joints_vel; ftt: joints_torque).
  • make_hand(obs_settings) -- constructs a JacoHand with use_pinch_site_as_tcp=True and observation options derived from JACO_HAND_OBSERVABLES (proprio: joints_pos, joints_vel, pinch_site_pos, pinch_site_rmat).

The default arm base offset in the arena is (0.0, 0.4, 0.0).

Usage

Task modules call robots.make_arm() and robots.make_hand(), then attach the hand to the arm and the arm to the arena. This is typically done inside the task's factory function (e.g. _reach(), _lift()).

Code Reference

Attribute Value
Source Locations dm_control/entities/manipulators/kinova/jaco_arm.py, lines 50--154
dm_control/entities/manipulators/kinova/jaco_hand.py, lines 33--170
dm_control/manipulation/shared/robots.py, lines 25--53
Signatures JacoArm(name=None)
JacoHand(name=None, use_pinch_site_as_tcp=False)
make_arm(obs_settings) -> JacoArm
make_hand(obs_settings) -> JacoHand
Import from dm_control.entities.manipulators import kinova
from dm_control.manipulation.shared import robots

I/O Contract

Inputs

Function Parameter Type Description
JacoArm name str or None Optional prefix for MJCF model name attributes.
JacoHand name str or None Optional prefix for MJCF model name attributes.
JacoHand use_pinch_site_as_tcp bool If True, the pinch site is used as the tool center point instead of the grip site.
make_arm obs_settings ObservationSettings Configures which arm observables are enabled and their processing options.
make_hand obs_settings ObservationSettings Configures which hand observables are enabled and their processing options.
set_grasp physics mjcf.Physics The physics instance to modify.
set_grasp close_factors float or Iterable[float] Desired finger positions: 0 = fully open, 1 = fully closed.

Outputs

Function Return Type Description
JacoArm() JacoArm A composer entity with 6 joints, 6 velocity actuators, 6 torque sensors, and a wrist attachment site.
JacoHand() JacoHand A composer entity with 3 finger joints, 3 velocity actuators, grip/pinch sites, and finger/hand geom lists.
make_arm(obs_settings) JacoArm A JacoArm with manipulation-default observable options applied.
make_hand(obs_settings) JacoHand A JacoHand with use_pinch_site_as_tcp=True and manipulation-default observable options applied.

Usage Examples

from dm_control.manipulation.shared import robots
from dm_control.manipulation.shared import observations

# Create arm and hand with perfect-features observation settings.
obs_settings = observations.PERFECT_FEATURES
arm = robots.make_arm(obs_settings)
hand = robots.make_hand(obs_settings)

# Attach hand to arm at the wrist site.
arm.attach(hand)

# Inspect the arm's joints and actuators.
print('Arm joints:', [j.name for j in arm.joints])
# ['joint_1', 'joint_2', 'joint_3', 'joint_4', 'joint_5', 'joint_6']

print('Arm actuators:', [a.name for a in arm.actuators])
# ['joint_1', 'joint_2', 'joint_3', 'joint_4', 'joint_5', 'joint_6']

# Inspect the hand's finger actuators.
print('Hand actuators:', [a.name for a in hand.actuators])
from dm_control.entities.manipulators.kinova import jaco_hand

# Direct instantiation of JacoHand with pinch site as TCP.
hand = jaco_hand.JacoHand(use_pinch_site_as_tcp=True)
print('Tool center point:', hand.tool_center_point)
print('Number of finger joints:', len(hand.joints))
# 3

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment