วิธีที่ถูกต้องในการเขียนตัวควบคุมการหมุนสำหรับหุ่นยนต์ฟุตบอลคืออะไร?


14

ลองนึกภาพการเขียนโปรแกรมหุ่นยนต์ฟุตบอล 3 ล้อ คุณใช้คอนโทรลเลอร์ชนิดใดในการหมุน P? PID?

เป้าหมายสำหรับคอนโทรลเลอร์นี้คือควรทำให้หุ่นยนต์ยืนในมุมที่กำหนด (0 องศา) แล้วหมุนกลับหากหมุนด้วยมือหรือหุ่นยนต์อื่น

ฉันใช้สเต็ปเปอร์มอเตอร์สำหรับหุ่นยนต์ของฉันและไม่ใช่เซอร์โวดังนั้นฉันต้องใช้สิ่งนี้ในซอฟต์แวร์ของฉัน!

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

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correctionเป็นช่วงซึ่งหุ่นยนต์ไม่มีการเคลื่อนไหว degreeเป็นตัวเลขระหว่าง -127 ถึง 128 ซึ่งถูกส่งคืนจากเข็มทิศ motorSpeedเป็นตัวเลขระหว่าง 0 ถึง 255 ซึ่งใช้กับ PWM


สมมุติว่ารูทีนนี้ทำงานทุกครั้งที่คอมปาสร้างมูลค่าใหม่ให้degreeหรือไม่
Mark Booth

@ MarkBooth ฉันมีรหัสของฉันในขณะที่ (1) ดังนั้นในทุก ๆ รอบจะได้รับค่าจากเข็มทิศให้กับฟังก์ชั่นแล้วนำผลลัพธ์ไปใช้กับมอเตอร์
Miro Markaravanes

ฉันจะตรวจสอบว่าคอนโทรลเลอร์ใช้เซอร์โวประเภทใดเนื่องจากคุณพยายามจำลองพฤติกรรมเซอร์โวในซอฟต์แวร์
Chris Laplante

ฉันไม่ใช้เซอร์โว ฉันใช้สเต็ปมอเตอร์ดังนั้นจึงไม่มีพฤติกรรมดังกล่าวในมอเตอร์
Miro Markaravanes

2
สวัสดีมิโรในการแลกเปลี่ยนสแต็คจะดีกว่าที่จะแก้ไขคำถามของคุณในการตอบคำถามในความคิดเห็นวิธีที่ความคิดเห็นสามารถจัดระเบียบ (ลบ) เพื่อที่พวกเขาจะไม่หันเหความสนใจจากคำถามนั้น
Mark Booth

คำตอบ:


7

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

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

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

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

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

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

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

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


8

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

ฉันได้ทำหุ่นยนต์ในสาขานี้แล้วนี่คือสิ่งที่เราใช้ในหุ่นยนต์ของเราทำงานที่ไม่เหมือนกันกับคุณ ...


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