เข้าหาการใช้ PID เพื่อให้หุ่นยนต์ต่างขับตรง


13

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

นี่คือวิธีที่ฉันจะทำ: ฉันจะนำความแตกต่างระหว่างตัวเข้ารหัสซ้ายและขวาผูกข้อผิดพลาดระหว่างบางช่วงทำให้เป็นมาตรฐานจาก [-1, 1] แล้วแมปไปยังกำลังมอเตอร์ 0 ถึง 1 ดังนั้นถ้าฉันและ D เป็นศูนย์และเราได้รับข้อผิดพลาด 1 (ดังนั้นมอเตอร์ด้านซ้ายหันมากกว่ามอเตอร์ด้านขวา) จากนั้นมอเตอร์ด้านซ้ายจะถูกตั้งค่าเป็น 0 และมอเตอร์ด้านขวาตั้งค่าเป็น 1 (ทำให้เกิดแรง ซ้าย).

มีปัญหาอะไรกับเรื่องนี้ไหม? อะไรคือแนวทางที่ดีกว่า

คำตอบ:


5

มีปัญหาอะไรกับเรื่องนี้ไหม?

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

อะไรคือแนวทางที่ดีกว่า

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

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

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

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

ปัญหาหนึ่งคือแม้ว่าล้อซ้ายและล้อขวาของคุณทั้งคู่มีการย้ายตัวเข้ารหัส 1,000 ครั้ง แต่คุณอาจยังอยู่ในตำแหน่งที่แตกต่างกันในการวิ่งสองแบบที่แตกต่างกัน

ตัวอย่างเช่นสมมติว่าคุณมีข้อผิดพลาดสูงสุดต่อไปนี้คือ 10 ตัวนับจำนวนตัวเข้ารหัสและมอเตอร์ของคุณกำลังทำงานด้วยความเร็วตัวเข้ารหัสจำนวนตัวเข้ารหัส 10 ตัวต่อการวนซ้ำ PID มอเตอร์ด้านซ้ายของคุณอาจเคลื่อนไหว 5,10,10,10 ... 10,5 ในขณะที่มอเตอร์ด้านขวาของคุณอาจมีโปรไฟล์ของ 4,11,10,10 ... 10,5 และแม้แต่ความแตกต่างเล็กน้อยในการเร่งความเร็วในตอนเริ่มต้น การเคลื่อนที่อาจทำให้หุ่นยนต์เคลื่อนที่ไปในทิศทางที่ผิดเล็กน้อย ไม่เพียงเท่านั้น แต่ยิ่งคุณก้าวไปในทิศทางนั้นมากขึ้นความผิดพลาดก็จะยิ่งมากขึ้นเท่านั้น นี่คือสิ่งที่เรากำลังพูดถึงเมื่อเราพูดถึงข้อผิดพลาดของAbbeและหากไม่มีโมเดลจลศาสตร์ที่ซับซ้อนหรือการอ้างอิงภายนอกบางประเภทคุณจะไม่สามารถแก้ไขได้

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


2

ฉันมีบอทที่มีล้อขับเคลื่อน 2 ล้ออย่างอิสระ

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

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

ตัวอย่างเช่นฉันตั้งความเร็วเป็น 50% และมุ่งหน้าไปที่ 20 องศา โดยปกติแล้วจะขับทั้งสองมอเตอร์ด้วยพลังงาน 50% แต่ในขณะที่ส่วนหัวเดินออกไป PID จะทำการปรับเพิ่มพลังงานบางอย่างให้กับมอเตอร์หนึ่งและเอาพลังงานบางส่วนออกจากกันดังนั้นคุณอาจจบลงด้วยการแบ่งพลังงาน 45% / 55% ระหว่างมอเตอร์เมื่อ pid แก้ไขส่วนหัว

ไจโรมีปัญหาแม้ว่าพวกเขาจะใช้เวลาสอบเทียบฉันยังคงพบว่า gryo ของฉันมีความเร็วประมาณ 1 องศาต่อนาที อาจเป็นเพราะโลกหมุน 15 องศาต่อชั่วโมงนี่ควรพิจารณาในระยะยาวด้วย

ตามที่ระบุไว้ก่อนหน้าเข้ารหัสบนล้อเป็นความคิดที่ดีสำหรับการรู้ว่าคุณเดินทางไปไกลแค่ไหน


ฉันชอบที่จะเห็นรหัสของคุณสำหรับสิ่งนี้ ฉันเริ่มต้นเส้นทางเดียวกันกับ gyro / accelerometer / magnetometer แต่ฉันยังอยู่ในช่วงเริ่มต้นของการพยายามทำความเข้าใจกับการอ่านจากเซ็นเซอร์เหล่านี้
Ron Smith

นี่คือลิงค์ไปยังรหัสของฉันฉันเกรงว่าอาจไม่ง่ายที่จะเข้าใจ github.com/rlsutton1/piBot/blob/master/src/main/java/au/com/…
Robert Sutton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.