TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ CẦN THƠ KHOA KỸ THUẬT CƠ KHÍ TIỂU LUẬN TỐT NGHIỆP ĐỀ TÀI CHẾ TẠO XE HAI BÁNH TỰ CÂN BẰNG CÁN BỘ HƯỚNG DẪN ThS Đường Khánh Sơn NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Cầ.
TRƯỜNG ĐẠI HỌC KỸ THUẬT - CÔNG NGHỆ CẦN THƠ KHOA KỸ THUẬT CƠ KHÍ TIỂU LUẬN TỐT NGHIỆP ĐỀ TÀI : CHẾ TẠO XE HAI BÁNH TỰ CÂN BẰNG CÁN BỘ HƯỚNG DẪN ThS Đường Khánh Sơn NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Cần Thơ, ngày … tháng … năm 2020 Ths Đường Khánh Sơn NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN Cần Thơ, ngày … tháng … năm 2020 LỜI CAM ĐOAN LỜI CAM ĐOAN Em xin cam đoan cơng trình nghiên cứu thực cá nhân em hỗ trợ, hướng dẫn thầy Đường Khánh Sơn Các số liệu, kết thu thân trực dõi, thu thập với thái độ hoàn toàn khách quan trung thực, tài liệu trích dẫn tác giả liệt kê đầy đủ, không chép tài liệu mà khơng có trích dẫn Nếu có điều khơng theo lời cam đoan em xin chịu hoàn toàn trách nhiệm Sinh viên thực Võ Trường Toản SVTH: Võ Trường Toản Trang I LỜI CẢM ƠN LỜI CẢM ƠN Em xin chân thành cảm ơn đến quý Thầy Cô trường Đại học Kỹ thuật – Công nghệ Cần Thơ với Thầy Cơ khoa Kỹ Thuật Cơ Khí tận tình giúp đỡ tạo điều kiện cho em suốt q trình học tập trường, để em hoàn thành đề tài tốt nghiệp Đặt biệt, em muốn gửi lời cảm ơn sâu sắc đến giảng viên hướng dẫn Thầy Đường Khánh Sơn, thầy tận tình giảng dạy hướng dẫn, tạo điều kiện tốt cho em suốt trình thực tiểu luận Tôi xin gửi lời cảm ơn đến tất bạn hỗ trợ giúp đỡ chia kiến thức, kinh nghiệm giúp đỡ suốt trình thực đề tài Mặc dù cố gắng hồn thành đề tài thời gian có hạn kinh nghiệm kiến thức thực tiễn chưa nhiều nên khó tránh khỏi thiếu sót Rất mong nhận đóng góp ý kiến quý Thầy Cơ để em tiếp thu hồn thiện đề tài Em xin chân thành cảm ơn! SVTH: Võ Trường Toản Trang II TÓM TẮT TIỂU LUẬN TÓM TẮT TIỂU LUẬN Tiểu luận trình bày phương pháp, trình thiết kế chế tạo xe hai bánh tự cân di chuyển địa hình phẳng, sử dụng Arduino kết nối với Smartphone để điều khiển xe Đề tài tiểu luận chia làm chương: Chương 1: TỔNG QUAN Chương 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU Chương 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Chương 1: Sơ lượt số đề tài có, đánh giá rút kinh nghiệm, đưa phương án thiết kế riêng cho đề tài “Chế tạo xe hai bánh tự cân bằng” Chương 2: Mơ hình hóa, thiết kế khí, thiết kế mạch điều khiển, thiết kế điều khiển ứng dụng điều khiển qua điện thoại Chương 3: Kết nghiên cứu đạt với hạn chế đề tài, từ đưa hướng phát triển cho đề tài SVTH: Võ Trường Toản Trang III BẢNG KÝ HIỆU, CHỮ VIẾT TẮT BẢNG KÝ HIỆU, CHỮ VIẾT TẮT Ý nghĩa Chữ viết tắt ADC I2C MOSFET PIC Chuyển đổi kỹ thuật số (Analog to Digital Conversion) Inter – Integrated Circuit Là Transitor hiệu ứng trường Programmable Intelligent Computer DMP Digital Motion Processcer (Bộ xử lý chuyển động kỹ thuật số) MPU Motion Processing Unit BJT Bipolar Junction Transistor Transistor Một loại linh kiện bán dẫn chủ động PID Proportional Integarl Derivative GND GND nghĩa nối đất (chân 0V) IC Integrated circuit I/O Input/Output PWM Pulse Width Modulation (Điều chế độ rộng xung) IMU Inertial Measurenent Unit (Đơn vị đo lường quán tính) RPM Revolutions per minute (Số vòng quay phút) SVTH: Võ Trường Toản Trang i MỤC LỤC MỤC LỤC LỜI CAM ĐOAN I LỜI CẢM ƠN II TÓM TẮT TIỂU LUẬN III BẢNG KÝ HIỆU, CHỮ VIẾT TẮT i MỤC LỤC ii PHỤ LỤC HÌNH iv MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN 1.1 Lý mục đích chọn đề tài 1.1.1 Lý chọn đề tài 1.1.2 Đối tượng nghiên cứu 1.1.3 Mục tiêu nghiên cứu 1.1.4 Phạm vi nghiên cứu 1.1.5 Phương pháp nghiên cứu 1.2 Tổng quan đề tài nghiên cứu 1.2.1 Giới thiệu sơ lược mơ hình xe hai bánh tự cân 1.2.2 Một số ứng dụng mơ hình xe hai bánh tự cân 1.2.3 Các đề tài xe hai bánh tự cân nước 1.2.4 Các đề tài xe hai bánh tự cân nước 1.2.5 Hướng nghiên cứu cho đề tài CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU .9 2.1 Mô hình hóa hệ thống xe hai bánh tự cân 2.2 Thiết kế mô hình xe hai bánh tự cân 14 2.2.1 Bản vẽ chi tiết mô hình xe hai bánh xe tự cân 14 2.2.2 Thiết kế phần cứng cho mơ hình 23 2.2.3 Thiết kế mạch điều khiển 24 2.2.4 Các linh kiện mơ hình 27 2.2.5 Nguồn Pin 3s 28 SVTH: Võ Trường Toản Trang ii MỤC LỤC 2.2.6 Arduino mega 2560 28 2.2.7 Module L298N 32 2.2.8 Động NF5475 bánh xe 34 2.2.9 Cảm biến quay hồi chuyển cảm biến gia tốc góc 35 2.2.10 Module Bluetooth HC-05 38 2.2.11 Mơ hình thực tế 39 2.3 Thiết kế điều khiển 39 2.3.1 Lý thuyết điều khiển PID 39 2.3.2 Phần mềm điều khiển 43 2.3.3 Lập trình Arduino 46 2.3.4 Đọc xử lý tín hiệu cảm biến MPU6050 48 2.3.5 Mô điều khiển PID động 51 CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 52 3.1 Kết nghiên cứu đạt 52 3.2 Kết chưa đạt 57 3.3 Hướng phát triển 57 PHỤ LỤC 58 TÀI LIỆU THAM KHẢO 66 SVTH: Võ Trường Toản Trang iii PHỤ LỤC HÌNH PHỤ LỤC HÌNH Hình 1.1 Mơ hình xe hai bánh tự cân Hình 1.2 Mơ hình xe hai bánh tự cân sinh viên .5 Hình 1.3 Mơ hình LegWay Hình 1.4 Mơ hình Winglet Hình 1.5 Mơ hình MiP Hình 1.6 Mơ hình TiltOne .8 Hình 2.1 Mơ tả hệ thống xe hai bánh cân Hình 2.2 Mơ hình xe hai bánh tự cân hệ Oxz .9 Hình 2.3 Mơ hình xe hai bánh tự cân hệ Oxy .9 Hình 2.4 Bản vẽ mơ hình xe hai bánh tự cân .14 Hình 2.5 Tầng 23 Hình 2.6 Tầng 24 Hình 2.7 Tầng 24 Hình 2.8 Sơ đồ khối hệ thống .25 Hình 2.9 Sơ đồ hệ thống 25 Hình 2.10 Sơ đồ đấu nối L298N với động Arduino mega 2560 .26 Hình 2.11 Sơ đồ đấu nối MPU6050 với Arduino mega 2560 27 Hình 2.12 Sơ đồ đấu nối module Bluetooth HC – 05 với Arduino Mega 2560 27 Hình 2.13 Pin lipo 3s 2200 mAh 28 Hình 2.14 Arduino mega 2560 29 Hình 2.15 Mạch điều khiển máy in 3D RAMPS 1.4 30 Hình 2.16 Mạch Arduino Shield Mega Poto 31 Hình 2.17 Arduino mở rộng với IoT 31 Hình 2.18 Màn hình làm việc phần mềm Arduino IDE 1.8.12 31 Hình 2.19 Module L298 32 Hình 2.20 Sơ đồ nguyên lý mạch cầu H .33 Hình 2.21 Các chân tín hiệu Mạch cầu H .34 Hình 2.22 Động NF5475 bánh xe .34 Hình 2.23 Bản vẽ động NF5475 34 Hình 2.24 Cảm biến MPU6050 35 Hình 2.25 Sơ đồ chân cảm biến MPU6050 35 Hình 2.26 Cảm biến MPU6050 giao tiếp I2C với Arduino Nano 37 Hình 2.27 Module Bluetooth HC-05 38 Hình 2.28 Mơ hình thực tế 39 Hình 2.29 Sơ đồ khối điều khiển PID 39 Hình 2.30 Phần mềm Bluetooth MIT APP INVENTOR Android 43 Hình 2.31 Thiết kế giao diện ứng dụng điều khiển .44 SVTH: Võ Trường Toản Trang iv CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 3.1 Kết nghiên cứu đạt Chế tạo hồn chỉnh mơ hình robot xe hai bánh tự cân Thiết kế hoàn chỉnh ứng dụng Android phần mềm MIT App inventor Áp dụng thuật toán điều khiển PID vào robot Kết thực nghiệm: Hình 3.1 Bộ điều khiển PID thứ (Kp = 25; Kd = 1.5; Ki = 120) Đây điều khiển đáp ứng ổn định cách hiệu chỉnh tay Nhận xét: - Với điều khiển thứ xe dao động bị trôi khỏi vị trí đặt - Khi chịu tác động xe đáp ứng chậm - Chỉ di chuyển địa hình phẳng - Bộ điều khiển có biên độ dao động đến rad - Sai số 0,99 - 1,02% so với giá trị đặt SVTH: Võ Trường Toản Trang 52 CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Hình 3.2 Bộ điều khiển PID thứ (Kp = 21; Kd = 2.2; Ki = 150) Do điều khiển PID thứ chưa ổn định nên cách hiệu chỉnh tay em có điều khiển thứ đáp ứng nhanh lại không ổn định Nhận xét: - Bộ điều khiển thứ đáp ứng nhanh dao động nhiều - Khi chịu tác động xe cân - Chỉ di chuyển địa hình phẳng - Bộ điều khiển có biên độ dao động đến rad - Sai số 0,97 -1,03% so với giá trị đặt SVTH: Võ Trường Toản Trang 53 CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Hình 3.3 Bộ điều khiển PID thứ (Kp = 30; Kd = 1.75; Ki = 140) Bộ điều khiển thứ điều khiển đáp ứng tốt so với điều điều khiển trước Nhận xét: - Bộ điều khiển ổn định - Đáp ứng tốt hệ thống giúp xe cân bị trơi - Chỉ di chuyển địa hình phẳng - Biên độ dao động tương đối - Khi bị tác động xe đáp ứng nhanh - Bộ điều khiển có biên độ dao động đến rad - Sai số 0,99 -1% so với giá trị đặt SVTH: Võ Trường Toản Trang 54 CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Thử nghiệm với trường hợp có tải hộp dựng ốc vít: Hình 3.4 Hình ảnh thực tế xe có tải (hộp đựng ốc vít) Hình 3.5 Trường hợp xe cân có tải (hộp đựng ốc vít) Nhận xét: - Biên độ giao động tương đối - Xe cân chỗ, chưa thể di chuyển - Khi chịu tác động xe thời gian cân trở lại vị trí đặt lâu - Bộ điều khiển có biên độ dao động đến rad - Sai số 0,98 -1,02% so với giá trị đặt SVTH: Võ Trường Toản Trang 55 CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Thử nghiệm với trường hợp có tải chai nước Hình 3.6 Hình ảnh thực tế xe có tải (chai nước) Hình 3.7 Trường hợp xe cân có tải (chai nước) Nhận xét: - Biên độ giao động cao - Xe cân chỗ, chưa thể di chuyển - Bộ điều khiển có biên độ dao động đến rad - Sai số 0,96 -1,04% so với giá trị đặt SVTH: Võ Trường Toản Trang 56 CHƯƠNG 3: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Thử nghiệm với địa hình gồ ghề: Hình 3.8 Trường hợp xe địa hình gồ ghề Nhận xét: - Xe cân chỗ, chưa thể di chuyển - Bộ điều khiển có biên độ dao động 174 đến 188 - Sai số 0,97 -1,04% so với giá trị đặt 3.2 Kết chưa đạt Mơ hình cịn bị trôi nhẹ xe chưa cân đối Kết điều khiển chưa ổn định di chuyển Do điều khiển chưa thể tự điều chỉnh nên chưa di chuyển môi trường dốc môi trường khác 3.3 Hướng phát triển Thiết kế điều khiển PID tự chỉnh LQR, LQG, Fuzzy,… Sử dụng camera để quan sát hướng di chuyển chở vật Di chuyển nhiều địa hình SVTH: Võ Trường Toản Trang 57 PHỤ LỤC PHỤ LỤC #include "I2Cdev.h" #include #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #include //kiểm sốt MPU tình trạng có bool dmpReady = false; // đặt true init DMP thành công uint8_t mpuIntStatus; // giữ byte trạng thái ngắt thực tế từ MPU // trạng thái trả sau thao tác thiết bị (0 = thành uint8_t devStatus; công,! = lỗi) uint16_t packetSize; // kích thước gói DMP dự kiến (mặc định 42 byte) uint16_t fifoCount; // count tất byte FIFO uint8_t fifoBuffer[64]; // Bộ đệm lưu trữ FIFO // định hướng / chuyển động Quaternion q; // [w, x, y, z] vùng chứa thứ ba // [x, y, z] vector trọng lực VectorFloat gravity; float ypr[3]; // [yaw, pitch, roll] yaw / pitch / roll container vector trọng lực //Điều chỉnh giá trị cho robot double setpoint = 180.0; //đặt giá trị robot vng góc với mặt đất hình nối tiếp double Kp = 30; //Đặt mục trước double Kd = 1.8; //Đặt chế độ double Ki = 140; //Cuối thiết lập điều //Kết thúc giá trị thiết lập double input, output; PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT); volatile bool mpuInterrupt = false; // cho biết liệu pin ngắt MPU có cao không void dmpDataReady() SVTH: Võ Trường Toản Trang 58 PHỤ LỤC { mpuInterrupt = true; } void setup() { Serial1.begin(9600); Serial.begin(115200);// khởi tạo thiết bị Serial.println(F("Khởi tạo thiết bị I2C ")); mpu.initialize();// xác minh kết nối Serial.println(F("Kiểm tra kết nối thiết bị ")); Serial.println (mpu.testConnection ()? F ("Kết nối thành công MPU6050"): F ("Kết nối MPU6050 không thành công")); // tải cấu hình DMP devStatus = mpu.dmpInitialize(); // cung cấp bù lệch quay hồi chuyển chỉnh tỷ lệ cho độ nhạy tối thiểu mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // đảm bảo hoạt động (trả có) if (devStatus == 0) { // bật DMP, sẵn sàng Serial.println(F ("Kích hoạt DMP ")); mpu.setDMPEnabled(true); // bật phát ngắt Arduino //Serial.println(F ("Bật phát ngắt (ngắt Arduino 0) ")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // đặt cờ DMP Ready để chức vịng lặp () //Serial.println(F ("DMP sẵn sàng! Đang đợi ngắt ")); SVTH: Võ Trường Toản Trang 59 PHỤ LỤC dmpReady = true; // nhận kích thước gói DMP dự kiến để so sánh sau packetSize = mpu.dmpGetFIFOPacketSize(); // cài đặt PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(5); pid.SetOutputLimits(-255, 255); } else { // LỖI! // = tải nhớ ban đầu không thành công // = Cập nhật cấu hình DMP khơng thành cơng // (nếu bị ngắt, thông thường mã 1) // Serial.print (F ("Khởi tạo DMP không thành công mã")); // Serial.print(devStatus); // Serial.println(F(")")); } // Khởi tạo chân output động pinMode (8, OUTPUT); pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); // Theo mặc định, tắt hai động analogWrite(8,LOW); analogWrite(9,LOW); analogWrite(10,LOW); analogWrite(11,LOW); } char cha; SVTH: Võ Trường Toản Trang 60 PHỤ LỤC int spd = 255; void loop() { // lập trình khơng thành cơng, đừng cố làm while (!dmpReady) return; { // chờ đợi cho MPU ngắt gói thêm (s) có sẵn while (!mpuInterrupt && fifoCount < packetSize) { // khơng có liệu mpu - thực phép tính PID đầu cho động pid.Compute(); // In giá trị đầu vào đầu hình nối tiếp để kiểm tra xem hoạt động Serial.println(input);// Serial.print(" =>"); Serial.println(output); if (input>150 && input0) //Nghiêng phía trước Forward(); //Xoay bánh xe phía trước else if (output 0) { cha=Serial1.read(); } if(cha=='U') SVTH: Võ Trường Toản Trang 61 PHỤ LỤC { analogWrite(8,spd -55); analogWrite(9,0); analogWrite(10,spd -55); analogWrite(11,0); setpoint= 175.0; } if(cha=='D') { analogWrite(8,0); analogWrite(9,spd - 55); analogWrite(10,0); analogWrite(11,spd -55); setpoint= 183.0; } if(cha=='L') { setpoint= 180.0; analogWrite(8,spd ); analogWrite(9,0); analogWrite(10,0); analogWrite(11,spd); } if(cha=='R') { setpoint= 180.0; analogWrite(8,0); analogWrite(9,spd); analogWrite(10,spd); analogWrite(11,0); SVTH: Võ Trường Toản Trang 62 PHỤ LỤC } if(cha=='S') { analogWrite(8,0); analogWrite(9,0); analogWrite(10,0); analogWrite(11,0); setpoint= 180.0; } // đặt lại cờ ngắt nhận byte INT_STATUS mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // nhận số FIFO fifoCount = mpu.getFIFOCount(); // kiểm tra tràn if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // đặt lại để chúng tơi tiếp tục mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // không, kiểm tra liệu DMP sẵn sàng gián đoạn (điều xảy thường xuyên) } else if (mpuIntStatus & 0x02) { // chờ cho độ dài liệu có sẵn xác, phải chờ đợi ngắn while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // đọc gói từ FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // theo dõi FIFO đếm trường hợp có sẵn> gói SVTH: Võ Trường Toản Trang 63 PHỤ LỤC // (điều cho phép đọc thêm mà chờ gián đoạn) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); // lấy giá trị cho q mpu.dmpGetGravity(&gravity, &q); // lấy giá trị cho lực hấp dẫn mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // nhận giá trị cho ypr input = ypr[1] * 180/M_PI + 180; } }} void Forward() //Code xoay bánh xe phía trước { analogWrite(8,output); analogWrite(9,0); analogWrite(10,output); analogWrite(11,0); Serial.print("F"); // Thông tin gỡ lỗi } void Reverse() //Code xoay bánh xe lùi { analogWrite(8,0); analogWrite(9,output*-1); analogWrite(10,0); analogWrite(11,output*-1); Serial.print("R"); } void Stop() //Code dừng hai bánh xe { analogWrite(8,0); analogWrite(9,0); analogWrite(10,0); SVTH: Võ Trường Toản Trang 64 PHỤ LỤC analogWrite(11,0); Serial.print("S"); } SVTH: Võ Trường Toản Trang 65 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO [1] Phạm Quang Huy Lê Cảnh Trung Lập trình điều khiển với arduino Nhà xuất khoa học kĩ thuật, 2014 [2] Nguyễn Thị Phương Hà Huỳnh Thái Hoàng Lý thuyết điều khiển tự động Nhà xuất Đại học Quốc Gia TP.HCM, 2016 [3] Phạm Quang Huy Nguyễn Trọng Hiếu.Vi điều khiển ứng dụng arduino Nhà xuất bách khoa Hà Nội, 2013 [4] Nguyễn Thị Phương Hà Lý thuyết điều khiển nâng cao Nhà xuất Đại học Quốc gia TP Hồ Chí Minh, 2011 [5] Đường Khánh Sơn, Giáo trình Vi điều khiển [6] Trần Sĩ Lâm, Tiểu luận Nghiên cứu chế tạo robot di động đa hướng [7] Cam Thái Tài, Nghiên cứu thiết kế xe hai bánh tự cân [8] Nguyễn Minh Tâm, Nguyễn Văn Đông Hải, Nguyễn Phong Lưu, Lê Văn Tuấn Mơ hình hóa điều khiển tối ưu cho hệ xe hai bánh tự cân Trường đại học Sư phạm Kỹ thuật TP.HCM [9]http://create.arduino.cc/projecthub/twob/self-balancing-robot-using-blubug8894c6 (Ngày 30/3/2020) [10]https://www.instructables.com/id/2-Wheel-Self-Balancing-Robot-byusing-Arduino-and-/ (Ngày 29/12/2020) [11]https://circuitdigest.com/microcontroller-projects/arduino-based-selfbalancingrobot?fbclid=IwAR3ENpX5ZYhLZ4jN48cYPjT3czze4xTWXTjshNheW 0EVoc7IzHteZ72gZwA (Ngày 23/2/2020) SVTH: Võ Trường Toản Trang 66 ... nghiên cứu đề tài xe bốn bánh, xe ba bánh, xe hai bánh tự cân Sau tìm hiểu tham khảo sản phẩm xe hai bánh tự cân thị trường, em định thiết kế chế tạo mơ hình xe hai bánh tự cân bằng, xe có ứng dụng... thiệu sơ lược mơ hình xe hai bánh tự cân 1.2.2 Một số ứng dụng mô hình xe hai bánh tự cân 1.2.3 Các đề tài xe hai bánh tự cân nước 1.2.4 Các đề tài xe hai bánh tự cân nước 1.2.5 Hướng... Mơ tả hệ thống xe hai bánh cân Hình 2.2 Mơ hình xe hai bánh tự cân hệ Oxz .9 Hình 2.3 Mơ hình xe hai bánh tự cân hệ Oxy .9 Hình 2.4 Bản vẽ mơ hình xe hai bánh tự cân .14