CESP-IDF
Quay lại ghi chép● AV-1 · ROBOTICS

ENGINEERING GUIDE · 18 phút

T-Rax: Kiến trúc phần cứng ESP32-S3, Động học hữu cơ, Âm thanh R2-D2 & Huấn luyện Sim2Real MuJoCo RL

Cẩm nang kỹ thuật toàn diện cho Robot T-Rax: Sơ đồ 16 chân GPIO ESP32-S3 SuperMini (INMP441, MAX98357A, VL53L0X ToF, DRV8833, Servo 2-DOF Pan/Tilt), phương trình Organic Motion Engine, 28 kịch bản cảm xúc R2-D2, 19+ công cụ MCP và quy trình huấn luyện Multi-Policy RL trong MuJoCo 3.14 xuất ONNX xuống ESP-NN.

Robotics & Embodied AI Team CHOTDIY18 phút30/10/2026
TỔNG QUAN TÀI LIỆU

Cẩm nang kỹ thuật toàn diện cho Robot T-Rax: Sơ đồ 16 chân GPIO ESP32-S3 SuperMini (INMP441, MAX98357A, VL53L0X ToF, DRV8833, Servo 2-DOF Pan/Tilt), phương trình Organic Motion Engine, 28 kịch bản cảm xúc R2-D2, 19+ công cụ MCP và quy trình huấn luyện Multi-Policy RL trong MuJoCo 3.14 xuất ONNX xuống ESP-NN.

PHẦN 1 · DIGITAL TWIN & CƠ KHÍ BÁNH XÍCH

1. Mô Hình 3D Bóc Tách 15 Cụm Chi Tiết CAD

Khung máy Robot T-Rax được chia thành 15 phân đoạn hình học độc lập (tương thích đồng thời với trình mô phỏng vật lý MuJoCo 3.14 và máy in 3D FDM): khung gầm chính (trax_base + 3 lớp giáp white / silver / gold), 4 bánh răng truyền động (bán kính vòng chia trước 19.2mm, sau 12.4mm), 40 mắt xích độc lập (20 mắt mỗi bên chạy trên quỹ đạo khép kín chu vi 172.56mm), giá chữ L quay ngang trax_pan_bracket (trục Z tại z = 21.413mm) và cụm đầu trax_head gật dọc (trục X tại z = 33.275mm).

SIM2REAL TWIN

T-Rax · Trình Kiểm Tra Lắp Ráp 3D & Động Học

Kéo thanh 'Bóc tách CAD (0-100%)' ở góc dưới để xem vị trí lắp ghép từng cụm chi tiết

SKILL 01 · REST
PAN (Z): 0°TILT (X): 0°TRACK L: 0 mm/sTRACK R: 0 mm/sVL53L0X ToF: 420 mm (SAFE)
Vỏ:Arctic Stormtrooper

WAKING UP T-RAX… · ĐÁNH THỨC DROID

Đang nạp 0% cụm mắt xích & khớp cổ 2-DOF…

MULTI-POLICY RL · 6 SKILLS

Chọn hành vi & Chính sách AI

50 Hz Ctrl
OBSERVATION CONTRACTONNX · ESP-NN

purposeful_obs_v2 (54D) · mode=[1,0,0,0,0]

MCP Tool:self.trax.breathe
PHẦN 2 · SƠ ĐỒ ĐẤU NỐI PHẦN CỨNG

2. Bảng Phân Bổ 16 Chân GPIO Trên ESP32-S3 SuperMini

Toàn bộ cấu hình chân dưới đây khớp tuyệt đối với tệp main/boards/t-rax/config.h trong mã nguồn firmware ESP-IDF. Lưu ý cấp nguồn 5V dòng cao riêng cho cầu H DRV8833 và 2 Servo cổ để tránh sụt áp đường 3.3V của vi điều khiển khi đảo chiều xích đột ngột.

Phân hệChân GPIOMacro trong config.hThông số kỹ thuật
I2S0 Mic (INMP441)GPIO 4 / 5 / 6AUDIO_I2S_MIC_GPIO_WS / SCK / DIN16kHz 32-bit Mono RX DMA · Thu giọng nói & Wake-word
I2S1 Amp (MAX98357A)GPIO 7 / 15 / 16AUDIO_I2S_SPK_GPIO_DOUT / BCLK / LRCK24kHz TX DMA · Tổng hợp sóng âm R2-D2 chirps & sweeps
Laser ToF (VL53L0X)GPIO 8 (SDA) / GPIO 9 (SCL)TRAX_TOF_SDA_PIN / TRAX_TOF_SCL_PINI2C0 Master 400kHz · Quét 20Hz, phanh khẩn cấp khi d < 150mm
Track Left (DRV8833 A)GPIO 10 / GPIO 11TRAX_MOTOR_LEFT_IN1 / IN2LEDC Timer 0 (Ch 0, 1) · Điều khiển PWM dải xích trái
Track Right (DRV8833 B)GPIO 12 / GPIO 13TRAX_MOTOR_RIGHT_IN1 / IN2LEDC Timer 0 (Ch 2, 3) · Điều khiển PWM dải xích phải
Motor Driver EnableGPIO 21TRAX_MOTOR_SLEEP_PINHIGH = Active · LOW = Sleep tiết kiệm năng lượng khi IDLE
Neck Servo 2-DOFGPIO 14 (Pan) / GPIO 17 (Tilt)TRAX_SERVO_PAN_PIN / TRAX_SERVO_TILT_PINLEDC Timer 1 (50Hz, 500–2500µs) · Pan ±60° (Z), Tilt ±40° (X)
RGB Eye & BootGPIO 48 (LED) / GPIO 0 (BTN)BUILTIN_LED_GPIO / BOOT_BUTTON_GPIORMT NeoPixel WS2812B chỉ thị cảm xúc & nút cấu hình Wi-Fi
PHẦN 3 · ORGANIC MOTION ENGINE

3. Giải Thuật Quỹ Đạo Hữu Cơ & Nhịp Thở Vi Mô

Bộ điều khiển chuyển động chạy trên một tác vụ FreeRTOS chu kỳ cố định 20ms (50Hz) trên Core 1. Thay vì nhảy bậc (step input) làm giật khung nhựa, góc cổ Pan/Tilt và xung PWM cầu H DRV8833 được tính toán qua 4 lớp toán học:

main/boards/t-rax/trax_motion_engine.ccESP-IDF C++20 · 50Hz Kinematics Loop
// 1. Đường cong gia tốc mượt Cubic Ease-In-Out
static inline float CubicEaseInOut(float t) {
    t = std::clamp(t, 0.0f, 1.0f);
    return (t < 0.5f) ? (4.0f * t * t * t)
                      : (1.0f - std::pow(-2.0f * t + 2.0f, 3.0f) * 0.5f);
}

// 2. Đường cong đàn hồi Back Ease-Out (Overshoot c1 = 1.70158f cho biểu cảm Tò mò / Giật mình)
static inline float BackEaseOut(float t) {
    t = std::clamp(t, 0.0f, 1.0f);
    constexpr float c1 = 1.70158f;
    constexpr float c3 = c1 + 1.0f;
    return 1.0f + c3 * std::pow(t - 1.0f, 3.0f) + c1 * std::pow(t - 1.0f, 2.0f);
}

// 3. Nhịp thở sinh học Micro-Jitter (0.5 deg - 1.2 deg) khi IDLE
void ApplyBreathingMicroJitter(float time_sec, float* io_pan_deg, float* io_tilt_deg) {
    *io_pan_deg  += 0.85f * std::sin(time_sec * 1.65f) + 0.40f * std::cos(time_sec * 2.95f);
    *io_tilt_deg += 1.15f * std::sin(time_sec * 1.25f) + 0.45f * std::sin(time_sec * 2.45f);
}

// 4. Bộ lọc thông thấp PWM (alpha = 0.25) bảo vệ cầu H DRV8833
current_pwm_left_  = 0.25f * target_pwm_left_  + 0.75f * current_pwm_left_;
current_pwm_right_ = 0.25f * target_pwm_right_ + 0.75f * current_pwm_right_;
PHẦN 4 · R2-D2 ACOUSTIC SYNTHESIS

4. Tổng Hợp Âm Thanh R2-D2 Qua I2S DMA & 28 Kịch Bản Cảm Xúc

Khi chế độ Non-Verbal Droid Mode được bật, T-Rax chuyển đổi mọi trạng thái cảm xúc từ mô hình ngôn ngữ lớn (LLM) thành tổ hợp 3 kênh đồng bộ: Chuỗi sóng âm FM/Chirp R2-D2 (truyền thẳng xuống bộ đệm DMA I2S1 của MAX98357A) + Quỹ đạo cổ/xích + Hiệu ứng màu mắt WS2812B. Hệ thống hỗ trợ đầy đủ 28 kịch bản cảm xúc chia làm 4 nhóm chính:

  • Nhóm Tích cực (8 trạng thái):

    happy, excited, laughing, funny, loving, winking, cool, confident — Lắc vi sai 2 dải xích ngược chiều, gật cổ liên hoàn và phát hợp âm tam độ đi lên.

  • Nhóm Tò mò & Tư duy (6 trạng thái):

    curious, thinking, surprised, shocked, confused, silly — Nghiêng đầu với hàm BackEaseOut và phát âm thanh vuốt tần số lên hỏi han.

  • Nhóm Trầm lắng & Nghỉ (7 trạng thái):

    neutral, relaxed, sleepy, sad, crying, embarrassed, shy — Cúi nhẹ đầu, thở nhịp chậm và phát âm trầm giảm dần tần số (480Hz → 290Hz).

  • Nhóm Cảnh báo & Phản kháng (7 trạng thái):

    angry, scared, startled, disgusted, frustrated, obstinate, REJECT — Lùi xích nhanh, lắc đầu mạnh và phát còi báo động răng cưa.

PHẦN 5 · PHẢN XẠ AN TOÀN & GIAO THỨC MCP

5. Phanh Phản Xạ VL53L0X ToF (< 15cm) & 19+ Công Cụ MCP

Để bảo vệ robot hoạt động 24/7 trên bàn làm việc mà không đâm vào màn hình hay rơi khỏi mép bàn, cảm biến khoảng cách laser VL53L0X được lấy mẫu ở tần số 20Hz độc lập với kết nối đám mây. Ngay khi khoảng cách d_ToF < 150mm trong lúc đang tiến: lớp phản xạ phần cứng lập tức cắt xung tiến, kích hoạt xung phanh lùi, ngửa cổ +28° và ghi đè trạng thái startled.

self.trax.move

Tham số: direction, speed (0-100), duration_ms

Di chuyển tiến/lùi/xoay tại chỗ với bộ lọc thông thấp PWM (α=0.25).

self.trax.look_at

Tham số: pan_deg (-60..60), tilt_deg (-40..40), duration_ms

Quay cổ 2-DOF tới góc đích theo đường cong Cubic Ease-In-Out.

self.trax.react_emotion

Tham số: emotion (28 trạng thái: happy, curious, angry...)

Kích hoạt đồng bộ quỹ đạo cổ + lắc xích + âm thanh R2-D2 + màu mắt RGB.

self.trax.nod / shake_head

Tham số: cycles, speed

Gật đầu đồng ý hoặc lắc đầu từ chối tự nhiên với biên độ giảm dần.

self.trax.wiggle / dance

Tham số: intensity, duration_ms

Nhảy biểu cảm hoặc vẫy xích ngược pha khi chào đón người dùng.

self.trax.patrol / explore

Tham số: radius_cm, duration_sec

Tuần tra mặt bàn tự chủ kết hợp quét đầu radar và tránh vật cản ToF.

self.trax.get_tof_distance

Tham số: none

Đọc khoảng cách thực tế (mm) từ cảm biến laser VL53L0X phía trước.

self.trax.set_breathing

Tham số: enabled (bool), amplitude_deg

Bật/tắt dao động nhịp thở sinh học Micro-Jitter (0.5°–1.2°) khi nghỉ.

PHẦN 6 · MUJOCO 3.14 SIM2REAL RL PIPELINE

6. Huấn Luyện Đa Chính Sách Trong MuJoCo & Triển Khai ONNX / ESP-NN

Kho mã nguồn t-rax-multi-policy cung cấp môi trường bàn làm việc chuẩn 1.40 × 0.75m (vùng hoạt động của T-Rax 0.50 × 0.40m) với mô phỏng tiếp xúc dải xích liên tục bằng geom_surfacevel và 2 kiến trúc học tăng cường PPO:

  • Purposeful Behavior v2 (54D Flat Observation): Kết hợp bộ chọn kỹ năng phân cấp GoalManager → GoalSkillPolicy (5 chế độ: REST, INSPECT, TRACK, SOCIAL, EXPLORE) với mạng phần dư Residual PPO (5D Action: Δv_L, Δv_R, Δyaw, Δpitch, LED).
  • Desk Social RL v1 (71D Dict Observation): Huấn luyện MultiInputPolicy (Stable-Baselines3) với 5 nhánh cảm biến: proprio (17D), desk_safety (16D), social (18D), context (12D) và audio (8D).
  • Xuất ONNX & Lượng tử hóa int8 ESP-NN: Chạy ở tần số điều khiển 50Hz (n_substeps = 10, dt = 0.02s), sẵn sàng nhúng trực tiếp vào bộ nhớ Flash của ESP32-S3.
t-rax-multi-policy · Quickstart CLIMuJoCo 3.14 + PyTorch PPO
# 1. Tách lại 15 cụm mesh STL/OBJ và bảng động học 20 trạm mắt xích từ CAD gốc
python scripts/build_trax_meshes.py

# 2. Huấn luyện chính sách Purposeful Behavior v2 (54D observation, Residual PPO)
python scripts/train_purposeful.py --total-timesteps 1000000 --n-envs 8

# 3. Huấn luyện chính sách tương tác xã hội mặt bàn Desk Social RL v1 (71D Dict)
python scripts/train_desk_social_rl.py --config configs/desk_social_rl.yaml

# 4. Xuất mô hình sang ONNX tĩnh để lượng tử hóa int8 cho ESP32-S3 (ESP-NN)
python scripts/export_onnx.py --checkpoint checkpoints/purposeful_v2_best.zip --out trax_policy.onnx
NẠP FIRMWARE T-RAX XIAOZHI AI NGAY TRÊN TRÌNH DUYỆT
Kết nối cáp USB-C vào ESP32-S3 SuperMini và nạp bản build v1.0.0-xiaozhi chỉ với 1-click.