ĐẠI HỌC CÔNG NGHIỆP TP HCM KHOA CÔNG NGHỆ ĐIỆN ĐỒ ÁN TỐT NGHIỆP ĐIỀU KHIỂN XE CÂN BẰNG SỬ DỤNG ARDUINO SINH VIÊN BÙI DUY TIN MSSV 14064861 LỚP DHDKTD10B GVHD THS NGUYỄN NGỌC ANH TUẤN Đồ án tốt nghiệp 2 TP HCM, NĂM 2018 i PHIẾU GIAO ĐỀ TÀI ĐỒ ÁN TỐT NGHIỆP 1 Họ và tên sinh viênnhóm sinh viên đƣợc giao đề tài Bùi Duy Tin, MSSV 14064861 2 Tên đề tài ĐIỀU KHIỂN XE CÂN BẰNG SỬ DỤNG ARDUINO 3 Nội dung Mục tiêu của đồ án là xây dựng được robot có khả năng di chuyển trên hai bánh,làm phương tiện di chu.
TỔNG QUAN VỀ ROBOT HAI BÁNH TỰ CÂN BẰNG
Giới thiệu chung
Sự phát triển của khoa học kỹ thuật đã cho phép robot thay thế con người trong các môi trường độc hại và trong sản xuất, đồng thời mô phỏng hình thức, hành vi và suy nghĩ của con người Ngành robot đang phát triển nhanh chóng nhờ vào công nghệ tiên tiến, với nhiều loại robot được chế tạo phục vụ cho các mục đích khác nhau Trong số đó, "Robot hai bánh tự cân bằng" đang thu hút sự quan tâm của nhiều tác giả vì khả năng di chuyển linh hoạt và tiết kiệm không gian.
Thế nào là robot hai bánh tự cân bằng
Đối với xe hoặc robot ba hay bốn bánh, sự thăng bằng và ổn định phụ thuộc vào việc trọng tâm nằm trong bề mặt chân đế do bánh xe tạo ra Trong khi đó, xe hai bánh như xe đạp không thể giữ thăng bằng khi không di chuyển, vì điều này dựa vào tính chất con quay hồi chuyển của bánh xe đang quay Đối với robot hai bánh tự cân bằng, trọng tâm cần được giữ ở giữa hai bánh để duy trì thăng bằng, tương tự như việc giữ một cây gậy thẳng đứng trong lòng bàn tay Tuy nhiên, vị trí chính xác của trọng tâm không thể xác định được, do đó, thay vì cố gắng tìm ra trọng tâm, xe được điều khiển để di chuyển nhằm triệt tiêu góc nghiêng.
Hình 1 2 Mô tả cách di chuyển
Tại sao phải thiết kế robot hai bánh tự cân bằng
Thiết kế robot hai bánh tự cân bằng là bước quan trọng cho sự phát triển của xe hai bánh tự cân bằng trong tương lai Do đó, cần phải so sánh xe hai bánh tự cân bằng với các loại xe ba bánh và bốn bánh hiện nay để hiểu rõ hơn về ưu nhược điểm và tiềm năng ứng dụng của chúng.
Robot di động trong xây dựng chủ yếu là loại robot ba bánh, bao gồm hai bánh lái lắp đồng trục và một bánh đuôi nhỏ Mặc dù có nhiều kiểu dáng khác nhau, robot ba bánh vẫn là phổ biến nhất Đối với robot bốn bánh, thường có hai bánh truyền động ở một đầu và một hoặc hai bánh lái ở đầu còn lại.
Hình 1 3 Xe ba bánh trên mặt phẳng
Việc thiết kế xe hoặc robot với ba hoặc bốn bánh giúp duy trì sự thăng bằng ổn định nhờ vào việc phân chia trọng lượng giữa hai bánh lái chính và bánh đuôi Nếu trọng lượng tập trung quá nhiều vào bánh lái, xe sẽ dễ bị ngã, trong khi nếu dồn vào bánh đuôi, hai bánh chính sẽ mất khả năng bám đường Mặc dù nhiều thiết kế có thể di chuyển tốt trên địa hình phẳng, chúng thường gặp khó khăn khi phải di chuyển trên địa hình lồi lõm Khi di chuyển xuống dốc, trọng lượng dồn về phía trước làm bánh lái mất độ bám, dẫn đến trượt ngã, và khi gặp bậc thang, xe có thể dừng hoạt động và chỉ quay tròn bánh xe.
Hình 1 4 Xe ba bánh đi lên
Khi di chuyển lên đồi, trọng tâm của xe hoặc robot có thể bị thay đổi về phía sau, dẫn đến nguy cơ bị lật úp, đặc biệt khi di chuyển trên bậc thang Mặc dù việc bố trí bốn bánh xe tương tự như xe hơi đồ chơi hay các loại xe bốn bánh hiện tại không gây ra vấn đề trong giao thông, nhưng điều này khiến cho xe hoặc robot trở nên kém gọn gàng hơn.
Hình 1 5 Xe ba bánh đi xuống
Các xe hai bánh đồng trục có khả năng thăng bằng linh hoạt trên địa hình dốc, mặc dù hệ thống này vốn không ổn định Khi leo dốc, xe tự động nghiêng về phía trước, giúp trọng lượng dồn lên hai bánh lái chính Ngược lại, khi xuống dốc, xe nghiêng ra sau, giữ trọng tâm gần các bánh lái Nhờ đó, trọng tâm của xe luôn nằm trong vùng hỗ trợ của bánh xe, ngăn chặn nguy cơ lật úp.
Hình 1 6 Hai bánh lên và xuống linh động
Mục tiêu của đồ án
Mục tiêu của đồ án là phát triển một robot di chuyển trên hai bánh, nhằm tạo ra một phương tiện di chuyển hiệu quả, linh hoạt và dễ dàng xoay trở trong không gian hạn chế Trong thời gian 3 tháng thực hiện luận văn tốt nghiệp, các mục tiêu cụ thể sẽ được xác định và triển khai.
Tìm hiểu về các loại robot cân bằng, nguyên lý cơ bản về cân bằng
Thiết kế mạch điện tử kết hợp các cảm biến thực hiện chức năng đo góc (phần cứng)
Giải thuật cho vi điều khiển kết hợp và bù trừ các cảm biến để có được giá trị đo góc chính xác
Xây dựng thuật toán điều khiển cho động cơ, giữ thăng bằng
Phương pháp nghiên cứu
Đề tài được tiếp cận dựa trên các phương pháp sau:
Phương pháp khảo sát tài liệu giúp tìm hiểu các khía cạnh quan trọng liên quan đến đề tài, bao gồm cấu trúc của robot hai bánh tự cân bằng, cảm biến MPU6050 và mạch điều khiển động cơ Việc nghiên cứu kỹ lưỡng các tài liệu này sẽ cung cấp nền tảng vững chắc cho việc phát triển và tối ưu hóa robot.
Phương pháp khảo sát các thuật toán và lọc nhiễu cho cảm biến như: bộ lọc Kalman và thuật toán điều khiển PID
Phương pháp thực nghiệm tiến hành xây dựng các thuật toán trên mô hình
Giới hạn của đồ án
Đề tài nghiên cứu tập trung vào việc phát triển mô hình phần cứng cho robot, bao gồm cấu trúc mô hình, mạch điều khiển động cơ và các thuật toán vi điều khiển như bộ lọc Kalman và thuật toán cân bằng PID Robot được thiết kế có khả năng cân bằng và điều khiển di chuyển, tuy nhiên, hiện tại vẫn chưa có nhiều ứng dụng thực tiễn cho công nghệ này.
THIẾT KẾ CHẾ TẠO
Sơ đồ khối
Hình 2 1 Sơ đồ khối của hệ thống robot
Thiết kế phần cứng
Đồ án sử dụng Arduino Mega 2560 làm bộ điều khiển trung tâm cho robot, với khung được chế tạo từ nhựa cứng và liên kết bằng vít đồng Robot di chuyển nhờ hai động cơ đồng trục, cho phép di chuyển trước và sau Hai động cơ được điều khiển bởi robo shield và sử dụng cảm biến MPU6050 để xác định góc nghiêng Bánh xe được bọc cao su có rãnh giúp tăng độ bám, cải thiện khả năng cân bằng của robot.
Hình 2 2 Mô hình robot sau khi lắp ráp
Mạch điện tử
Robot sử dụng nguồn điện từ 3 pin 12V, mỗi pin có dung lượng khoảng 3000mAh, được kết nối tiếp với nhau Cách kết nối này đảm bảo robot có đủ năng lượng hoạt động trong thời gian dài.
2.3.2 Bộ điều khiển trung tâm Aduino Mega 2560
Arduino là một bo mạch vi xử lý cho phép lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ và đèn Điểm nổi bật của Arduino là môi trường phát triển ứng dụng thân thiện, giúp người dùng dễ dàng học ngôn ngữ lập trình, ngay cả những người không có nhiều kiến thức về điện tử và lập trình.
Arduino được phát triển tại thị trấn Ivrea, Ý, và mang tên vua Arduino sống vào thế kỷ 9 Sản phẩm này chính thức được giới thiệu lần đầu vào năm
Năm 2005, Arduino ra đời như một công cụ đơn giản dành cho sinh viên của giáo sư Massimo Banzi tại trường Interaction Design Ivrea Mặc dù không được tiếp thị rộng rãi, nhưng sản phẩm này nhanh chóng lan tỏa nhờ những đánh giá tích cực từ những người dùng đầu tiên.
Arduino đang ngày càng phổ biến trên toàn cầu nhờ vào các ứng dụng sáng tạo của cộng đồng mã nguồn mở Tuy nhiên, tại Việt Nam, Arduino vẫn chưa được biết đến rộng rãi.
Arduino là nền tảng điện tử mã nguồn mở, bao gồm cả phần cứng và phần mềm, cho phép lập trình và điều khiển các thiết bị Về cơ bản, Arduino hoạt động như một bộ điều khiển logic có thể lập trình, giúp tương tác với môi trường thông qua cảm biến và các hành vi đã được lập trình Nhờ vào Arduino, việc lắp ráp và điều khiển các thiết bị điện tử trở nên đơn giản và dễ dàng hơn bao giờ hết.
Arduino là một nền tảng vi điều khiển được thiết kế để đơn giản hóa quá trình thiết kế, lắp ráp linh kiện điện tử và lập trình vi xử lý, giúp người dùng dễ dàng tiếp cận công nghệ mà không cần kiến thức sâu về điện tử hay lập trình Sự phát triển của Arduino giúp xóa bỏ rào cản cho những ai muốn tạo ra sản phẩm công nghệ riêng, mang lại nhiều lợi ích so với các nền tảng vi điều khiển khác.
Lập trình Arduino hỗ trợ đa nền tảng, cho phép người dùng thực hiện trên nhiều hệ điều hành khác nhau như Windows, Mac OS, Linux trên máy tính để bàn và Android trên thiết bị di động.
Ngôn ngữ lập trình đơn giản, dễ hiểu
Arduino là một nền tảng mở, cho phép phần mềm chạy trên nó dễ dàng được chia sẻ và tích hợp với nhiều nền tảng khác nhau.
Mở rộng phần cứng: Arduino được thiết kế và sử dụng theo dạng module nên việc mở rộng phần cứng cũng dễ dàng hơn
Đơn giản và nhanh: rất dễ dàng lắp ráp, lập trình và sử dụng thiết bị
Dễ dàng chia sẻ: mọi người dễ dàng chia sẻ mã nguồn với nhau mà không lo lắng về ngôn ngữ hay hệ điều hành mình đang sử dụng
2.3.2.2 Cấu trúc phần cứng và chức năng
Arduino Mega 2560 là một bo mạch vi điều khiển dựa trên chip Atemaga 2560
Bo mạch này có 54 chân tín hiệu số, trong đó 15 chân hỗ trợ điều chế độ rộng xung và 16 chân đầu vào tín hiệu tương tự để kết nối với các bộ cảm biến Nó sử dụng dao động thạch anh với tần số 16MHz và có cổng USB để nạp chương trình, cùng với chân cấp nguồn, ICSP header và nút reset Bo mạch cung cấp mọi thứ cần thiết để hỗ trợ vi điều khiển, với nguồn cấp có thể từ máy tính qua cổng USB, bộ lọc nguồn chuyên dụng từ xoay chiều sang một chiều, hoặc từ pin.
Arduino hỗ trợ kết nối thông qua USB hoặc nguồn điện bên ngoài, với khả năng tự động chọn nguồn cung cấp Hệ thống vi điều khiển hoạt động hiệu quả với nguồn từ 6V đến 20V, nhưng nếu cung cấp dưới 7V, chân 5V có thể không đạt 5V và gây mất ổn định Ngược lại, nếu nguồn vượt quá 12V, có thể gây nguy hiểm cho bo mạch Do đó, phạm vi điện áp khuyến nghị cho Arduino là từ 7V đến 12V.
Chân Vin trên Arduino cho phép cung cấp điện áp đầu vào từ nguồn điện bên ngoài, khác với nguồn 5V lấy từ USB hoặc jack cắm riêng Người dùng có thể sử dụng chân này để cấp nguồn cho mạch Arduino một cách thuận tiện.
Chân 5V trên bo mạch đóng vai trò quan trọng trong việc cung cấp nguồn cho vi điều khiển và các linh kiện khác, đồng thời cung cấp năng lượng cho các thiết bị ngoại vi khi chúng được kết nối.
Chân 3,3V : cung cấp nguồn cho các thiết bị cảm biến
Chân GND: chân nối đất
Chân Aref: tham chiếu điện áp đầu vào analog
Chân IOREF: cung cấp điện áp cho các vi điều khiển hoạt động
Một shield được cấu hình chính xác có khả năng đọc điện áp IOREF, từ đó lựa chọn nguồn tích hợp hoặc kích hoạt bộ chuyển đổi điện áp, cho phép hoạt động ở mức 5V hoặc 3,3V.
Chip Atmega có 256Kb (với 8Kb sử dụng cho bootloader) Nó còn có 8Kb SRAM và 4Kb EFPROM c) Chân vào ra
Hình 2 5 Sơ đồ chân Arduino
Arduino Uno có 14 chân digital (chân 0-13) và 6 chân analog ( chân A0-A5)
Các chân digital có thể được cấu hình để nhận dữ liệu từ các thiết bị ngoại vi hoặc để truyền tín hiệu đến các thiết bị ngoại vi.
Cách phương thức giao tiếp
2.4.1 Điều chế độ rộng xung PWM
Có ba phương pháp chính để điều khiển tốc độ động cơ DC servo, bao gồm: điều áp (Linear Power Amplification), điều độ tần số xung (PFM) và điều độ rộng xung (PWM) Trong bài viết này, chúng tôi sẽ tập trung vào việc áp dụng kỹ thuật điều độ rộng xung (PWM) để điều chỉnh tốc độ động cơ.
Trong hình vẽ, TON và TOFF đại diện cho thời gian kích (trạng thái HIGH) và ngắt tín hiệu (trạng thái LOW) trong một chu kỳ Quá trình này tạo ra mức điện áp trung bình VTB, cung cấp cho động cơ, tương ứng với tốc độ hoạt động của động cơ.
Hình 2 10 Điều chỉnh độ rộng xung
Hai tín hiệu S1 và S2 có cùng chu kỳ nhưng tỉ lệ TON/TOFF khác nhau sẽ tạo ra hai điện áp trung bình khác nhau, từ đó dẫn đến hai tốc độ động cơ khác nhau Phương pháp này được gọi là điều rộng xung, cho phép điều khiển tốc độ động cơ theo ý muốn Cần lưu ý rằng mối quan hệ giữa vận tốc động cơ và điện áp trung bình tương ứng với tỉ lệ TON/TOFF là không tuyến tính.
Hình 2.11 minh họa mối quan hệ giữa vận tốc không tải của động cơ DC và chu kỳ PWM cho động cơ DC Hitachi Mối quan hệ này có thể được giải thích dễ dàng, vì điện áp trung bình được tính bằng tích phân trong một chu kỳ của điện áp đầu vào, tương ứng với khoảng thời gian TON.
Chu kỳ của một tín hiệu ra PWM là khoảng thời gian mà sau đó mẫu tín hiệu được lặp lại
Tần số PWM = 1/chu kỳ
Hệ số duty là tỉ lệ bề rộng của mức „1‟ so với bề rộng chu kỳ
Độ phân giải (resolution) tín hiệu PWM là phần mịn nhất là hệ số duty có thể được điều chế
Có hai cách tạo ra xung PWM:
Mạch tương tự (analog) có khả năng thay đổi giá trị liên tục và đạt độ phân giải vô hạn về thời gian và biên độ, cho phép điều khiển trực tiếp nhiều thiết bị như âm lượng của radio và tốc độ động cơ Tuy nhiên, việc thiết kế và xây dựng mạch tương tự thường tốn kém Mặc dù có thể tạo ra mạch PWM, nhưng độ chính xác và khả năng điều khiển của chúng thường không cao như mạch số.
Mạch số giúp giảm đáng kể giá thành và tiêu hao năng lượng của hệ thống bằng cách điều khiển các tín hiệu analog qua số hóa Nhiều vi điều khiển và DSP hiện nay đã tích hợp bộ điều khiển PWM, đơn giản hóa quy trình điều khiển Qua bộ đếm độ phân giải cao, hệ số duty của sóng vuông được mã hóa thành tín hiệu analog đặc trưng, trong khi tín hiệu PWM vẫn giữ tính chất số, với nguồn DC qua tải chỉ mở hoặc ngắt hoàn toàn tại một thời điểm nhất định.
Để cài đặt PWM trong các bộ vi điều khiển có tích hợp bộ PWM trong Timer, phần mềm của chip cần thực hiện một số nhiệm vụ quan trọng Trước tiên, cần cấu hình các thanh ghi liên quan đến Timer để thiết lập chế độ hoạt động của PWM Tiếp theo, xác định tần số và độ rộng xung của PWM để đảm bảo điều khiển chính xác Cuối cùng, kích hoạt Timer để bắt đầu quá trình phát tín hiệu PWM.
Đặt chu kỳ của timer/counter điều chế xung vuông
Đặt thời gian của thanh ghi điều khiển PWM
Đặt hướng ra của tín hiệu PWM, tín hiệu có đảo hay không đảo
Mở khả năng của bộ điều khiển PWM
PWM có ưu điểm nổi bật là khả năng chống nhiễu giữa bộ xử lý và hệ thống điều khiển nhờ vào việc tín hiệu vẫn giữ tính chất số Nhiễu chỉ xảy ra khi tín hiệu đủ mạnh để thay đổi logic từ 1 thành 0 hoặc ngược lại Điều này không chỉ giúp tăng bề rộng kênh liên lạc mà còn tiết kiệm chi phí cho bộ biến đổi D/A, đồng thời giảm thiểu không gian trong các thiết bị nhúng.
I2C là bus giao tiếp ngoại vi do Philips phát triển, thường được sử dụng để điều khiển nhiều thiết bị ở khoảng cách xa trong mạch Giao thức I2C sử dụng hai đường dây: Clock (SCL) và Data (SDA) để thực hiện giao tiếp giữa thiết bị Master và Slave.
Hình 2 12 Kết nối giữa Master và các Slave
Master: Là chip khởi động quá trình truyền nhận, phát đi địa chỉ của thiết bị cần giao tiếp và tạo xung giữ nhịp trên đường SCL
Slave: Là chip có một địa chỉ cố định, được gọi bởi Master và phục vụ yêu cầu từ Master
SDA - Dữ liệu nối tiếp: Đây là đường truyền dữ liệu nối tiếp, nơi tất cả thông tin về địa chỉ và dữ liệu được truyền tải theo thứ tự từng bit một.
SCL - Serial Clock là đường giữ nhịp trong giao thức I2C, một chuẩn truyền thông nối tiếp đồng bộ Đường SCL tạo ra các xung giữ nhịp cần thiết cho quá trình truyền và nhận dữ liệu Mỗi xung trên SCL sẽ đồng bộ hóa việc lấy mẫu một bit dữ liệu trên đường SDA.
Hình 2 13 Trạng thái lấy mẫu 1bit dữ liệu SDA
Dữ liệu trên đường SDA được lấy mẫu khi đường SCL ở mức cao trong chu kỳ giữ nhịp, do đó SDA không thay đổi trạng thái khi SCL cao, ngoại trừ trong các điều kiện Start và Stop Chân SDA chỉ có thể thay đổi trạng thái khi SCL ở mức thấp.
Các tín hiệu Start và Stop:
SDA = SCL = HIGH: Bus I2C ở trạng thái “Free” sẵn sàng cho một giao tiếp
Điều kiện Start: SDA ↓và SCL = HIGH
Điều kiện Stop: SDA ↑và SCL = HIGH
Both the Start and Stop conditions are generated by the Master After the Start signal, the I2C bus enters a "busy" state to perform serial access operations Following the Stop condition, the I2C bus transitions to a "free" state for the next operation.
Hình 2 14 Sơ đồ kết nối giữa Arduino với cảm biến MPU6050 theo giao thức I2C
UART, viết tắt của Universal Asynchronous Receiver Transmitter, là một mạch tích hợp quan trọng trong việc truyền dữ liệu nối tiếp giữa máy tính và các thiết bị ngoại vi Nhiều vi điều khiển hiện nay đã tích hợp UART, nhưng do tốc độ và độ điện dung của nó không còn cạnh tranh với các giao tiếp hiện đại, nên các dòng PC và Laptop mới không còn tích hợp cổng UART Khác với giao tiếp SPI và I2C sử dụng một dây truyền dữ liệu và một dây xung clock (SCL) để đồng bộ, UART không có dây SCL, cho phép mỗi vi xử lý tự tạo ra xung clock khi truyền dữ liệu Quá trình truyền dữ liệu bằng UART bắt đầu bằng một bit START, theo sau là các bit dữ liệu, và kết thúc bằng một bit STOP.
Trong quá trình truyền dữ liệu, thiết bị bắt đầu ở trạng thái chờ với mức điện áp cao (1) Khi truyền START bit, mức điện áp sẽ chuyển từ 1 xuống 0 để thông báo cho bộ nhận rằng dữ liệu sắp được gửi Tiếp theo là các bit dữ liệu D0-D7, có thể ở mức 1 hoặc 0 tùy thuộc vào thông tin cần truyền Sau khi hoàn tất việc truyền dữ liệu, bit Parity sẽ được gửi để kiểm tra tính chính xác của dữ liệu Cuối cùng, STOP bit sẽ thông báo cho thiết bị rằng quá trình truyền đã kết thúc, và thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính đúng đắn của dữ liệu.
Các thông số cơ bản trong truyền nhận UART:
Baud rate (tốc độ baud): khoảng thời gian dành cho 1 bit được truyền Phải được cài đặt giống nhau ở gửi và nhận
Frame (khung truyền): khung truyền quy định về số bit trong mỗi lần truyền
Start bit: là bit đầu tiên được truyền trong một khung truyền Báo hiệu cho thiết bị nhận có một gói dữ liệu sắp được truyền đến
Data: dữ liệu cần truyền Bit có trọng số nhỏ nhất LSB được truyền trước sau đó đến bit MSB
Parity bit: kiểm tra dữ liệu truyền có đúng không
Stop bit: là 1 bit hoặc nhiều bit báo cho thiết bị rằng các bit đã được gửi xong
Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm bảo tính đúng đắn của dữ liệu.
Giải thuật lập trình
2.5.1 Nguyên lý điều khiển cân bằng
Hình 2 15 Nguyên lý điều khiển
Khi robot đứng thẳng ở vị trí cân bằng, lực tác động có thể làm robot ngã về phía trước hoặc phía sau Nếu robot ngã về phía trước, cảm biến IMU sẽ giúp xác định góc nghiêng và điều khiển hai bánh xe di chuyển về phía trước theo hướng nghiêng Ngược lại, khi robot ngã về phía sau, nó sẽ điều khiển hai bánh xe di chuyển về phía sau cho đến khi góc nghiêng trở lại vị trí thẳng đứng.
2.5.2.1 Giới thiệu bộ lọc Kalman Được đề xuất từ năm 1960 bởi giáo sư Kalman để thu thập và kết hợp linh động các thông tin từ cảm biến thành phần Một khi phương trình định hướng và mẫu thống kê nhiễu trên mỗi cảm biến được biết và xác định, bộ lọc Kalman sẽ cho ước lượng giá trị tối ưu (chính xác do đã được loại sai số, nhiễu) như là đang sử dụng một tín hiệu „tinh khiết‟ và có độ phân bổ không đổi Trong hệ thống này, tín hiệu cảm biến vào bộ lọc gồm hai tín hiệu: từ cảm biến góc (accelerometer) và cảm biến vận tốc góc (gyro) Tín hiệu ngõ ra của bộ lọc là tín hiệu của inclinometer và gyro đã được loại nhiễu nhờ hai nguồn tín hiệu hỗ trợ và xử lý lẫn nhau trong bộ lọc, thông qua quan hệ (vận tốc góc = đạo hàm/vi phân của giá trị góc)
Khi đo một tín hiệu, chúng ta thường gặp phải sai số từ cảm biến và nhiễu từ môi trường, điều này ảnh hưởng đến kết quả đo Bộ lọc có nhiệm vụ giảm thiểu những sai số và nhiễu này, nhằm cung cấp một kết quả đo tối ưu và chính xác hơn.
Hình 2 16 Mô hình bộ lọc
Một ví dụ mô phỏng về bộ lọc Kalman cho một máy bay chiến đấu bằng MatLAB :
Hình 2 17 Tín hiệu chưa được lọc
Hình 2 18 Tín hiệu đã qua bộ lọc Kalman
Bộ lọc Kalman là thuật toán tối ưu trong xử lý dữ liệu hồi quy, với nhiều phương pháp xác định tính tối ưu tùy thuộc vào tiêu chí đánh giá Nó cho thấy khả năng tối ưu hóa cho các trường hợp cụ thể theo từng tiêu chuẩn Một trong những điểm nổi bật của bộ lọc Kalman là khả năng kết hợp tất cả thông tin đầu vào, xử lý mọi giá trị có sẵn ngoại trừ sai số, và ước lượng giá trị hiện tại của các đại lượng quan tâm Thuật toán này sử dụng hiểu biết về động học của thiết bị và hệ thống, đồng thời mô tả các yếu tố nhiễu như nhiễu ồn, nhiễu đo, sự không chắc chắn trong mô hình động học, cùng với thông tin về điều kiện ban đầu của các giá trị cần quan tâm.
Bộ lọc Kalman là một phương pháp ước lượng trạng thái cho các quá trình được mô hình hóa rời rạc theo thời gian thông qua phương trình ngẫu nhiên tuyến tính.
(2.1) Với giá trị đo đạc là
Trong hệ thống, wk và vk là hai vector biến ngẫu nhiên đại diện cho nhiễu hệ thống và nhiễu đo đạc, độc lập với nhau Hai biến này được giả định tuân theo phân bố Gaussian với giá trị trung bình bằng 0, trong đó ma trận hiệp biến lần lượt là Q và R Cụ thể, p(w) tuân theo phân bố N(0, Q) và p(v) tuân theo phân bố N(0, R).
Trong thực tế, ma trận Q và R có thể thay đổi theo thời gian hoặc theo phép đo, tuy nhiên các ma trận này được giả định là hằng số
Ma trận có kích thước là n×n là ma trận liên kết của trạng thái trước, bước thứ k-
Ma trận B thể hiện mối liên kết giữa ngõ vào tùy biến u và trạng thái x, trong khi ma trận H kết nối trạng thái với kết quả đo đạc Zk theo phương trình phép đo (2.2) Đồng thời, các ma trận Q và R cũng đóng vai trò quan trọng trong việc mô tả hệ thống.
A, H có thể thay đổi theo thời gian (từng bước k ), nhưng ở đây chúng được giả sử là không đổi
2.5.2.3 Giải thuật bộ lọc Kalman rời rạc
Bộ lọc Kalman ước lượng tiến trình thông qua kiểm soát phản hồi, trong đó ước lượng trạng thái tại các thời điểm và thu nhận phản hồi từ các giá trị đo thực tế có nhiễu Phương trình của bộ lọc Kalman được chia thành hai nhóm: phương trình cập nhật thời gian và phương trình cập nhật giá trị đo Phương trình cập nhật thời gian dự đoán giá trị tiếp theo dựa trên giá trị hiện tại và hiệp biến số ước lượng, trong khi phương trình cập nhật giá trị đo kết hợp giá trị mới với ước lượng tiền nghiệm để hiệu chỉnh ước lượng hậu nghiệm Phương trình cập nhật thời gian được xem như phương trình dự đoán, còn phương trình cập nhật phép đo là phương trình hiệu chỉnh, tạo thành thuật toán ước lượng giống như quy trình dự đoán và hiệu chỉnh để giải quyết các vấn đề số.
Hình 2 19 Quy trình bộ lọc Kalman
Các công thức liên quan đến quá trình cập nhật thời gian được trình bày trong công thức (2.5) và (2.6) Trong khi đó, công thức cho quá trình cập nhật phép đo được nêu trong các công thức (2.7), (2.8) và (2.9).
Trong quá trình cập nhật giá trị đo, bước đầu tiên là tính giá trị độ lợi Kalman Sau đó, ta đo giá trị thực của quá trình và tìm ra giá trị hậu nghiệm ước lượng bằng cách kết hợp với kết quả đo Cuối cùng, hiệp biến số hậu nghiệm được xác định Quá trình này lặp lại sau mỗi bước cập nhật thời gian và phép đo, sử dụng ước lượng hậu nghiệm trước đó để dự đoán ước lượng tiền nghiệm mới Sự lặp lại tự nhiên này là đặc điểm nổi bật của bộ lọc Kalman, giúp việc xây dựng bộ lọc trở nên dễ dàng hơn so với bộ lọc Wiener, vốn hoạt động trực tiếp trên tất cả dữ liệu ước lượng Bộ lọc Kalman tham chiếu các giá trị ước lượng hiện tại với tất cả các phép đo trước đó.
Hình 2 20 Quy trình hoàn chỉnh bọ lọc Kalman
2.5.2.4 Tại sao phải sử dụng bộ lọc Kalman Ở đây giá trị ngõ ra được quan tâm hàng đầu của robot hai bánh chính là góc giữa trục xe nằm ngang hoặc sàn xe với chiều trọng lực Nhiều loại cảm biến có thể dùng để đo góc như encoder, resolver, inclinometer, ….Nhưng trong mô hình của đề tài, chỉ có hai loại cảm biến để xác định góc giữa sàn xe với trọng lực theo phương pháp không tiếp xúc với sàn là cảm biến đo vận tốc góc và cảm biến gia tốc ứng dụng để đo góc tĩnh (cảm biến đo khoảng cách tới mặt đất bằng hồng ngoại chỉ dùng được với sàn đất phẳng, nằm ngang và láng) Để làm trơn nhiễu và kết hợp tín hiệu từ hai cảm biến accelerometer và gyro, người ta thường dùng các bộ lọc trung bình, lọc bổ phụ thông tần complementary, lọc thích nghi – bộ lọc Kalman và các dạng lọc khác Đối với bộ lọc thông thấp, thông cao hoặc thông dải (lọc thụ động) xấp xỉ Butterworth, Bessel và Chebychev hay elliptic: thường được sử dụng cho một tín hiệu vào và một tín hiệu ra, với tần số làm việc xác định Ngoài dải tần này, tín hiệu sẽ bị lệch pha, hoặc độ lợi không còn là hằng số mà bị tối thiểu hóa Do vậy trong tình huống này, ta dùng hai cảm biến để đo một giá trị là góc (cũng như vận tốc góc), nên việc chỉ dùng một bộ lọc thụ động tỏ ra không phù hợp
Bộ lọc thông thường, bao gồm cả phần cứng và phần mềm, được sử dụng để giữ lại tín hiệu trong một dải tần số nhất định và loại bỏ các tín hiệu không mong muốn Việc xây dựng bộ lọc phần cứng phức tạp hơn so với bộ lọc phần mềm do khó khăn trong việc điều chỉnh các tham số Trong khi đó, bộ lọc Kalman là một thuật toán tính toán và ước lượng thống kê tối ưu, giúp loại bỏ tín hiệu nhiễu bằng cách sử dụng thông tin từ các đo đạc hiện tại và trước đó Mặc dù cần thời gian xử lý nhiều, nhưng với công nghệ vi điều khiển hiện đại, bộ lọc Kalman trở nên đơn giản và hiệu quả Nó tự động cập nhật các giá trị cơ sở và xác định sai lệch giữa các kết quả đo, đảm bảo độ chính xác và ổn định cao Đặc biệt, bộ lọc Kalman có khả năng kết hợp nhiều tín hiệu từ các cảm biến khác nhau, làm cho nó trở thành lựa chọn phổ biến trong xử lý tín hiệu.
2.5.2.5 Xây dựng bộ lọc Kalman cho cảm biến MPU6050
Cảm biến góc được chế tạo bằng cách kết hợp một cảm biến gia tốc 1 trục và một gyro vận tốc 1 trục Hai cảm biến này được kết nối qua bộ lọc Kalman 2 trạng thái, trong đó một trạng thái đại diện cho góc và trạng thái còn lại biểu thị giá trị cơ sở của gyro (gyro bias).
Gyro_bias được điều chỉnh tự động thông qua bộ lọc, trong đó bộ lọc Kalman đóng vai trò quan trọng Mặc dù đoạn mã C đã được tối ưu nhiều lần, việc áp dụng bộ lọc Kalman vẫn là một vấn đề phức tạp.
*Khai báo các biến cố định:
(2.10) float angle; float q_bias; float rate;
R tượng trưng cho giá trị nhiễu covariance Trong trường hợp này, nó là ma trận 1x1 được mong đợi 0.03 rad ≈ 18o từ gia tốc kế
Q là ma trận 2x2 tượng trưng cho tiến trình nhiễu covariance Trong trường hợp này, nó chỉ mức độ tin cậy của gia tốc kế quan hệ với gyro
State_update được gọi mỗi dt với giá trị cơ sở gyro bởi người dùng module Nó cập nhật góc hiện thời và vận tốc ước lượng
Giá trị gyro_m được chia thành đúng đơn vị thực, nhưng không cần bỏ gyro_bias độ nghiêng Bộ lọc theo dõi độ nghiêng
Nó chạy trên sự ước lượng giá trị qua hàm giá trị:
Và cập nhật ma trận covariance qua hàm:
A là Jacobian của với giá trị mong đợi:
Việc tối ưu hóa mã C cho vi điều khiển với CPU nhỏ là rất quan trọng, đặc biệt khi tính toán các giới hạn rõ ràng không bằng 0 và thực hiện các phép toán ma trận qua nhiều bước.
P này làm nó khó đọc hơn, debug và kéo dài hơn thuật toán chính xác của bộ lọc Kalman, nhưng cho phép ít thời gian thực hiện với CPU
(2.17) Lưu giữ giá trị ước lượng chưa bias của gyro: rate=q = q_m - q_bias (2.18)
Cập nhật ước lượng góc:
(2.19) Cập nhật ma trận covariance:
THỬ NGHIỆM VÀ KẾT LUẬN
Thử nghiệm
Kết quả thực nghiệm cho thấy robot có khả năng giữ cân bằng tại vị trí ban đầu Khi bị tác động lực từ bên ngoài theo phương ngang, robot vẫn duy trì sự cân bằng và tự động di chuyển trở lại vị trí ban đầu.
Kết quả
*Kết quả đạt được của đồ án:
Ôn lại và tìm hiểu thêm được nhiều kiến thức về động lực học,điện tử cơ bản
Sử dụng thành công bộ lọc kalman trong mô hình robot để tính toán góc
Xây dựng thành công giải thuật cân bằng bám theo vị trí ban đầu dựa trên thuật toán PID
Làm quen với lĩnh vực lập trình và chế tạo cơ khí
Nghiên cứu và bước đầu chế tạo thành công một mô hình robot đơn giản.
Hướng phát triển
Dựa trên thành công của robot, chúng em đã phát triển ý tưởng chế tạo một sản phẩm có khả năng chở người Sản phẩm này nhằm đáp ứng nhu cầu di chuyển thuận tiện, nhỏ gọn trong nhà và phục vụ cho các hoạt động giải trí cũng như vận chuyển hàng hóa Hiện tại, chúng em đã lắp đặt được khung xe và xe có khả năng di chuyển, tuy nhiên do thời gian hạn chế, sản phẩm vẫn chưa hoàn thiện Chúng em vẫn tiếp tục phát triển thêm để hoàn thiện ý tưởng này.