ฉันจะใช้ห้องสมุด Arduino PID เพื่อขับเคลื่อนหุ่นยนต์เป็นเส้นตรงได้อย่างไร?


19

ฉันต้องการสร้างหุ่นยนต์ Arduino ที่มี 2 ล้อตัวเข้ารหัสพื้นที่สี่เหลี่ยมจัตุรัสในแต่ละล้อชิปควบคุม H-bridge (หรือตัวควบคุมมอเตอร์) และลูกล้อ ฉันต้องการใช้ห้องสมุด PID เพื่อให้แน่ใจว่าความเร็วเป็นสัดส่วนกับระยะทางในการเดินทาง

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


คำถามนี้มีสถานที่ที่นี่เช่นกันเพราะมันจะขึ้นอยู่เฉพาะรอบ ๆห้องสมุด Arduino PID
Anindo Ghosh

คำตอบ:


18

ข้อมูลจำเพาะ

ดูตัวอย่างพื้นฐานของ PIDฉันคิดว่าคุณต้องยกตัวอย่างคอนโทรลเลอร์ PID สองชุดหนึ่งชุดสำหรับแต่ละวงล้อเข้ารหัสและ pwm:

PID leftPID(&InputLeft, &OutputLeft, &SetpointLeft,2,5,1, DIRECT);
PID rightPID(&InputRight, &OutputRight, &SetpointRight,2,5,1, DIRECT);

จากนั้นในสิ่งที่loop()เทียบเท่าคุณเพียงแค่อ่านตัวเข้ารหัสทั้งสองผ่านแต่ละค่าตัวเข้ารหัสไปยังค่าที่เกี่ยวข้องPIDและสุดท้ายเขียนค่า PWM ทั้งสอง

ในตอนนี้SetpointLeftและSetpointRightสามารถชี้ไปที่ค่าเดียวกันได้จริง แต่การกำหนดแยกต่างหากเช่นนี้ช่วยให้คุณสามารถเพิ่มความสามารถในการเปิดในภายหลัง

แนวคิด

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

การคำนวณที่ตายแล้ว

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

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

การกำหนดตำแหน่งสัมพัทธ์

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

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

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

การกำหนดตำแหน่งที่แน่นอน

วิธีเดียวที่จะได้รับสิ่งนี้คือการมีจุดอ้างอิงนอกกรอบยานพาหนะของคุณ

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

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

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

เป็นการผสมผสานระหว่างเทคนิค

ท้ายที่สุดคุณอาจต้องใช้เทคนิคเหล่านี้ร่วมกันทั้งนี้ขึ้นอยู่กับข้อกำหนดด้านความแม่นยำของคุณ

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

มีตัวเลือกมากมายที่นี่และสิ่งที่คุณเลือกจะขึ้นอยู่กับสิ่งที่คุณต้องการ


1

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


0

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

คุณกำลังดูตัวกรองคาลมาน หากคุณต้องการรวมข้อมูลตัวเข้ารหัสเข็มทิศและมาตรความเร่งเข้าด้วยกันเพื่อให้คุณได้หัวเรื่อง


0

ลิงค์นี้เป็นตัวอย่างที่ดีโดยไม่มีการคำนวณ PID ​​สองครั้ง นอกจากนี้คุณยังสามารถใช้ imu / เข็มทิศเพื่อวัดเส้นทางตรง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.