การแข่งขันหุ่นยนต์ระดับนานาชาติ - กฎเกณฑ์ - ตัวอย่างหุ่นยนต์ - หุ่นยนต์วิถีวิถีที่ใช้ 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) บนสีขาว - เคลื่อนไปทางซ้าย
  • ซ้ายเป็นสีขาว ขวาเป็นสีดำ - เคลื่อนไปทางขวา
  • ทั้งบนสีดำ - ตรงไปข้างหน้า
ที่. ด้วยการอ่านเซ็นเซอร์ที่เท่ากัน (ทั้งสีขาวหรือสีดำทั้งคู่) หุ่นยนต์จะขับตรง ก่อนที่จะสตาร์ทหุ่นยนต์ เราจะปรับเทียบเซ็นเซอร์ทั้งสองโดยอัตโนมัติ จากนั้นอัลกอริทึมสำหรับการเคลื่อนที่ตามแนวเส้นด้วย P-regulator จะมีลักษณะดังนี้:

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


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

กำลังโหลด...กำลังโหลด...