สารบัญ:

หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID: 3 ขั้นตอน
หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID: 3 ขั้นตอน

วีดีโอ: หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID: 3 ขั้นตอน

วีดีโอ: หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID: 3 ขั้นตอน
วีดีโอ: Robotics Programming: PID Algorithm - Wall Following and Balancing 2024, พฤศจิกายน
Anonim
หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID
หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID

โครงการนี้เกิดขึ้นเพราะฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับอัลกอริธึมการควบคุมและวิธีการใช้ลูป PID ที่ใช้งานได้อย่างมีประสิทธิภาพ โปรเจ็กต์ยังอยู่ในขั้นตอนการพัฒนาเนื่องจากยังไม่ได้เพิ่มโมดูลบลูทูธ ซึ่งจะช่วยให้สามารถควบคุมหุ่นยนต์จากสมาร์ทโฟนที่ใช้บลูทูธได้

มอเตอร์ DC N20 ที่ใช้นั้นค่อนข้างถูกและด้วยเหตุนี้จึงมีการเล่นจำนวนมาก สิ่งนี้นำไปสู่การกระตุกเล็กน้อยเมื่อมอเตอร์เอาชนะ 'การหย่อน' เนื่องจากใช้แรงบิดกับล้อ ดังนั้นจึงเป็นไปไม่ได้เลยที่จะให้การเคลื่อนไหวที่ราบรื่นสมบูรณ์แบบ รหัสที่ฉันเขียนนั้นเรียบง่ายพอสมควร แต่แสดงให้เห็นถึงความสามารถของอัลกอริธึม PID อย่างมีประสิทธิภาพ

สรุปโครงการ:

แชสซีของหุ่นยนต์ถูกพิมพ์ 3 มิติโดยใช้เครื่องพิมพ์ Ender 3 และได้รับการออกแบบให้กดเข้าด้วยกัน

หุ่นยนต์ถูกควบคุมโดย Arduino Uno ซึ่งใช้ข้อมูลเซ็นเซอร์จาก MPU6050 และควบคุมมอเตอร์กระแสตรงผ่านไดรเวอร์มอเตอร์ภายนอก ใช้พลังงานจากแบตเตอรี่ 7.4V, 1500mAh ตัวขับมอเตอร์ควบคุมสิ่งนี้เป็น 5V เพื่อจ่ายไฟให้กับ Arduino และจ่ายไฟ 7.4V ให้กับมอเตอร์

ซอฟต์แวร์นี้เขียนขึ้นใหม่ทั้งหมดโดยใช้ไลบรารี 'Arduino-KalmanFilter-master' และ 'Arduino-MPU6050-master' จาก gitHub

เสบียง:

  • ชิ้นส่วนพิมพ์ 3 มิติ
  • Arduino UNO
  • MPU6050 เซนเซอร์ 6 แกน
  • ไดรเวอร์ DC มอเตอร์
  • มอเตอร์ N20 DC (x2)
  • แบตเตอรี่ 9V

ขั้นตอนที่ 1: การสร้างหุ่นยนต์

Robot Build
Robot Build
Robot Build
Robot Build
Robot Build
Robot Build

พิมพ์และประกอบ

โครงสร้างทั้งหมดควรเป็นแบบกดพอดี แต่ฉันใช้ superglue เพื่อยึดส่วนประกอบเพื่อให้แน่ใจว่าหุ่นยนต์มีความแข็งทั้งหมดเมื่อทำสมดุล

ฉันได้ออกแบบชิ้นส่วนต่างๆ ใน Fusion 360 และได้ปรับแต่ละส่วนให้เหมาะสมเพื่อพิมพ์โดยไม่ต้องรองรับเพื่อให้มีความคลาดเคลื่อนที่เข้มงวดมากขึ้นและพื้นผิวที่สะอาดขึ้น

การตั้งค่าที่ใช้กับเครื่องพิมพ์ Ender 3 คือ 0.16 มม. ความสูงของเลเยอร์ @ 40% สำหรับการเติมทุกส่วน

ขั้นตอนที่ 2: หุ่นยนต์พิมพ์ 3 มิติ

หุ่นยนต์พิมพ์ 3 มิติ
หุ่นยนต์พิมพ์ 3 มิติ

แชสซี (x1)

ล้อซ้าย (x2)

ตัวเรือนมอเตอร์ด้านซ้าย (x2)

เคส Arduino (x1)

ขั้นตอนที่ 3: อัลกอริทึมการควบคุม PID

อัลกอริทึมการควบคุม PID
อัลกอริทึมการควบคุม PID

ฉันได้เขียนอัลกอริทึมการควบคุม PID ตั้งแต่เริ่มต้นโดยใช้ไลบรารี 'Arduino-KalmanFilter-master' และ 'Arduino-MPU6050-master' จาก gitHub

พื้นฐานของอัลกอริทึมมีดังนี้:

  • อ่านข้อมูลดิบจาก MPU6050
  • ใช้ตัวกรองคาลมานเพื่อวิเคราะห์ข้อมูลจากทั้งไจโรสโคปและมาตรความเร่งเพื่อขจัดความไม่ถูกต้องในการอ่านไจโรสโคปเนื่องจากการเร่งความเร็วของเซ็นเซอร์ ค่านี้จะส่งกลับค่าที่ค่อนข้างเรียบสำหรับระยะพิทช์ของเซ็นเซอร์ในหน่วยองศาเป็นทศนิยมสองตำแหน่ง
  • คำนวณ E rror ในมุม เช่น มุมระหว่างเซ็นเซอร์กับจุดตั้งค่า
  • คำนวณข้อผิดพลาดตามสัดส่วนเป็น (ค่าคงที่ของสัดส่วน x ข้อผิดพลาด)
  • คำนวณ Integral Error เป็นผลรวมของ (Constant of Integration x error)
  • คำนวณข้อผิดพลาดอนุพันธ์เป็นค่าคงที่เป็น [(ค่าคงที่ส่วนต่าง) x (การเปลี่ยนแปลงในข้อผิดพลาด / การเปลี่ยนแปลงในเวลา)]
  • รวมข้อผิดพลาดทั้งหมดเพื่อกำหนดความเร็วเอาต์พุตที่จะส่งไปยังมอเตอร์
  • คำนวณทิศทางที่จะหมุนมอเตอร์ตามสัญญาณของมุมผิดพลาด
  • ลูปจะทำงานอย่างไม่มีกำหนดและสร้างจากเอาต์พุตเมื่ออินพุตแตกต่างกันไป เป็นลูปป้อนกลับ โดยใช้ค่าเอาต์พุตเป็นค่าอินพุตใหม่สำหรับการวนซ้ำครั้งต่อไป

ขั้นตอนสุดท้ายคือการปรับแต่งพารามิเตอร์ PID loop Kp, Ki & Kd

  1. จุดเริ่มต้นที่ดีคือการเพิ่ม Kp อย่างช้าๆ จนกว่าหุ่นยนต์จะแกว่งไปมารอบๆ จุดสมดุลและสามารถตกได้
  2. ถัดไป เริ่ม Kd ที่ประมาณ 1% ของค่า Kp และเพิ่มอย่างช้าๆ จนกว่าการสั่นจะหายไปและหุ่นยนต์จะร่อนได้อย่างราบรื่นเมื่อถูกผลัก
  3. สุดท้าย เริ่มต้นด้วย Ki ประมาณ 20% ของ Kp และเปลี่ยนแปลงไปจนกว่าหุ่นยนต์จะ "เกิน" เซ็ตพอยต์เพื่อจับการตกและกลับสู่แนวตั้ง

แนะนำ: