ก่อนอื่นเลยพี่ต้องบอกว่า พี่ไม่ใช่เจ้าของภาษา งั้นขออภัยถ้ามีสะกดหรือแกรมมาร์ผิดด้วยนะน้อง
เริ่มต้นยังไง
พี่คิดว่ามันคงเท่มากถ้ามีหุ่นยนต์ที่เลียนแบบการเคลื่อนไหวของเราได้ แบบแขนกลจาก Youbionic อ่ะ แต่ปัญหาคือพี่ไม่มีเครื่องพิมพ์ 3D และก็ไม่อยากจ่าย 400 ดอลลาร์เพื่อซื้อแขนเดียว หรือซื้อหุ่นยนต์ฮิวแมนนอยด์ตัวเล็กๆ ที่ขาไม่มั่นคงนั่นแหละ เลยเริ่มคิดว่าจะทำหุ่นยนต์จิ๋วที่ใช้ระบบควบคุมคล้ายๆ กัน แต่ถูกกว่าและสร้างง่ายกว่า
เป้าหมาย
เป้าหมายหลักคือ:
- ทำ หุ่นยนต์ฮิวแมนนอยด์จิ๋วที่ใช้ Arduino เป็นสมอง
- ทำให้มัน ถูกที่สุด โดยใช้ วัสดุสร้างราคาประหยัด และ ไมโครเซอร์โว มาควบคุม
- ทำ เอ็กโซสเกเลตัน เพื่อให้มันเลียนแบบท่าทางได้
- ทำให้มัน สร้างง่ายสุดๆ
หุ่นยนต์ตัวสุดท้ายจะต้องมี:
- โหมดอัตโนมัติ ที่สามารถเดินทาง พูดคุย ติดตามและจดจำวัตถุกับใบหน้าได้
- โหมดควบคุมระยะไกล ที่ควบคุมด้วยมือถือหรือจอยสติ๊กผ่านบลูทูธ
- โหมดเอ็กโซสเกเลตัน ที่สามารถเลียนแบบการเคลื่อนไหวจากชุดเอ็กโซสเกเลตันที่ส่งผ่านอินเทอร์เน็ตมาได้
โปรโตไทป์ตัวแรก
สำหรับการทำต้นแบบและทดสอบความแข็งแรงของไมโครเซอร์โว พี่ใช้ชุด Lego Mindstorms EV3 มาช่วยทำบางส่วน แต่สุดท้ายก็ถอดออกเพราะมันซับซ้อนเกินไปเวลาจะควบคุมจาก Arduino น้องสามารถดูโมเดล 3D ทั้งหมดได้ที่ Tinkercad ของพี่



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




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




ถึงอย่างนั้นพี่ก็มีความคืบหน้าในส่วนโค้ดบ้างนะ: พี่ทำตัวควบคุมเซอร์โวง่ายๆ ที่ให้ควบคุมเซอร์โวหลายตัวพร้อมกันที่ความเร็วต่างกันได้ แต่มันต้องปรับแต่งอีกเยอะเลย พี่เลยยังไม่ปล่อยโค้ดนี้ออกมานะน้อง
แขนกลสำหรับทดสอบ
หลังจากเจอปัญหาพวกนั้น พี่ก็ตัดสินใจสร้างแขนกลด้วยเซอร์โว (Servo) ขึ้นมาสักอัน เพื่อทดสอบวิธีการเคลื่อนไหวแบบต่างๆ งานนี้คิดว่าขั้นต่อไปที่สมเหตุสมผลก็คือต้องออกแบบหุ่นยนต์ทั้งตัวใหม่ให้เล็กลงกว่าเดิมหน่อย และใช้วิธีติดตั้งเซอร์โวที่ดีขึ้นจากที่เรียนรู้จากแขนกลนี่แหละ
มันทำงานได้แล้ววว!
ช่วงนี้พี่รู้สึกเซ็งๆ ที่ต้องออกแบบใหม่ เลยเปลี่ยนแผน ลดจำนวนเซอร์โวในแขนหนึ่งข้างจาก 6 ตัวเหลือแค่ 3 ตัว แล้วสร้างใหม่ด้วยไม้บัลซ่า หลังจากปรับเปลี่ยนแล้ว ในที่สุดก็ทำให้มันทำงานได้! แม้ว่ามันจะยกของหนักไม่ได้เลย แต่อย่างน้อยก็ช่วยเซฟตัวโครงสร้างหลักของหุ่นไว้ได้
ชุดควบคุมแบบหุ่นเชิด
หลังจากสำเร็จขั้นนี้ พี่ก็ตัดสินใจสร้างชุดควบคุมแบบหุ่นเชิด (puppeteering rig) ขึ้นมา เพื่อให้สามารถควบคุมหุ่นยนต์ได้คล้ายๆ กับการใส่เอ็กโซสเกเลตตัน ชุดนี้ทำจากไม้บัลซ่ากับพอต (Potentiometer) ราคาถูกๆ เพราะพี่พยายามทำให้มันประหยัดที่สุดเท่าที่จะทำได้ งานช่างต้องรู้จักประหยัดด้วยนะน้อง!
เอ็กโซสเกเลตัน (Exoskeleton)
หลังจากทำโครงสร้างเสร็จ ก็พร้อมจะลงมือสร้างชุดเอ็กโซสเกเลตันแล้ว ซึ่งปรากฏว่ามันสร้างง่ายกว่าที่คิดไว้เยอะเลย หลังจากทำต้นแบบไปหลายรอบ ก็ได้เวอร์ชันสุดท้ายออกมา มันทำจากกระดาษแข็งทั้งหมด, ซิลิโคนร้อน และวัสดุรีไซเคิล ยกเว้นสายรัดที่ใช้คาดกับตัว ซึ่งอันนี้เปลี่ยนเป็นเชือกอะไรก็ได้ตามสะดวก
ตัวต้านทานปรับค่าได้ (Potentiometer) ราคาถูกนี่แหละที่ใช้เหมือนเดิม แต่แน่นอนว่าไม่ได้ต่อตรงๆ แกนหมุนทำจากเปลือกปากกามาร์กเกอร์เก่า แล้วก็ใช้ซิลิโคนยึดตัวพอตไว้ สิ่งที่เจ๋งของดีไซน์นี้คือ ถ้าน้องอยากใช้มือทำอย่างอื่น ก็แค่ปล่อยมือจากที่จับได้เลย ไม่ต้องถอดสายรัดอะไรให้ยุ่งยาก
ส่วนเรื่องโปรแกรมมิ่ง มันก็แค่แมปค่าจากพอตไปเป็น 0 - 180 ให้เซอร์โว เราแยกชุดเอ็กโซกับหุ่นยนต์ไว้คนละ Arduino กัน: ใช้ Nano สำหรับเอ็กโซ และ Mega สำหรับหุ่น แล้วใช้ไลบรารี EasyTransfer ในการสื่อสารผ่านพอร์ตอนุกรมระหว่างสองบอร์ด ตอนนี้ยังใช้สายยาวๆ เชื่อมอยู่ เดี๋ยวค่อยอัพเกรดเป็นโมดูลบลูทูธทีหลัง
เจาะลึกเทคนิคแบบจัดเต็ม:
- การแมปข้อต่อเอ็กโซสเกเลตัน: เอ็กโซสเกเลตันใช้พอตที่มีความเชิงเส้นสูง (High-linearity potentiometers) ติดตั้งที่ข้อต่อต่างๆ ของคน (ศอก, ไหล่, ข้อมือ) Arduino Nano จะอ่านค่าอนาล็อกเหล่านี้ กรองสัญญาณรบกวน แล้วแมปช่วงค่า ADC (0-1023) ไปเป็นช่วงพัลส์วิดธ์มอดูเลชัน (PWM) 0-180 องศาที่เซอร์โวของหุ่นต้องการ โดยใช้ฟังก์ชัน
map()และconstrain()วิธีนี้ป้องกันไม่ให้การเหยียดข้อต่อของคนเกินพิกัด จนทำให้ข้อต่อหุ่นชนกันและเซอร์โวขนาดเล็กเสียหายจากแรงดันทางกล - การมัลติเพล็กซ์เซอร์โวและการจัดการพลังงาน: การขับเซอร์โวหลายตัวพร้อมกันจะกินกระแสเป็นพักๆ โปรเจกต์นี้ใช้ Arduino Mega เพราะมีขา GPIO เยอะ และมี แหล่งจ่ายไฟภายนอกแยก เพื่อป้องกันไม่ให้ด้านลอจิกดับระหว่างที่หุ่นขยับเร็ว การเริ่มต้นใช้เซอร์โว SG90 แล้วล้มเหลว ทำให้เราอัพเกรดมาใช้เซอร์โว MG996R แรงบิด 13kg-cm สำหรับข้อไหล่ เพื่อให้ได้แรงงัดทางกลที่เพียงพอ
- สะพานสื่อสารอนุกรม: เพื่อให้ลูปควบคุมตอบสนองทันเวลา โปรเจกต์นี้ใช้การเชื่อมโยงอนุกรมแบบมาสเตอร์-สเลฟ ระหว่าง Nano (เอ็กโซ) และ Mega (หุ่น) โดยใช้ไลบรารี
EasyTransferส่งแพ็กเก็ตข้อมูลโครงสร้างที่เก็บมุมข้อต่อทั้งหมดในครั้งเดียว ลดความหน่วงของการสื่อสาร ทำให้การเคลื่อนไหวลื่นไหลแบบเรียลไทม์
อัพเกรดเซอร์โวและต้อนรับเครื่องปริ้นท์ 3D ตัวใหม่
ได้เครื่องปริ้นท์ 3D ใหม่มา อะไรมันก็เปลี่ยนไปหมดเลยวัยรุ่น! ตอนนี้พี่สามารถทำชิ้นส่วนที่แม่นยำขึ้นได้เองที่บ้านแล้ว และก็วางแผนจะทยอยเปลี่ยนจากแผ่น MDF ที่เคยตัดเลเซอร์ มาเป็นชิ้นส่วนที่พิมพ์จากเครื่อง 3D นี้แหละ แถมยังได้เซอร์โวแรงยก 13 กิโลมาลงที่ไหล่ด้วย งานนี้การเคลื่อนไหวของแขนดีขึ้นเห็นๆ
สายไฟเริ่มดูรกตาแล้ว แต่พี่มีไอเดียจัดการมันอยู่ในหัวแล้วล่ะ ส่วนโครงกระดูกภายนอก (exoskeleton) นั้น พี่ทำชุดประกอบกลไกจากไม้บัลซ่าที่ดีขึ้นแล้ว แต่ก็ยังมีปัญหากับโพเทนชิโอมิเตอร์ (Potentiometers) อยู่ดี งานนี้ต้องลุ้นต่อ
วิศวกรรมและการลงมือทำ:
- วิวัฒนาการด้านวัสดุ: โปรเจคนี้บันทึกการเปลี่ยนผ่านจาก ไม้ MDF สู่ พลาสติก PLA ที่พิมพ์จากเครื่อง 3D การเปลี่ยนแปลงนี้ช่วยลดน้ำหนักของหุ่นยนต์และปัญหาเรื่อง "จุดศูนย์ถ่วง (Center of Mass - CoM)" ไปได้มาก ทำให้สามารถออกแบบที่ยึดข้อต่อแบบพิเศษได้ ซึ่งช่วยรับแรงตามแนวแกนบนแขนของเซอร์โว (servo horns) ได้ดีขึ้น
- กลยุทธ์จัดการสายไฟ: เมื่อมีสาย PWM และสายไฟเลี้ยงพลังงานเพียบ โปรเจคนี้ก็จัดการด้วยการออกแบบท่อร้อยสาย (cable conduits) ที่พิมพ์จากเครื่อง 3D โดยเฉพาะ เพื่อให้แน่ใจว่าการเคลื่อนไหวของหุ่นยนต์จะไม่ถูกขัดขวางโดยสายไฟพันกันยุ่งเหยิง งานนี้ต้องเรียบร้อย!
การติดตามวัตถุและสีสันใหม่ล่าสุด
หลังจากพ่นสีใหม่และติดเกียร์ที่พิมพ์จากเครื่อง 3D แล้ว เจ้าหุ่นตัวน้อยนี่ดูคูลขึ้นอีกเป็นกองเลยนะเว้ย! พี่ทำอุปกรณ์สำหรับติดตามวัตถุโดยใช้กล้องจากมือถือขึ้นมา และวางแผนจะใช้มันเป็น "หัว" สำหรับโหมดอัตโนมัติ งานนี้เป็นการผสมผสานระหว่าง Computer Vision และ Embedded Motion Control อย่างแท้จริง ดูเท่ห์ดีมั้ยล่ะ







มีรูปมาให้ดูอีกนิดหน่อย จัดไปวัยรุ่น!




คอนเซปต์ใหม่กับการจัดการสายไฟ
พี่ทำคอนเซปต์สำหรับ Mini Me เวอร์ชันอนาคตขึ้นมาด้วย Blender แถมยังทำที่จับสำหรับโครงกระดูกภายนอก (exoskeleton) และชิ้นส่วนสำหรับจัดการสายไฟกับแหล่งจ่ายไฟด้วย



แผนการในอนาคต
ต่อไปพี่จะลองทำให้แขนขวาขยับได้ก่อน ซึ่งตามที่พี่คำนวณไว้น่าจะยกของหนักได้ประมาณครึ่งกิโลกรุงเทพฯ จากนั้นก็จะเชื่อมต่อมันกับคอมพิวเตอร์เพื่อใช้ Python ในการโปรแกรมมัน หลังจากนั้นก็จะเชื่อม Arduino เข้ากับมือถือผ่าน Serial แล้วค่อยเชื่อมมือถือเข้ากับคอมอีกที วิธีนี้พี่จะสามารถอ่านข้อมูลเซ็นเซอร์จากมือถือได้ และมันก็จะเปิดทางให้เราสามารถเชื่อมต่อกับหุ่นยนต์ผ่านคอมพิวเตอร์ทางอินเทอร์เน็ตได้อีกด้วย
อัพเดทบ่อยๆ พี่จะโพสต์ไว้ในช่องทางโซเชียลของพี่นะ ตามไปดูได้
เท่านี้แหละที่พี่ทำได้สำหรับโปรเจกต์นี้ในตอนนี้ ขอบคุณที่อ่านมาจนจบนะหวังว่าน้องๆ จะสนุกกับมัน พี่จะค่อยๆ อัพเดทโปรเจกต์นี้เรื่อยๆ ถ้าสนใจก็อย่าลืมติดตามและคอยดูอัพเดทต่อไปล่ะ
Kinematic Mirror: Mastering humanoid motion through copycat forensics.