ดิว.นินจา

ดิว.นินจา

Wednesday, April 25, 2018

ตัวควบคุมแขนกล 2 ก้านต่อบน ESP32 และ NETPIE

ในหนังสือ "การวิเคราะห์และควบคุมหุ่นยนต์อุตสาหกรรม" รวมถึงการบรรยายในชั้นเรียน ตัวอย่างหนึ่งที่ผู้เขียนใช้เพื่อขยายความเนื้อหาให้เป็นรูปธรรมมากขึ้นคือ แขนกล 2 ก้านต่อ (2-link manipulator) เนื่องจากมีโครงสร้างพื้นฐานประกอบด้วย 2 ข้อต่อแบบหมุนและเคลื่อนที่ในระนาบ 2 มิติ ทำให้ง่ายต่อการวิเคราะห์และโมเดล เมื่อผู้เรียนเข้าใจสาระของเนื้อหาในส่วนนั้นอย่างถ่องแท้แล้วก็จะขยายผลไปยังหุ่นยนต์ที่มีความซับซ้อนมากขึ้น อย่างไรก็ตามการเรียนรู้เชิงปฏิบิตทำได้เพียงสร้างโมเดลบนซอฟต์แวร์ Scilab และจำลองการทำงานเพื่อดูผลตอบสนองเท่านั้น เคยมีนิสิตสร้างโมเดลต้นแบบโดยใช้มอเตอร์ขนาดเล็กที่ไม่มีการป้อนกลับขับข้อต่อ ซึ่งสามารถใช้ในการศึกษาศาสตรหุ่นยนต์เบื้องต้น เช่นจลนศาสตร์ข้างหน้าและผกผัน (forward and inverse kinematics) แต่ในหุ่นยนต์อุตสาหกรรมจริงจะต้องมีการป้อนกลับเพื่อชดเชยผลกระทบทางพลวัตเมื่อหุ่นยนต์มีการเคลื่อนที่ ดังนั้นในบทความนี้จะนำเสนอการสร้างโมเดลของแขนกล 2 ก้านต่ออย่างง่าย ด้วยราคาที่ไม่ทำให้กระเป๋าแฟบ ขับเคลื่อนโดยดีซีมอเตอร์และมีการป้อนกลับตำแหน่งโดยเอนโคเดอร์ ตัวควบคุมอิมพลิเมนต์บน ESP32 อาศัยไลบรารี FreeRTOS และสามารถแสดงผลและควบคุมผ่านอินเทอร์เน็ตโดยอาศัยบริการคลาวด์ของ NETPIE

แผนภาพเชิงสัญลักษณ์

รูปที่ 1 แสดงแผนภาพเชิงสัญลักษณ์ (symbolic diagram) ของแขนกล 2 ก้านต่อ ประกอบด้วยข้อต่อแบบหมุนจำนวน 2 ข้อต่อที่ขับเคลื่อนโดยมอเตอร์ และเชื่อมต่อกันโดยก้านต่อ (links) โดยตัวแปรของข้อต่อนิยามเป็นมุมของก้านต่อแต่ละก้านเทียบกับแกนอ้างอิง และ (x,y) คือตำแหน่งของตัวทำงานส่วนปลาย (end effector) ในระนาบ 2 มิติ รายละเอียดเพิ่มเติมสามารถศึกษาได้จากหนังสือ "การวิเคราะห์และควบคุมหุ่นยนต์อุตสาหกรรม"

รูปที่ 1 โครงสร้างของหุ่นยนต์ 2 ก้านต่อ

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

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

อุปกรณ์ที่ใช้

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

รูปที่ 2 มอเตอร์และฮาร์ดแวร์สำหรับสร้างแขนกล

สำหรับก้านต่อของแขนกลต้นแบบจะใช้ไม้สน เนื่องจากมีน้ำหนักเบาและสามารถเลื่อยและเจาะได้ง่ายโดยไม่ต้องใช้เครื่องมือพิเศษ รูปที่ 3 และ 4 แสดงการยึดแขนไม้เข้ากับแกนมอเตอร์ผ่านจานยึดอลูมิเนียม (mounting hub) ที่จะมีสกรูขันให้ยึดกับแกนรูปตัว D ของมอเตอร์ ส่วนตัวมอเตอร์ยึดกับโครงสร้างผ่านตัวรองรับ (bracket) รูปที่ 5 แสดงการยึดชุดขับของมอเตอร์ข้อต่อที่สองเข้ากับก้านต่อแรกเพื่อมิให้สายไฟพันกับแขนกลเมื่อก้านต่อแรกหมุน

รูปที่ 3 การประกอบส่วนแขนที่ทำจากไม้สน
รูปที่ 4 โครงสร้างของแขนกลหลังประกอบก้านต่อและมอเตอร์แล้ว
รูปที่ 5 ชุดขับของมอเตอร์ข้อต่อที่สองจะถูกยึดติดกับก้านต่อแรก

ชุดขับมอเตอร์ทั้งสองตัวจะใช้รุ่น MD13S จากบริษัท Cytron ดังแสดงในรูปที่ 6 โดยจะรับสัญญาณ PWM และ DIR จากตัวควบคุม และมีวงจรป้องกันกระแสเกิน แรงดันไฟเลี้ยงที่จ่ายให้ชุดขับนี้คือ 12 โวลต์ ซึ่งเป็นแรงดันที่ระบุในคู่มือของมอเตอร์ Pololu

รูปที่ 6 ชุดขับรุ่น MD13S จากบริษัท Cytron

รูปที่ 7 แสดงการเชื่อมต่อสัญญาณเข้ากับบอร์ด WEMOS LOLIN32 โดยใช้แผ่นวงจรพิมพ์อเนกประสงค์ ในส่วนนี้ไม่ต้องการวงจรอื่นใดเพิ่มเติม สัญญาณ PWM/DIR ได้จากขาเอาต์พุตของ LOLIN32 ส่วนสัญญาณเอนโคเดอร์ต่อเข้ากับขาอินพุตและใช้การอินเทอร์รัพท์จากภายนอกเพื่อนับค่าตำแหน่งจากเอนโคเดอร์

รูปที่ 7 การเชื่อมต่อสัญญาณกับบอร์ด WEMOS LOLIN32

สรุปขาของ LOLIN32 ที่ใช้

รูปที่ 8 แสดงแขนกล 2 ก้านต่อหลังติดตั้งส่วนอิเล็กทรอนิกส์ทั้งหมดแล้ว บนชุดขับ MD13S มีสวิตช์สำหรับจ่ายไฟให้กับมอเตอร์เพื่อทดสอบเบื้องต้น โดยสามารถขับมอเตอร์ได้ทั้งทิศทางตามเข็มและทวนเข็มนาฬิกา หาตำแหน่งจัดวางแขนกลนี้อย่างเหมาะสมโดยไม่ชนกับสิ่งกีดขวาง สังเกตว่าการเคลื่อนที่ของข้อต่อแรกจะมีข้อจำกัดอยู่บ้างจากสายไฟที่เชื่อมต่อชุดขับและมอเตอร์ที่ยึดอยู่บนก้านต่อ ในทางปฏิบัติจะไม่สั่งให้มอเตอร์ข้อต่อแรกหมุนเกิน 1 รอบหรือ 360 องศา ส่วนข้อต่อที่สองจะมีความเป็นอิสระมากกว่า ขณะที่แขนกลทำงานจะเกิดโมเมนต์จากการแกว่งของก้านต่อ จึงควรใช้แคล้มป์ยึดฐานไว้ให้แน่น

รูปที่ 8 แขนกล 2 ก้านต่อที่ติดตั้งชุดขับและตัวควบคุมแล้ว

การโปรแกรมตัวควบคุม

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

  1. พารามิเตอร์ของระบบและตัวควบคุมจะนิยามเป็นโครงสร้างข้อมูล (struct) ทำให้โปรแกรมมีความเป็นระบบและจัดการได้ง่ายขึ้น เช่นอัตราขยายสัดส่วนของลูป 1 และ 2 จะถูกกำหนดเป็น L1.Kp และ L2.Kp ส่วนสถานะของระบบจะรวมอยู่ในโครงสร้างที่ตั้งชื่อว่า SysFlag
  2. ตัดส่วนทาสก์สำหรับจอ OLED และ RGB LED ออกเนื่องจากไม่มีใช้งานในระบบนี้
  3. ส่วนรับอินพุตเปลี่ยนจาก ADC เป็นการอ่านค่านับจากตัวแปรเอนโคเดอร์ของทั้งสองลูป
  4. เอาต์พุตตัวควบคุมเปลี่ยนจากสัญญาณ PWM อย่างเดียวเป็นการใช้ PWM ร่วมกับเอาต์พุตทิศทางการหมุน DIR
  5. แก้ไขตรงส่วนการพับลิชค่าพารามิเตอร์และสถานะตัวควบคุมให้กับ NETPIE เนื่องจากมีตัวแปรมากขึ้น

นอกจากนั้นยังได้เพิ่มเติมฟังก์ชันดังนี้

  1. มีการตรวจจับค่าแตกต่างของแต่ละลูป หากเกินจากค่าที่ตั้งไว้จะสั่งให้ลูปนั้นหยุดทำงานทันที ฟังก์ชันในส่วนนี้มีความจำเป็นเพราะหากมีการสั่งให้ข้อต่อแรกหมุนเกินกว่าค่าจำกัด หรือกรณีระบบเสียเสถียรภาพ จะทำให้สายไฟพันกับตัวแขนกลจนสายหลุดหรือขาดได้
  2. เมื่อทดสอบการทำงานเบื้องต้น พบว่าการหมุนของมอเตอร์ในทิศทางที่มุมเป็นบวกจะตรงกันข้ามกับที่กำหนดไว้เดิม ดังนั้นจึงเพิ่มตัวแปร SysFlag.DirSense สำหรับสลับทิศทางการอ่านค่าสัญญาณเอนโคเดอร์และเอาต์พุตกำหนดทิศทางมอเตอร์ได้ตามต้องการ ในแขนกลนี้จะกำหนดค่า SysFlag.DirSense = 1
  3. เพิ่มส่วนการส่งข้อความตอบกลับแต่ละคำสั่งให้กับ NETPIE (เดิมส่งออกทางพอร์ตอนุกรมเท่านั้น) มีประโยชน์สำหรับการอ่านค่าพารามิเตอร์และสถานะของระบบ การแสดงข้อความที่ส่งจากตัวควบคุมใช้ HTML widget ที่สามารถปรับสีและขนาดฟอนต์ได้

ดาวน์โหลด Arduino sketch ของทั้งโปรแกรมได้ที่ลิงก์ด้านล่างบทความนี้

สร้าง Freeboard Widgets

เนื่องจากพารามิเตอร์ของระบบมีมากขึ้น ตัวอย่างในบทความนี้จะสร้างส่วนแสดงผลและควบคุมเฉพาะที่จำเป็นเท่านั้น หากต้องการปรับค่าพารามิเตอร์หรือสั่งงานนอกเหนือจากที่สร้างไว้ สามารถใช้ HTML widget เพื่อส่งคำสั่งให้ตัวควบคุมโดยตรงตามที่ได้อธิบายในบทความ "แก้ไขสัมประสิทธิ์ตัวควบคุมเชิงเส้นแบบออนไลน์โดยใช้ HTML Widget บน NETPIE Freeboard" ซึ่งได้เพิ่มไว้ด้วยสำหรับผู้ใช้ หน้าตาของ Freeboard ที่สร้างขึ้นสำหรับแขนกล 2 ก้านต่อเป็นดังรูปที่ 9

รูปที่ 9 หน้า Freeboard สำหรับแขนกล 2 ก้านต่อ

การทดสอบแขนกล

เมื่อตัวควบคุมแขนกลเชื่อมต่อกับอินเทอร์เน็ตผ่าน WiFi แล้ว การแสดงผลและควบคุมผ่าน NETPIE สามารถทำได้บนคอมพิวเตอร์ และการใช้ NETPIE App บนโทรศัพท์มือถือ แต่เนื่องจากจำนวนของ Widgets มีมากทำให้การสื่อสารผ่านคอมพิวเตอร์ทำได้สะดวกกว่า

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

หมายเหตุ : ศัพท์ที่ใช้ในตำราหุ่นยนต์ทั่วไปมักเรียกตำแหน่งใดๆที่เกิดจากการกำหนดค่าตัวแปรข้อต่อว่า โครงแบบ (configuration) หรือโพส (pose)

รูปที่ 10 ตำแหน่งของแขนกลตามค่ามุมในรูปที่ 9

ในการทดสอบเบื้องต้นได้ตั้งค่าอัตราขยาย PID ของทั้งสองลูปไว้ไม่สูงมาก คือ Kp = 50, Ki = 30, Kd = 5 พบว่าผลตอบสนองค่อนข้างแกว่ง และผลกระทบจากแรงที่ส่งผ่านระหว่างแกนจะสังเกตได้ชัดเจน การเพิ่มค่าอัตราขยายช่วยให้ผลตอบสนองเร็วขึ้น แต่กระแสที่จ่ายให้มอเตอร์จะมากขึ้นด้วย สังเกตว่ามอเตอร์ของข้อต่อแรกจะต้องกำเนิดแรงบิดสูงเพื่อรับผลจากน้ำหนักและแรงโน้มถ่วง โดยเฉพาะเมื่อแขนยืดสุดในแนวนอน ถึงแม้ว่าจะใช้ไม้สนเป็นก้านต่อเพื่อลดน้ำหนักแล้วก็ตาม แต่โดยน้ำหนักของมอเตอร์ตัวที่สองและเหล็กฉากที่ใช้ยึดทำให้ภาระน้ำหนักที่ข้อต่อแรกต้องรับมีค่ามาก เมื่อทดลองเพิ่มอัตราขยาย Kp = 100 และใช้งานไปสักระยะหนึ่ง มอเตอร์ของข้อต่อแรกจะร้อนจัดจนต้องลดค่าอัตราขยายลง

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

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

ทดสอบฟังก์ชันตรวจสอบค่าแตกต่างและหยุดการทำงาน

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

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

การทดสอบอย่างง่ายทำได้โดยตั้งค่าสูงสุดของค่าแตกต่างให้น้อยลง เช่น 180 องศา และส่งคำสั่งตำแหน่งที่มากกว่าค่านี้ ในรูปที่ 11 ข้อต่อที่ 1 ถูกสั่งให้เคลื่อนที่จาก 0 ไปที่ตำแหน่ง 276 องศา ซึ่งมากกว่าค่าสูงสุดที่ตั้งไว้ จะเห็นการแจ้งเตือนที่ Following Limit ทางด้านขวา และสถานะของ LINK 1 จะเปลี่ยนเป็น Inactive และมอเตอร์ที่ข้อต่อ 1 จะไม่ทำงาน การจะทำให้ LINK 1 ทำงานเหมือนเดิมทำได้โดยกดที่สวิตช์สลับสถานะให้เปลี่ยนกลับเป็น Active (โดยต้องเปลี่ยนค่าคำสั่งให้อยู่ในช่วงที่ไม่เกินค่าที่ตั้งไว้เสียก่อน)

รูปที่ 11 การเปลี่ยนสถานะของ LINK 1 เมื่อค่าแตกต่างเกินจากค่าที่ตั้งไว้

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

สรุป

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

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

  1. พัฒนาอัลกอริทึมคำนวณจลนศาสตร์ผกผันของแชนกล ที่สามารถหาคำตอบได้ครอบคลุมทุกกรณี คือ ไม่มีคำตอบ (อยู่นอกพื้นที่ทำงาน) คำตอบเดียว หรือสองคำตอบ (ข้อศอกขึ้น/ลง)
  2. สร้างฟังก์ชันกำเนิดแนววิถี (trajectory generator) สำหรับแต่ละข้อต่อ ตามโปรไฟล์ตำแหน่ง/ความเร็ว/ความเร่ง ที่กำหนด
  3. ปรับปรุงตัวควบคุม PID สำหรับแขนกลให้มีคุณสมบัติดีขึ้น เช่นเพิ่มฟังก์ชันปรับแต่งพารามิเตอร์อัตโนมัติ ส่วนป้อนข้างหน้า (feedforward) หรือส่วนชดเชยแรงโน้มถ่วง (gravity compensation)
  4. ออกแบบตัวควบคุมเชิงเส้นเพื่อลดผลกระทบระหว่างแกนให้เหลือน้อยที่สุด
  5. พัฒนาตัวควบคุมไม่เป็นเชิงเส้นประเภทต่างๆ เช่น พลวัตผกผัน(inverse dynamics) การควบคุมปรับตัว (adaptive control) หรือระบบประสาทเทียม - ฟัซซีลอจิก (Neuro-Fuzzy control)
  6. เพิ่มเซนเซอร์แรงที่ส่วนปลายของแขนกลเพื่อพัฒนาตัวควบคุมผสมระหว่างตำแหน่ง - แรง โดยแขนกลจะผ่อนความแข็งของการควบคุมตำแหน่งลงเมื่อแรงที่กระทบบนเซนเซอร์แรงมากกว่าที่กำหนด

โปรแกรมทั้งหมดสำหรับตัวควบคุมแขนกล 2 ก้านต่อ : r2v1.ino

No comments:

Post a Comment

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เ...