Luận án Tổng hợp hệ điều khiển tay máy có khớp đàn hồi ứng dụ
Trong quá trình công nghiệp hoá, hiện đại hoá đất nước, các ngành công
nghiệp đang phát triển hết sức nhanh chóng, nhiều nhà máy xí nghiệp được xây
dựng với quy mô và công nghệ hiện đại, tiên tiến đáp ứng được nhu cầu của tình
hình sản xuất hiện nay, trong đó phải kể đến sự tiến bộ vượt bậc của khoa học kỹ
thuật, nhất là sự ra đời của máy tính và công nghệ thông tin đã tạo tiền đề cho sự
phát triển mạnh mẽ của nền sản xuất có tính chất tự động hoá cao, đã dần thay thế
sức lao động của con người đồng thời hiệu quả của nó đem lại cho nền kinh tế là rất
lớn.
Bạn đang xem 20 trang mẫu của tài liệu "Luận án Tổng hợp hệ điều khiển tay máy có khớp đàn hồi ứng dụ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Luận án Tổng hợp hệ điều khiển tay máy có khớp đàn hồi ứng dụ
BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ QUỐC PHÒNG VIỆN KHOA HỌC VÀ CÔNG NGHỆ QUÂN SỰ TỔNG HỢP HỆ ĐIỀU KHIỂN TAY MÁY CÓ KHỚP ĐÀN HỒI ỨNG DỤ - NĂM 2016 BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ QUỐC PHÒNG VIỆN KHOA HỌC VÀ CÔNG NGHỆ QUÂN SỰ TỔNG HỢP HỆ ĐIỀU KHIỂN TAY MÁY CÓ KHỚP ĐÀN HỒI ỨNG DỤ Chuyên ngành: khiển và T Mã số: 62.52.02.16 NGƢỜI HƢỚNG DẪN KHOA HỌC: 1. PGS.TS TRẦN ĐỨC THUẬN - NĂM 2016 i Tôi cam đoan đâ tôi ai trên 01 8 năm 2016 ii ần Đức Thuậ , ể K q . m ơn c C – . iii ................................................................... vi ................................................................................. ix ầu ........................................................................................................................ 1 Chƣơng 1: TỔNG QUAN VỀ ................................................................... 5 1.1. ệp ........................................................................ 5 1.1.1. Sơ lượ ệp ............... 5 1.1.2 y ................................................................. 6 1.1.3 ................................................................. 10 1.2. . .. 11 1.3. Tình hình nghiên cứu ......................................................... 14 1.4. ều khiển ch . .. 17 ..................................................................................................... 20 Chƣơng 2: XÂY DỰNG THUẬT TOÁN XÁC ĐỊNH TƢ THẾ GÓC VÀ CÁC THUẬT TOÁN HIỆU CHỈNH KHI SỬ DỤNG CÁC VI CƠ QUÁN TÍNH ................................................................... 21 2.1. Giới thiệu thuật toán lọc Kalman ........................................................................ 21 2.2. Xây dựng thuật toán xác đị ứng dụng các phần tử ố ......... 22 2.2.1. Ma trận cosin chỉ phương và các góc định hướng .................................... 22 2.2.2. Xây dựng thuật toán xác định tham s ......................... 27 2.3. Xây dựng thuật toán xác định tham số góc cho tay máy ứng dụng các phần tử vi cơ trong trường hợ ố .................................. 32 2.4. Xây dựng thuật toán hiệu các thông số đo ................................................ 34 2.4 ... 34 2.4.2. Phương pháp và thuật toán hiệu chuẩn ..................................................... 37 2.5. Xây dựng thuật toán nhận dạng hiệu ch hệ đo ............................................... 46 2.5.1. Phương pháp hiệu chỉnh 6 vị trí. ............................................................... 47 2.5.2. Phương pháp hiệu chỉnh cho hệ đo véc tơ tốc độ góc. ............................. 49 2.5.3. Phương pháp hiệu chỉnh cho hệ đo véc tơ gia tốc. ................................... 52 Kết luận chƣơng 2 ..................................................................................................... 54 iv Chƣơng 3: XÂY DỰNG THUẬT TOÁN ĐIỀU KHIỂN CHO TAY MÁY .............................................................................................. 55 3.1. Cơ ............................................................................... 55 3.1.1. Tính ổn định Lyapunov ............................................................................. 55 3.1.2. Hàm điều khiển Lyapunov ........................................................................ 57 3.2. Hệ thống phản hồ ........................................................................................ 58 .................................................... 61 3.4. Tổng hợp bộ điều khiển cho tay rô bốt .................................. 65 3.4.1. Mô hình đối tượng .................................................................................... 65 3.4.2. Thiết kế bộ điều khiển ............................................................................... 66 Kết luận chƣơng 3 ..................................................................................................... 80 Chƣơng 4: ỀU KHIỂN .............................................................................................. 81 4.1. Mô ậ .......................................................................... 81 4.1.1. Mô phỏng kiểm nghiệm thuậ ... 81 4.1.2. .................................... 83 4.1.3. .................................... 85 4.2. ...................................................... 87 4.2.1. ......................................... 87 4.2.2. ............................................................................................. 90 Kết luận chƣơng 4 .................................................................................................... 98 ............................................................................................... 100 ..................................................... 101 .................................................................................................... 103 ....................................................................................................................... P1 v DANH MỤC CÁC CÁC KÝ HIỆ CHỮ VIẾT TẮT 1. Ký hiệu Ý nghĩa A Ma trận ˆ ˆ ˆ, ,x y zA A A x, y, z , ,c c c x y z A A A x, y, z ax, ay, az 2 ] ˆ ˆ ˆ, , x y z B B B x, y, z , ,c c c x y z B B B b1, b2, b3 Các tham số biến đổi chậm, thể hiện độ trôi của con quay F 1 , F 2 Các hằng số ma sát nhớt 1kF Véctơ hàm số F ở bước thứ k-1 G Gx, Gy, Gz Các gia tốc kế x, y, z Hk hi(Xk xj k I i Dòng cảm ứng [A] J 1 , J 2 2 ] K Hệ số lò xo Kb Hệ số phản hồi suất điện động Kt Hằng số mô men m 1 2,c cM M Mô men ma sát cơ L Cảm kháng phần ứng (Ω) N Pk ( )kP Pk. ( )kP Pk. Q Ma trận đối xứng vi Qk q 1 , q 2 R Điện trở phần ứng (Ω) Rk Tx, Ty, Tz u Điện áp phần ứng [V] V Hàm Lyapunov Vi Hàm Lyapunov thứ i X Véc tơ trạng thái của hệ thống kX Trạng thái của véctơ trạng thái X ở bước thứ k 1kX Trạng thái của véctơ trạng thái X ở bước thứ k-1 ˆ ( )kX X k ˆ ( )kX X k xi rạng thái thứ i của hệ thống điều khiển Y Véc tơ đầu ra của hệ thống Z kZ Giá trị của véctơ k ˆ kZ Z k zi Sai số hiệu chỉnh kk , Véctơ nhiễu động lực và nhiễu đo có dạng ồn trắng 1k fi(Xk-1 xj k-1 Kỳ vọng toán học , , ớng , góc chúc ngóc và góc Cren) , ,x y z Tốc độ quay thực của các con quay o x , oy , o z Chỉ , ,x y zw w w Các nhiễu đo thường có dạng ồn trắng 1 2 8, ,..., Các tham số không xác định vii i Sai số đánh giá , ,ic p Các hằng số dương i Điều khiển ảo i Sai số bộ quan sát 2. Chữ viết tắt Ý Nghĩa AMF Công ty Đúc Máy American Machine and Foundry Company) BĐK Bộ điều khiển CLF n (Control Lyapunove Function) CNC Máy gia công CNC (Computer Numerical Control) DH Denavit-Hartenberg ĐK Điều khiển IMU Inertial Measurement Unit) KĐCS Khuếch đại công suất LF Hàm Lyapunove (Lyapunove Function) MEMs Micro Electro Mechanical Systems) OSC Máy hiện sóng (Oscilloscope) P iểu khiển tỷ lệ (Proportional) PC Máy tính cá nhân (Personal Computer) PD Bộ điểu khiển tỷ lệ, đạo hàm (Proportional Derivative) PI Bộ điểu khiển tỷ lệ, tích phân (Proportional Integral) PID Bộ điểu khiển tỷ lệ, tích phân và đạo hàm (Proportional Integral Derivative) PWM Bộ điều chế độ rộng xung (Pulse Width Modulation) viii DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Trang 6 7 Hình 1.3. Chiều dài và góc xoắn của một khâu 8 Hình 1.4 : Các thông số ai, αi, di và θi 8 9 rô 10 12 12 14 18 18 Hình 1.12. Độ lệch giữa hệ quy chuẩn đo và hệ quy chuẩ 19 ệ tọa độ liên kết và hệ tọa độ chuẩn 23 ệ toạ độ liên kết và hệ toạ độ chuẩn 24 25 ồ bố trí con quay vi cơ đo tốc độ góc, gia tốc kế và từ kế 27 Hình 2.5. 33 Hình 2.6 ệ tọa độ liên kế 35 Hình 2.7. Hệ tọa độ liên kết và các gia tốc kế 38 Hình 2.8. Hệ tọa độ cơ sở và hệ toạ độ liên kết 46 vị trí cần có để xác định các hệ số hiệu chuẩn 48 55 59 ix 63 65 11 và X1 82 21 và X4 83 Hình 4.3. Đồ thị tọa độ véc tơ từ trường trong hệ tọa độ liên kết 85 Hình 4.4. Tham số thực và tham số nhận dạng đối với hệ đo tốc độ góc 86 87 88 a. Kết quả thử nghiệm khi quay đối tượng trong không gian 89 b. Kết quả sai lệch khi quay vật thể trong mặt phẳng ngang 89 IMU trên bàn xoay ba bậc tự do 90 90 Hình 4.10 Sơ đồ cấu trúc của thiết bị thí nghiệm 91 92 93 94 Hình 4.14. Tín hiệu góc đặt, góc thực tế q1 (a) và tín hiệu vận tốc góc ω2 (b) 95 Hình 4.15. Tín hiệu điện áp u m =5 [kg] 96 Hình 4.16. Tín hiệu điện áp u điều khiển PID m =5 [kg], KP=4, KI=1, KD=2 96 m1 =5kg; K1=10[Nm/rad], KP=4, KI=1, KD=2 96 m2 =10 [kg]; K1=10[Nm/rad], KP=4, KI=1, KD=2 97 Hình m2 =10[kg], K2=20[Nm/rad], KP=1, KI=1, KD=1 97 1 MỞ ĐẦU Trong quá trình công nghiệp hoá, hiện đại hoá đất nước, các ngành công nghiệp đang phát triển hết sức nhanh chóng, nhiều nhà máy xí nghiệp được xây dựng với quy mô và công nghệ hiện đại, tiên tiến đáp ứng được nhu cầu của tình hình sản xuất hiện nay, trong đó phải kể đến sự tiến bộ vượt bậc của khoa học kỹ thuật, nhất là sự ra đời của máy tính và công nghệ thông tin đã tạo tiền đề cho sự phát triển mạnh mẽ của nền sản xuất có tính chất tự động hoá cao, đã dần thay thế sức lao động của con người đồng thời hiệu quả của nó đem lại cho nền kinh tế là rất lớn. Hệ thống nhận dạng và điều khiển đối tượng truyền động có yếu tố phi tuyế ngườ ự xuất hiện của công nghệ đo lường vi cơ quán tính và phi quán tính đã được ứng dụ ực điều khiển khác nhau như điều khiển vật thể chuyển động hay trong các máy công cụ , vấn đề áp dụng cho tay máy và người máy vẫ ớ giải quyết. ứ ựng hệ điều khiển tượng truyền động có yếu tố phi tuyến trên “Tổng hợp hệ điều khiển tay máy có khớp đàn hồi ứng dụ “. : Kết quả nghiên cứu của luận án là cơ sở khoa họ ựng phần mềm cho hệ thống điều khiể ể cải tiến, hiện đạ . 2 truyền động có yếu tố phi tuyến nh ệc ứng dụng các thiết bị đo quán tính vi cơ điện tử cho vấn đề xác đ nh tham số định hướng của tay máy trong xây dựng thuậ ệ chuẩ , : cơ v hệ thống nhận dạng và điều khiển : - việc ứng dụng các thiết bị đo quán tính vi cơ điện tử xác đ nh tham số định hướ ệ ẩ - ên Matlab/Simulink, ... ốt có khớp nối mềm. 3 Chƣơng 1: Tổng quan về việc ứng dụng các thiết bị đo quán tính vi cơ điện tử cho vấn đề xác đ nh tham số định hướng của tay máy. 2, Chƣơng 2: Xây dựng thuật toán xác định tƣ thế góc và các thuật toán , hiệu chỉnh khi sử dụng các vi cơ quán tính ệu chuẩn và hiệu chỉnh hệ đo qụán t ật toán quan trọng khi ứng dụng các cũng như phi quán tính sử dụng trong thực tế. Thuật toán hiệu chuẩn dùng để khắc phục các sai số không thể tránh khi chế tạo các thiết bị đo quán tính và phi quán tính. Thuật toán hiệu chỉnh dùng để khắc phục các sai số p đặt thiết bị đo quán tính cũng như phi quán tính vào vật thể chuyển động. Việc xây dự ật toán này là cần thiết trong giai đoạn hiệ ều ứng dụng các phần tử , cơ cấu dịch chuyển cơ khí... 2, 4, 5 Chƣơng 3. Xây dựng thuật toán điều khiển khớp y thủ tục thiết kế bộ điều khiển nghi cho . Luận án đi sâu vào nghiên cứu xây dựng bộ điều khiển cho tham số thay đổi, chỉ có đầu ra được đo và là tín hiệu phản hồi duy nhất trong vòng điều khiển, ở đó phần phi tuyến chỉ phụ thuộc vào các tín hiệu đầu ra.Với hệ thống này, luận án xây dựng bộ quan sát phi tuyến dạng hàm mũ hội tụ và thay thế trạng thái không đo được bởi giá trị ước lượng của chúng. Thủ tục thiết kế bộ điều khiển dựa theo định lý Lyapunov sẽ thực hiện song hành cùng việc tính toán bộ quan sát để ước lượng các trạng thái không đo lường được của hệ. Các tham số thay đổi của hệ cũng được tính toán, ước lượng bởi các luật cập nhật, đảm bảo tính thích nghi tham số cho hệ có tham số thay đổi. 4 3 10 Chƣơng 4: M điều khiể C của luậ trình bày xác đị , , ều khiể 3, 9 5 Chƣơng 1: TỔNG QUAN VỀ 1.1. công nghiệp 1.1.1. Sơ lượ công nghiệp Thuật ngữ “ ” xuất phát từ tiếng Sec (Czech) “Robota” có nghĩa là công việc tạp dịch trong vở kịch “Rossum’s Universal Robots của Karel Capek” vào năm 1921. Trong vở kịch này, Rossum và con trai của ông ta đã chế tạo ra những chiếc máy gần giống với con người để phục vụ con người [4]. Có lẽ đó là một gợi ý ban đầu cho các nhà sáng chế kỹ thuật về những cơ cấu, máy móc bắt chước các hoạt động cơ bắp của con người. Đầu thập kỷ 60, công ty Mỹ AMF (American Machine and Foundry Company) quảng cáo một loại máy tự động vạn năng và gọi là “Người máy công nghiệp” (Industrial Robot). Ngày nay người ta đặt tên người máy công nghiệp (hay công nghiệp) cho những loại thiết bị có dáng dấp và một vài chức năng như tay người được điều khiển tự động để thực hiện một số thao tác sản xuất. Về mặt kỹ thuật, những công nghiệp ngày nay, có nguồn gốc từ hai lĩnh vực kỹ thuật ra đời sớm hơn đó là các cơ cấu điều khiển từ xa và các máy công cụ điều khiển số. Các cơ cấu điều khiển từ xa thay thế cho cánh tay của người thao tác nhìn chung việc sử dụ ở các nước công nghiệp phát triển như: Nhật, Mỹ, Đức, Italy, Pháp, Anh là rất phổ biến và tốc độ phát triển hằng năm rất nhanh [6]. Trong mỗi lĩnh vực nêu trên sự phân bố đối với mỗi loại hình công việc cũng rất khác nhau. Ví dụ chỉ riêng trong lĩnh vực đóng gói và lắp ráp người ta thấy ở các nước như Nhật Bản, Đức, Anh cứ 1000 công nhân lắp ráp có khoảng hơn 250 chiếm khoảng 25%. Trong lĩnh vực lắp ráp điện tử chiếm tới khoảng 40%. Nếu tính chung trong lĩnh vực lắp ráp cơ khí hiện nay r đã chiếm tới gần 50% [9]. Ngày nay, r được dùng hầu hết trong các ngành công nghiệp, đặc biệt trong những ngành có môi trường làm việc độc hại như: lắ . 6 (a) (b) nh 1.1. : P Để hoàn thành những nhiệm vụ trên thì rô b t cần có khả năng cảm nhận các thông số trạng thái của môi trường và tiến hành các hoạt động tương tự con người: - Khả năng hoạt động của rô b t được đảm bảo bởi hệ thống cơ khí gồm cơ cấu vận động để đi lại và cơ cấu hành động để có thể làm việc. Việc thiết kế và chế tạo hệ thống này thuộc lĩnh vực khoa học về cơ cấu truyền động, chấp hành và vật liệu cơ khí. - Chức năng cảm nhận của r gồm thu nhận tín hiệu về trạng thái môi trường và trạng thái của bản thân hệ thống, do các cảm biến (sensor) và các thiết bị khác đảm nhiệm. Hệ thống này gọi là hệ thống thu nhận và xử lý số liệu hay hệ thống cảm biến . - Muốn phối hợp hoạt động của hai hệ thống trên và r hoạt động theo đúng chức năng mong muốn của con người thì phải có hệ thống điều khiển. Như vậy, một ngành khoa học chuyên nghiên cứu, thiết kế chế tạo các , ứng dụng chúng các lĩnh vực hoạt động khác nhau của xã hội, như nghiên cứu khoa học - kỹ thuật, kinh tế, quốc phòng và dân sinh. 1.1.2. Mô hình động học 1.1.2.1. Ma trận quan hệ b t được coi là một tay máy có một vài bậc tự do có thể coi là một tập hợp các khâu gắn liền với các khớp [13]. 7 . O X0 Z0 Y0 Y1 Z1 O1 I III II X1 X2Z2 Y2 O2 ỗi khâu ... nce Publication John Wiley & Sons, Inc. [28] . La Sall J. and Lefchetz S. (1961), “Stability by Liapunov’s direct method with applications”, Academic Press, New York. [29] . M. S. Grewal and A. P. Andrews (2001), “Kalman Filtering: Theory and Practice Using MATLAB”, Wiley Interscience. [30] . Ozgur Yeniay (2005), “A comparative study on optimization method for the constrained nonlinear programming problems, mathematical problems inEngineering”. [31] . P.M Taylor (1990), “Robotic control”, printed in the London. [32] . P.T Boggs and J.W Tolle (2000), “Sequential quadratic programming for Largge - scale nonlinear optimization”, J. Comput. Appl. Math. [33] . Parviz E. Nikravesh (1988), “Computer -Aided Analysis of Mechnical Systems” printed in USA, pp.19-250. [34] . Paul R.P., Robot Manipulators: Mathematics, Programming and Control. [35] . Salim Ibrir (2009), “Algebraic observer design for a class of Uniformly- observable nonlinear systems, Application to 2-link Robotic manipulator”, Proceedings of the 7th Asian Control Conference, Hong Kong, China. [36] . Salychev O.S (1998) “Inertial Systems in Navigation and Geophysics”, Bauman MSTU Press, Moscow. [37] . T.Wang (2001), “Global optimization for Constrained nonlinear programming” Department of Computer Science , University of Illinois , Illinois, pp. 1-40. [38] . W. Khalil, E.Dombre (2004), “Modeling, Identification and Control of Robots”, Kogan page Science, London. [39] . Wei Sun, Yaonan Wang (2004), “A Recurrent Fuzzy Neural Network Based Adaptive Control and Its Application on Robotic Tracking Control”, Neural [40] . Withit Chatlatanagulchai, Peter H. Meckl (2005), “Backstepping High-Order Differential Neural Network Control of Flexible-Joint Manipulator, American Control Conference. 106 Tiếng Nga: [41] . В. В. Матвеев, В. Я. Распопов. «Основы Построения Бесплатформенных Инерциальных Навигационных Систем» - СПб: ГНЦ РФ ОАО «Концерн «ЦНИИ «Электроприбор», 2009. [42] . Распопов В.Я. Микросистемная Авионика, учебное Пособие.Тула "Гриф и к" 2010. [43] . Фильтрация и Стохастическое Управление в Динамических Системах. Под Редакциѐй К Т Леондеса, перевод с английского. Издательство "Мир" Москва 1980. [44] . Шаврин В.В., Коналов А.С., Тисленко В.И, “Калибровка микроэлектроме- ханических датчиков ускорений и угловых скоростей в бесплатформенных инерциальных навигационных системах”, Доклады ТУСУРа, № 1 (25), часть 2, июнь 2012. 107 PHỤ LỤC Ph n m m mô đun lọc Kalman function [quatout,bias_out,V_inertial_out,euler_out,pqr_out,unfiltered_euler,bodyAcc_out,P_out,yaw1, gyro3, counter_out1, counter_out2, counter_out3] = fcn(gyros,accels,mags,dt_gps,gps_update,XYZ_inertial, time_05) %%************************************************************ %%***************** initialize variables ********************* %%************************************************************ persistent xhat; persistent P; persistent XYZ_inertial_prev; persistent XYZ_inertial_prev_prev; persistent bodyAcc; persistent V_inertial; persistent counter; persistent counter2; persistent counter3; persistent gyros_old; persistent out_test; persistent bodyV_prev; persistent bodyV; persistent bodyV_out; persistent bodyAcc_prev; persistent euler_out_prew; persistent euler_out_prew_prew; persistent accels_prew; persistent accels_prew_prew; persistent gyros_prew_prew; persistent gyros_prew; persistent gyros_tb; persistent mags_prew; persistent yaw_old_1; persistent yaw_old_1_prew; persistent yaw_old_1_prew_prew; persistent mags_prew_prew; persistent va; if isempty(counter) counter = 0; 108 end if isempty(counter2) counter2 = 0; end if isempty(xhat) xhat =[0.999998858349755; 0.000871902307597; 0.000873425393729; 0.000871902307597; [1e-6;1e-6;1e-6];]; P=diag( [1^2*ones(1,3) .1^2*ones(1,3)] ); XYZ_inertial_prev = [0;0;0]; XYZ_inertial_prev_prev = [0;0;0]; euler_out_prew = [0;0;0]; euler_out_prew_prew =[0;0;0]; accels_prew = [0;0;0]; accels_prew_prew =[0;0;0]; gyros_prew_prew =[0;0;0]; gyros_prew =[0;0;0]; gyros_tb =[0;0;0]; mags_prew = [0;0;0]; mags_prew_prew =[0;0;0]; unfiltered_euler = [0;0;0]; bodyAcc = [0;0;0]; bodyAcc_prev = [0;0;0]; V_inertial = [0;0;0]; bodyV_out=[0;0;0]; bodyV_prev = [0;0;0]; bodyV = [0;0;0]; gps_alive = 0; gyros_old = gyros; %gyros_old(3) = gyros(3)-57.2*0.01745; yaw_old_1 = 0; gyro3 = 0; yaw_old_1_prew_prew = 0; yaw1=0; out_test =[0;0;0;0;0;0]; counter3 = 0; end dt = 0.01; % fundamental time step g = 9.81; 109 % B = [0.38848; % -0.00953; % 0.22781]; %NED B = [0.23092; 0.00920; 0.25392]; %NED a_n = 0.005; m_n = .005; % a_n = 50; % m_n = .5; Q_quat = 1e-2; Q_bias = 1e-2; tau_gyro = 100; exptau = exp(-.01/tau_gyro); R = diag([a_n^2*ones(1,3) m_n^2*ones(1,3)]); Q = diag([Q_quat^2*ones(1,3) dt*Q_bias^2*ones(1,3)]); x_old=xhat; %%************************************************************ %%******************** propogate state *********************** %%************************************************************ counter = counter+1; counter2 = counter2+1; counter3 = counter3+1; if accels(1)>0 accels(1)=accels(1)*0.94; % accels(1)=accels(1) - (2/104)*accels(1); end if accels(1)<0 accels(1)=accels(1)*0.97; % accels(1)=accels(1) + (1/93)*accels(1); end if accels(2)>0 accels(2)=accels(2)*0.96; % accels(2)=accels(2)-(2/104)*accels(2); end 110 if accels(2)<0 accels(2)=accels(2)*0.94; % accels(2)=accels(2)+(2/93)*accels(2); end if accels(3)>0 accels(3)=accels(3)*0.95; end if accels(3)<0 accels(3)=accels(3)*1; end accels(1)=(accels(1)+ accels_prew(1)+ accels_prew_prew(1))/3; accels(2)=(accels(2)+ accels_prew(2)+ accels_prew_prew(2))/3; accels(3)=(accels(3)+ accels_prew(3)+ accels_prew_prew(3))/3; p = gyros_old(1)-x_old(5); q = gyros_old(2)-x_old(6); r = gyros_old(3)-x_old(7); normomega = norm([p;q;r]); normomegainv = inv(normomega); C = cos(.5*dt*normomega); Sn = sin(.5*dt*normomega)*normomegainv; Phi_old_small = [ C, -(p *Sn), -(q* Sn), -(r *Sn); (p *Sn), C, (r* Sn), -(q *Sn); (q* Sn), -(r *Sn), C, (p* Sn); x_minus=[Phi_old_small*x_old(1:4); %(predict state) exptau*x_old(5:7);]; if x_minus(1)<0 %%************************************************************* %%************ propogate covariance *************************** %%************************************************************* %old state transition matrix 111 Phi_old = [1,0,0,-.5*dt, 0, 0; 0,1,0, 0,-.5*dt, 0; 0,0,1, 0, 0,-.5*dt; 0,0,0,exptau, 0, 0; 0,0,0, 0,exptau, 0; 0,0,0, 0, 0,exptau;]; % propogate covariance P = Phi_old*(P+Q)*transpose(Phi_old); if gps_update z= [accels; mags;]; q0=x_minus(1); q1=x_minus(2); q2=x_minus(3); q3=x_minus(4); Bx=B(1); By=B(2); Bz=B(3); % Expected measurement z_hat = [2*g*( q0*q2 - q1*q3 ); By*(-1 + 2*q0^2 + 2*q2^2) + 2*Bx*(q1*q2 - q0*q3) + 2*Bz*( q0*q1 + q2*q3); Bz*(-1 + 2*q0^2 + 2*q3^2) + 2*Bx*(q0*q2 + q1*q3) + 2*By*(-q0*q1 + q2*q3);]; % Linearized measurement matrix H H=[ 0, 2*g*(-1+2*q0^2+2*q3^2), -4*g*(q0*q1+q2*q3),0,0,0; 1+2*q0^2+2*q2^2)+4*Bx*(q1*q2-q0*q3)+4*Bz*( q0*q1+q2*q3),0,0,0; 4*Bx*(q0*q2+q1*q3)+4*By*(-q0*q1+q2*q3)+2*Bz*(-1+2*q0^2+2*q3^2), 0,-2*Bx*(-1+2*q0^2+2*q1^2)- 4*By*(q1*q2+q0*q3)-4*Bz*(-q0*q2+q1*q3),0,0,0; -2*By*(-1+2*q0^2+2*q2^2)-4*Bx*(q1*q2-q0*q3)-4*Bz*(q0*q1+q2*q3),2*Bx*(- 1+2*q0^2+2*q1^2)+4*By*(q1*q2+q0*q3)+4*Bz*(-q0*q2+q1*q3),0,0,0,0;]; K = P*transpose(H)*inv(H*P*transpose(H)+R); % kalman gain P = (eye(6)-K*H)*P; % update covariance xerror_hat = [zeros(3,1);x_old(5:7)]+K*(z-z_hat); % update state out_test = z-z_hat; xhat(5:7)=xerror_hat(4:6); xhat(1:4)=quatmult(x_minus(1:4),[1;xerror_hat(1:3)]); else z= [accels; mags;]; q0=x_minus(1); 112 q1=x_minus(2); q2=x_minus(3); q3=x_minus(4); Bx=B(1); By=B(2); Bz=B(3); % Expected measurement z_hat = [2*g*( q0*q2 - q1*q3 ); By*(-1 + 2*q0^2 + 2*q2^2) + 2*Bx*(q1*q2 - q0*q3) + 2*Bz*( q0*q1 + q2*q3); Bz*(-1 + 2*q0^2 + 2*q3^2) + 2*Bx*(q0*q2 + q1*q3) + 2*By*(-q0*q1 + q2*q3);]; % Linearized measurement matrix H H=[ 0, 2*g*(-1+2*q0^2+2*q3^2), -4*g*(q0*q1+q2*q3),0,0,0; 0 ,-4*Bx*(q0*q2+q1*q3)-4*By*(-q0*q1+q2*q3)-2*Bz*(-1+2*q0^2+2*q3^2),2*By*(- 1+2*q0^2+2*q2^2)+4*Bx*(q1*q2-q0*q3)+4*Bz*( q0*q1+q2*q3),0,0,0; 4*Bx*(q0*q2+q1*q3)+4*By*(-q0*q1+q2*q3)+2*Bz*(-1+2*q0^2+2*q3^2), 0,-2*Bx*(-1+2*q0^2+2*q1^2)- 4*By*(q1*q2+q0*q3)-4*Bz*(-q0*q2+q1*q3),0,0,0; -2*By*(-1+2*q0^2+2*q2^2)-4*Bx*(q1*q2-q0*q3)-4*Bz*(q0*q1+q2*q3),2*Bx*(- 1+2*q0^2+2*q1^2)+4*By*(q1*q2+q0*q3)+4*Bz*(-q0*q2+q1*q3),0,0,0,0;]; K = P*transpose(H)*inv(H*P*transpose(H)+R); % kalman gain P = (eye(6)-K*H)*P; % update covariance xerror_hat = [zeros(3,1);x_old(5:7)]+K*(z-z_hat); % update state out_test = z-z_hat; xhat(5:7)=xerror_hat(4:6); xhat(1:4)=quatmult(x_minus(1:4),[1;xerror_hat(1:3)]); end if xhat(1)<0 xhat(1:4)=-xhat(1:4); end xhat(1:4) = xhat(1:4)/norm(xhat(1:4)); %normalize quaternion gyros_old = gyros; %save for next time %% *********************************************************************** %% ********************* unfiltered euler angles ************************* %% *********************************************************************** Gbody = accels; Gbody = Gbody/norm(Gbody)*.99999999; Pitch = asin(Gbody(1)); temp = -Gbody(2)/cos(Pitch); if abs(temp)<1 Roll = asin(-Gbody(2)/cos(Pitch)); else Roll = pi/2*sign(temp); 113 end if sign(Gbody(3)) >= 0 % if upside down, correct phi Roll=-Roll-pi*sign(Gbody(2)); end ct = cos(Pitch); %set up trig for less computation time st = sin(Pitch); cp = cos(Roll); sp = sin(Roll); Bflat = [ct, st*sp, cp*st; 0, cp, -sp;]*mags; %rotate mags into phi=0, theta=0 Yaw = 0.2686 -atan2g(Bflat(2),Bflat(1)); %calculate psi unfiltered_euler = [Pitch;Roll;Yaw]; %% *********************************************************************** %% ********************* outputs ***************************************** %% *********************************************************************** P_out = P; quatout = xhat(1:4); euler_out = 57.3*quat2eul(quatout); % LAY TRUNG BINH THEO DO euler_out(3)= (euler_out(3)+ euler_out_prew(3)+euler_out_prew_prew(3))/3 ; euler_out_prew_prew(3) = euler_out_prew(3); euler_out_prew(3) = euler_out(3); euler_out(2)= (euler_out(2)+ euler_out_prew(2)+euler_out_prew_prew(2))/3; euler_out_prew_prew(2) = euler_out_prew(2); euler_out_prew(2) = euler_out(2); euler_out(1)= (euler_out(1)+ euler_out_prew(1)+euler_out_prew_prew(1))/3; euler_out_prew_prew(1) = euler_out_prew(1); euler_out_prew(1) = euler_out(1); %TRA VE RADIAN euler_out = euler_out/57.3; 114 % euler_out(1) = -euler_out(1); %reverse sign for GS bias_out = xhat(5:7); pqr_out = gyros-xhat(5:7); unfiltered_euler = [Roll; Pitch; Yaw]; bodyAcc_out = accels; V_inertial_out = bodyV; accels_prew_prew(1) = accels_prew(1); accels_prew(1) = accels(1); accels_prew_prew(2) = accels_prew(2); accels_prew(2) = accels(2); accels_prew_prew(3) = accels_prew(3); accels_prew(3) = accels(3); mags_prew_prew(1) = mags_prew(1); mags_prew(1) = mags(1); mags_prew_prew(2) = mags_prew(2); mags_prew(2) = mags(2); mags_prew_prew(3) = mags_prew(3); mags_prew(3) = mags(3); if(yaw1>180) yaw1=yaw1-360; end if(yaw1<-180) yaw1= yaw1 + 360; end yaw_old_1 = yaw1; gyro3 = gyros_old(3); counter_out2 = counter2; if counter2 == 700 115 counter2 = 0; % yaw1 = euler_out(3); % yaw_old_1 = euler_out(3); end counter_out3 = counter3; if counter3 == 50 counter3 = 0; end counter_out1 = counter; if counter == 10; counter = 0; end end %================================================================ %================== additional functions ====================== %================================================================ function quat = quatmult(q1,q2) % Multiplies two quaternions. qv1 = q1(2:4); qs1 = q1(1); qv2 = q2(2:4); qs2 = q2(1); quatv = cross(qv1,qv2) + qs1*qv2 + qs2*qv1; quats = qs1*qs2 - dot(qv1,qv2); quat = [quats;quatv]; end function quat = quatinv(q) % Inverts a quaternion. quat = [q(1);-q(2:4)]; end function angles = quat2eul( q ) qin = q./norm(q); y=2.*(qin(3,1).*qin(4,1) + qin(1,1).*qin(2,1)); x=qin(1,1).^2 - qin(2,1).^2 - qin(3,1).^2 + qin(4,1).^2; phi = atan2g(y,x); theta = asin(-2.*(qin(2,1).*qin(4,1) - qin(1,1).*qin(3,1))); 116 y=2.*(qin(2,1).*qin(3,1) + qin(1,1).*qin(4,1)); x=qin(1,1).^2 + qin(2,1).^2 - qin(3,1).^2 - qin(4,1).^2; psi = atan2g(y,x); angles = [phi; theta; psi]; end function angle = atan2g(y,x) angle = 0.; if x>0 angle = atan(y/x); end if x==0 angle = .5*pi*sign(y); end if x<0 angle = pi*sign(y)+atan(y/x); end end function q = eul2quat(angles) % converts phi,theta,phi into q % lifted straight from matlab's function (with a transposed output): cang = cos( angles/2 ); sang = sin( angles/2 ); q = [ cang(:,1).*cang(:,2).*cang(:,3) + sang(:,1).*sang(:,2).*sang(:,3); sang(:,1).*cang(:,2).*cang(:,3) - cang(:,1).*sang(:,2).*sang(:,3); cang(:,1).*sang(:,2).*cang(:,3) + sang(:,1).*cang(:,2).*sang(:,3); cang(:,1).*cang(:,2).*sang(:,3) - sang(:,1).*sang(:,2).*cang(:,3)]; end function dcm = q2dcm( q ) %qin = q./norm(q); % The direction cosine matrix performs the coordinate % transformation of a vector in inertial axes to a vector in body axes. qin = q; % don't need to normalize because it is already done %qin = quatnormalize( q ); dcm = zeros(3,3); dcm(1,1) = qin(1).^2 + qin(2).^2 - qin(3).^2 - qin(4).^2; dcm(1,2) = 2.*(qin(2).*qin(3) + qin(1).*qin(4)); dcm(1,3) = 2.*(qin(2).*qin(4) - qin(1).*qin(3)); dcm(2,1) = 2.*(qin(2).*qin(3) - qin(1).*qin(4)); dcm(2,2) = qin(1).^2 - qin(2).^2 + qin(3).^2 - qin(4).^2; dcm(2,3) = 2.*(qin(3).*qin(4) + qin(1).*qin(2)); dcm(3,1) = 2.*(qin(2).*qin(4) + qin(1).*qin(3)); 117 dcm(3,2) = 2.*(qin(3).*qin(4) - qin(1).*qin(2)); dcm(3,3) = qin(1).^2 - qin(2).^2 - qin(3).^2 + qin(4).^2; end function [Pitch, Roll, Yaw] = accelMagsBody2euler(acc,mags,body) Gbody = acc-body; Gbody = Gbody/norm(Gbody)*.99999999; Pitch = asin(Gbody(1)); temp = -Gbody(2)/cos(Pitch); if abs(temp)<1 Roll = asin(-Gbody(2)/cos(Pitch)); else Roll = pi/2*sign(temp); end if sign(Gbody(3)) >= 0 % if upside down, correct phi Roll=-Roll-pi*sign(Gbody(2)); end ct = cos(Pitch); %set up trig for less computation time st = sin(Pitch); cp = cos(Roll); sp = sin(Roll); Bflat = [ct, st*sp, cp*st; 0, cp, -sp;]*mags; %rotate mags into phi=0, theta=0 Yaw = 0.2686 -atan2g(Bflat(2),Bflat(1)); %calculate psi end
File đính kèm:
- luan_an_tong_hop_he_dieu_khien_tay_may_co_khop_dan_hoi_ung_d.pdf