Anatomically precise joint names

This commit is contained in:
Simon Alibert
2025-05-21 15:42:25 +02:00
parent f57015fbd9
commit a3c671f7dd
2 changed files with 40 additions and 44 deletions

View File

@@ -44,26 +44,26 @@ class HopeJrHand(Robot):
port=self.config.port, port=self.config.port,
motors={ motors={
# Thumb # Thumb
"thumb_basel_rotation": Motor(1, "scs0009", MotorNormMode.RANGE_M100_100), "thumb_cmc": Motor(1, "scs0009", MotorNormMode.RANGE_M100_100),
"thumb_mcp": Motor(2, "scs0009", MotorNormMode.RANGE_M100_100), "thumb_mcp": Motor(2, "scs0009", MotorNormMode.RANGE_M100_100),
"thumb_pip": Motor(3, "scs0009", MotorNormMode.RANGE_M100_100), "thumb_pip": Motor(3, "scs0009", MotorNormMode.RANGE_M100_100),
"thumb_dip": Motor(4, "scs0009", MotorNormMode.RANGE_M100_100), "thumb_dip": Motor(4, "scs0009", MotorNormMode.RANGE_M100_100),
# Index # Index
"index_thumb_side": Motor(5, "scs0009", MotorNormMode.RANGE_M100_100), "index_radial_flexor": Motor(5, "scs0009", MotorNormMode.RANGE_M100_100),
"index_pinky_side": Motor(6, "scs0009", MotorNormMode.RANGE_M100_100), "index_ulnar_flexor": Motor(6, "scs0009", MotorNormMode.RANGE_M100_100),
"index_flexor": Motor(7, "scs0009", MotorNormMode.RANGE_M100_100), "index_pip_dip": Motor(7, "scs0009", MotorNormMode.RANGE_M100_100),
# Middle # Middle
"middle_thumb_side": Motor(8, "scs0009", MotorNormMode.RANGE_M100_100), "middle_radial_flexor": Motor(8, "scs0009", MotorNormMode.RANGE_M100_100),
"middle_pinky_side": Motor(9, "scs0009", MotorNormMode.RANGE_M100_100), "middle_ulnar_flexor": Motor(9, "scs0009", MotorNormMode.RANGE_M100_100),
"middle_flexor": Motor(10, "scs0009", MotorNormMode.RANGE_M100_100), "middle_pip_dip": Motor(10, "scs0009", MotorNormMode.RANGE_M100_100),
# Ring # Ring
"ring_thumb_side": Motor(11, "scs0009", MotorNormMode.RANGE_M100_100), "ring_radial_flexor": Motor(11, "scs0009", MotorNormMode.RANGE_M100_100),
"ring_pinky_side": Motor(12, "scs0009", MotorNormMode.RANGE_M100_100), "ring_ulnar_flexor": Motor(12, "scs0009", MotorNormMode.RANGE_M100_100),
"ring_flexor": Motor(13, "scs0009", MotorNormMode.RANGE_M100_100), "ring_pip_dip": Motor(13, "scs0009", MotorNormMode.RANGE_M100_100),
# Pinky # Pinky
"pinky_thumb_side": Motor(14, "scs0009", MotorNormMode.RANGE_M100_100), "pinky_radial_flexor": Motor(14, "scs0009", MotorNormMode.RANGE_M100_100),
"pinky_pinky_side": Motor(15, "scs0009", MotorNormMode.RANGE_M100_100), "pinky_ulnar_flexor": Motor(15, "scs0009", MotorNormMode.RANGE_M100_100),
"pinky_flexor": Motor(16, "scs0009", MotorNormMode.RANGE_M100_100), "pinky_pip_dip": Motor(16, "scs0009", MotorNormMode.RANGE_M100_100),
}, },
calibration=self.calibration, calibration=self.calibration,
protocol_version=1, protocol_version=1,

View File

@@ -56,22 +56,32 @@ class HomonculusGlove(Teleoperator):
self.serial = serial.Serial(config.port, config.baud_rate, timeout=1) self.serial = serial.Serial(config.port, config.baud_rate, timeout=1)
self.joints = [ self.joints = [
"thumb_0", "thumb_cmc",
"thumb_1", "thumb_mcp",
"thumb_2", "thumb_pip",
"thumb_3", "thumb_dip",
"index_0", "index_mcp_abduction",
"index_1", "index_mcp_flexion",
"index_2", "index_dip",
"middle_0", "middle_mcp_abduction",
"middle_1", "middle_mcp_flexion",
"middle_2", "middle_dip",
"ring_0", "ring_mcp_abduction",
"ring_1", "ring_mcp_flexion",
"ring_2", "ring_dip",
"pinky_0", "pinky_mcp_abduction",
"pinky_1", "pinky_mcp_flexion",
"pinky_2", "pinky_dip",
]
self.inverted_joints = [
"thumb_cmc",
"thumb_dip",
"index_mcp_abduction",
"index_dip",
"middle_dip",
"ring_dip",
"pinky_dip",
] ]
# self._state = dict.fromkeys(self.joints, 100) # self._state = dict.fromkeys(self.joints, 100)
self.thread = threading.Thread(target=self._async_read, daemon=True, name=f"{self} _async_read") self.thread = threading.Thread(target=self._async_read, daemon=True, name=f"{self} _async_read")
@@ -115,25 +125,11 @@ class HomonculusGlove(Teleoperator):
range_mins.update(finger_mins) range_mins.update(finger_mins)
range_maxes.update(finger_maxes) range_maxes.update(finger_maxes)
inverted_joints = [
"thumb_0",
"thumb_3",
"index_0",
"index_2",
"middle_2",
"ring_2",
"pinky_2",
]
# for joint in inverted_joints:
# tmp_pos = range_mins[joint]
# range_mins[joint] = range_maxes[joint]
# range_maxes[joint] = tmp_pos
self.calibration = {} self.calibration = {}
for id_, joint in enumerate(self.joints): for id_, joint in enumerate(self.joints):
self.calibration[joint] = MotorCalibration( self.calibration[joint] = MotorCalibration(
id=id_, id=id_,
drive_mode=1 if joint in inverted_joints else 0, drive_mode=1 if joint in self.inverted_joints else 0,
homing_offset=0, homing_offset=0,
range_min=range_mins[joint], range_min=range_mins[joint],
range_max=range_maxes[joint], range_max=range_maxes[joint],