Spaces:
Running
Running
| /** | |
| * SO-100 specific hardware configuration | |
| */ | |
| import type { RobotHardwareConfig } from "../types/robot-config.js"; | |
| /** | |
| * STS3215 Protocol Configuration for SO-100 devices | |
| */ | |
| export const WEB_STS3215_PROTOCOL = { | |
| resolution: 4096, // 12-bit resolution (0-4095) | |
| homingOffsetAddress: 31, // Address for Homing_Offset register | |
| homingOffsetLength: 2, // 2 bytes for Homing_Offset | |
| presentPositionAddress: 56, // Address for Present_Position register | |
| presentPositionLength: 2, // 2 bytes for Present_Position | |
| minPositionLimitAddress: 9, // Address for Min_Position_Limit register | |
| minPositionLimitLength: 2, // 2 bytes for Min_Position_Limit | |
| maxPositionLimitAddress: 11, // Address for Max_Position_Limit register | |
| maxPositionLimitLength: 2, // 2 bytes for Max_Position_Limit | |
| signMagnitudeBit: 11, // Bit 11 is sign bit for Homing_Offset encoding | |
| } as const; | |
| /** | |
| * SO-100 Device Configuration | |
| * Motor names, IDs, and drive modes for both follower and leader | |
| */ | |
| export const SO100_CONFIG = { | |
| motorNames: [ | |
| "shoulder_pan", | |
| "shoulder_lift", | |
| "elbow_flex", | |
| "wrist_flex", | |
| "wrist_roll", | |
| "gripper", | |
| ], | |
| motorIds: [1, 2, 3, 4, 5, 6], | |
| // All SO-100 motors use drive_mode=0 | |
| driveModes: [0, 0, 0, 0, 0, 0], | |
| }; | |
| /** | |
| * SO-100 Keyboard Controls for Teleoperation | |
| * Robot-specific mapping optimized for SO-100 joint layout | |
| */ | |
| export const SO100_KEYBOARD_CONTROLS = { | |
| // Shoulder controls | |
| ArrowUp: { motor: "shoulder_lift", direction: 1, description: "Shoulder up" }, | |
| ArrowDown: { | |
| motor: "shoulder_lift", | |
| direction: -1, | |
| description: "Shoulder down", | |
| }, | |
| ArrowLeft: { | |
| motor: "shoulder_pan", | |
| direction: -1, | |
| description: "Shoulder left", | |
| }, | |
| ArrowRight: { | |
| motor: "shoulder_pan", | |
| direction: 1, | |
| description: "Shoulder right", | |
| }, | |
| // WASD controls | |
| w: { motor: "elbow_flex", direction: 1, description: "Elbow flex" }, | |
| s: { motor: "elbow_flex", direction: -1, description: "Elbow extend" }, | |
| a: { motor: "wrist_flex", direction: -1, description: "Wrist down" }, | |
| d: { motor: "wrist_flex", direction: 1, description: "Wrist up" }, | |
| // Wrist roll and gripper | |
| q: { motor: "wrist_roll", direction: -1, description: "Wrist roll left" }, | |
| e: { motor: "wrist_roll", direction: 1, description: "Wrist roll right" }, | |
| o: { motor: "gripper", direction: 1, description: "Gripper open" }, | |
| c: { motor: "gripper", direction: -1, description: "Gripper close" }, | |
| // Emergency stop | |
| Escape: { | |
| motor: "emergency_stop", | |
| direction: 0, | |
| description: "Emergency stop", | |
| }, | |
| } as const; | |
| /** | |
| * Create SO-100 hardware configuration | |
| */ | |
| export function createSO100Config( | |
| deviceType: "so100_follower" | "so100_leader" | |
| ): RobotHardwareConfig { | |
| return { | |
| deviceType, | |
| motorNames: SO100_CONFIG.motorNames, | |
| motorIds: SO100_CONFIG.motorIds, | |
| driveModes: SO100_CONFIG.driveModes, | |
| keyboardControls: SO100_KEYBOARD_CONTROLS, | |
| protocol: WEB_STS3215_PROTOCOL, | |
| }; | |
| } | |