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).
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
WAKING UP T-RAX… · ĐÁNH THỨC DROID
Đang nạp 0% cụm mắt xích & khớp cổ 2-DOF…
Chọn hành vi & Chính sách AI
purposeful_obs_v2 (54D) · mode=[1,0,0,0,0]
self.trax.breathe2. 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 GPIO | Macro trong config.h | Thông số kỹ thuật |
|---|---|---|---|
| I2S0 Mic (INMP441) | GPIO 4 / 5 / 6 | AUDIO_I2S_MIC_GPIO_WS / SCK / DIN | 16kHz 32-bit Mono RX DMA · Thu giọng nói & Wake-word |
| I2S1 Amp (MAX98357A) | GPIO 7 / 15 / 16 | AUDIO_I2S_SPK_GPIO_DOUT / BCLK / LRCK | 24kHz 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_PIN | I2C0 Master 400kHz · Quét 20Hz, phanh khẩn cấp khi d < 150mm |
| Track Left (DRV8833 A) | GPIO 10 / GPIO 11 | TRAX_MOTOR_LEFT_IN1 / IN2 | LEDC Timer 0 (Ch 0, 1) · Điều khiển PWM dải xích trái |
| Track Right (DRV8833 B) | GPIO 12 / GPIO 13 | TRAX_MOTOR_RIGHT_IN1 / IN2 | LEDC Timer 0 (Ch 2, 3) · Điều khiển PWM dải xích phải |
| Motor Driver Enable | GPIO 21 | TRAX_MOTOR_SLEEP_PIN | HIGH = Active · LOW = Sleep tiết kiệm năng lượng khi IDLE |
| Neck Servo 2-DOF | GPIO 14 (Pan) / GPIO 17 (Tilt) | TRAX_SERVO_PAN_PIN / TRAX_SERVO_TILT_PIN | LEDC Timer 1 (50Hz, 500–2500µs) · Pan ±60° (Z), Tilt ±40° (X) |
| RGB Eye & Boot | GPIO 48 (LED) / GPIO 0 (BTN) | BUILTIN_LED_GPIO / BOOT_BUTTON_GPIO | RMT NeoPixel WS2812B chỉ thị cảm xúc & nút cấu hình Wi-Fi |
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:
// 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_;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àmBackEaseOutvà 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.
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.moveTham 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_atTham 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_emotionTham 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_headTham 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 / danceTham 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 / exploreTham 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_distanceTham 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_breathingTham 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ỉ.
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.
# 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