สารบัญ:

หุ่นยนต์ทรงตัวสองล้อ: 7 ขั้นตอน
หุ่นยนต์ทรงตัวสองล้อ: 7 ขั้นตอน

วีดีโอ: หุ่นยนต์ทรงตัวสองล้อ: 7 ขั้นตอน

วีดีโอ: หุ่นยนต์ทรงตัวสองล้อ: 7 ขั้นตอน
วีดีโอ: หุ่นยนต์ทรงตัวเองสองล้อ ติดกล้อง GOPRO HERO BLACK 7 (review) adeept balancing robot 2024, พฤศจิกายน
Anonim
หุ่นยนต์ทรงตัวสองล้อ
หุ่นยนต์ทรงตัวสองล้อ

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

หุ่นยนต์ทรงตัวคืออะไร?

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

มันทำงานอย่างไร?

การเปรียบเทียบง่ายๆ ที่ต้องพิจารณาคือลูกตุ้มคว่ำ โดยจุดศูนย์กลางมวลอยู่เหนือจุดหมุน อย่างไรก็ตาม ในกรณีของเรา เรากำลังจำกัดลูกตุ้มให้อิสระ 1 ดีกรีด้วยการหมุนแกนเดียว ในกรณีของเราคือแกนหมุนของสองล้อ เนื่องจากสิ่งรบกวนใด ๆ จะทำให้หุ่นยนต์ล้ม เราจึงต้องการวิธีรักษาสมดุลของหุ่นยนต์อย่างแข็งขัน นี่คือจุดเริ่มต้นของอัลกอริธึมแบบวงปิด (ตัวควบคุม PID) ของเรา โดยรู้ว่าหุ่นยนต์ของเราตกลงไปในทิศทางใด เราสามารถปรับทิศทางการหมุนของมอเตอร์เพื่อให้ระบบมีความสมดุล

อัลกอริทึมแบบวงปิดทำงานอย่างไร

หลักการพื้นฐานในการรักษาสมดุลของหุ่นยนต์คือ หากหุ่นยนต์ล้มไปข้างหน้า มันจะชดเชยด้วยการขยับส่วนล่างของหุ่นยนต์ไปข้างหน้าเพื่อจับตัวเองและให้อยู่ในแนวตั้ง ในทำนองเดียวกัน หากหุ่นยนต์ถอยหลัง มันจะชดเชยด้วยการขยับส่วนล่างของหุ่นยนต์ไปข้างหลังเพื่อจับตัวมันเอง

ดังนั้น เราต้องทำสองสิ่งที่นี่ อย่างแรก เราต้องคำนวณมุมเอียง (Roll) ที่หุ่นยนต์กำลังประสบอยู่ และด้วยเหตุนี้ เราจึงต้องควบคุมทิศทางการหมุนของมอเตอร์

เราจะวัดมุมเอียงได้อย่างไร?

ในการวัดมุมเอียง เราจะใช้หน่วยวัดแรงเฉื่อย โมดูลเหล่านี้รวมมาตรความเร่งและไจโรสโคป

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

อย่างไรก็ตาม ปัญหาในการใช้เซ็นเซอร์ดังกล่าวคือ:

  • มาตรความเร่งมีเสียงดังมากแต่จะสม่ำเสมอเมื่อเวลาผ่านไป มุมจะแตกต่างกันไปตามการเคลื่อนไหวในแนวนอนอย่างกะทันหัน
  • ในทางกลับกันค่าไจโรสโคปจะลอยไปตามกาลเวลา แต่ในตอนแรกมันค่อนข้างแม่นยำ

สำหรับคำแนะนำนี้ ฉันจะไม่ใช้ตัวกรองแทนที่จะใช้ Digital Motion Processing (DMP) ออนบอร์ด คนอื่นใช้ฟิลเตอร์เสริมเพื่อรับสัญญาณที่ราบรื่น คุณสามารถเลือกวิธีใดก็ได้ที่คุณต้องการ เมื่อหุ่นยนต์สมดุลกับการใช้งานอย่างใดอย่างหนึ่ง

เสบียง

อะไหล่:

  1. Arduino Pro Mini 3.3V 8 พร้อม ATMEGA328. 8 เมกะเฮิร์ตซ์
  2. FT232RL 3.3V 5.5V FTDI USB เป็นโมดูลอะแดปเตอร์อนุกรม TTL
  3. โมดูล GY-521 พร้อม MPU-6050
  4. มอเตอร์เกียร์ไมโคร N20 6V - 300rpm
  5. ตัวขับมอเตอร์ L298N
  6. LM2596S ตัวแปลงบั๊ก DC เป็น DC
  7. แบตเตอรี่ (แบตเตอรี่ลิเธียมไอออนแบบรีชาร์จ 9.7V)
  8. สายรัดแบตเตอรี่
  9. แผงวงจร PCB ต้นแบบสองตัว
  10. สายจัมเปอร์หมุดส่วนหัวชายและหญิง

เครื่องมือ:

  1. หัวแร้งและหัวแร้ง
  2. ตัวเว้นวรรคหกเหลี่ยมไนลอน
  3. ชุดไขควงพรีซิชั่น
  4. เครื่องพิมพ์ 3 มิติ

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

เนื่องจากฉันสามารถเข้าถึงเครื่องพิมพ์ 3 มิติได้ ฉันจึงตัดสินใจพิมพ์ 3 มิติของแชสซีและใช้ส่วนแยกเพื่อเชื่อมต่อทุกอย่างเข้าด้วยกัน

หุ่นยนต์ประกอบด้วย 4 ชั้น

  1. ชั้นล่างเชื่อมต่อมอเตอร์และมีจุดยึดสำหรับโมดูลไดรเวอร์มอเตอร์ L298N
  2. เลเยอร์ถัดไปเป็นที่เก็บบอร์ดต้นแบบที่มี Arduino pro mini และหัวต่อที่บัดกรีไว้
  3. ชั้นที่สามติดตั้ง IMU
  4. ชั้นบนสุดซึ่งฉันเรียกว่า "ชั้นกันชน" ยึดแบตเตอรี่ ตัวแปลงบั๊ก และสวิตช์การเงิน

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

ขั้นตอนที่ 2: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ

ฉันบัดกรีพินส่วนหัวของเพศหญิงเข้ากับบอร์ดที่สมบูรณ์แบบเพื่อจับคู่กับพินส่วนหัวของ Arduino pro mini ต่อจากนี้ ฉันบัดกรีหมุดส่วนหัวของตัวผู้บนบอร์ดเพื่อให้สามารถเข้าถึง I/O ได้ ส่วนประกอบที่เหลือถูกติดตั้งเข้ากับเฟรมที่พิมพ์ 3 มิติและเชื่อมต่อโดยใช้สายจัมเปอร์

ขั้นตอนที่ 3: ทฤษฎีการควบคุม

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

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

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

ขั้นตอนที่ 4: การใช้ MPU 6050

ห้องสมุด MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

การปรับเทียบออฟเซ็ตเซ็นเซอร์บางตัวเท่านั้นที่เป็นแบบจำลองของกันและกัน ดังนั้น หากคุณทดสอบ MPU 6050 สองตัว คุณอาจได้รับค่าความเร่งและไจโรสโคปที่แตกต่างกันเมื่อวางนิ่งบนพื้นผิวเดียวกัน เพื่อเอาชนะการชดเชยมุมคงที่นี้ เราต้องฉลองเซ็นเซอร์แต่ละตัวที่เราใช้ เรียกใช้สคริปต์นี้:

www.i2cdevlib.com/forums/topic/96-arduino-…

เขียนโดย Luis Rodenas เราจะได้รับการชดเชย ข้อผิดพลาดออฟเซ็ตสามารถกำจัดได้โดยการกำหนดค่าออฟเซ็ตในรูทีน setup()

การใช้ Digital Motion Processor

MPU6050 ประกอบด้วย DMP (Digital Motion Processor)

DMP คืออะไร? คุณสามารถนึกถึง DMP เป็นไมโครคอนโทรลเลอร์ออนบอร์ดที่ประมวลผลการเคลื่อนไหวที่ซับซ้อนจากไจโรสโคป 3 แกนและมาตรความเร่ง 3 แกนบน mpu6050 โดยใช้อัลกอริธึมฟิวชั่นการเคลื่อนไหวของตัวเอง การถ่ายการประมวลผลที่ Arduino จะทำอย่างอื่น

วิธีการใช้งาน? หากต้องการทราบวิธีใช้ DMP ให้ทำตามตัวอย่างภาพร่าง MPU6050_DMP6 ที่มาพร้อมกับไลบรารี MPU6050 (ใน Arduino IDE: File->Example->MPU6050->MPU6050_DMP6) นี่เป็นโอกาสที่ดีในการตรวจสอบเซ็นเซอร์ของคุณใช้งานได้จริงและการเดินสายนั้นถูกต้อง

ขั้นตอนที่ 5: การเข้ารหัส

ฉันใช้ Arduino IDE และอินเทอร์เฟซ FTDI เพื่อตั้งโปรแกรม Arduino pro mini

การใช้ตัวอย่าง Sketch(MPU6050_DMP6) ที่มาพร้อมกับไลบรารี MPU6050 เป็นรหัสฐานของฉัน ฉันได้เพิ่มฟังก์ชัน PID() และ MotorDriver()

เพิ่มห้องสมุด

  • MPU6050: ในการใช้เซ็นเซอร์ MPU6050 เราจะต้องดาวน์โหลดไลบรารีสำหรับนักพัฒนา I2C จาก Jeff Rowberg และเพิ่มลงในโฟลเดอร์ Arduino "libraries" ที่พบในไฟล์โปรแกรมบนคอมพิวเตอร์ของคุณ
  • Wire: เราต้องการไลบรารี Wire เพื่อให้เราสื่อสารกับอุปกรณ์ I2C ได้

รหัสหลอก

รวมห้องสมุด:

  • Wire.h
  • MPU6050
  • I2Cdev.h

เริ่มต้นตัวแปร ค่าคงที่ และอ็อบเจกต์

ติดตั้ง ()

  • ตั้งค่าโหมดพินสำหรับควบคุมมอเตอร์
  • ตั้งค่าโหมดพินสำหรับ LED แสดงสถานะ
  • เริ่มต้น MPU6050 และตั้งค่าออฟเซ็ต

พีไอดี ()

คำนวณค่า PID

MotorDriver (การตอบสนอง PID)

ใช้ค่า PID เพื่อควบคุมความเร็วและทิศทางของมอเตอร์

วน ()

  • รับข้อมูลจาก DMP
  • เรียก PID() กับ MotorDriver() functions

ขั้นตอนที่ 6: ขั้นตอนการปรับแต่ง PID

นี่เป็นส่วนที่น่าเบื่อที่สุดของโครงการและต้องใช้ความอดทนเล็กน้อย เว้นแต่คุณจะโชคดีมาก นี่คือขั้นตอน:

  1. ตั้งค่าเทอม I และ D เป็น 0
  2. จับหุ่นยนต์ปรับ P เพื่อให้หุ่นยนต์เพิ่งเริ่มสั่นเกี่ยวกับตำแหน่งสมดุล
  3. ด้วยการตั้งค่า P ให้เพิ่ม I เพื่อให้หุ่นยนต์เร่งความเร็วได้เร็วขึ้นเมื่อไม่สมดุล ด้วยการปรับค่า P และ I อย่างเหมาะสม หุ่นยนต์ควรจะสามารถปรับสมดุลตนเองได้อย่างน้อยสองสามวินาที โดยมีการสั่นบ้าง
  4. สุดท้ายเพิ่ม D ลดการสั่น

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

ขั้นตอนที่ 7: สรุป

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

คำแนะนำสำหรับการปรับปรุง:

  • มอเตอร์ที่เร็วกว่าด้วยแรงบิดที่สูงกว่า เช่น สำหรับมอเตอร์กระแสตรง พิกัดแรงดันไฟฟ้าจะสูงกว่าแรงบิดที่สูงกว่า
  • รับแบตเตอรี่ที่หนักกว่าหรือเพียงแค่ขยับมวลให้สูงขึ้นเล็กน้อย
  • เปลี่ยนล้อที่พิมพ์ 3 มิติด้วยล้อยางเพื่อเพิ่มการยึดเกาะ

แนะนำ: