การแข่งขันหุ่นยนต์ระดับนานาชาติ - กฎเกณฑ์ - ตัวอย่างหุ่นยนต์ - หุ่นยนต์วิถีวิถีที่ใช้ LEGO EV3 ตัวควบคุม PID แบบอินทิกรัลอินทิกรัลตามสัดส่วนใน Lego Mindstorms Robotics ตัวควบคุมตามสัดส่วน การควบคุมหุ่นยนต์ด้วยสี่ตัว
หนึ่งในการเคลื่อนไหวขั้นพื้นฐานในการก่อสร้างแบบเบาคือการเดินตามเส้นสีดำ
ทฤษฎีทั่วไปและตัวอย่างเฉพาะของการสร้างโปรแกรมมีการอธิบายไว้บนเว็บไซต์ wroboto.ru
ฉันจะอธิบายวิธีที่เราใช้สิ่งนี้ในสภาพแวดล้อม EV3 เนื่องจากมีความแตกต่าง
สิ่งแรกที่หุ่นยนต์ต้องรู้คือความหมายของ “จุดเหมาะ” ที่อยู่บนขอบขาวดำ
ตำแหน่งของจุดสีแดงในรูปตรงกับตำแหน่งนี้ทุกประการ
ตัวเลือกการคำนวณที่เหมาะสมที่สุดคือการวัดค่าขาวดำและรับค่าเฉลี่ยเลขคณิต
คุณสามารถทำได้ด้วยตนเอง แต่ข้อเสียสามารถมองเห็นได้ทันที: ในช่วงเวลาสั้นๆ การส่องสว่างอาจเปลี่ยนแปลง และค่าที่คำนวณได้จะไม่ถูกต้อง
ดังนั้นคุณสามารถมีหุ่นยนต์มาทำมันได้
ในระหว่างการทดลอง เราพบว่าไม่จำเป็นต้องวัดทั้งขาวดำ วัดได้เฉพาะสีขาวเท่านั้น และค่าจุดเหมาะจะคำนวณเป็นค่าสีขาวหารด้วย 1.2 (1.15) ขึ้นอยู่กับความกว้างของเส้นสีดำและความเร็วของหุ่นยนต์
ค่าที่คำนวณได้จะต้องเขียนลงในตัวแปรเพื่อที่จะเข้าถึงได้ในภายหลัง
การคำนวณ “จุดเหมาะ”
พารามิเตอร์ถัดไปที่เกี่ยวข้องกับการเคลื่อนที่คือค่าสัมประสิทธิ์การหมุน ยิ่งมีขนาดใหญ่เท่าใด หุ่นยนต์ก็จะตอบสนองต่อการเปลี่ยนแปลงของการส่องสว่างได้รวดเร็วยิ่งขึ้นเท่านั้น แต่ค่าที่มากเกินไปจะทำให้หุ่นยนต์โยกเยก ค่าจะถูกเลือกจากการทดลองเป็นรายบุคคลสำหรับการออกแบบหุ่นยนต์แต่ละตัว
พารามิเตอร์สุดท้ายคือกำลังพื้นฐานของมอเตอร์ ส่งผลต่อความเร็วของหุ่นยนต์ การเพิ่มความเร็วในการเคลื่อนที่จะทำให้เวลาตอบสนองของหุ่นยนต์เพิ่มขึ้นต่อการเปลี่ยนแปลงของแสงสว่าง ซึ่งอาจนำไปสู่การออกนอกวิถีได้ ค่าจะถูกเลือกแบบทดลองด้วย
เพื่อความสะดวก พารามิเตอร์เหล่านี้ยังสามารถเขียนลงในตัวแปรได้
อัตราส่วนการหมุนและกำลังพื้นฐาน
ตรรกะของการเคลื่อนที่ไปตามเส้นสีดำมีดังนี้: วัดค่าเบี่ยงเบนจากจุดในอุดมคติ ยิ่งมีขนาดใหญ่เท่าใด หุ่นยนต์ก็จะยิ่งแข็งแกร่งขึ้นเท่านั้นที่จะพยายามกลับไปหามัน
ในการทำเช่นนี้เราคำนวณตัวเลขสองตัว - ค่ากำลังของมอเตอร์ B และ C แต่ละตัวแยกกัน
ในรูปแบบสูตรมีลักษณะดังนี้:
โดยที่ Isens คือค่าที่อ่านได้จากเซ็นเซอร์วัดแสง
ในที่สุด การดำเนินการใน EV3 สะดวกที่สุดในการจัดเรียงเป็นบล็อกแยกต่างหาก
การนำอัลกอริทึมไปใช้
นี่เป็นอัลกอริธึมที่ใช้ในหุ่นยนต์สำหรับหมวดหมู่กลางของ WRO 2015
ตัวควบคุมตามสัดส่วน
คำอธิบาย
ในการควบคุมอัตโนมัติ การกระทำการควบคุม u(t) มักจะเป็นฟังก์ชันของข้อผิดพลาดแบบไดนามิก - ค่าเบี่ยงเบน e(t) ของตัวแปรควบคุม x(t) จากค่าที่ตั้งไว้ x0(t):
อี(เสื้อ) = x0(เสื้อ) – x(t)
นี่คือหลักการของการควบคุม Polzunov-Watt โดยการเบี่ยงเบนหรือหลักการป้อนกลับ การแสดงออกทางคณิตศาสตร์ของการขึ้นต่อกันของฟังก์ชันของการกระทำการควบคุมที่ต้องการ u0(t) กับปริมาณที่วัดโดยตัวควบคุมเรียกว่ากฎหรืออัลกอริธึมการควบคุมที่กล่าวถึงข้างต้น
ตัวควบคุมสัดส่วนคืออุปกรณ์ที่ออกแรงควบคุมวัตถุตามสัดส่วนของการเบี่ยงเบนจากสถานะที่กำหนด:
โดยที่ k คืออัตราขยายของคอนโทรลเลอร์
สถานะที่กำหนด x0 มักจะเรียกว่าเซ็ตพอยต์ และการเบี่ยงเบนจากนั้น e เรียกว่าค่าคงเหลือ นอกจากนี้เพื่อความชัดเจนเราจะแสดงความแตกต่างด้วยตัวย่อ ข้อผิดพลาด (จากคำภาษาอังกฤษ "ข้อผิดพลาด" - ข้อผิดพลาด)
การควบคุมมอเตอร์
นักรบที่มีประสบการณ์จะไม่เหวี่ยงดาบเหมือนกับที่หุ่นยนต์บนตัวควบคุมรีเลย์ทำ เราจำเป็นต้องมีอัลกอริธึมที่จะยึดมอเตอร์ที่ถือดาบอยู่ในตำแหน่งคงที่อย่างเคร่งครัด (รูปที่ 7.1) P-regulator จะช่วยในเรื่องนี้
ให้ e 1 - การอ่านเซ็นเซอร์ความเร็ว 1 บนมอเตอร์ A - เป็นตัวแปรที่ปรับได้ การตั้งค่า x0 = 45 และ e ที่เหลือ = 45 – e 1 จากนั้นสูตรจะกำหนดการกระทำการควบคุมมอเตอร์
คุณ = k ∙ (45 – อี 1)
โดยที่ k คือปัจจัยเกน เช่น 5 ซึ่งจะปรับปรุงการตอบสนองของมอเตอร์แม้ว่าจะมีความเบี่ยงเบนเล็กน้อยจากค่าที่ตั้งไว้ก็ตาม
1 อย่าสับสนการกำหนดทางคณิตศาสตร์ของ e ที่เหลือ (จากข้อผิดพลาด) กับการอ่านของตัวเข้ารหัส e 1 (จากตัวเข้ารหัส) ซึ่งเป็นตัวแปรสภาพแวดล้อม Robolab ที่กำหนดไว้ล่วงหน้า
เมื่อเบี่ยงเบนไปในทิศทางบวก การกระทำการควบคุมเชิงลบจะถูกนำไปใช้กับมอเตอร์ และในทางกลับกัน การควบคุมนี้สามารถนำไปใช้กับมอเตอร์ในวงจรโดยมีความล่าช้าสั้นๆ 1-10 ms เพื่อคลายตัวควบคุม (รูปที่ 7.8)
ข้าว. 7.8. อัลกอริธึมการควบคุมมอเตอร์โดยใช้ตัวควบคุมสัดส่วน
หากปัจจัยเกนเพิ่มขึ้นจาก 5 เป็น 100 ตัวควบคุมสัดส่วนของเราจะเริ่มทำหน้าที่เหมือนรีเลย์ ทำให้เกิดความผันผวนอย่างรุนแรงเนื่องจากเอฟเฟกต์โอเวอร์ชูต
ภาษา RobotC ไม่มีสัญลักษณ์ที่สะดวกสำหรับการอ่านตัวเข้ารหัสเช่นเดียวกับใน Robolab ดังนั้นโปรแกรมจึงดูยาวกว่าเล็กน้อย:
int k=5, คุณ; เอ็นโค้ดเดอร์มอเตอร์=0; ในขณะที่(จริง)
u=k*(45-nMotorEncoder); มอเตอร์=คุณ;
นอกจากนี้เพื่อที่จะส่ง "การโจมตีด้วยดาบ" ก็เพียงพอแล้วที่จะมีตัวแปรแทนหมายเลข 45 และเปลี่ยนค่าจากภายนอกเช่นจากงานคู่ขนาน เนื้อหานี้จะกล่าวถึงในหัวข้อมือกลองหุ่นยนต์ในบทที่ 8
ตอนนี้เรามาสร้างตัวควบคุมที่ไม่เพียงแต่ควบคุมตำแหน่งคงที่ของมอเตอร์เท่านั้น แต่ยังควบคุมความเร็วของการเคลื่อนที่ด้วย ตามตรรกะของอัลกอริธึม ค่าที่ตั้งไว้ซึ่งจนถึงขณะนี้มีค่าคงที่และไม่มีการเปลี่ยนแปลง ควรเริ่มเคลื่อนไปสู่การเพิ่มขึ้นหรือลดลง มอเตอร์จะปฏิบัติตามตัวควบคุมอย่างหลีกเลี่ยงไม่ได้ เครื่องมือที่ง่ายที่สุดในการเพิ่มค่าที่ตั้งไว้อย่างต่อเนื่องคือตัวจับเวลา
ตัวควบคุม NXT มีตัวจับเวลาในตัวสี่ตัว ซึ่งแต่ละตัวสามารถวัดเวลาได้ในหน่วยสิบ ร้อย และหนึ่งในพันของวินาที เรามาฝึกจับเวลาครั้งแรกให้เชี่ยวชาญกันดีกว่า ซึ่งจะทำได้ 10 “ทิป” ต่อวินาที
คอฟ" ใน Robolab ถูกกำหนดให้เป็น T1 หรือ Timer100ms1 และใน RobotC ถูกกำหนดให้เป็น timer100
ให้เราสร้างมุมโก่งของมอเตอร์อัลฟ่าตามที่ระบุในตัวอย่างก่อนหน้านี้ที่ 45 ขึ้นอยู่กับการอ่านตัวจับเวลาด้วยค่าสัมประสิทธิ์การเร่งความเร็ว k 2:
อัลฟ่า = k2 ∙ T1
การดำเนินการควบคุมจะยังคงเหมือนเดิมโดยมีปัจจัยการขยาย k 1:
คุณ = k 1 ∙ (อัลฟา – อี 1)
โดยสรุป ในโปรแกรมในภาษา Robolab เราจะใช้การควบคุมกับมอเตอร์โดยตรง โดยเริ่มต้นตัวจับเวลาไว้ก่อนหน้านี้
ข้าว. 7.9. การควบคุมความเร็วของมอเตอร์คือหนึ่งรอบต่อวินาที
ค่าสัมประสิทธิ์ k 2 = 36 กำหนดว่าในวินาทีนั้นค่าอัลฟ่าจะเพิ่มขึ้นเป็น 360 ซึ่งสอดคล้องกับการปฏิวัติเครื่องยนต์หนึ่งครั้ง:
int k1=2, k2=36, u, อัลฟ่า; เอ็นโค้ดเดอร์มอเตอร์=0; เคลียร์ไทม์เมอร์(T1); ในขณะที่(จริง)
อัลฟา=ตัวจับเวลา100*k2; u=k1*(อัลฟา-nMotorEncoder); มอเตอร์=คุณ;
การใช้การหารจำนวนเต็มตามที่นำมาใช้ในภาษา C (และใน Robolab) สำหรับตัวแปรประเภทจำนวนเต็ม เป็นไปได้ที่จะบรรลุการเปลี่ยนแปลงมุมแบบไม่ต่อเนื่อง กล่าวคือ เพิ่มขึ้นหนึ่งครั้งต่อวินาที:
อัลฟา = T 1 / 10 ∙ k 2
ด้วยค่าสัมประสิทธิ์ k 2 = 60 การเคลื่อนที่ของลำแสงจะสอดคล้องกับการเคลื่อนที่ของเข็มวินาทีบนหน้าปัดนาฬิกา แต่นั่นยังไม่เพียงพอ
เห็นได้ชัดเจน เพื่อความชัดเจน คุณสามารถตั้งค่า k2 = 30 จากนั้นลูกศรจะทำการปฏิวัติเต็มจำนวน 12 “ขีด” ละ 30 องศา ระวังลำดับของการหารจำนวนเต็มและการคูณการเปลี่ยนลำดับหรือ "การลด" จะทำให้ผลลัพธ์เปลี่ยนไปอย่างแน่นอน (รูปที่ 7.10)
ข้าว. 7.10. เร่งการเลียนแบบการเคลื่อนไหวของเข็มนาฬิกา
และสุดท้ายคือตัวอย่างของมือกลองทางคณิตศาสตร์ แทนที่จะเคลื่อนที่ไปข้างหน้าอย่างต่อเนื่อง เข็มจะแกว่งไปมาภายใต้การควบคุมของ P-regulator การดำเนินการหารด้วยเศษที่เหลือซึ่งใน C แสดงด้วยเครื่องหมาย % จะช่วยในเรื่องนี้ เศษของจำนวนเต็มที่ไม่เป็นลบหารด้วย 2 จะเป็น 0 หรือ 1 เสมอ:
อัลฟา = T 1% 2 ∙ k 2
เมื่อเพิ่มค่าเบี่ยงเบน k 2 = 15 เท่า เราจะได้ค่าเซ็ตพอยต์อัลฟ่าแบบสั่น ซึ่งจะบังคับให้ตัวควบคุมเคลื่อนที่มอเตอร์ 5 ครั้งต่อวินาที 0 องศาหรือ 15 องศา การเปลี่ยนแปลงในโปรแกรมมีน้อย ลองดูตัวอย่างใน RobotC:
int k1=3, k2=15, u, อัลฟ่า; เอ็นโค้ดเดอร์มอเตอร์=0; เคลียร์ไทม์เมอร์(T1); ในขณะที่(จริง)
อัลฟา=ตัวจับเวลา100%2*k2; u=k1*(อัลฟา-nMotorEncoder); มอเตอร์=คุณ;
มือกลองต้นแบบคนนี้ตีโต๊ะเป็นระยะๆ สิ่งสำคัญคือการเริ่มต้นในตำแหน่งที่ถูกต้อง เมื่อใช้คณิตศาสตร์จำนวนเต็ม คุณสามารถกำหนดรูปแบบจังหวะที่ซับซ้อนมากขึ้นได้ เช่น (ตารางที่ 7.1):
อัลฟา = T 1% 5% 2 ∙ k 2
ศูนย์กลาง = S3
ค่าสัมประสิทธิ์ถูกกำหนดในวงจร:
k 1 = c + (S 3 - กึ่งกลาง) / k 2
ข้าว. 7.36. การเคลื่อนที่ตามแนวเส้นบนตัวควบคุมสัดส่วนที่มีค่าสัมประสิทธิ์ลอยตัว
กฎการควบคุมเกนผลลัพธ์สามารถนำไปใช้ได้ไม่เพียงแต่กับส่วนประกอบตามสัดส่วนเท่านั้น แต่ยังรวมถึงส่วนประกอบอื่น ๆ รวมถึงการดำเนินการควบคุมโดยรวมด้วย (รูปที่ 7.36)
ตัวควบคุมพีไอดี
ตัวควบคุมสัดส่วน-ปริพันธ์-อนุพันธ์ (PID) เป็นหนึ่งในตัวควบคุมที่ได้รับความนิยมมากที่สุด และใช้ในอุปกรณ์ประเภทต่างๆ จำนวนมากที่ต้องการการตอบสนองที่รวดเร็วและการวางตำแหน่งระบบที่แม่นยำ ตามชื่อที่แนะนำ ตัวควบคุมนี้ประกอบด้วยผลรวมของส่วนประกอบสามส่วน และแสดงเป็นภาพกราฟิกในรูปที่ 1 7.37.
ข้าว. 7.37. วงจรควบคุมพีไอดี
นี่คือแผนภาพอย่างง่าย ค่าของข้อผิดพลาดแบบไดนามิก e (t) ถูกส่งไปยังอินพุตของคอนโทรลเลอร์ และการดำเนินการควบคุม u (t) จะถูกสร้างขึ้นที่เอาต์พุต:
คุณ (t) = p + i + d = k p ∙ e (t) + k i ∙ ò เสื้อ |
e (τ)d τ + k d ∙ |
เดอ |
องค์ประกอบตามสัดส่วนที่แสดงในแผนภาพเป็นรูปสามเหลี่ยม มีหน้าที่รับผิดชอบในการวางตำแหน่งระบบในสถานะที่กำหนด ในบางกรณี อาจทำให้เกิดการโอเวอร์ชูตพร้อมกับการสั่นของตัวเองตามมา นั่นคือตัวควบคุม P อาจ "หักโหมจนเกินไป" และหุ่นยนต์จะเริ่มเคลื่อนตัวจากด้านหนึ่งไปอีกด้าน
องค์ประกอบสำคัญจะสะสมประสบการณ์เชิงลบ (สรุปข้อผิดพลาด) และก่อให้เกิดผลการชดเชย ด้วยการเบี่ยงเบนน้อยที่สุด องค์ประกอบตามสัดส่วนจะ "อ่อนตัว" และส่วนประกอบที่เป็นส่วนประกอบเนื่องจากการเพิ่มขึ้นอย่างรวดเร็วโดยการสรุป ช่วยให้ "บรรลุ" ค่าที่ควบคุมจนถึงจุดที่ตั้งไว้
ส่วนประกอบส่วนต่าง (ส่วนประกอบ D) จะตรวจสอบอัตราการเปลี่ยนแปลงในสถานะของระบบและป้องกันการโอเวอร์โหลดที่อาจเกิดขึ้น ในบางกรณี องค์ประกอบ D จะตรงกันข้ามกับเครื่องหมายที่เป็นสัดส่วน และในบางกรณีก็เกิดขึ้นพร้อมกัน
เราคุ้นเคยกับองค์ประกอบตามสัดส่วนอยู่แล้ว ส่วนส่วนต่างได้อธิบายไว้ในบทที่ 6 ก่อนหน้านี้ มาดูองค์ประกอบอินทิกรัลกันดีกว่า ส่วนประกอบนี้ถูกกำหนดแบบไดนามิก โดยรวมกับค่าก่อนหน้า:
i = i + ki × e(t) × dt
ความหมายทางกายภาพของปริมาณ e(t) × dt คือมันเป็นอย่างนั้น
เป็นสัดส่วนกับระยะเวลาของระบบที่อยู่ในสถานะข้อผิดพลาด เนื่องจากค่าสัมประสิทธิ์ k i ถูกนำออกจากวงเล็บ เราจึงสามารถพูดถึงค่า i ซึ่งเป็นผลรวมของระยะเวลาข้อผิดพลาดได้ ดังนั้นเราจึงหาอินทิกรัลโดยการรวม
ลองพิจารณาการใช้ตัวควบคุม PID โดยใช้ตัวอย่างหุ่นยนต์ทรงตัวบนสองล้อ ปัญหาคลาสสิกนี้สามารถแก้ไขได้โดยใช้เซ็นเซอร์ที่แตกต่างกันได้หลายวิธี ตัวอย่างที่นำเสนอใช้เซ็นเซอร์วัดแสงและตัวควบคุม PID รูปแบบที่ง่ายที่สุด อย่างไรก็ตาม การบรรลุการรักษาเสถียรภาพของหุ่นยนต์จะต้องใช้การอ่านเซ็นเซอร์ที่แม่นยำยิ่งขึ้น
รูปแบบไฟล์ RAW
ข้อมูลเซ็นเซอร์จะเข้าสู่คอนโทรลเลอร์ NXT ในรูปแบบดิบที่ยังไม่ประมวลผล เซ็นเซอร์ทั้งหมดส่งค่าดิจิทัลตั้งแต่ 0 ถึง 1,023 ไปยังระบบปฏิบัติการ ซึ่งจากนั้นจะถูกประมวลผลโดยไดรเวอร์ที่เกี่ยวข้อง และลดทอนให้อยู่ในรูปแบบที่เข้าใจได้ง่ายขึ้น (ระยะห่าง 0...255, ไฟส่องสว่าง 0...100, แตะ 0 หรือ 1, ฯลฯ) แต่สามารถรับข้อมูลได้โดยตรงโดยไม่ต้องผ่านไดรเวอร์ รูปแบบไฟล์ดิบนี้มักเรียกว่า RAW (จากภาษาอังกฤษว่า "raw") ในบางกรณีสามารถใช้เพื่อให้เกิดความแม่นยำมากขึ้น เช่นช่วงค่าเซ็นเซอร์วัดแสงสามารถเพิ่มขึ้นได้ประมาณ 10 เท่า โอกาสนี้จึงถูกนำมาใช้ต่อไป
คุณสามารถรับข้อมูลในรูปแบบ RAW ได้ทั้ง Robolab และ RobotC ในการดำเนินการนี้ เซ็นเซอร์จะถูกเตรียมใช้งานตามลำดับ และข้อมูลจะถูกอ่านโดยใช้ตัวแปรที่กำหนดไว้ล่วงหน้าพิเศษ
หุ่นยนต์ปรับสมดุล
การออกแบบหุ่นยนต์ Segway แสดงไว้ในรูปที่ 1 7.38: ตัวควบคุมที่อยู่ในแนวตั้ง ล้อที่วางชิดกัน และเซ็นเซอร์วัดแสงที่หันลง อัลกอริธึมจะค่อนข้างซับซ้อนกว่า
หลักการของการรักษาเสถียรภาพของเซกเวย์ในตำแหน่งที่สมดุลมีดังนี้ หากหุ่นยนต์เอนไปข้างหน้า การอ่านเซ็นเซอร์แสงจะเพิ่มขึ้นเนื่องจากแสงสะท้อน เพื่อตอบสนองต่อสิ่งนี้ การดำเนินการควบคุมจะถูกสร้างขึ้น โดยบังคับให้หุ่นยนต์เคลื่อนที่ไปข้างหน้าและด้วยเหตุนี้จึงเข้ารับตำแหน่งแนวตั้งอีกครั้ง
เมื่อเคลื่อนที่ไปข้างหลัง การอ่านค่าของเซ็นเซอร์จะลดลงและหุ่นยนต์จะเริ่มเคลื่อนที่ไปข้างหลัง องค์ประกอบตามสัดส่วนมีหน้าที่รับผิดชอบทั้งหมดนี้ บทบาทของส่วนประกอบอินทิกรัลและส่วนประกอบดิฟเฟอเรนเชียลนั้นมีบทบาทโดยการประกันภัยจากการเกินขอบเขต
ข้าว. 7.38. หุ่นยนต์ทรงตัว Segway
ในรูป 7.39 แสดงอัลกอริทึมใน Robolab ส่วนใหญ่ถูกครอบครองโดยการเริ่มต้นของตัวแปร เพื่อปรับปรุงความแม่นยำ ไม่เพียงแต่ข้อมูลเซ็นเซอร์จะอ่านในรูปแบบ RAW เท่านั้น แต่ตัวแปรส่วนใหญ่ยังถูกประกาศในรูปแบบโฟลตจริงอีกด้วย อัลกอริธึม PID นั้นอยู่ในลูป
ข้าว. 7.39. อัลกอริธึมบาลานเซอร์นั้นใช้คอนโทรลเลอร์ PID
ตามธรรมเนียมของการเคลื่อนที่ไปตามเส้น เราใช้ตัวแปรสีเทาเป็นจุดกำหนด - การอ่านค่าเฉลี่ยของเซ็นเซอร์แสงในตำแหน่งสมดุล พารามิเตอร์มาตราส่วนใหม่ระบุมาตราส่วนของการดำเนินการควบคุม นี่เป็นปัจจัยการลดทอนโดยพื้นฐานแล้ว เนื่องจากค่าที่สร้างโดยตัวควบคุมสูงเกินไปสำหรับมอเตอร์ NXT เป็นไปได้ที่จะเพิ่มเข้าไปในค่าสัมประสิทธิ์ที่มีอยู่ แต่สำหรับ RobotC พารามิเตอร์นี้จะแตกต่างออกไป แต่ค่าสัมประสิทธิ์จะเท่ากัน
ด้วยค่าสัมประสิทธิ์ที่กำหนด หุ่นยนต์จะทรงตัวได้ดีบนเสื่อน้ำมันหรือโต๊ะธรรมดาที่มีสีอ่อน นั่นคือไม่จำเป็นต้องมีสีพื้นผิวสีขาว ในการเปิดตัว คุณจะต้องตั้งค่าเซกเวย์ให้อยู่ในตำแหน่งสมดุลอย่างถูกต้อง หากหุ่นยนต์เริ่มต้นด้วยการเอียงไปข้างหน้าหรือข้างหลัง หุ่นยนต์จะเริ่มเคลื่อนที่ในทิศทางของการเอียงทันที
ตัวอย่างที่คล้ายกันใน RobotC จะแตกต่างกันเล็กน้อยด้วยเหตุผลหลายประการ ประการแรก ประสิทธิภาพของ NXT พร้อมเฟิร์มแวร์ของสภาพแวดล้อมนี้สูงกว่า Robolab ประมาณ 1.4 เท่า ดังนั้นจึงควรเพิ่มปัจจัยขนาด ประการที่สอง ค่า RAW จะถูกส่งตามลำดับที่ถูกต้อง และคุณจะต้องตั้งค่ามอเตอร์ให้ย้อนกลับหรือใช้การควบคุมเชิงลบ:
int grey = SensorRaw; int ผิดพลาด errold=0;
ลอย kp=25, ki=350, kd=0.3; ระดับลอย=14;
ลอย dt=0.001; ลอย p, i=0, d, u; ในขณะที่ (จริง)
ข้อผิดพลาด = สีเทา-SensorRaw; //ส่วนเบี่ยงเบนที่มีเครื่องหมายตรงกันข้าม p=kp*err;
i=i+ki*ผิดพลาด*dt; d=kd*(ผิดพลาด-ผิดพลาด)/dt; ผิดพลาด=ผิดพลาด; คุณ=(p+i+d)/สเกล; มอเตอร์=คุณ; มอเตอร์=คุณ; รอ1Msec(1);
องค์ประกอบของทฤษฎีการควบคุมอัตโนมัติที่โรงเรียน1
งานด้านระเบียบวิธีที่สำคัญและน่าสนใจคือการ "วางสะพานเชื่อม" ระหว่างความรู้ของผู้เชี่ยวชาญและนักเรียนช่วยให้นักเรียนในโรงเรียนมองเห็นโอกาสของความเชี่ยวชาญพิเศษในอนาคตเช่น ดำเนินการแนะแนวอาชีพและนักเรียนจะได้เห็นการประยุกต์ความรู้ทางวิชาชีพของตนในทางปฏิบัติ เพื่อให้บรรลุผลที่คล้ายกัน วิธีการคำนวณตัวควบคุมได้รับการพัฒนาโดยใช้เครื่องมือทางคณิตศาสตร์ที่ไม่ได้อยู่นอกเหนือขอบเขตของหลักสูตรของโรงเรียนในวิชาคณิตศาสตร์และฟิสิกส์ โดยเฉพาะอย่างยิ่ง แทนที่จะใช้สมการเชิงอนุพันธ์ จะใช้สมการผลต่างซึ่งสอดคล้องกับลักษณะที่ไม่ต่อเนื่องของการโต้ตอบระหว่างวัตถุกับตัวควบคุมในการควบคุมคอมพิวเตอร์
ให้เราพิจารณา ตัวอย่างเช่น ปัญหาของการสร้างตัวควบคุมสัดส่วน (P) และตัวควบคุมสัดส่วนอนุพันธ์ (PD) ในปัญหาการควบคุมการเคลื่อนไหวของหุ่นยนต์เคลื่อนที่ตามแนวผนัง ให้เราแสดงด้วย x t ระยะห่างระหว่างหุ่นยนต์กับผนัง โดย θt - มุมส่วนหัวของหุ่นยนต์ และโดย u t - การดำเนินการควบคุมในขณะนี้ด้วยหมายเลขซีเรียล t ตามลำดับ โดยที่ t = 0, 1, 2, ... - จำนวนช่วงเวลาแห่งการเปลี่ยนแปลง
รีเนียม. เชื่อกันว่าการสำรวจเซ็นเซอร์และการเปลี่ยนแปลงขนาดของการดำเนินการควบคุมจะดำเนินการในช่วงเวลาเท่ากัน h สำหรับงานควบคุมของหุ่นยนต์ Lego NXT เป็นเรื่องปกติที่จะถือว่าการควบคุมนั้นมีความแตกต่างในความเร็วเชิงมุมของการหมุนของล้อ ซึ่งแปรผันตามอัตราการเปลี่ยนแปลงของมุมที่มุ่งหน้าไป:
สมมติว่าการเบี่ยงเบนหลักสูตรจากค่าระบุ θt =0 มีขนาดเล็ก และความเร็วเฉลี่ยของหุ่นยนต์คงที่: vt=v ไดนามิกของการเปลี่ยนแปลงในตัวแปรสถานะของหุ่นยนต์สามารถอธิบายได้ในการประมาณครั้งแรกโดยสมการเชิงเส้นของสถานะ : :
โดยที่ g = h2vr / b
ลองกำหนดระยะทางที่ต้องการไปยังผนัง x*> 0 และกำหนดเป้าหมายการควบคุม (CT) ตามความสัมพันธ์
xt → x* เป็น t→∞ |
ตอนนี้ให้เราแนะนำแนวคิดของความเสถียรเชิงเส้นกำกับในระดับที่สำคัญโดยธรรมชาติในฐานะคุณสมบัติของการแก้ปัญหาของระบบ (4) เพื่อให้มั่นใจว่าบรรลุผลสำเร็จของค่าเป้าหมาย (5) ภายใต้เงื่อนไขเริ่มต้นใด ๆ ที่ค่อนข้างแตกต่างจากเป้าหมายเล็กน้อย จะสังเกตได้ง่ายว่าสำหรับ u t = 0 การแก้สมการ (4) จะเป็นค่าคงที่ใดๆ x t = x* แต่เนื่องจากสมการ (4) ซึ่งสอดคล้องกับแบบจำลองของตัวรวมคู่ (ตัวบวกคู่) ไม่มีคุณสมบัติของความเสถียรเชิงเส้นกำกับ ศูนย์ควบคุม (5) จึงไม่สามารถทำได้ด้วยการควบคุมอย่างต่อเนื่อง สิ่งนี้แสดงให้เห็นอย่างง่ายดายในเชิงวิเคราะห์โดยการสรุปจำนวนต่างๆ
ตัวควบคุมสัดส่วนคืออุปกรณ์ที่ออกแรงควบคุม u(t) บนวัตถุตามสัดส่วนของการเบี่ยงเบนเชิงเส้น e(t) จากสถานะที่กำหนด x0(t)
e(t)=x0(t)-x(t) โดยที่ x(t) คือสถานะ ณ เวลาที่กำหนด
u(t)=ke(t) โดยที่ k คือปัจจัยการขยาย
กล่าวคือ ยิ่งหุ่นยนต์เบี่ยงเบนไปจากเส้นทางที่กำหนด มอเตอร์ก็ยิ่งต้องทำงานมากขึ้นเพื่อปรับระดับ
การเคลื่อนที่ของเส้นด้วยเซ็นเซอร์วัดแสงเพียงตัวเดียวโดยใช้ตัวควบคุม P
P-regulator สามารถสร้างการเคลื่อนไหวตามแนวขอบขาวดำได้ แม้ว่าภายนอกดูเหมือนว่าปัญหาจะแก้ไขได้ด้วยความช่วยเหลือของตัวควบคุมรีเลย์เท่านั้น เนื่องจากระบบมีเพียงสองสถานะที่มองเห็นได้ด้วยตามนุษย์: ขาวดำ แต่หุ่นยนต์มองเห็นทุกสิ่งแตกต่างออกไป เพราะมันไม่มีขอบเขตที่ชัดเจนระหว่างสีเหล่านี้ เราสามารถพูดได้ว่าเขาสายตาสั้นและเห็นการไล่ระดับสีเทา
ซึ่งจะช่วยสร้าง P-regulator
การกำหนดสถานะการทำงานเป็นการอ่านจากเซ็นเซอร์วัดแสง เราจะเรียนรู้การใช้เอฟเฟกต์การควบคุมตามสัดส่วนกับมอเตอร์ตามกฎหมายต่อไปนี้:
e=s1-grey โดยที่ s1 คือค่าที่อ่านได้จากเซ็นเซอร์ปัจจุบัน และสีเทาคือค่าที่ตั้งไว้
ค่าสัมประสิทธิ์ k (ในตัวอย่างนี้เท่ากับ 2) ควรมีค่าค่อนข้างน้อย (ตั้งแต่ 1 ถึง 3) ตัวควบคุมดังกล่าวทำงานได้อย่างมีประสิทธิภาพสำหรับมุมโก่งตัวเล็กน้อยเท่านั้น ดังนั้นต้องวางหุ่นยนต์ในทิศทางการเคลื่อนที่เพื่อให้เซ็นเซอร์อยู่ทางด้านซ้ายของเส้นสีดำ สังเกตได้ง่ายว่าการเคลื่อนไหวตามแนวเส้นบน P-regulator นั้นราบรื่น และในบางพื้นที่ของงานจะเคลื่อนที่เกือบเป็นเส้นตรงหรือตามแนวโค้งของเส้นพอดี
การสอบเทียบเซ็นเซอร์
มาดูเลข 48 ที่ใช้ในสูตรกัน นี่คือค่าเฉลี่ยเลขคณิตของเซ็นเซอร์วัดแสงที่อ่านค่าเป็นขาวดำ เช่น (40+56)/2=48 อย่างไรก็ตาม ค่าที่อ่านได้จากเซ็นเซอร์มักจะเปลี่ยนแปลงด้วยเหตุผลหลายประการ เช่น พื้นผิวที่แตกต่างกัน การเปลี่ยนแปลงของแสงสว่างโดยรวมในห้อง การปรับเปลี่ยนการออกแบบเล็กน้อย เป็นต้น ดังนั้น เราจะปรับเทียบหุ่นยนต์ด้วยตนเองโดยการกำหนดการอ่านเซ็นเซอร์แสงเป็นสีขาวและสีดำ
การเคลื่อนที่ของเส้นด้วยเซ็นเซอร์วัดแสงสองตัวโดยใช้ตัวควบคุม P
เป็นเรื่องยากมากที่จะนำทางทางแยกอย่างถูกต้องด้วยเซ็นเซอร์วัดแสงเพียงตัวเดียว หากคุณต้องการทำสิ่งนี้ด้วยความเร็วสูงเพียงพอ คุณต้องมีเซ็นเซอร์อย่างน้อยสองตัวที่วางอยู่ที่ระยะความกว้างสองเส้น (หรือกว้างกว่า)
เมื่อขับรถ สามารถระบุสถานะเซ็นเซอร์ได้สี่สถานะ:
- ทั้งบนสีขาว - เคลื่อนที่ตรง
- ซ้าย (s1) ไม่ใช่สีดำ ขวา (s2) บนสีขาว - เคลื่อนไปทางซ้าย
- ซ้ายเป็นสีขาว ขวาเป็นสีดำ - เคลื่อนไปทางขวา
- ทั้งบนสีดำ - ตรงไปข้างหน้า
ค่าสัมประสิทธิ์ k สามารถเปลี่ยนแปลงได้ในช่วงค่อนข้างกว้าง (ตั้งแต่ 1 ถึง 20 หรือมากกว่า) ขึ้นอยู่กับความโค้งของเส้น ความคล่องแคล่วของหุ่นยนต์ และความแตกต่างระหว่างสีดำและสีขาวบนสนาม
เงื่อนไขที่สำคัญ การปรับเทียบอัตโนมัติควรดำเนินการบนพื้นผิวที่มีสีเดียว และควรใช้ในบริเวณที่มีแสงสว่างซึ่งกินพื้นที่ส่วนที่ใหญ่ที่สุดของเส้นทาง ตัวอย่างเช่น หากหุ่นยนต์เคลื่อนที่ไปตามเส้นสีดำบนสนามสีขาว ดังนั้นมันจะต้องถูกปรับเทียบบนสนามสีขาว เหล่านั้น. ตำแหน่งของหุ่นยนต์เมื่อสตาร์ทควรเป็นดังนี้:
และอีกหนึ่งหมายเหตุ มีเซ็นเซอร์ที่การอ่านต่างกัน 10-20% ไม่แนะนำให้จับคู่กับตัวควบคุมที่มีค่าสัมประสิทธิ์สูงเนื่องจากการเปลี่ยนแปลงการส่องสว่างโดยรวมอย่างรวดเร็วแม้ในสนามสีขาวสม่ำเสมอ การเบี่ยงเบนอาจแตกต่างกันซึ่งจะนำไปสู่ผลที่ไม่คาดคิด
ปัญหานี้คลาสสิก เรียบง่ายตามอุดมคติ สามารถแก้ไขได้หลายครั้ง และทุกครั้งที่คุณค้นพบสิ่งใหม่ๆ
มีหลายวิธีในการแก้ปัญหาบรรทัดต่อไปนี้ การเลือกหนึ่งในนั้นขึ้นอยู่กับการออกแบบเฉพาะของหุ่นยนต์ จำนวนเซ็นเซอร์ ตำแหน่งที่สัมพันธ์กับล้อ และกันและกัน
ในตัวอย่างของเรา หุ่นยนต์สามตัวอย่างจะได้รับการวิเคราะห์ตามโมเดลการศึกษาหลักของ Robot Educator
ขั้นแรก เราได้ประกอบโมเดลพื้นฐานของหุ่นยนต์เพื่อการศึกษา Robot Educator ซึ่งคุณสามารถใช้คำแนะนำในซอฟต์แวร์ MINDSTORMS EV3 ได้
นอกจากนี้ ตัวอย่างเช่น เราจะต้องมีเซ็นเซอร์สีแสง EV3 เซ็นเซอร์วัดแสงเหล่านี้ไม่เหมือนใคร เหมาะที่สุดสำหรับงานของเรา เมื่อใช้งาน เราไม่ต้องกังวลกับความเข้มของแสงโดยรอบ สำหรับเซ็นเซอร์นี้ ในโปรแกรมเราจะใช้โหมดแสงสะท้อน ซึ่งเป็นการประมาณปริมาณแสงสะท้อนจากแสงพื้นหลังสีแดงของเซ็นเซอร์ ขีดจำกัดของการอ่านเซ็นเซอร์คือ 0 - 100 หน่วย สำหรับ "ไม่มีการสะท้อน" และ "การสะท้อนทั้งหมด" ตามลำดับ
ตามตัวอย่าง เราจะวิเคราะห์ 3 ตัวอย่างของโปรแกรมสำหรับเคลื่อนที่ไปตามวิถีสีดำที่แสดงบนพื้นหลังเรียบและสว่าง:
· เซนเซอร์ หนึ่งตัว พร้อมตัวปรับแรงดันลม P
· เซนเซอร์ หนึ่งตัว พร้อมตัวควบคุม PC
· เซ็นเซอร์สองตัว
ตัวอย่างที่ 1 เซ็นเซอร์หนึ่งตัวพร้อมตัวควบคุม P
ออกแบบ
มีการติดตั้งเซ็นเซอร์วัดแสงบนลำแสงซึ่งอยู่ในตำแหน่งที่สะดวกบนโมเดล
อัลกอริทึม
การทำงานของอัลกอริธึมนั้นขึ้นอยู่กับความจริงที่ว่า ขึ้นอยู่กับระดับของการทับซ้อนของลำแสงส่องสว่างของเซ็นเซอร์กับเส้นสีดำ การอ่านที่ส่งกลับโดยเซ็นเซอร์จะแตกต่างกันไปตามระดับ หุ่นยนต์จะรักษาตำแหน่งของเซ็นเซอร์แสงบนขอบของเส้นสีดำ ด้วยการแปลงข้อมูลอินพุตจากเซ็นเซอร์วัดแสง ระบบควบคุมจะสร้างค่าสำหรับความเร็วในการหมุนของหุ่นยนต์
เนื่องจากบนวิถีโคจรจริงเซ็นเซอร์จะสร้างค่าตลอดช่วงการทำงานทั้งหมด (0-100) จึงเลือก 50 เป็นค่าที่หุ่นยนต์มุ่งมั่น ในกรณีนี้ ค่าที่ส่งไปยังฟังก์ชันการหมุนจะถูกสร้างขึ้น ช่วง -50 - 50 แต่ค่าเหล่านี้ไม่เพียงพอสำหรับการเลี้ยววิถีที่สูงชัน ดังนั้นควรขยายช่วงหนึ่งเท่าครึ่งเป็น -75 - 75
ด้วยเหตุนี้ ในโปรแกรม ฟังก์ชันเครื่องคิดเลขจึงเป็นตัวควบคุมสัดส่วนอย่างง่าย ฟังก์ชันที่ ( (a-50)*1.5 ) ในช่วงการทำงานของเซ็นเซอร์วัดแสงจะสร้างค่าการหมุนตามกราฟ:
ตัวอย่างวิธีการทำงานของอัลกอริทึม
ตัวอย่างที่ 2 เซ็นเซอร์หนึ่งตัวพร้อมตัวควบคุม PK
ตัวอย่างนี้อิงจากโครงสร้างเดียวกัน
คุณอาจสังเกตเห็นว่าในตัวอย่างก่อนหน้านี้ หุ่นยนต์แกว่งมากเกินไป ซึ่งไม่สามารถเร่งความเร็วได้เพียงพอ ตอนนี้เราจะพยายามปรับปรุงสถานการณ์นี้เล็กน้อย
เรายังเพิ่มตัวควบคุมลูกบาศก์แบบธรรมดาให้กับตัวควบคุมสัดส่วนของเราด้วย ซึ่งจะเพิ่มความโค้งงอให้กับฟังก์ชันตัวควบคุม วิธีนี้จะลดการแกว่งของหุ่นยนต์ใกล้กับขอบเขตวิถีที่ต้องการ และกระตุกแรงขึ้นเมื่ออยู่ห่างจากหุ่นยนต์
รายละเอียด ผู้แต่ง: Konovalov Igor ตัวควบคุมสัดส่วนได้รับการปรับปรุง ข้อเสียเปรียบหลักของรีเลย์คือไม่สนใจว่าค่าปัจจุบันแตกต่างจากค่าปกติของเซ็นเซอร์อย่างไร มีเพียงสองสถานะ - พยายามเพิ่มค่าเซ็นเซอร์ด้วยจำนวนคงที่ที่แน่นอนหากมีค่าน้อยกว่าค่าปกติหรือเพิ่มขึ้น ด้วยเหตุนี้ การแกว่งจึงเกิดขึ้นโดยมีแอมพลิจูดคงที่ซึ่งไม่มีประสิทธิภาพมากนักมีเหตุผลมากกว่ามากในการพิจารณาว่าการอ่านปัจจุบัน "ไกล" จากปกติแค่ไหนและเปลี่ยนแอมพลิจูดขึ้นอยู่กับสิ่งนี้ เพื่อให้ชัดเจนยิ่งขึ้นเรามาดูตัวอย่างกัน ตัวอย่างเช่นเดียวกับในบทความก่อนหน้านี้คือหุ่นยนต์จาก Lego Mindstorms EV3 ขับไปตามเส้นสีดำโดยใช้เซ็นเซอร์สีตัวเดียวในโหมดแสง
หุ่นยนต์พยายามขับไปตามขอบระหว่างสีขาวและสีดำ และเซ็นเซอร์จะแสดงแสงสว่างประมาณ 50% และยิ่งอยู่ห่างจากตำแหน่งปกติ หุ่นยนต์ก็จะยิ่งใช้ความพยายามมากขึ้นในการกลับสู่ 50%
ในการเขียนโปรแกรมเราจะใช้คำว่า "ข้อผิดพลาด" และ "การควบคุมการกระทำ" ข้อผิดพลาดคือความแตกต่างระหว่างการอ่านเซ็นเซอร์ปัจจุบันกับค่าปกติ ในกรณีของเรา หากหุ่นยนต์มองเห็นแสงสว่าง 20% ข้อผิดพลาดจะเป็น 20-50 = -30% เครื่องหมายแสดงข้อผิดพลาดบ่งชี้ทิศทางที่หุ่นยนต์ควรหมุนเพื่อกำจัดข้อผิดพลาด ตอนนี้เราต้องบอกมอเตอร์ว่าหุ่นยนต์ควรหมุนไปในทิศทางใด ด้วยความเร็วเท่าใดและมีความคมเพียงใด มีความจำเป็นต้องออกแรงควบคุมมอเตอร์ ซึ่งหมายความว่ามอเตอร์จะกลับสู่ตำแหน่งปกติได้เร็วแค่ไหน การดำเนินการควบคุม (UP) คำนวณเป็นข้อผิดพลาด (ข้อผิดพลาด) คูณด้วยปัจจัยสัดส่วน (k) ค่าสัมประสิทธิ์นี้ใช้เพื่อเพิ่มหรือลดอิทธิพลของข้อผิดพลาดต่อการดำเนินการควบคุม อินพุตควบคุมจะถูกส่งไปยังพวงมาลัย โดยที่ความเร็วเฉลี่ยของหุ่นยนต์จะถูกตั้งค่าไว้
จะปรับปัจจัยสัดส่วนได้อย่างไร? เลือกค่าจากการทดลอง สำหรับการเดินทางในวิถีอาจเป็นได้ตั้งแต่ 0.2 ถึง 1.5 ขึ้นอยู่กับความเร็วและการออกแบบของหุ่นยนต์ ถ้าค่าสัมประสิทธิ์สูงเกินไป หุ่นยนต์จะโยกเยกมาก ถ้ามีขนาดเล็ก มันจะขับได้อย่างราบรื่น แต่เมื่อถึงจุดหนึ่ง หุ่นยนต์จะเลื่อนออกเมื่อหมุนเนื่องจากอินพุตควบคุมไม่เพียงพอ มาเขียนโปรแกรมสองเวอร์ชัน - พร้อมตัวแปร (สำหรับผู้ที่ได้ศึกษามาแล้ว) และไม่มี
แต่ตัวควบคุมนี้ยังสามารถเสริมความแข็งแกร่งได้ด้วยการแนะนำส่วนประกอบตามสัดส่วนและอินทิกรัลคำอธิบายจะอยู่ในบทความต่อไปนี้ แล้วพบกันใหม่!