dynamixel
Version:
Node.js library for controlling DYNAMIXEL servo motors via U2D2 interface with Protocol 2.0 support
118 lines (110 loc) • 2.94 kB
JavaScript
// DYNAMIXEL Protocol 2.0 Constants
// Packet Structure
export const HEADER = [0xFF, 0xFF, 0xFD, 0x00];
export const BROADCAST_ID = 0xFE;
// Instructions
export const INSTRUCTIONS = {
PING: 0x01,
READ: 0x02,
WRITE: 0x03,
REG_WRITE: 0x04,
ACTION: 0x05,
FACTORY_RESET: 0x06,
REBOOT: 0x08,
CLEAR: 0x10,
CONTROL_TABLE_BACKUP: 0x20,
CONTROL_TABLE_RESTORE: 0x21,
STATUS: 0x55,
SYNC_READ: 0x82,
SYNC_WRITE: 0x83,
FAST_SYNC_READ: 0x8A,
BULK_READ: 0x92,
BULK_WRITE: 0x93,
FAST_BULK_READ: 0x9A
};
// Error Flags
export const ERROR_FLAGS = {
RESULT_FAIL: 0x01,
INSTRUCTION_ERROR: 0x02,
CRC_ERROR: 0x03,
DATA_RANGE_ERROR: 0x04,
DATA_LENGTH_ERROR: 0x05,
DATA_LIMIT_ERROR: 0x06,
ACCESS_ERROR: 0x07
};
// Common Control Table Addresses (varies by model)
export const CONTROL_TABLE = {
MODEL_NUMBER: 0,
MODEL_INFORMATION: 2,
FIRMWARE_VERSION: 6,
ID: 7,
BAUD_RATE: 8,
RETURN_DELAY_TIME: 9,
DRIVE_MODE: 10,
OPERATING_MODE: 11,
SECONDARY_ID: 12,
PROTOCOL_TYPE: 13,
HOMING_OFFSET: 20,
MOVING_THRESHOLD: 24,
TEMPERATURE_LIMIT: 31,
MAX_VOLTAGE_LIMIT: 32,
MIN_VOLTAGE_LIMIT: 34,
PWM_LIMIT: 36,
VELOCITY_LIMIT: 44,
MAX_POSITION_LIMIT: 48,
MIN_POSITION_LIMIT: 52,
EXTERNAL_PORT_MODE_1: 56,
EXTERNAL_PORT_MODE_2: 57,
EXTERNAL_PORT_MODE_3: 58,
SHUTDOWN: 63,
TORQUE_ENABLE: 64,
LED: 65,
STATUS_RETURN_LEVEL: 68,
REGISTERED_INSTRUCTION: 69,
HARDWARE_ERROR_STATUS: 70,
VELOCITY_I_GAIN: 76,
VELOCITY_P_GAIN: 78,
POSITION_D_GAIN: 80,
POSITION_I_GAIN: 82,
POSITION_P_GAIN: 84,
FEEDFORWARD_2ND_GAIN: 88,
FEEDFORWARD_1ST_GAIN: 90,
BUS_WATCHDOG: 98,
GOAL_PWM: 100,
GOAL_CURRENT: 102,
GOAL_VELOCITY: 104,
PROFILE_ACCELERATION: 108,
PROFILE_VELOCITY: 112,
GOAL_POSITION: 116,
REALTIME_TICK: 120,
MOVING: 122,
MOVING_STATUS: 123,
PRESENT_PWM: 124,
PRESENT_LOAD: 126,
PRESENT_VELOCITY: 128,
PRESENT_POSITION: 132,
VELOCITY_TRAJECTORY: 136,
POSITION_TRAJECTORY: 140,
PRESENT_INPUT_VOLTAGE: 144,
PRESENT_TEMPERATURE: 146
};
// U2D2 USB Device Information
export const U2D2_DEVICE = {
VENDOR_ID: 0x0403, // FTDI
PRODUCT_ID: 0x6014, // FT232H
INTERFACE: 0
};
// Indirect Address Constants
export const INDIRECT_ADDRESS = {
BASE_ADDRESS: 168, // Starting address for indirect addresses
DATA_BASE_ADDRESS: 208, // Starting address for indirect data
MAX_ENTRIES: 20, // Maximum number of indirect mappings
ADDRESS_SIZE: 2, // Each indirect address entry is 2 bytes
DATA_SIZE: 1, // Each indirect data entry is 1 byte
VALID_RANGE_MIN: 64, // Minimum valid address for indirect mapping
VALID_RANGE_MAX: 227 // Maximum valid address for indirect mapping
};
// Default timeouts and settings
export const DEFAULT_TIMEOUT = 1000; // milliseconds
export const DEFAULT_BAUD_RATE = 57600;
export const MIN_PACKET_LENGTH = 10; // Header + ID + Length + Instruction + CRC