1. Trang chủ
  2. » Tất cả

Luận văn điều khiển robot hai bánh tự cân bằng sử dụng thuật toán điều khiển trượt

71 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

TRƢỜNG ĐH CƠNG NGHỆ TP HCM CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM PHÒNG QLKH – ĐTSĐH Độc lập – Tự – Hạnh phúc TP HCM, ngày … tháng… năm 20 … NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Nguyễn Thùy Linh Giới tính: Nữ Ngày, tháng, năm sinh: 03/12/1989 Nơi sinh: Long an Chuyên ngành: Kỹ thuật Cơ Điện tử MSHV: 1341840024 I- Tên đề tài: Điều khiển Robot bánh tự cân sử dụng điều khiển trƣợt (Sliding mode) II- Nhiệm vụ nội dung: - Nghiên cứu thiết kế thi cơng mơ hình robot bánh tự cân - Sử dụng phƣơng pháp điều khiển phi tuyến điều khiển trƣợt - Thiết kế điều khiển dựa vào phƣơng pháp điều khiển mô dựa Matlab Simulink III- Ngày giao nhiệm vụ: 27/05/2015 IV- Ngày hoàn thành nhiệm vụ: 30/08/2016 V- Cán hƣớng dẫn: PGS.TS Nguyễn Thanh Phương CÁN BỘ HƢỚNG DẪN (Họ tên chữ ký) KHOA QUẢN LÝ CHUYÊN NGÀNH (Họ tên chữ ký) i LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng Các số liệu, kết nêu Luận văn trung thực chƣa đƣợc công bố cơng trình khác Tơi xin cam đoan giúp đỡ cho việc thực Luận văn đƣợc cảm ơn thông tin trích dẫn Luận văn đƣợc rõ nguồn gốc Học viên thực Luận văn (Ký ghi rõ họ tên) ii LỜI CÁM ƠN Để hoàn thành luận văn này, em xin tỏ lòng biết ơn sâu sắc đến Thầy PGS.TS Nguyễn Thanh Phƣơng tận tình hƣớng dẫn suốt trình viết Luận văn tốt nghiệp Em chân thành cảm ơn quý Thầy, Cô khoa Sau Đại học khoa Cơ – Điện – Điện tử, Trƣờng Đại học Công nghệ Thành phố Hồ Chí Minh tận tình truyền đạt kiến thức năm em học tập Với kiến thức đƣợc tiếp thu q trình học khơng tảng cho q trình nghiên cứu khóa luận mà cịn hành trang quí báu để em ứng dụng công việc cách vững tự tin Cuối em kính chúc q Thầy, Cơ dồi sức khỏe thành công nghiệp cao quý Đồng kính chúc học viên lớp cao học 13SCĐ21 ln dồi sức khỏe, đạt đƣợc nhiều thành công tốt đẹp cơng việc NGUYỄN THÙY LINH iii TĨM TẮT Nhiệm vụ đề tài thực thi ứng dụng kỹ thuật điều khiển phi tuyến để thiết kế điều khiển phù hợp cho mơ hình xe hai bánh tự cân Mơ hình tốn học xe hai bánh tự cân đƣợc xây dựng để làm sở thiết kế điều khiển Phƣơng pháp điều khiển phi tuyến đƣợc tìm hiểu sử dụng luận văn điều khiển trƣợt cho vòng điều khiển góc nghiêng kết hợp với điều hiển PD cho vịng điều khiển vị trí xe Thực mơ điều khiển trƣợt kết hợp với điều khiển PD cho đối tƣợng xe hai bánh tự cân với phần mềm Matlab/Simulink Mơ hình thực nghiệm đƣợc xây dựng để kiểm chứng điều khiển iv ABSTRACT The main point of this thesis is to design the non-linear control to manipulate the two-wheeled self-balancing robot The controller is designed based on the mathematic model of the two-wheeled self-balancing robot which is studied in this thesis The method used in this thesis is sliding mode controller for angular of robot and PD controller for the robot position in Matlab-Simulink presentation Simulation results show that the designed controller have good performances in terms of quick response, good balance and stability The experimental model is established to check the effectiveness of the designed controller v MỤC LỤC CHƢƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI 1.1 Đặt vấn đề: 1.2 Các cơng trình liên quan 1.2.1 Một số mơ hình robot hai bánh tự cân 1.2.1.1 Robot JOE - [2] 1.2.1.2 N-Bot, [19] 1.2.1.3 Xe hai bánh cân gom rác 1.2.1.4 Xe Segway PT , [20] 1.2.1.5 Xe di chuyển ngƣời hãng Toyota 1.2.2 Các báo cáo nghiên cứu khoa học liên quan 1.3 Phạm vi nghiên cứu CHƢƠNG CƠ SỞ LÝ THUYẾT LIÊN QUAN 2.1 Nguyên lý hoạt động xe hai bánh cân bằng: 2.2 Lý thuyết phƣơng pháp điều khiển Trƣợt 10 2.2.1 Điều khiển bám ( Tracking ) 10 2.2.2 Ổn định hóa ( regulation ) 10 2.3 Lý thuyết lọc Kalman 11 2.3.1 Bản chất toán học lọc kalman 13 2.3.2 Bản chất thống kê lọc Kalman 14 2.3.3 Giải thuật lập trình lọc Kalman rời rạc 15 2.4 So sánh lọc với lọc Kalman 17 CHƢƠNG 3: THIẾT KẾ BỘ ĐIỀU KHIỂN CHO XE HAI BÁNH CÂN BẰNG 20 3.1 Mơ hình hóa xe hai bánh tự cân 20 3.2 Thiết kế điều khiển trƣợt (Sliding mode) cho xe hai bánh cân 27 3.3 Đánh giá kết mô hệ thống 30 CHƢƠNG 4: THỰC NGHIỆM HỆ THỐNG 31 Chƣơng 5: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 42 Tài liệu tham khảo 43 vi DANH MỤC CÁC TỪ VIẾT TẮT DSP Digital Signal Processor Segway PT Segway Personal Transporter vii DANH MỤC CÁC HÌNH Hình 1.1 Robot dạng bánh xe lên dốc, trọng lƣợng dồn vào bánh trƣớc khiến lực ma sát giúp xe bám mặt đƣờng khơng đƣợc đảm bảo Hình 1.2 Robot dạng bánh xe xuống dốc, trọng lực dồn vào bánh sau khiến xe bị lật úp Hình 1.3 Robot JOE Hình 1.4: Mơ hình N-Bot Hình 1.5: Xe hai bánh “DustCart” gom rác tự động Hình 1.6: Các kiểu dáng xe Segway Hình 1.7: Robot chở ngƣời hãng Toyota Hình 1.8: Sơ đồ điều khiển Hình 2.1: Nguyên lý hoạt động xe hai bánh tự cân Hình 2.2: Cách di chuyển bánh xe cân 10 Hình 2.3: Thuật tốn lọc Kalman rời rạc 15 Hình 2.4: Góc nghiêng thân xe có khơng có lọc Kalman 17 Hình 3.1: Biểu diễn lực moment mơ hình 20 Hình 3.2: Sơ đồ mơ hình xe hai bánh mơ Matlab 25 Hình 3.3: Khi xe thằng đứng khơng có moment tác động 26 Hình 3.4: Xe nghiêng góc nhỏ, khơng có moment tác động 26 Hình 3.5: Khi có moment tác động vào thời điểm giây 27 Hình 3.6: Sơ đồ điều khiển trƣợt – PD mơ 28 Hình 3.7: Khối điều khiển trƣợt hệ thống mơ 29 Hình 3.8: Kết mơ hệ thống 30 Hình 4.1: Bảng vẽ thiết kế thân robot 31 Hình 4.2: Bảng thơng số động GA37V1 32 Hình 4.3: Gá gắn động GA37V1 32 viii Hình 4.4: Bánh xe V2 65mm 33 Hình 4.5: Board Arduino Uno 33 Hình 4.6: Cấu trúc board Arduino Uno 34 Hình 4.7: Sơ đồ nguyên lý board Arduino Uno 34 Hình 4.8: Board cảm biến MPU6050 36 Hình 4.9: Sơ đồ ngun lý board cơng suất L298 36 Hình 4.10: Board cơng suất L298 37 Hình 4.11: Kết nối Board Uno – Cảm biến MPU 6050 39 Hình 4.12: Kết nối board Uno - Board cơng suất L298 38 Hình 4.13: Lƣu đồ giải thuật 40 Hình 4.14: Cân khối lƣợng Robot 41 Hình 4.15: Robot hoạt động mặt phẳng mềm 41 Hình 4.16: Robot hoạt động mặt phẳng cứng 41 CHƢƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI 1.1 Đặt vấn đề: Trong ngành tự động hóa – điều khiển tự động nói chung điều khiển học nói riêng, mơ hình lắc ngƣợc đối tƣợng nghiên cứu điển hình đặc thù đặc tính động khơng ổn định mơ hình nên việc điều khiển đƣợc đối tƣợng thực tế đặt nhƣ thử thách Công nghệ robot đạt đƣợc nhiều thành tựu lớn xuất nhiều lĩnh vực nhƣ: robot dân dụng giúp việc gia đình, robot thực việc giải trí - quảng cáo, robot cơng nghiệp, robot tự hành thám hiểm lòng đất, robot thăm dò hành tinh khoa học vũ trụ Kết nghiên cứu mơ hình lắc ngƣợc bản, ví dụ nhƣ mơ hình xe-con lắc, lắc ngƣợc quay… ứng dụng kế thừa sang mơ hình tƣơng tự khác nhƣng có tính ứng dụng thực tiễn hơn, chẳng hạn nhƣ mơ hình tên lửa, mơ hình xe hai bánh tự cân bằng… Xuất phát từ ý tƣởng xe hai bánh tự cân Segway, phát minh tiếng Dean Kamen – kỹ sƣ ngƣời Mỹ vào năm 2001, mở hƣớng phát triển chế tạo robot mới, robot hai bánh tự cân Đây loại robot có hai bánh, tự giữ thăng bằng, di chuyển hoạt động dễ dàng khoảng không gian nơi mà linh hoạt, động, hiệu đƣợc đặt lên hàng đầu Với ƣu điểm đó, robot hai bánh tự cân nhận đƣợc nhiều quan tâm từ nhà nghiên cứu hãng sản xuất robot giới năm gần Robot hai bánh tự cân đƣợc xem nhƣ cầu nối kinh nghiệm mơ hình lắc ngƣợc với robot hai chân robot giống ngƣời Đây dạng robot có hai bánh đồng trục, khắc phục đƣợc nhƣợc điểm vốn có robot hai ba bánh kinh điển Các robot hai ba bánh kinh điển, theo có cấu tạo gồm bánh dẫn động bánh tự để đỡ trọng lƣợng robot Nếu trọng lƣợng đƣợc đặt nhiều vào bánh lái robot khơng ổn định dễ bị ngã, đặt vào nhiều bánh hai bánh khả bám Nhiều thiết kế robot di chuyển tốt địa hình phẳng nhƣng khơng thể di chuyển lên xuống địa hình lồi lõm mặt phẳng nghiêng Khi di chuyển lên đồi, trọng lƣợng robot dồn vào đuôi xe làm khả bám trƣợt ngã Tuy nhiên, loại robot hoạt động dựa mơ hình hệ lắc ngƣợc gắn lên trục có hai bánh xe, nên khuyết điểm cần phải có điều 48 kalmanX.setAngle(roll); kalmanY.setAngle(pitch); gyroXangle = roll; gyroYangle = pitch; compAngleX = roll; compAngleY = pitch; Serial.print("RCWork: "); Serial.println(RCWork); if(RCWork == true) { PCintPort::attachInterrupt(UP_DOWN_IN_PIN, calcUpDown,CHANGE); PCintPort::attachInterrupt(LEFT_RIGHT_IN_PIN, calcLeftRight,CHANGE); } PCintPort::attachInterrupt(SPD_INT_L, Encoder_L,FALLING); PCintPort::attachInterrupt(SPD_INT_R, Encoder_R,FALLING); timer = micros(); LEDTimer = millis(); lampTimer = millis(); } void loop() { double DataAvg[3]; double AngleAvg = 0; DataAvg[0]=0; DataAvg[1]=0; DataAvg[2]=0; while(1) { if(UpdateAttitude()) { DataAvg[2] = DataAvg[1]; DataAvg[1] = DataAvg[0]; DataAvg[0] = Angle_Car; AngleAvg = (DataAvg[0]+DataAvg[1]+DataAvg[2])/3; if(AngleAvg < 40 || AngleAvg > -40){ PWM_Calculate(); 49 Car_Control(); Serial.print(pwm_l); Serial.print(" "); Serial.print(pwm_r); Serial.print(" "); Serial.println( Angle_Car); } } UserComunication(); ProcessRC(); } } bool StopFlag = true; void PWM_Calculate() { float ftmp = 0; ftmp = (Speed_L + Speed_R) * 0.5; if( ftmp > 0) Position_AVG = ftmp +0.5; else Position_AVG = ftmp -0.5; Speed_Diff = Speed_L - Speed_R; Speed_Diff_ALL += Speed_Diff; Position_AVG_Filter = Position_AVG; Position_Add += Position_AVG_Filter; Position_Add += Speed_Need; Position_Add = constrain(Position_Add, -800, 800); pwm = (Angle_Car-8 + K_Base)* KA_P + Gyro_Car * KA_D + Position_Add * KP_I + Position_AVG_Filter * KP_P; if(pwm>255) pwm=255; if(pwm255? 255:pwm_r); } void UserComunication() { MySerialEvent(); if(SerialPacket.m_PackageOK == true) { SerialPacket.m_PackageOK = false; switch(SerialPacket.m_Buffer[4]) { case 0x01:break; case 0x02: UpdatePID(); break; case 0x03: CarDirection();break; case 0x04: SendPID();break; case 0x05: SavingData.KA_P = KA_P; 52 SavingData.KA_D = KA_D; SavingData.KP_P = KP_P; SavingData.KP_I = KP_I; SavingData.K_Base = K_Base; WritePIDintoEEPROM(&SavingData); break; case 0x06: break; case 0x07:break; default:break; } } } void UpdatePID() { unsigned int Upper,Lower; double NewPara; Upper = SerialPacket.m_Buffer[2]; Lower = SerialPacket.m_Buffer[1]; NewPara = (float)(Upper= 10000) { //10ms /* Update all the values */ while (i2cRead(0x3B, i2cData, 14)); accX = ((i2cData[0] 180) gyroXangle = kalAngleX; if (gyroYangle < -180 || gyroYangle > 180) gyroYangle = kalAngleY; /* Print Data */ #if // Set to to activate Serial.print(accX); Serial.print("\t"); Serial.print(accY); Serial.print("\t"); Serial.print(accZ); Serial.print("\t"); Serial.print(gyroX); Serial.print("\t"); Serial.print(gyroY); Serial.print("\t"); Serial.print(gyroZ); Serial.print("\t"); Serial.print("\t"); #endif #if 60 Serial.print(roll); Serial.print("\t"); // Serial.print(gyroXangle); Serial.print("\t"); // Serial.print(compAngleX); Serial.print("\t"); Serial.print(kalAngleX); Serial.print("\t"); Serial.print("\t"); Serial.print(pitch); Serial.print("\t"); // Serial.print(gyroYangle); Serial.print("\t"); // Serial.print(compAngleY); Serial.print("\t"); Serial.print(kalAngleY); Serial.println("\t"); #endif #if // Set to to print the temperature Serial.print("\t"); double temperature = (double)tempRaw / 340.0 + 36.53; Serial.print(temperature); Serial.print("\t"); #endif Angle_Car = kalAngleX; Gyro_Car = gyroXrate; return 1; } return 0; } void LEDBlink() { if((millis() - LEDTimer) > 500) { LEDTimer = millis(); blinkState = !blinkState; } } void calcUpDown() { if(digitalRead(UP_DOWN_IN_PIN) == HIGH) 61 { UpDownStart = micros(); } else { UpDownEnd = (uint16_t)(micros() - UpDownStart); bUpdateFlagsRC |= UP_DOWN_FLAG; } } void calcLeftRight() { if(digitalRead(LEFT_RIGHT_IN_PIN) == HIGH) { LeftRightStart = micros(); } else { LeftRightEnd = (uint16_t)(micros() - LeftRightStart); bUpdateFlagsRC |= LEFT_RIGHT_FLAG; } } #define RC_ERROR 100 #define RC_CAR_SPEED 160 int RCTurnSpeed = 80; void ProcessRC() { if(bUpdateFlagsRC) { noInterrupts(); if(bUpdateFlagsRC & UP_DOWN_FLAG) { UpDownIn = UpDownEnd; 62 if( abs(UpDownIn - 1500) > RC_ERROR ) { if(UpDownIn > 1500) Speed_Need = RC_CAR_SPEED; else Speed_Need = -RC_CAR_SPEED; } else { Speed_Need = 0; } } if(bUpdateFlagsRC & LEFT_RIGHT_FLAG) { LeftRightIn = LeftRightEnd; if( abs(LeftRightIn - 1500) > RC_ERROR) { if(LeftRightIn > 1500) Turn_Need = -RCTurnSpeed; else Turn_Need = RCTurnSpeed; } else { Turn_Need = 0; } } bUpdateFlagsRC = 0; interrupts(); } } ... hình robot hai bánh tự cân Robot hai bánh tự cân bằng, tự di chuyển hoạt động, không chở ngƣời nhƣ : Robot- JOE (mục 1.2.1.1), N-Bot (mục 1.2.1.2), Robot dọn rác (mục 1.2.1.3) Xe hai bánh tự cân bằng, ... xe hai bánh tự cân bằng, tài liệu tham khảo số [1] , [2] , [3] , [5] - Sử dụng phƣơng pháp điều khiển phi tuyến để thiết kế điều khiển cho mơ hình xe hai bánh tự cân bằng, hệ lắc ngƣợc + Sử dụng. .. xe hai bánh tự cân + Thực thi ứng dụng phƣơng pháp điều khiển trƣợt cho hệ thống + Thiết kế điều khiển dựa vào hai phƣơng pháp điều khiển cho xe hai bánh tự cân Matlab Simulink + Sơ đồ điều khiển

Ngày đăng: 16/01/2023, 13:18

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w