==========
Components
==========
This section covers the actuator and sensor systems in DexRobot MuJoCo hand models.
Actuator System
-------------
The DexHand uses position-controlled actuators with PD control:
.. code-block:: python
# Bend joints (2-4)
r"[lr]_f_joint[1-5]_[2-4]": {
"kp": "20", # Position gain
"kv": "0.1", # Velocity gain
"ctrlrange": "0 1.3", # Control limits (rad)
"forcerange": "-20 20" # Force limits (N)
}
# Base rotation joints
r"[lr]_f_joint1_1": { # Thumb
"kp": "20",
"kv": "1",
"ctrlrange": "0 2.2",
"forcerange": "-20 20"
}
Control Parameters
^^^^^^^^^^^^^^^^
- **kp**: Position tracking stiffness (default: 20.0)
- **kv**: Damping behavior (default: 0.1 for bend, 1.0 for base)
- **ctrlrange**: Position limits in radians
- **forcerange**: Force limits in Newtons
Control Interface
^^^^^^^^^^^^^^^
.. code-block:: python
# ROS control
joint_msg = JointState()
joint_msg.name = ['r_f_joint1_1']
joint_msg.position = [0.5]
publisher.publish(joint_msg)
# Direct control
sim.send_control("act_r_f_joint1_1", 0.5)
Sensor System
-----------
Touch Sensors
^^^^^^^^^^^
MuJoCo native touch sensors are automatically created at fingertip sites:
- Sites created from URDF fixed links with "pad" in name
- Touch sensors attached to these sites
- Real-time force feedback in Newtons
.. code-block:: xml
TaShan Sensors
^^^^^^^^^^^^
When using ``--enable-ts-sensor``, the system provides 11-dimensional tactile data:
- **Force bodies**: ``force1_f1`` through ``force5_f7`` on distal links
- **Rangefinders**: ``rf1`` through ``rf5`` for proximity
- **User sensors**: ``TS-F-A-1`` through ``TS-F-A-5`` for output
See :doc:`/touch_sensors` for detailed TaShan sensor information.
Data Access
^^^^^^^^^
.. code-block:: python
# ROS topic (Float32MultiArray)
def touch_callback(msg):
sensor_values = msg.data # Force values in Newtons
rospy.Subscriber("touch_sensors", Float32MultiArray, touch_callback)
# Direct API
sensor_data = sim.data.sensor("touch_r_f_link1_4").data
Customization
-----------
Custom Actuators
^^^^^^^^^^^^^^
.. code-block:: python
actuator_config = {
"joint_pattern": {
"kp": "30",
"kv": "0.2",
"ctrlrange": "0 1.5",
"forcerange": "-25 25"
}
}
add_position_actuators(xml_path, actuator_config)
Custom Sensors
^^^^^^^^^^^^
.. code-block:: python
custom_sites = {
"link_name": {
"pos": "x y z",
"size": "radius",
"type": "sphere"
}
}
add_sites(xml_path, custom_sites)
add_touch_sensors(xml_path, sensor_info)
Next Steps
---------
- Configure :doc:`collision_models`
- Review :doc:`conversion` process
- Test with :doc:`examples`