Giới thiệu dự án

Trong bối cảnh công nghiệp 4.0 và chuyển đổi số sản xuất, robot công nghiệp (Industrial Robots) đóng vai trò then chốt trong việc tối ưu hóa năng suất, nâng cao độ chính xác và thay thế con người tại các môi trường làm việc khắc nghiệt. Theo thống kê từ Liên đoàn Robot Quốc tế (IFR - International Federation of Robotics), mật độ lắp đặt robot trong các dây chuyền sản xuất toàn cầu tăng trưởng bình quân trên 11% mỗi năm. Tuy nhiên, các hệ thống tay máy công nghiệp chuyên dụng thường có giá thành từ vài nghìn đến hàng chục nghìn USD, đi kèm kiến trúc điều khiển khép kín, gây khó khăn cho việc tiếp cận nghiên cứu, thử nghiệm thuật toán động học và đào tạo kỹ thuật tại các trường đại học và doanh nghiệp vừa và nhỏ (SMEs).

Đồ án môn học "Điều khiển cánh tay robot" (Chuyên ngành Tự động hóa công nghiệp, Khoa Điện – Điện tử Viễn thông, Trường Đại học Giao thông Vận tải TP. Hồ Chí Minh) tập trung giải quyết bài toán cốt lõi: Thiết kế, tính toán giải tích và hiện thực hóa hệ thống điều khiển tay máy dạng xích động học hở nhiều bậc tự do (Degrees of Freedom - DOF) thông qua nền tảng phần cứng mã nguồn mở Arduino kết hợp phần mềm tính toán số MATLAB.

                    HỆ THỐNG ĐIỀU KHIỂN CÁNH TAY ROBOT
   +---------------------------------------------------------------+
   |                      MATLAB Control Host                      |
   |  - Giao diện GUI (Forward / Inverse Kinematics / Programming) |
   |  - Giải thuật Động học Thuận (FK) & Động học Ngược (IK)       |
   |  - Điều chế lệnh góc & Giao tiếp MATLAB Arduino Support Pkg   |
   +-------------------------------+-------------------------------+
                                   | USB Serial (COM8 / Baud 115200)
   +-------------------------------v-------------------------------+
   |                      Arduino UNO R3 / Nano                    |
   |  - Bộ vi điều khiển ATmega328P                                |
   |  - Arduino Shield mở rộng IO & Chân nguồn Servo               |
   |  - Bộ phát xung PWM điều khiển góc (500µs - 2500µs)           |
   +-------------------------------+-------------------------------+
                                   | Tín hiệu điều khiển PWM
   +-------------------------------v-------------------------------+
   |             Khung Cơ Khí & Hệ Chấp Hành (EEZYbotARM)           |
   |  - 4x Động cơ RC Servo SG90 (Base, Shoulder, Elbow, Gripper)  |
   |  - Khung in 3D nhựa PLA, cơ cấu thanh truyền song song        |
   +---------------------------------------------------------------+

Mục tiêu dự án

  1. Thiết lập mô hình toán học động học: Xây dựng bảng thông số Denavit – Hartenberg (D-H), ma trận chuyển đổi thuần nhất $T_n^0$, từ đó giải tích nghiệm tường minh cho bài toán động học thuận (Forward Kinematics) và động học ngược (Inverse Kinematics).
  2. Thiết kế và gia công phần cứng: Lắp ráp mô hình cơ khí dạng EEZYbotARM sử dụng công nghệ in 3D (nhựa Polylactic Acid - PLA), tích hợp hệ thống chấp hành gồm các động cơ RC Servo SG90 kết hợp vi điều khiển ATmega328P.
  3. Phát triển giao diện điều khiển (GUI): Xây dựng ứng dụng đồ họa trên MATLAB R2020b cho phép tương tác trực quan, điều khiển thủ công (Manual Jogging), chạy tọa độ Cartesian $(p_x, p_y, p_z)$ và lập trình quỹ đạo chuỗi điểm (Point-to-Point Trajectory).
  4. Hiệu chuẩn và tối ưu hóa hệ thống: Khắc phục sai số góc quay của động cơ servo thông qua tinh chỉnh độ rộng xung điều khiển ($500,\mu\text{s} - 2500,\mu\text{s}$) và bù trừ sai số cơ khí thực tế.

Phạm vi và giới hạn

  • Phạm vi: Cánh tay robot 3 bậc tự do định vị không gian 3 chiều kèm 1 bậc tự do cho khâu chấp hành cuối (bàn kẹp/gripper).
  • Giới hạn: Hệ thống sử dụng động cơ RC servo micro không có phản hồi encoder vòng kín (Open-loop control), tải trọng nâng tối đa $50\text{g}$, tầm với bán kính công tác từ $100\text{mm}$ đến $220\text{mm}$.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trong lĩnh vực nghiên cứu và triển khai robot arm quy mô nhỏ, các phương pháp tiếp cận hiện hành phân bổ theo ba nhóm chính:

Giải pháp hiện có Ưu điểm Nhược điểm Đánh giá mức độ phù hợp
PLC + Robot Công nghiệp (ABB, KUKA) Độ chính xác cao ($<0.02\text{mm}$), công suất lớn, độ bền công nghiệp. Chi phí đầu tư cực lớn ($>10,000\text{ USD}$), giao thức đóng, khó tùy biến thuật toán toán học. Không khả thi cho nghiên cứu học thuật cơ bản và thử nghiệm nhanh.
Nhúng thuần C/C++ trên STM32/ESP32 Tốc độ xử lý realtime, chi phí thấp, hoạt động độc lập không cần PC. Giao diện hiển thị trực quan hạn chế, phức tạp khi tính toán đại số ma trận nghịch đảo và vẽ đồ thị 3D. Tốt cho sản phẩm thương mại nhưng tốn thời gian xây dựng GUI.
MATLAB Host + Arduino Bridge (Giải pháp chọn) Tính toán đại số tuyến tính cực nhanh, hỗ trợ GUI toàn diện, gỡ lỗi trực tiếp theo thời gian thực. Phụ thuộc vào kết nối máy tính qua cổng Serial, độ trễ truyền thông phụ thuộc USB host. Tối ưu nhất cho nghiên cứu, kiểm chứng mô hình giải tích và giáo dục.

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc): Tính toán chính xác ma trận động học thuận và ngược; truyền thông Serial tin cậy giữa MATLAB và Arduino; điều khiển độc lập 3 góc khớp $\theta_1, \theta_2, \theta_3$; nút Home định vị an toàn.
  • Should have (Nên có): Chức năng nạp kịch bản chuyển động chuỗi điểm từ file cấu hình; hiệu chuẩn độ rộng xung PWM để tăng góc quay hữu ích từ $0^\circ$ đến $180^\circ$.
  • Could have (Có thể có): Giám sát tọa độ thời gian thực dạng đồ họa 3D; thuật toán nội suy quỹ đạo mượt mà (Linear/Spline Interpolation).
  • Won't have (Chưa thực hiện): Điều khiển lực kẹp thông minh qua cảm biến xúc giác; xử lý ảnh nhận diện vật thể bằng Camera/OpenCV.

Thiết kế hệ thống và Kiến trúc phần cứng

Hệ thống sử dụng vi điều khiển Microchip ATmega328P (Arduino UNO R3) làm bộ giải mã trung gian và phát xung điều rộng (Pulse Width Modulation - PWM). Khối giao tiếp máy tính chạy trên nền tảng MATLAB Toolbox for Arduino Hardware Support, sử dụng đối tượng servo để ghi tín hiệu trực tiếp xuống chân Digital I/O.

+-------------------------------------------------------------------------+
|                              MATLAB HOST GUI                            |
|  [Forward Kinematics]   [Inverse Kinematics]   [Path Program Generator] |
|           |                       |                        |            |
|           +-----------------------+------------------------+            |
|                                   |                                     |
|                       writePosition(dc_i, angle)                        |
+-----------------------------------+-------------------------------------+
                                    | USB UART (COM Port / 8N1)
+-----------------------------------v-------------------------------------+
|                         ARDUINO UNO R3 MCU BOARD                        |
|  - Pin D4: Base Servo (Theta 1)      -> PWM: 500µs - 2500µs (50Hz)     |
|  - Pin D5: Shoulder Servo (Theta 2)  -> PWM: 500µs - 2500µs (50Hz)     |
|  - Pin D6: Elbow Servo (Theta 3)     -> PWM: 500µs - 2500µs (50Hz)     |
|  - Pin D7: Gripper Servo (Theta 4)   -> PWM: 500µs - 2500µs (50Hz)     |
+-----------------------------------+-------------------------------------+
                                    | Cấp nguồn Servo độc lập 5VDC / 2A
+-----------------------------------v-------------------------------------+
|                            CƠ CẤU CHẤP HÀNH                             |
|  - 4x Micro Servo SG90 (9g, Torque: 1.8kg.cm, Vận tốc: 0.1s/60deg)      |
|  - Tay đòn cơ khí in 3D PLA (d1=70mm, d2=80mm, d3=80mm, d5=60mm)        |
+-------------------------------------------------------------------------+

Phương pháp nghiên cứu và Lập lịch trình

Dự án áp dụng phương pháp nghiên cứu kết hợp giữa mô hình hóa lý thuyết (Modeling & Simulation) và thực nghiệm kiểm chứng (Prototyping & Testing) theo tiến trình 8 tuần:

  • Tuần 1–2: Nghiên cứu lý thuyết động học nhiều vật rắn, thiết lập hệ trục tọa độ theo quy tắc bàn tay phải, lập bảng tham số D-H.
  • Tuần 3–4: Giải tích toán học hệ phương trình vi phân/đại số thuần nhất; lập trình thuật toán trên MATLAB Script; gia công in 3D khung EEZYbotARM.
  • Tuần 5–6: Lắp ráp cơ khí, đấu nối mạch mở rộng Arduino Nano/Uno Shield, đo kiểm xung servo và hiệu chuẩn dải xung PWM.
  • Tuần 7–8: Thiết kế giao diện MATLAB GUI, tích hợp giải thuật FK/IK với phần cứng, đánh giá sai số vị trí và nghiệm thu.

Implementation và kết quả

Thiết lập Mô hình Động học theo Denavit – Hartenberg (D-H)

Quy ước 4 thông số D-H cho từng khâu $i$:

  • $a_i$: Chiều dài pháp tuyến chung giữa trục $z_{i-1}$ và $z_i$.
  • $\alpha_i$: Góc xoay quanh trục $x_i$ từ $z_{i-1}$ đến $z_i$.
  • $d_i$: Khoảng cách dọc theo trục $z_{i-1}$ từ $x_{i-1}$ đến $x_i$.
  • $\theta_i$: Góc xoay quanh trục $z_{i-1}$ từ $x_{i-1}$ đến $x_i$ (biến khớp quay).

Ma trận biến đổi tổng quát giữa hai hệ trục tọa độ liền kề $A_i$: $$A_i = \begin{bmatrix} \cos\theta_i & -\sin\theta_i\cos\alpha_i & \sin\theta_i\sin\alpha_i & a_i\cos\theta_i \ \sin\theta_i & \cos\theta_i\cos\alpha_i & -\cos\theta_i\sin\alpha_i & a_i\sin\theta_i \ 0 & \sin\alpha_i & \cos\alpha_i & d_i \ 0 & 0 & 0 & 1 \end{bmatrix}$$

Bảng thông số D-H của hệ thống

Khâu ($i$) $a_i,(\text{mm})$ $\alpha_i,(^\circ)$ $d_i,(\text{mm})$ $\theta_i,(^\circ)$
1 0 $90^\circ$ $d_1 = 70$ $\theta_1$ (Biến khớp)
2 $d_2 = 80$ $0^\circ$ 0 $\theta_2$ (Biến khớp)
3 $d_3 = 80$ $0^\circ$ 0 $\theta_3$ (Biến khớp)

Ma trận chuyển đổi tổng thể từ khâu gốc (Base) đến điểm tác động cuối $T_3^0 = A_1 A_2 A_3$: $$T_3^0 = \begin{bmatrix} C_1 C_{23} & -C_1 S_{23} & S_1 & C_1(d_3 C_{23} + d_2 C_2) \ S_1 C_{23} & -S_1 S_{23} & -C_1 & S_1(d_3 C_{23} + d_2 C_2) \ S_{23} & C_{23} & 0 & d_3 S_{23} + d_2 S_2 + d_1 \ 0 & 0 & 0 & 1 \end{bmatrix}$$ (Trong đó: $C_i = \cos\theta_i$, $S_i = \sin\theta_i$, $C_{23} = \cos(\theta_2+\theta_3)$, $S_{23} = \sin(\theta_2+\theta_3)$)

Bổ sung độ dịch khâu chấp hành cuối thực tế: $d_4 = 20,\text{mm}$ (độ cao bàn kẹp), $d_5 = 60,\text{mm}$ (chiều dài đầu kẹp).

Hiện thực hóa giải thuật trên MATLAB

1. Động học thuận (Forward Kinematics)

Hàm nhận giá trị góc khớp $(\theta_1, \theta_2, \theta_3)$ theo độ, chuyển đổi sang Radian và tính toán tọa độ đầu công tác $P = [p_x, p_y, p_z]^T$:

function [px, py, pz] = ForwardKinematic(theta1, theta2, theta3)
    % Thiet lap cac kich thuoc hinh hoc (don vi: mm)
    global d1 d2 d3 d4 d5;
    d1 = 70; d2 = 80; d3 = 80; d4 = 20; d5 = 60;
    
    % Chuyen doi don vi Do sang Radian
    t1 = theta1 * pi / 180;
    t2 = theta2 * pi / 180;
    t3 = theta3 * pi / 180;
    
    % Phuong trinh toa do khau chap hanh cuoi kem bu tru offset thuc te
    px = round(d3 * cos(t1) * cos(t2 + t3) + d2 * cos(t1) * cos(t2), 0) + d5;
    py = round(d3 * sin(t1) * cos(t2 + t3) + d2 * sin(t1) * cos(t2), 0);
    pz = round(d3 * sin(t2 + t3) + d2 * sin(t2) + d1, 0) - d4;
end

2. Động học ngược (Inverse Kinematics)

Phương pháp hình học kết hợp giải tích lượng giác giải nghiệm tường minh: $$\theta_1 = \text{arctan2}(p_y, p_x - d_5)$$ $$\theta_3 = \arccos\left( \frac{(p_x')^2 + (p_y)^2 + (p_z' - d_1)^2 - d_2^2 - d_3^2}{2 d_2 d_3} \right)$$ $$\theta_2 = \text{arctan2}(p_z' - d_1, \sqrt{(p_x')^2 + p_y^2}) - \text{arctan2}(d_3 \sin\theta_3, d_2 + d_3 \cos\theta_3)$$

function [theta1, theta2, theta3] = InverseKinematic(px, py, pz)
    global d1 d2 d3 d4 d5;
    d1 = 70; d2 = 80; d3 = 80; d4 = 20; d5 = 60;
    
    % Chuan hoa toa do ve he truc tinh toan don gian
    px_calc = px - d5;
    pz_calc = pz + d4;
    
    % Tinh goc quay khau 1 (Base joint)
    theta1 = atan2(py, px_calc);
    
    % Tinh toan khong gian phang r-z cho khau 2 va 3
    r = sqrt(px_calc^2 + py^2);
    z_diff = pz_calc - d1;
    D = (r^2 + z_diff^2 - d2^2 - d3^2) / (2 * d2 * d3);
    
    % Kiem tra dieu kien ton tai nghiem vat ly
    if abs(D) > 1
        error('Toa do vuot qua khong gian lam viec (Workspace Limit)!');
    end
    
    % Nghiem goc khau 3 (Elbow) va khau 2 (Shoulder)
    theta3 = -acos(D); % Chon cau hinh Elbow-Up
    theta2 = atan2(z_diff, r) - atan2(d3 * sin(theta3), d2 + d3 * cos(theta3));
    
    % Chuyen doi sang Do de dieu khien Servo
    theta1 = round(theta1 * 180 / pi);
    theta2 = round(theta2 * 180 / pi);
    theta3 = round(theta3 * 180 / pi);
end

3. Điều khiển Servo và Hiệu chuẩn độ rộng xung PWM

Mặc định thư viện Servo quy định xung từ $1000,\mu\text{s}$ đến $2000,\mu\text{s}$, điều này khiến các dòng servo SG90 giá rẻ chỉ quay được góc hẹp $\approx 120^\circ$. Đồ án đã cấu hình lại giá trị xung cực đại và cực tiểu trong driver MATLAB:

% Khoi tao ket noi Arduino UNO tren cong COM8
a = arduino('COM8', 'Uno', 'Libraries', 'Servo');

% Cau hinh xung mo rong tu 500us den 2500us de mo rong goc quay 0 - 180 do
dc1 = servo(a, 'D4', 'MinPulseDuration', 500e-6, 'MaxPulseDuration', 2500e-6);
dc2 = servo(a, 'D5', 'MinPulseDuration', 500e-6, 'MaxPulseDuration', 2500e-6);
dc3 = servo(a, 'D6', 'MinPulseDuration', 500e-6, 'MaxPulseDuration', 2500e-6);
dc4 = servo(a, 'D7', 'MinPulseDuration', 500e-6, 'MaxPulseDuration', 2500e-6);

% Chuyen doi he toa do toan hoc sang goc quay truc dong co vat ly
% writePosition nhan gia tri normalized tu 0.0 den 1.0 (tuong ung 0 - 180 do)
writePosition(dc1, (theta1 + 90) / 180);
writePosition(dc2, (180 - theta2) / 180);
writePosition(dc3, (180 + theta3) / 180);

Kết quả đo kiểm và Thực nghiệm

                             KHÔNG GIAN LÀM VIỆC CỦA ROBOT
                       Z (mm)
                         ^
                     200 |           .---.  (Vùng với tới tối đa)
                         |         /       \
                     100 |        |  Workspace |
                         |         \       /
                       0 +----------'---'---------> R = sqrt(X^2 + Y^2) (mm)
                         0         100    200
  • Giới hạn góc khớp an toàn:
    • Khớp 1: $-90^\circ \le \theta_1 \le +90^\circ$ (Dải hoạt động $180^\circ$).
    • Khớp 2: $+50^\circ \le \theta_2 \le +130^\circ$ (Tránh va đập cơ khí thân sau).
    • Khớp 3: $-120^\circ \le \theta_3 \le -7^\circ$ (Cấu hình nâng hạ cánh tay đòn).
  • Độ chính xác vị trí lặp lại (Repeatability): $\pm 2.5,\text{mm}$ (chủ yếu do độ rơ của nhông nhựa servo SG90).
  • Thời gian tính toán thuật toán: Trung bình $< 1.2,\text{ms}$ trên MATLAB cho mỗi điểm giải ngược IK, đảm bảo phản hồi tức thời cho giao diện điều khiển.

Đổi mới và đóng góp

  1. Hiệu chỉnh dải xung điều khiển mở rộng (500µs – 2500µs): Khắc phục triệt để hạn chế góc quay của các nghiên cứu sinh viên trước đây vốn dùng dải mặc định $1000,\mu\text{s} - 2000,\mu\text{s}$ (bị giới hạn góc $\sim 120^\circ$), nâng dải quay thực tế lên $180^\circ$ toàn phần trên cả 3 khớp.
  2. Chuẩn hóa bù trừ sai số cơ cấu thanh truyền: Xây dựng mô hình toán tích hợp trực tiếp tham số khoảng cách dịch chuyển $d_4, d_5$ vào hàm động học, loại bỏ thao tác hiệu chỉnh thủ công sau tính toán.
  3. Kiến trúc Host-Target không cần nạp lại Firmware: Tận dụng gói giao tiếp MATLAB-Arduino I/O Server, cho phép thay đổi cấu hình, giải thuật động học và kiểm tra mã lệnh tức thời mà không cần biên dịch lại mã nguồn C++ trên vi điều khiển.
Tiêu chí Mô hình DIY Arduino cơ bản Kit thí nghiệm thương mại Giải pháp của đồ án
Chi phí hoàn thiện $30 - 45\text{ USD}$ $800 - 1500\text{ USD}$ $\approx \mathbf{35\text{ USD}}$
Giao diện điều khiển Serial Monitor (Ký tự thô) Phần mềm độc quyền chuyên dụng MATLAB GUI trực quan
Khả năng tùy biến giải thuật Thấp (Hard-coded trên MCU) Rất thấp (Black-box API) Rất cao (Full mã nguồn MATLAB)
Thời gian triển khai mẫu thử 3 - 4 tuần Có sẵn 1 tuần

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng

  • Đào tạo và Giáo dục Kỹ thuật: Giảng dạy trực quan các môn học Robot công nghiệp, Động học và Động lực học máy móc, Hệ thống điều khiển số tại các trường đại học, cao đẳng.
  • Tự động hóa phòng thí nghiệm (Lab Automation): Thực hiện các tác vụ gắp mẫu, chuyển ống nghiệm, phân loại linh kiện nhỏ có khối lượng dưới $50\text{g}$ theo chu trình định sẵn.
  • Mô phỏng tiền khả thi (Proof of Concept - PoC): Giúp kỹ sư kiểm thử các quỹ đạo phức tạp trước khi nạp vào tay máy công nghiệp 6-DOF công suất lớn.

Bảng phân tích chi phí phần cứng (BOM - Bill of Materials)

  • Bo mạch vi điều khiển Arduino UNO R3 / Nano: $6.00\text{ USD}$
  • Board mở rộng Arduino Nano/Uno Sensor Shield: $2.50\text{ USD}$
  • 4x Động cơ RC Micro Servo SG90: $8.00\text{ USD}$
  • Bộ khung in 3D nhựa PLA (vật liệu + gia công): $12.00\text{ USD}$
  • Nguồn tổ ong / Adapter 5V - 3A & Dây nối Dupont: $6.50\text{ USD}$
  • Tổng chi phí phần cứng: $\mathbf{\approx 35.00\text{ USD}}$

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  1. Hiện tượng suy biến góc trong bài toán ngược (Singularity / Quadrant Ambiguity): Khi cánh tay ngửa hết cỡ về phía sau qua trục $z_0$, tọa độ $p_y$ đổi dấu nhưng hàm $\text{arctan2}$ vẫn gán góc theo quy ước góc phần tư mặc định, dẫn đến tính sai cấu hình nghiệm thực tế.
  2. Hệ thống điều khiển vòng hở (Open-loop): Động cơ servo SG90 sử dụng chiết áp nội bộ chất lượng trung bình, không có encoder tuyệt đối phản hồi về MATLAB, dẫn đến hiện tượng trôi vị trí (drift) khi chạy liên tục thời gian dài.
  3. Độ cứng vững cơ khí: Khung in 3D bằng sợi PLA có độ đàn hồi cơ học nhất định, tạo độ võng tại khâu chấp hành cuối khi vươn xa tối đa ($>180\text{mm}$).

Hướng phát triển

  • Nâng cấp phần cứng chấp hành: Thay thế SG90 bằng dòng servo nhông kim loại (MG90S hoặc MG996R) hoặc động cơ bước kèm encoder từ tính AS5600 để chuyển sang điều khiển vòng kín (Closed-loop PID Control).
  • Xử lý kỳ dị động học: Tích hợp thuật toán nghịch đảo ma trận Jacobian kèm hệ số cản suy biến (Damped Least Squares - DLS) để kiểm soát điểm kỳ dị.
  • Tích hợp Computer Vision: Bổ sung Camera nhận diện vật thể thông qua MATLAB Image Processing Toolbox để thực hiện bài toán gắp đặt tự động (Visual Servoing).

Đối tượng hưởng lợi

  • Sinh viên ngành Tự động hóa / Cơ điện tử: Tiếp cận tài liệu chuẩn mực về phương pháp lập bảng D-H, công thức giải ma trận thuần nhất và cách kết nối MATLAB với phần cứng nhúng thực tế.
  • Kỹ sư phát triển hệ thống nhúng: Tham khảo cấu trúc chương trình điều khiển góc servo chính xác thông qua hiệu chỉnh tham số độ rộng xung PWM.
  • Các cơ sở đào tạo giáo dục STEM: Bộ giáo cụ chi phí thấp ($<40\text{ USD}$) để đưa vào chương trình giảng dạy thực hành robotics và lập trình tự động hóa.

Câu hỏi thường gặp

1. Yêu cầu hệ thống máy tính để chạy phần mềm điều khiển MATLAB là gì?

Cần máy tính cài đặt hệ điều hành Windows 10/11 hoặc Linux, phần mềm MATLAB R2018b trở lên (khuyến nghị R2020b/R2021a), đã cài sẵn package MATLAB Support Package for Arduino Hardware. Cổng kết nối USB Type-A hoặc Type-C hỗ trợ chuẩn giao tiếp UART/Serial.

2. Tại sao cần cấp nguồn 5V riêng cho động cơ Servo thay vì dùng chân 5V của Arduino?

Động cơ servo khi khởi động hoặc gắp tải có thể rút dòng đỉnh (Peak Current) lên tới $500\text{mA} - 1\text{A}$ mỗi động cơ. Chân 5V trên mạch Arduino lấy từ bộ ổn áp tuyến tính tích hợp (chỉ cấp tối đa $\approx 500\text{mA}$), nếu dùng chung sẽ gây sụt áp, làm vi điều khiển ATmega328P bị reset liên tục (Brown-out Reset).

3. Làm thế nào để giải quyết trường hợp sai nghiệm động học ngược khi robot ngửa ra sau?

Cần bổ sung một lớp logic kiểm tra điều kiện hình học (Geometric Constraints Checker) trong code MATLAB trước khi gọi hàm $\text{arctan2}$, dựa trên trạng thái góc khớp hiện tại của khâu 2 và khâu 3 để xác định đúng góc phần tư không gian của $\theta_1$.

4. Động cơ SG90 có thể nâng được vật thể có khối lượng tối đa bao nhiêu?

Với cánh tay đòn dài $L = d_2 + d_3 = 160,\text{mm}$ và momen xoắn định mức của SG90 là $1.8,\text{kg}\cdot\text{cm}$ ($0.176,\text{N}\cdot\text{m}$), tải trọng nâng lý thuyết cực đại tại đầu mút khi duỗi thẳng hoàn toàn là $m_{\max} \approx \frac{1.8}{16} \approx 0.112,\text{kg} = 112,\text{g}$. Tính đến tự trọng của khung nhựa PLA, tải trọng hữu ích an toàn khuyến nghị là $\le 50,\text{g}$.

5. Có thể chuyển mã nguồn điều khiển sang ngôn ngữ Python được không?

Hoàn toàn khả thi. Bạn có thể sử dụng thư viện pyserial để gửi góc quay trực tiếp xuống Arduino, kết hợp thư viện numpysympy để giải ma trận động học, và thư viện PyQt5 hoặc Tkinter để xây dựng giao diện GUI tương đương MATLAB.


Kết luận

Đồ án "Điều khiển cánh tay robot" đã hoàn thành toàn diện các mục tiêu đặt ra: từ việc chuẩn hóa lý thuyết động học nhiều vật rắn Denavit – Hartenberg, xây dựng bộ công cụ tính toán giải tích tường minh cho bài toán động học thuận và ngược, đến hiện thực hóa thành công mô hình phần cứng điều khiển 4 trục servo chi phí tối ưu. Sự kết hợp giữa năng lực tính toán ma trận của MATLAB và khả năng điều khiển I/O phần cứng của Arduino đã tạo nên một nền tảng thực nghiệm robotics trực quan, linh hoạt và có tính ứng dụng giáo dục kỹ thuật cao.