Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

L6 Dexterous Hand

Quick Start

from realhand import L6

with L6(side="left", interface_name="can0") as hand:
    # Set angles
    hand.angle.set_angles((10, 20, 30, 40, 50, 60))

    # Read angles
    data = hand.angle.get_blocking(timeout_ms=500)
    print(data.angles)

Constructor parameters

ParameterTypeDescription
side"left" | "right"Left hand or right hand
interface_namestrCAN interface name, such as "can0"
interface_typestrCAN interface type, default "socketcan". See CAN Bus for Windows usage

Joint Definition

IndexNameIdentifier
0Thumb flexionthumb_flex
1Thumb abductionthumb_abd
2Index fingerindex
3Middle fingermiddle
4Ring fingerring
5Pinkypinky

Functional Modules

ModuleDescriptionDocs
hand.angleJoint angle control and readangle
hand.speedMotion speed controlspeed
hand.torqueTorque controltorque
hand.force_sensorForce sensor dataforce-sensor
hand.temperatureTemperature monitoringtemperature
hand.currentCurrent monitoringcurrent
hand.faultFault detection and clearingfault
hand.versionDevice version informationversion

Unified Streaming Reads

L6 provides a unified event stream interface. Use hand.stream() and hand.start_polling() to retrieve data from all sensors. Polling starts automatically at initialization using default intervals (angles at 60 Hz, force sensors at 30 Hz), so you do not need to call start_polling() manually.

from realhand import L6
from realhand.hand.l6 import SensorSource, AngleEvent, TemperatureEvent

with L6(side="left", interface_name="can0") as hand:
    # You can set multiple sensors and polling intervals (seconds)
    # Calling start_polling() again overrides the previous settings
    hand.start_polling({SensorSource.ANGLE: 0.05, SensorSource.TEMPERATURE: 1.0})

    for event in hand.stream():
        match event:
            case AngleEvent(data=ad):
                print(f"Angles: {ad.angles.to_list()}")
            case TemperatureEvent(data=td):
                print(f"Temperature: {td.temperatures.to_list()}")

    hand.stop_polling()
    hand.stop_stream()

Available SensorSource values and default rates

ValueDescriptionDefault rate
SensorSource.ANGLEAngles60 Hz
SensorSource.TORQUETorqueNot polled by default
SensorSource.TEMPERATURETemperatureNot polled by default
SensorSource.CURRENTCurrentNot polled by default
SensorSource.FAULTFaultNot polled by default
SensorSource.FORCE_SENSORForce sensors30 Hz

Snapshot

Get the latest cached data from all sensors:

snap = hand.get_snapshot()
print(snap.angle)  # AngleData | None
print(snap.temperature)  # TemperatureData | None