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