วันอังคารที่ 16 ธันวาคม พ.ศ. 2557

โปรแกรม (Software) สำหรับเขียนคำสั่ง

Lego Mindstorms Education NXT

โปรแกรม Lego Mindstorms Education NXT หรือ NXT-G Education เป็นโปรแกรมที่ใช้งานง่ายและ สะดวกสำหรับตั้งแต่นักเรียนจนถึงระดับผู้เชี่ยวชาญ โปรแกรม Lego Mindstorms Education NXT เป็นโปรแกรมที่ใช้ไอคอนเป็นหลัก โดยที่นักเรียนสามารถลากและวางไอคอนต่างๆ เพื่อสร้างโปรแกรมบังคับหุ่นยนต์ทำงานตามเงื่อนไขต่างๆ ได้
โปรแกรม Lego Mindstorms Education NXT
โปรแกรม Lego Mindstorms Education NXT ยังมีส่วนที่เรียกว่า Robot Educator ซึ่งประกอบไปด้วยตัวอย่างแบบของหุ่นยนต์และตัวอย่างโปรแกรมต่าง ๆ ที่จะช่วยให้ครูและนักเรียน ได้เริ่มต้นการเขียนโปรแกรมให้กับหุ่นยนต์ได้

โปรแกรมอื่นๆ

นอกจากนี้การเขียนโปรแกรมบนหุ่นยนต์ NXT สามารถใช้โปรแกรมอื่นๆ ได้อีกด้วย เช่น
  • RoboLab 2.9 - เขียนโปรแกรมโดยลากบล๊อกคำสั่งต่างๆ มาเชื่อมต่อกัน
  • RobotC - เขียนโปรแกรมควบคุมหุ่นยนต์โดยใช้ภาษา C

แขนหุ่นยนต์

byob-robot-arm
** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **
หลังจากที่ได้รู้จักกับหุ่นยนต์เคลื่อนที่ (mobile robot) ไปแล้ว เรามาทำความรู้จักกับหุ่นยนต์อีกประเภทหนึ่ง คือ แขนหุ่นยนต์ (robot arm, manipulator) กัน แขนหุ่นยนต์ คือ หุ่นยนต์ที่สามารถหยิบ จับ เคลื่อนย้าย มีปฎิสัมพันธ์กับสิ่งของได้ในพื้นที่การทำงาน (working space) ของมัน แต่ไม่สามารถทำงานนอก working space ได้
ก่อนอื่นมาดูคำศัพท์บางคำเกี่ยวกับแขนหุ่นยนต์ก่อน
  • degrees of freedom หรือ องศาอิสระ คือ จำนวนแกน/ทิศทางที่สามารถเคลื่อนที่ได้ ถ้าเปรียบเทียบกับความสามารถในการเคลื่อนที่บนโลกสามมิติของเราก็จะมีการเคลื่อนที่ 3 แกน ขึ้น-ลง, ซ้าย-ขวา, หน้า-หลัง และการหมุนอีก 3 แกน เช่น
    • แขนหุ่นยนต์ที่เคลื่อนที่ได้ในระนาบ และไม่สามารถปรับมุมการหมุนได้ จะมี 2 degrees of freedom
    • แขนหุ่นยนต์ที่เคลื่อนที่ได้ในสามมิติ แต่ไม่สามารถปรับมุมการเอียงของปลายแขนได้จะมี 3 degrees of freedom
    • แขนหุ่นยนต์ที่เคลื่อนที่ได้ในสามมิติ และควบคุมการหมุนของปลายแขนได้รอบทิศทาง ก็จะมี 6 degrees of freedom
    • หุ่นยนต์ที่มีมากกว่า 6 degrees of freedom คือ หุ่นยนต์ที่สามารถเคลื่อนปลายแขนไปยังตำแหน่งใด ๆ ในสามมิติ และควบคุมการหมุนของปลายแขนได้รอบทิศ ได้มากกว่า 1 ท่าทางเพื่อให้ได้ตำแหน่งปลายแขนตำแหน่งเดียวกัน (เช่น แขนคนมี 7 degrees of freedom เราสามารถขยับแขนได้หลายท่า โดยที่ปลายมือเราอยู่ที่เดิม)
  • workspace คือ พื้นที่การทำงานที่ปลายแขนหุ่นยนต์สามารถเคลื่อนที่ไปได้
  • link โครงสร้างแขนแต่ละท่อน
  • joint ข้อต่อ แบ่งตามความสามารถในการเคลื่อนที่เป็น
    • active joint คือ ข้อต่อที่มีต้นกำลังติดตั้งอยู่ สามารถควบคุมการเคลื่อนที่ได้
    • passive joint คือ ข้อต่อที่ไม่มีต้นกำลังติดตั้งอยู่ ไม่สามารถควบคุมการเคลื่อนที่ได้ การเคลื่อนที่จะเป็นไปตามการเคลื่อนที่ของข้อต่ออื่น ๆ ที่เชื่อมโยงถึงกัน
      หรือแบ่งตามรูปแบบการเคลื่อนที่เป็น
    • revolute joint คือ ข้อต่อที่หมุนได้ (1 degree of freedom)
    • prismatic joint คือ ข้อต่อที่เคลื่อนที่เข้า-ออกเป็นแนวเส้น (1 degree of freedom)
    • screw joint คือ ข้อต่อที่หมุนและเคลื่อนที่เข้า-ออกสัมพันธ์กัน (1 degree of freedom)
    • spherical joint คือ ข้อต่อที่หมุนได้รอบ (2 degrees of freedom)
  • base คือ link แรกสุดที่ถูกยึดอยู่กับที่
  • wrist คือ ข้อต่อที่ไม่ทำให้เกิดการเคลื่อนที่ในสามมิติ แต่ทำให้เกิดการหมุน มักไว้เป็นข้อต่อสุดท้ายที่ปลายแขน
  • end-effector คือ อุปกรณ์ที่ติดตั้งไว้ที่ปลายแขนเพื่อใช้ทำงาน อาจจะเป็นมือจับ ตัวดูดสูญญากาศ สว่าน เป็นต้น
แขนหุ่นยนต์แบ่งเป็น 2 ประเภทหลัก ๆ ได้แก่
แขนหุ่นยนต์โครงสร้างอนุกรม (serial link manipulator)
เป็นแขนหุ่นยนต์ที่มีข้อต่อที่มีต้นกำลังขับเคลื่อนต่อกันไปเรื่อย ๆ แบบอนุกรม ตัวอย่างแขนหุ่นยนต์โครงสร้างอนุกรม เช่น
  • Cartesian robot arm เป็นแขนกลที่เคลื่อนที่บนแกนตั้งฉากกัน 3 แกน คือ ขึ้น -ลง, ซ้าย – ขวา, หน้า – หลัง
  • Cylindrical robot arm เป็นแขนกลที่เคลื่อนที่ในพื้นที่ทรงกระบอก คือ ขึ้น – ลง, เข้า – ออก ตามแนวรัศมี, หมุนรอบแกน
  • Spherical robot arm เป็นแขนกลที่เคลื่อนที่ในพื้นที่ทรงกลม คือ หมุนซ้าย – ขวา, หมุนขึ้น – ลง, เลื่อนเข้า – ออกตามแนวรัศมี
  • Scara robot arm เป็นแขนกลที่เคลื่อนที่มีแกนหมุน 2 แกนขนานกัน เพื่อเคลื่อนที่ได้บนระนาบ และอีกแกนสำหรับขึ้น – ลง
  • Articulate robot arm เป็นแขนกลที่เคลื่อนที่ในพื้นที่ค่อนข้างเป็นทรงกลม คล้ายในพวกรถขุด/แบคโฮ คือ หมุนซ้าย – ขวา, และมีแกนหมุนอีก 2 แกนที่ขนานกันเพื่อเคลื่อนที่ในระนาบแนวดิ่ง
  • Anthropomorphic arm เป็นแขนกลที่มีลักษณะแบบแขนมนุษย์ คือ มีไหลที่หมุนได้ 2 แกน ซ้าย – ขวา, บน – ล่าง มีแกนหมุนรอบตัวเองที่โครงสร้างแกนแรก และมีแกนหมุนที่ข้อศอก
ข้อดี
  • มีพื้นที่การทำงานกว้าง เพราะข้อต่อต่อกันออกไปเรื่อย ๆ
  • การคำนวณการควบคุมค่อนข้างง่าย ตรงไปตรงมา เพียงแค่นำ transformation matrix ของแต่ละแกนคูณกันไปเรื่อย ๆ (รายละเอียดจะมาอธิบายนลงลึกในครั้งถัด ๆ ไป)
ข้อเสีย
  • ความแข็งแรงต่ำ เพราะมีลักษณะเป็นโครงสร้างยื่นยาวออกไปจากฐาน
  • ความเที่ยงตรง (precision) ต่ำ เพราะความคลาดเคลื่อนจะสะสมเพิ่มขึ้นตามลำดับของข้อต่อ
  • เคลื่อนที่ช้า เพราะการติดตั้งต้นกำลังไปที่แต่ละข้อต่อทำให้แขนมีมวลมาก
  • ออกแรงได้น้อย เพราะโครงสร้างไม่แข็งแรงมาก และการติดต้นกำลังที่มีกำลังมากก็จะมีน้ำหนักมากตาม
แขนหุ่นยนต์โครงสร้างขนาน (parallel link manipulator)
เป็นแขนหุ่นยนต์ที่มีข้อต่อที่มีต้นกำลังขับเคลื่อนหลายตัวอยู่บริเวณฐานและมีโครงสร้างข้อต่อจากต้นกำลังแต่ละตัวไปยังปลายแขนเป็นโครงสร้างแบบปิดเป็นวงรอบ ตัวอย่างแขนหุ่นยนต์โครงสร้างขนาน เช่น
  • Delta robot
  • Rostock delta robot
  • Stewart platform
ข้อดี
  • ความแข็งแรงสูง เพราะเป็นโครงสร้างแบบปิด
  • ความเที่ยงตรง (precision) สูง เพราะปลายแขนต่อมายังต้นกำลังทุกตัวที่ฐาน
  • เคลื่อนที่เร็ว เพราะมวลส่วนใหญ่อยู่ที่ฐาน ปลายแขนจึงมีมวลน้อย
  • ออกแรงได้มาก เพราะต้นกำลังทุกตัวช่วยกันออกแรง
ข้อเสีย
  • พื้นที่การทำงานแคบ
  • มีความซับซ้อนในการคำนวนการควบคุม
การเปรียบเทียบข้อดี – ข้อเสีย กล่าวถึงหุ่นยนต์โดยทั่วไป แต่ก็มีงานวิจัยจำนวนมากที่พยายามแก้ไขข้อเสียแต่ละข้อในหุ่นยนต์แต่ละแบบ เช่น
WAM arm เป็น serial link manipulator ที่ย้ายต้นกำลังทั้งหมดมาอยู่ที่ฐาน แล้วขับเคลื่อนผ่านสายเคเบิล ทำให้แขนมีมวลต่ำ เคลื่อนที่ได้เร็ว
ยังมีแขนหุ่นยนต์อีกมากมายหลายแบบ การจะสร้างแขนหุ่นยนต์ขึ้นมาก็ต้องคำนึงถึงงานที่จะทำ เช่น รูปแบบการเคลื่อนที่ ตำแหน่งต้น ตำแหน่งปลายอยู่ที่ไหน ต้องเคลื่อนที่เป็นเส้นตรงรึเปล่า หรือเป็นเส้นโค้ง ต้องหมุนปลายแขนได้ด้วยรึเปล่า พื้นที่การทำงานมีลักษณะแบบใด ใหญ่ขนาดไหน งานที่จะทำต้องการความแม่นยำขนาดไหน ต้องออกแรงเยอะขนาดไหน เป็นต้น

หุ่นยนต์บิน ว่ายน้ำ และอื่นๆ

byob-flying-swimming
** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **
หลังจากที่ได้พบกับหุ่นยนต์เคลื่อนที่บนพื้นมาแล้ว คราวนี้เรามาดูหุ่นยนต์ที่บินบนอากาศและหุ่นยนต์ใต้น้ำกันบ้าง
หุ่นยนต์ที่บินได้/อากาศยานไร้คนขับ (UAV) สามารถบินข้ามสิ่งกีดขวางที่หุ่นยนต์บนพื้นอาจหลบเลี่ยงไม่ได้ ทำให้มีพื้นที่ทำการมากขึ้น แต่การบินย่อมใช้พลังงานมาก รูปแบบของหุ่นยนต์บินได้มีหลัก ๆ ดังนี้
  • Fixed wing (อากาศยานปีกตรึง) หุ่นยนต์แบบนี้ใช้การสร้างแรงยก (lift force) ด้วยปีก โดยอาศัยหลักการของแบร์นูลี (Bernoulli’s principle) คือ อากาศที่เคลื่อนที่เร็วกว่าจะมีความดันต่ำกว่าอากาศที่เคลื่อนที่ช้า ปีกจะมีลักษณะโค้งด้านบนทำให้อากาศด้านบนเคลื่อนที่เร็วกว่า จึงเกิดแรงยกที่ด้านล่างของปีก ตัวอย่างเช่น เครื่องบินทั่วไป Predator drone
    MQ-1 Predator
    General Atomics Predator
  • Rotating wing (อากาศยานปีกหมุน) หุ่นยนต์แบบนี้สร้างแรกยกด้วยการหมุนใบพัดเพื่อผลักมวลอากาศลงด้านล่าง แรงปฏิกิริยาที่อากาศทำกับใบพัดจึงเป็นแรกยกตัวหุ่นยนต์ขึ้น ตัวอย่างเช่น เฮลิคอปเตอร์ AR Drone quadrotor
ardrone
Parrot AR Drone
  • Flapping wing หุ่นยนต์ลักษณะนี้ใช้การสร้างแรงยกในลักษณะที่สัตว์ตามธรรมชาติใช้ คือการกระพือปีกเพื่อผลักมวลอากาศลงด้านล่าง (รูปแบบการเคลื่อนที่ของปีกยังมีผลในการสร้างแรงยกในรูปแบบอื่นด้วย เช่น อากาศหมุนวนใต้ปีก) ตัวอย่างเช่น หุ่นยนต์นก หุ่นยนต์ผึ้ง
Festo SmartBird
Festo SmartBird
robobee
Harvard RoboBees
  • Lighter than air หุ่นยนต์ลักษณะนี้ใช้แรงยกจากสสารที่เบากว่าอากาศ เช่น ฮีเลียม ไฮโดรเจน บรรจุในบอลลูน ข้อดีคือไม่ต้องใช้พลังงานมากในการสร้างแรงยก แต่ด้วยขนาดที่ใหญ่ทำให้ความคล่องตัวต่ำ
Airship
Airship
ความท้าทายของการสร้างหุ่นยนต์บินได้มีหลายประเด็น เช่น
  • การบินใช้พลังงานเยอะ ต้องเลือกแหล่งพลังงาน บริการจัดการการใช้พลังงานให้ดี ออกแบบหุ่นยนต์ให้มีน้ำหนักเบา
  • เมื่อหุ่นยนต์อยู่ในอากาศ จะมีองศาอิสระครบ 6 องศาอิสระ คือ ขยับได้ 3 ทิศทาง หมุนได้ 3 ทิศทาง การควบคุมหุ่นยนต์ 6 องศาอิสระไม่ง่ายนัก
  • ถ้าบินอยู่แล้วตก จะสร้างความเสียหายได้มาก …
มาต่อกันที่หุ่นยนต์เคลื่อนที่บน/ใต้น้ำ รูปแบบการเคลื่อนที่ของหุ่นยนต์ในน้ำมีหลัก ๆ คือ
  • ใบพัด คล้ายกับอากาศยานปีกหมุน คือใช้การหมุนใบพัดเพื่อผลักมวลน้ำไปทางหนึ่ง แรงปฏิกิริยาจะผลักตัวหุ่นยนต์ไปอีกทางหนึ่ง
Purdue ROV
Purdue ROV
  • ครีบ คล้ายกับ Flapping wing คือการใช้ครีบสะบัดไปมาเพื่อผลักมวลของน้ำ
Robot fish
Robot fish
  • สำหรับหุ่นยนต์ใต้น้ำ การควบคุมการลอยตัว – การดำดิ่ง ทำได้โดยถ่วงน้ำหนักความหนาแน่นของหุ่นยนต์ใกล้เคียงกับความหนาแน่นของน้ำ หุ่นยนต์จะลอยนิ่งในน้ำได้ (โดยประมาณ) และใช้การขับเคลื่อน 2 ลักษณะข้างต้นในการขับเคลื่อนให้ลอยขึ้นหรือดำลง หรืออาจใช้วิธีการอัดน้ำ/อากาศเข้าไปในถังเพื่อปรับเปลี่ยนความหนาแน่นโดยรวมของหุ่นยนต์ คล้ายกับที่ใช้ในกระเพาะปลา หรือเรือดำน้ำ
ถังอากาศในเรือดำน้ำ
ถังอากาศในเรือดำน้ำ
นอกจากการเคลื่อนที่ด้วยล้อ ขา ปีก ครีบ แล้ว ยังมีการเคลื่อนที่ในรูปแบบอื่น ๆ อีกมากมาย เช่น การกระโดด การกลิ้ง การเลื้อยหรือหากการเคลื่อนที่ในรูปแบบใดรูปแบบหนึ่งไม่สามารถตอบโจทย์ได้ การสามารถผสมการเคลื่อนที่หลายรูปแบบมาไว้ในหุ่นยนต์ตัวเดียวกันก็ได้ สุดแต่นักประดิษฐ์จะสร้างสรรค์ขึ้นมา

** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **

หุ่นยนต์เคลื่อนที่ด้วยขา

byob-legged-robot

เราได้กล่าวถึงหุ่นยนต์ที่เคลื่อนที่ด้วยล้อและสายพานไปแล้ว แต่ในธรรมชาติไม่มีล้อ เพราะล้อเป็นสิ่งที่มนุษย์ประดิษฐ์ขึ้นเพื่อให้การเคลื่อนที่ในสภาพแวดล้อมที่มนุษย์สร้างขึ้น (ถนน พื้นเรียบ) เป็นไปอย่างมีประสิทธิภาพ แต่เมื่อหุ่นยนต์ต้องเคลื่อนที่ในพื้นที่ขรุขระ เป็นขั้น เป็นหลุมเป็นบ่อ พื้นที่ที่ไม่ได้ถูกสร้างให้เรียบ ล้อเริ่มจะมีปัญหาในการเคลื่อนที่ ทำให้นักพัฒนาหุ่นยนต์เริ่มหันกลับไปมองว่าธรรมชาติจัดการกับเรื่องเหล่านี้อย่างไร ธรรมชาติสร้างให้สัตว์ใช้ขาเดิน
ในการสร้างหุ่นยนต์ที่เคลื่อนที่ด้วยขา มีประเด็นที่เกี่ยวข้อง เช่น
  • จำนวนขา
    • จำนวนขาที่น้อยที่สุดที่จะเคลื่อนที่ได้คือ 1 ขา!! แต่หุ่นยนต์ 1 ขาจะเดินไม่ได้ ต้องกระโดดเอา
    • จำนวนขาที่น้อยที่สุดที่จะก้าวเดินได้คือ 2 ขา คือเดินคล้ายมนุษย์ หุ่นยนต์ 2 ขา เวลายืนอยู่นิ่งจะอยู่ในสภาวะเสถียรภาพเชิงสถิตย์แบบลบ (negative static stability) คือ ถ้าไม่มีอะไรไปรบกวน ก็จะยืนได้ แต่ถ้ามีอะไรไปผลัก หุ่นยนต์จะเริ่มล้ม เพื่อไม่ให้ล้ม หุ่นยนต์จะต้องเริ่มก้าวเดิน
    • จำนวนขาที่น้อยที่สุดที่จะยืนอยู่นิ่งได้โดยมีเสถียรภาพเชิงสถิตย์แบบบวก (positive static stability) คือ ยืนนิ่งได้แม้มีอะไรไปผลัก (ไม่ได้ผลักแรงมากเกินไป) คือ 3 ขา และยืนให้น้ำหนักตกอยู่ในเส้นสมมติบนพื้นที่ลากระหว่างขาทุกขาที่แตะพื้น (support polygon) แต่เมื่อหุ่นยนต์ 3 ขา ก้าวเดิน ก็จะเหลือแค่ 2 ขาที่แตะพื้น ทำให้ support polygon เหลือแค่เส้นตรงที่ลากระหว่างขา 2 ขาที่แตะพื้น ทำให้หุ่นยนต์ไม่อยู่ในเสถียรภาพเชิงสถิตย์อีกต่อไป และเริ่มล้ม ถ้าไม่อยากล้ม ต้องเริ่มก้าวเดิน
      แสดง support polygon ในหุ่นยนต์ที่มีจำนวนขาและท่าทางแตกต่างกัน
      แสดง support polygon ในหุ่นยนต์ที่มีจำนวนขาและท่าทางแตกต่างกัน
    • จำนวนขาที่น้อยที่สุดที่จะเดินได้โดยมีเสถียรภาพเชิงสถิตย์แบบบวก คือ 4 ขา เมื่อเริ่มก้าวเดิน ก็ยังมี 3 ขาที่แตะพื้น หากน้ำหนักของหุ่นยนต์ตกอยู่ใน support polygon ของ 3 ขานั้น หุ่นยนต์ก็จะไม่ล้ม
    • ขายิ่งมากยิ่งมีโอกาสทำให้ Support polygon ใหญ่ เพราะมีขาให้แตะพื้นได้มาก แต่ก็ทำให้กลไกซับซ้อน
  • องศาอิสระ (degree of freedom) เป็นตัวกำหนดความสามารถของการเดินว่าจะสามารถทำท่าทางต่าง ๆ ได้มากขนาดไหน
    • ขา 1 องศาอิสระ เป็นขาที่ง่ายที่สุด มักใช้กลไกในการแปลงการหมุนของมอเตอร์ไปหมุนให้ขาให้เคลื่อนที่โค้งไปข้างหน้าเพื่อก้าวและดันเป็นเส้นตรงไปข้างหลังเพื่อผลักตัวเองไปข้างหน้า ขา 1 องศาอิสระสร้างได้ง่าย แต่ความสามารถจำกัด เพราะระยะการก้าวเดิน (stride length) และ ระยะการยกขา (step length) คงที่  หากมีสิ่งกีดขวางก็จะเป็นอุปสรรคต่อการเดิน
    • ขา 2 องศาอิสระแบบแกว่งขาด้านข้าง สามารถควบคุม stride length และ step length ได้ ทำให้ก้าวข้ามสิ่งกีดขวางได้
    • ขา 2 องศาอิสระแบบมีหัวเข่า ทำให้การยืด ย่อขาทำได้เยอะมาก มี step lenght มาก ทำให้ก้าวข้ามสิ่งกีดขวางได้ดี และเนื่องจากมีขา 2 ท่อนเพื่อควบคุมระยะความสูงของหุ่นยนต์จากพื้น ทำให้การก้าวเดินนิ่มนวล ตัวหุ่นยนต์ไม่ขยับขึ้นลงเยอะ
    • ขา 3 องศาอิสระ เป็นขาที่มีหัวเข่าและแกว่งด้านข้างได้ ก้าวเดินได้เหมือนมนุษย์และสัตว์ทั่วไป ตัวอย่างเช่นหุ่นยนต์ 2 ขาข้างต้น
  • รูปแบบการเดิน มี 2 รูปแบบหลัก ๆ ได้แก่
    • การเดินด้วยเสถียรภาพเชิงสถิตย์ (static stability) คือ การเดินที่ขณะใด ๆ หุ่นยนต์จะอยู่ทรงตัวอยู่ได้อย่างเสถียร น้ำหนักตกลงบนเท้าหรือตกอยู่ใน support polygon ถ้าให้หยุดขณะที่เท้าลอยอยู่กับพื้นก็ยังทรงตัวอยู่ได้ เป็นการเดินที่ช้า
    • การเดินด้วยเสถียรภาพเชิงจลน์ (dynamic stability) คือ การเดินที่ขณะใด ๆ หุ่นยนต์จะมีความเร่ง และใช้ความเร่งนั้นช่วยทรงตัว ไม่สามารถหยุดอยู่กับที่ได้ ต้องเดินไปเรื่อย ๆ เช่น หุ่นยนต์ในวิดีโอหุ่นยนต์กระโดดขาเดียวข้างต้น
  • ท่าทางการเดิน (gait) เช่น เดินช้า เดินเร็ว เดินย่อเข่า การแกว่งเท้า การก้าวขาไหนก่อนหลังเป็นลำดับอย่างไร
เช่นเดียวกับกรณีของหุ่นยนต์ที่เคลื่อนที่ด้วยล้อ หุ่นยนต์เคลื่อนที่ด้วยขาก็ไม่ได้มีประสิทธิภาพสูงสุดในทุกสภาพแวดล้อม จึงมีการพัฒนาหุ่นยนต์ที่ใช้ขาเดิน แต่ปลายขาติดล้อ ทำให้เดินก็ได้ วิ่งก็ดี

** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **

การเคลื่อนที่บนพื้นด้วยล้อและสายพานตีนตะขาบ ตอนที่ 2

byob-wheel-and-track-2

ความเดิมจากตอนที่แล้วที่ได้แนะนำรูปแบบการเคลื่อนที่ด้วยล้อและสายพาน คราวนี้เรามาต่อดูข้อดีข้อเสียของวิธีต่าง ๆ ที่กล่าวมา และประเด็นอื่น ๆ ของการเคลื่อนที่ด้วยล้อและสายพานกันอีกซักเล็กน้อย ก่อนที่จะไปดูการเคลื่อนที่วิธีอื่น
เราจะเลือกใช้รูปแบบการเคลื่อนที่แบบไหนดี (ขอแนะนำเฉพาะแบบที่เป็นที่นิยม)
หุ่นยนต์ของเราต้องเคลื่อนที่โดยมีข้อจำกัดด้านทิศทางของหุ่นยนต์หรือไม่ เช่น ต้องวิ่งไปด้านข้างแต่หันหน้าเข้าหากำแพง หรือเคลื่อนที่ในที่แคบที่เลี้ยวลำบาก
  1. ถ้าใช่ ใช้การเคลื่อนที่แบบ holonomic ต่อไปเรามาดูว่า เราต้องการให้หุ่นยนต์ฝืนการเคลื่อนที่ในแนวที่ไม่ต้องการได้หรือไม่ เช่น วิ่งบนพื้นเอียงขนานกับพื้นเอียงแล้วไม่ต้องการให้หุ่นยนต์ไหลลงพื้นเอียงได้ง่าย หรือ หุ่นยนต์วิ่งไปข้างหน้าแล้วไม่ต้องการให้ถูกผลักจากด้านข้างได้
    1. ถ้าใช่ ใช้ Swerve drive เนื่องจากการขับเคลื่อนของ Swerve drive จะต้องตั้งมุมล้อให้ตรงแนวการเคลื่อนที่ จึงได้แรงขับเคลื่อนเยอะและไม่สามารถเคลื่อนที่ในแนวอื่นที่ไม่ได้ตั้งมุมล้อไว้ได้ แต่ Swerve drive มีความซับซ้อนมาก แต่ละล้อต้องใช้มอเตอร์ 2 ตัว คือใช้ขับเคลื่อนและใช้หมุนเลี้ยว
    2. ถ้าไม่ใช่ มี 2 แนวทาง คือ
      1. Omni drive สามารถเคลื่อนที่ในทิศต่าง ๆ ได้อย่างรวดเร็ว ตัวล้อขึ้นรูปยากกว่าล้อธรรมดาทั่วไป แต่หาซื้อสำเร็จรูปได้ การวางตัวของล้อทำให้เหมาะสำหรับหุ่นยนต์ทรงกระบอกมากกว่าทรงสี่เหลี่ยม
      2. Mecanum drive จะให้แรงขับเคลื่อนในแนวหน้า หลัง เยอะ แต่การเคลื่อนที่ในแนวซ้าย ขวา จะต้องใช้พลังงานมากกว่า ตัวล้อขึ้นรูปยากกว่าแบบ Omni แต่หาซื้อสำเร็จรูปได้ การวางตัวของล้อทำให้เหมาะสำหรับหุ่นยนต์ทรงสี่เหลี่ยมมากกว่า
  2. ถ้าไม่ใช่ ก็สามารถใช้การเคลื่อนที่แบบ non-holonomic ได้ ต่อไปเราพิจารณาว่า
  3. ต้องการให้หมุนเลี้ยวอยู่กับที่ได้หรือไม่
    1. ถ้าใช่ ต่อไปพิจารณาว่า ต้องการแรงขับเคลื่อนเยอะหรือไม่
      1. ถ้าใช่ ใช้ Skid steer เนื่องจากการใช้สายพานตีนตะขาบหรือล้อหลายล้อจะมีพื้นที่สัมผัสพื้นเยอะ ได้แรงขับเคลื่อนเยอะ แต่ตอนเลี้ยวก็เกิดการลื่นไถล สูญเสียพลังงานไปตอนเลี้ยว ทำให้ต้องใช้กำลังเยอะในการหมุนเลี้ยวรอบตัวเอง
      2. Differential drive กลไกเรียบง่ายที่สุด ใช้พลังงานน้อย แต่โดยลำพัง 2 ล้อจะทรงตัวได้ยาก เพื่อให้ง่ายจะต้องมีล้อประคอง ซึ่งจะทำให้การเคลื่อนที่บนพื้นไม่เรียบอาจติดขัดได้
    2. ถ้าไม่ใช่ ใช้ Ackermann steering เหมือนรถยนต์ ข้อดีคือสามารถเลี้ยวได้โดยไม่มีการลื่นไถล ทำให้ไม่สูญเสียพลังงานในตอนเลี้ยว แต่ตอนเลี้ยวจะต้องใช้พื้นที่มาก
เช่นเดิม นี่เป็นคำแนะนำทั่วไป ไม่จำเป็นต้องยึดถือตายตัว
การเคลื่อนที่บนพื้น นอกจากเรื่องความคล่องตัวในการเคลื่อนที่และการเลี้ยวนั้น ยังมีประเด็นอื่น ๆ ที่น่าสนใจ เช่น
  • ระบบกันสะเทือน (suspension) ในความเป็นจริงแล้ว suspension ทำหน้าที่มากกว่าแค่กันสะเทือน (ทำให้นั่งรถสบายเวลาเจาะพื้นขรุขระ) แต่ยังช่วยให้ล้อสัมผัสพื้นได้ดีขึ้น การที่ล้อสัมผัสพื้นได้ดีขึ้นทำให้ได้แรงขับเคลื่อนที่ดี และสามารถควบคุมการเคลื่อนที่ได้ดี suspension มีความสำคัญในหุ่นยนต์ที่ต้องเคลื่อนที่บนพื้นขรุขระ หรือมีมากกว่า 3 ล้อ เพื่อทำให้ล้อสัมผัสกับพื้นครบทุกล้อ รูปแบบของ suspension มีหลายแบบ เช่น
    • การใช้กลไกเคลื่อนที่ล้ออิสระต่อกัน เช่น ระบบกันสะเทือนในรถยนต์ มีกลไกเพื่อให้ล้อแต่ละล้อขยับขึ้น-ลงได้เพื่อให้สัมผัสพื้น
car-suspension
    • การใช้กลไกเคลื่อนที่ล้อที่ไม่เป็นอิสระต่อกัน เช่น Rocker-bogie ในยานสำรวจดาวอังคาร มีกลไกเชื่อมล้อ 2 ล้อ เมื่อล้อหนึ่งเคลื่อนที่ขึ้น อีกล้อจะเคลื่อนที่ลง
rocker-bogie
    • ล้อที่ยุบได้ แทนที่จะทำให้ล้อเคลื่อนที่ได้ ยังสามารถทำให้ผิวสัมผัสกับล้อเคลื่อนที่แทน เช่น ล้อ Tweel ของ Michelin
tweel
  • การปีนป่าย หากหุ่นยนต์ต้องเคลื่อนที่ในที่ที่มีอุปสรรคขนาดใหญ่จนล้อธรรมดาไม่สามารถปีนข้ามได้ อาจจะต้องมีกลไกเพิ่มเติมช่วยในการปีนป่าย เช่น กลไก flipper ซึ่งเป็นการติดตั้งสายพานตีนตะขาบอีกชุดด้านหน้าหุ่นยนต์ที่สามารถหมุนได้ เพื่อพาดไปบนสิ่งกีดขวาง
packbot
นอกจากการเคลื่อนที่ด้วยล้อและสายพานตีนตะขาบในรูปแบบทั่ว ๆ ไปที่นำเสนอมาแล้ว ยังมีผู้พัฒนาการเคลื่อนที่ด้วยล้อและสายพานตีนตะขาบในรูปแบบอื่น ๆ อีกเพื่อตอบโจทย์ในลักษณะต่าง ๆ เช่น
  • wheel-leg คือลูกผสมระหว่างล้อและขา เนื่องจากล้อเคลื่อนที่ได้ง่าย เร็ว แต่ปีนป่ายไม่ค่อยดี ส่วนขาปีนป่ายได้ดี จึงติดขาเข้าไปที่ล้อ แทนที่จะเป็นล้อกลม ๆ ทำให้ยังเคลื่อนที่ได้เร็ว และปีนป่ายได้ดีขึ้น (แต่ก็ไม่ได้เคลื่อนที่เร็วและราบรื่นเท่าล้อปกติ)
  • omni-track สายพานตีนตะขาบสร้างแรงขับเคลื่อนได้เยอะ แต่เคลื่อนที่แบบ non-holonomic ทำให้ไม่คล่องตัวมาก จึงมีนักวิจัยพัฒนาตีนตะขาบที่เคลื่อนที่ได้รอบทิศทาง
นี่เป็นตัวอย่างของการเคลื่อนที่ด้วยล้อและสายพานตีนตะขาบที่ยกขึ้นมาเป็นแนวทางการออกแบบหุ่นยนต์ น่าจะช่วยให้เห็นภาพคร่าว ๆ และทำให้พอจะเริ่มออกแบบหุ่นยนต์ได้ แต่ถ้าเจอปัญหาที่ท้าทาย ก็อย่าหยุดเพียงแค่หุ่นยนต์ที่เคยมีคนสร้างแล้วเท่านั้น เราก็ยังสามารถออกแบบล้อและสายพานตีนตะขาบแบบอื่นได้อีก

** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **

วันอังคารที่ 25 พฤศจิกายน พ.ศ. 2557

การเคลื่อนที่บนพื้นด้วยล้อและสายพาน

byob-wheel-and-track
หลังจากที่รู้แนวทางการสร้างหุ่นยนต์โดยคร่าว ๆ กันแล้ว เรามาลงลึกในแต่ละขั้นตอนกันดีกว่า ในส่วนของการโจทย์และการหาความต้องการของระบบนั้น น่าจะขึ้นกับผู้สร้างหุ่นยนต์และสถานการณ์ซะมากกว่า ดังนั้นจะขอลงลึกในส่วนของการออกแบบระบบโดยคร่าวเลยแล้วกัน ในส่วนของการออกแบบระบบหุ่นยนต์โดยคร่าวนั้น หากเราได้เคยพบเห็นหุ่นยนต์แบบต่าง ๆ มาก่อน เราก็อาจจะใช้แบบหุ่นยนต์เหล่านั้นเป็นข้อมูลอ้างอิงในการออกแบบหุ่นยนต์ของเราเอง ซึ่งจะทำให้เราออกแบบได้เร็วขึ้น ไม่ต้องออกแบบใหม่ทั้งหมดในสิ่งที่มีคนอื่นแก้ปัญหานั้น ๆ ไว้แล้ว (don’t re-invent the wheel) แต่ก็อย่ายึดติดกับแบบที่คนอื่นเคยทำมา เราสามารถออกแบบหุ่นยนต์แบบใหม่ ๆ เองก็ได้ BYOB ครั้งนี่เลยจะขอแนะนำตัวอย่างหุ่นยนต์เคลื่อนที่โดยใช้ล้อและสายพาน
ก่อนอื่น จะขอแนะนำคำศัพท์เกี่ยวกับรูปแบบการเคลื่อนที่เล็กน้อย
  • holonomic locomotion คือหุ่นยนต์ที่มีองศาอิสระที่ควบคุมได้ (controllable degree of freedom) เท่ากับองศาอิสระทั้งหมดของหุ่นยนต์ (total degree of freedom) หุ่นยนต์ที่เป็น holonomic จะสามารถเคลื่อนที่ไปยังทิศทางใด ๆ ก็ได้ตามใจชอบ
  • non-holonomic locomotion คือหุ่นยนต์ที่มีองศาอิสระที่ควบคุมได้ (controllable degree of freedom) น้อยกว่าองศาอิสระทั้งหมดของหุ่นยนต์ (total degree of freedom) หุ่นยนต์ที่เป็น non-holonomic จะไม่สามารถเคลื่อนที่ไปยังทิศทางใด ๆ ก็ได้ตามใจชอบ จะต้องยึกยักหน่อย ตัวอย่างเช่น รถยนต์ อยู่บนระนาบ 2 มิติ จะมีองศาอิสระทั้งหมด 3 องศา คือ การเคลื่อนที่ตามแนว X, Y และองศาของการหมุนรอบตัว รถยนต์มีองศาอิสระที่ควบคุมได้แค่ 2 องศา คือ การเคลื่อนที่ไปหน้า-หลัง และองศาการเลี้ยว ดังนั้นรถยนต์ไม่สามารถเคลื่อนที่ไปในทิศใด ๆ ที่ต้องการได้ตามใจชอบ แต่อาจจะต้องเลี้ยวยึกยักไปมาหลายรอบ เช่น ตอนจอดรถแบบขนาน จะต้องเดินหน้า ถอยหลังหลายรอบ ถ้ารถสามารถเคลื่อนที่แนวซ้าย-ขวาได้ด้วย (เป็น holonomic) ก็จะจอดได้ง่ายขึ้นเยอะ
holonomic VS non-holonomic
holonomic VS non-holonomic
ตัวอย่างระบบขับเคลื่อนหุ่นยนต์ที่ใช้ล้อและสายพาน
Differential drive
เป็นรูปแบบการเคลื่อนที่ด้วยล้อที่ง่ายที่สุด คือ มีล้อ 2 ล้อ ล้อซ้าย และล้อขวา ถ้าต้องการเคลื่อนที่ไปข้างหน้าตรง ๆ ก็หมุนล้อซ้ายและขวาไปทางเดียวกันด้วยความเร็วเท่ากัน ถอยหลังตรง ๆ ก็หมุนล้อซ้ายและขวาถอยหลังทั้งคู่ ถ้าอยากเลี้ยวซ้ายก็หมุนล้อขวาไปข้างหน้าให้เร็วกว่าล้อซ้าย อยากเลี้ยวขวาก็หมุนล้อซ้ายไปข้างหน้าให้เร็วกว่าล้อขวา หรือจะหมุนตัวอยู่กับที่ก็ได้ ก็ให้หมุนล้อข้างหนึ่งไปข้างหน้า และล้ออีกข้างหมุนกลับหลังด้วยความเร็วเท่ากัน จะเห็นได้ว่าการขับเคลื่อนแบบ differential drive นั้น ไม่สามารถเคลื่อนที่ไปทิศใด ๆ ได้ตามต้องการในทันที ต้องทำการเลี้ยว หมุนตัวก่อน ดังนั้น differential drive จึงเป็นการเคลื่อนที่แบบ non-holonomic
diff-drive
differential drive
ตัวอย่าง

Skid steer
เรียกได้ว่าเป็นญาติกับ differential drive ใช้หลักการเดียวกันเรื่องการหมุนล้อเดินหน้า ถอยหลังเพื่อเคลื่อนที่และเลี้ยว ต่างกันตรงที่ skid steer จะใช้เรียกกับหุ่นยนต์ที่ใช้มากกว่า 2 ล้อ เช่น 4, 6, 8, … ล้อ และตีนตะขาบ เนื่องจากในหุ่นยนต์ที่มีล้อมาก ๆ หรือสายพานตีนตะขาบ เวลาเลี้ยวหรือหมุนตัว จะเกิดลื่นไถล (slip) บนล้อเทียบกับพื้น แน่นอนว่าการ slip นี้ทำให้ skid steer ใช้พลังงานในการเลี้ยวเยอะกว่า differential drive แต่ด้วยล้อที่มากกว่า มีพื้นที่สัมผัสพื้นมากกว่า ก็ทำให้มีแรงขับเคลื่อนมากกว่า
skid steer
skid steer
การเคลื่อนที่ของล้อ (หมุนตามแนวล้อ) ที่ไม่สัมพันธ์กับการเคลื่อนที่ของหน้าสัมผัสล้อ (หมุนตามการหมุนของหุ่นยนต์) ทำให้เกิดการไถลที่ของล้อ
การเคลื่อนที่ของล้อ (หมุนตามแนวล้อ) ที่ไม่สัมพันธ์กับการเคลื่อนที่ของหน้าสัมผัสล้อ (หมุนตามการหมุนของหุ่นยนต์) ทำให้เกิดการไถลที่ล้อ
ตัวอย่าง
Ackermann steering
ชื่อฟังดูยาก แต่จริง ๆ มันคือการเคลื่อนที่แบบรถยนต์นั่นเอง คือ มีล้อขับเคลื่อนและล้อเลี้ยว (ล้อเลี้ยวอาจจะเป็นล้อเดียวกับล้อขับเคลื่อนก็ได้ ในกรณีนี้จะต้องมีล้อหมุนอิสระคอยประคองด้วย เหมือนรถขับเคลื่อนล้อหน้า) คือเวลาเลี้ยวจะทำการหมุนล้อเลี้ยวให้ตั้งฉากกับเส้นที่ลากไปสู่จุดศูนย์กลางการเลี้ยว เพื่อทำให้ล้อทุกล้อเคลื่อนที่ไปตามเส้นโค้งของการเคลื่อนที่โดยไม่มีการ slip การที่ต้องหมุนล้อไปมาเพื่อเลี้ยว ทำให้ไม่สามารถเปลี่ยนทิศการเคลื่อนที่ไปทิศใด ๆ ตามต้องการได้ทันที ทำให้ Ackermann steering เป็น non-holonomic
ackermann steering
ackermann steering
Articulate drive
คล้าย ๆ กับ Ackermann steering แต่จะหมุนล้อเลี้ยวไปด้วยกันทั้งชุด ตัวอย่างเช่น หุ่นยนต์ตีนตะขาบหลายท่อน articulate drive เป็น non-holonomic
articulate drive
articulate drive
ตัวอย่าง
Synchro drive
เป็นการขับเคลื่อนที่ล้อทุกล้อหมุนด้วยความเร็วเท่ากัน และมีกลไกลงบังคับเลี้ยวล้อทุกล้อไปในทิศต่าง ๆ พร้อมกัน ทำให้สามารถเคลื่อนที่ไปยังทิศใด ๆ ก็ได้ (แต่ต้องรอหมุนล้อแป๊บนึง) แต่ synchro drive จะไม่สามรถหมุนเลี้ยวรอบตัวเองได้ synchro drive เป็น semi-holonomic (คือ เกือบ ๆ จะเป็น holonomic คือ เคลื่อนที่ไปทิศใด ๆ ก็ได้ ไม่ต้องหมุนเลี้ยว แต่ไม่สามารถเปลี่ยนทิศได้ทันทีทันใด ต้องรอหมุนล้อก่อน)
synchro drive
synchro drive
ตัวอย่าง
Swerve drive
เป็นญาติกับ synchro drive ต่างกันตรงที่ล้อทุกล้อของ swirl drive สามารถหมุนเลี้ยวได้เป็นอิสระต่อกัน ทำให้เคลื่อนที่ไปทิศใด ๆ ก็ได้ และหมุนรอบตัวเองได้ swervel drive เป็น semi-holonomic
swirl drive
swirl drive
ตัวอย่าง
Singularity drive
อันนี้อาจจะไม่ค่อยเคยเห็นกัน จริง ๆ การเคลื่อนที่แบบนี้ถูกคิดค้นขึ้นมานานแล้ว แต่ไม่ค่อยเป็นที่นิยม หลัง ๆ นี้เริ่มมีคนนำมาใช้ใหม่ เป็นการเคลื่อนที่ที่เข้าใจยากซักหน่อย คือ จะใช้ล้อทรงส่วนของทรงกลม หมุนให้การหมุนตั้งฉากกับพื้น จุดที่ล้อสัมผัสกับพื้นจะมีความเร็วเป็นศูนย์ ถ้าต้องการเคลื่อนที่ไปทิศทางใด ก็เอียงล้อ ทำให้จุดที่ล้อสัมผัสกับพื้นมีความเร็วไม่เป็นศูนย์ การเอียงล้อทรงกลมไปยังทิศต่าง ๆ ทำให้เกิดแรงผลักบนพื้นในทิศต่าง ๆ ทำให้ singularity drive สามารถเคลื่อนที่ไปยังทิศใด ๆ ก็ได้ (แต่ต้องรอเอียงล้อสักเล็กน้อย) ทำให้ singularity drive เป็น semi-holonomic
singularity drive
singularity drive
ตัวอย่าง
Omni drive
ล้อของ omni drive จะพิเศษคือ มี roller อยู่รอบ ๆ ล้อ ในทิศทางการหมุนที่ตั้งฉากกับการหมุนของล้อ omni drive ต้องใช้ล้ออย่างน้อย 3 ล้อ วางทำมุมกัน เนื่องจากในแต่ละล้อมี roller อยู่ จึงเกิดการเคลื่อนที่ได้ 2 แกนพร้อม ๆ กันในแต่ละล้อ คือ ตามแนวการหมุนของล้อ และตามแนวการหมุนของ roller เมื่อต้องการเคลื่อนที่ไปยังทิศใด ๆ ก็สามารถแตกความเร็วการเคลื่อนที่เข้าแนวการเคลื่อนที่ของล้อและของ roller ได้เสมอ ทำให้ omni drive สามารถเคลื่อนที่ไปยังทิศใด ๆ ก็ได้ เป็น holonomic การเคลื่อนที่ของ omni drive จะต้องมีสมการที่เรียกว่า Jacobian/Inverse-jacobian matrix เพื่อแปลงความเร็วของหุ่นยนต์ ไปสู่ความเร็วของล้อแต่ละล้อ
omni drive
omni drive
ตัวอย่าง
Mecanum drive
เป็นญาติกับ omni drive ต่างกันตรงที่ roller บนล้อไม่วางตั้งฉากกับล้อ แต่จะวางทำมุมกัน ส่วนมากจะทำมุม 45 องศา และล้อสามารถวางตัวขนานกันได้ตามปกติ ไม่ต้องวางทำมุมกัน การเคลื่อนที่ก็ใช้หลักการเดียวกับ omni drive จึงต้องมี Jacobian/Inverse-jacobian matrix ในการคำนวณความเร็วล้อเช่นกัน แต่สมการจะง่ายกว่า mecanum drive เป็น holonomic
mecanum drive
mecanum drive
ตัวอย่าง
ยาวละ ขอตัดจบตอนแต่เพียงเท่านี้ก่อนดีกว่า คราวหน้าเรามาต่อกับการเคลื่อนที่แบบอื่น ๆ กัน

** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **

ขั้นตอนการสร้างหุ่นยนต์

byob-build-step
หลังจากที่เราได้รู้คร่าว ๆ แล้วว่าจะสร้างหุ่นยนต์ซักตัวจะต้องเจอกับอะไรบ้าง คราวนี้จะขอแนะนำแนวทางการสร้างหุ่นยนต์ขึ้นมา ขั้นตอนที่จะกล่าวต่อไปเป็นแค่คำแนะนำ ไม่ได้เป็นคัมภีร์ ไม่ได้เป็นกฎเกณฑ์ตายตัว เริ่มกันเลยดีกว่า
  1. ตั้งโจทย์ขึ้นมาว่าเราจะสร้างหุ่นยนต์ไปทำอะไร ให้มันไปเปิดไฟให้เรา ให้มันไปหยิบของให้ ไปสำรวจท่อระบายน้ำ หรือถ้าจะสร้างหุ่นยนต์ไปแข่งขัน กติกาการแข่งขันก็เป็นโจทย์นั่นเอง
  2. หาความต้องการของระบบ จากโจทย์ที่ได้ในข้อก่อนหน้า เรามาแยกเป็นข้อ ๆ ว่าหุ่นยนต์ต้องทำอะไรได้บ้าง ตัวอย่างความต้องการของหุ่นยนต์บริการในร้านอาหาร เช่น
    • ขนาดไม่เกินเส้นผ่านศูนย์กลาง 60 เซนติเมตร สูงไม่เกิน 150 เซนติเมตร
    • บรรทุกของได้ 10 กิโลกรัม เคลื่อนที่บนทางลาดชันไม่เกิน 10 องศาได้ด้วยความเร็ว 1 เมตรต่อวินาที
    • มีแหล่งพลังงานในตัว ทำงานได้อย่างน้อย 2 ชั่วโมง
    • ตรวจจับสิ่งกีดขวางได้ และหยุดการเคลื่อนที่ก่อนชนสิ่งกีดขวาง
    • ระบุตำแหน่งตัวเองในร้านอาหารได้
    • เคลื่อนที่ไปยังตำแหน่งต่าง ๆ ในร้านอาหารได้เองอัตโนมัติ
    • สั่งงานได้จาก joystick ไร้สาย
    • มีไฟแสดงสถานะแบตเตอรี่
  3. หลังจากตีโจทย์เป็นความต้องการเป็นข้อ ๆ แล้ว เราก็มาออกแบบระบบโดยคร่าว ๆ ที่สามารถตอบความต้องการแต่ละข้อนั้นได้ เช่น ต้องเคลื่อนที่ไปได้ไกล ๆ จะต้องทำเป็น mobile robot บริเวณที่เคลื่อนที่เป็นพื้นเรียบใช้ล้อธรรมดาก็ได้ ไม่ต้องใช้ตีนตะขาบ ไม่ต้องใส่ระบบกันสะเทือน จะต้องหยิบของต้องมีกลไกแขน หยิบจากที่หนึ่งไปอีกทีโดยไม่สนใจทิศทางของของที่หยิบ สามารถใช้แขนที่มีองศาอิสระแค่ 3 องศาก็ได้ ไม่ต้องทำถึง 6 องศาอิสระ หุ่นยนต์ต้องเคลื่อนที่จะมีสายส่งพลังงานไปไม่ได้ ต้องใช้แหล่งพลังงานในตัวเอง ก็เลือกใช้พลังงานจากแบตเตอรี่ ต้องมองหาสิ่งของที่มีสีที่กำหนดอาจจะใช้กล้องหรือเซนเซอร์สี เป็นต้น
    ตัวอย่างการออกแบบระบบคร่าว ๆ ของหุ่นยนต์บริการ
    ตัวอย่างการออกแบบระบบคร่าว ๆ ของหุ่นยนต์บริการ
  4. พอได้แบบของหุ่นยนต์คร่าว ๆ แล้ว เราก็มาเลือกหาของที่ต้องใช้ เริ่มจากของที่ทำเองไม่ได้และต้องซื้อ หาของเหล่านั้นให้ได้ก่อน แล้วค่อยเลือก/ออกแบบส่วนอื่น เพราะถ้าออกแบบส่วนอื่นจนหมดแล้ว ของที่ต้องซื้อไม่มีที่ตรงความต้องการก็ทำไม่ได้ ของเหล่านี้ก็เช่น มอเตอร์ เซนเซอร์ต่าง ๆ ไมโครคอนโทรลเลอร์ แบตเตอรี่ เป็นต้น ถ้าเราออกแบบกลไกจนเสร็จแล้วค่อยเลือกมอเตอร์อาจจะพบว่ามอเตอร์ที่มีขาย ไม่มีตัวไหนที่มีแรงเท่าที่ต้องการ สิ่งที่ต้องคำนึงถึงตอนเลือกของก็เช่น อุปกรณ์ต้นกำลังให้กำลังเท่าที่ต้องการ เซนเซอร์ให้ข้อมูลประเภทที่ต้องการ ลักษณะที่ต้องการ (ดิจิตอล อนาล็อก บัสแบบไหน) อุปกรณ์ต่าง ๆ ใช้แรงดันไฟฟ้าเท่าใด แหล่งพลังงานเพียงพอที่ต้องการ ไมโครคอนโทรลเลอร์ที่ใช้มีพอร์ตต่าง ๆ ที่ต้องการใช้เพียงพอ เป็นต้น
    ซ้าย - ตัวอย่างข้อมูลของมอเตอร์, ขวา - ระยะการตรวจจับด้วยอินฟราเรดของเซนเซอร์รุ่นต่าง ๆ
    ซ้าย – ตัวอย่างข้อมูลของมอเตอร์, ขวา – ระยะการตรวจจับด้วยอินฟราเรดของเซนเซอร์รุ่นต่าง ๆ
  5. ถ้าระบบย่อยบางระบบเราไม่คุ้นเคย ไม่เคยทำแบบนั้นมาก่อน อาจทำต้นแบบ (prototype) แยกเฉพาะส่วน เพื่อทดสอบแนวคิดของส่วนนั้น ๆ ไปก่อน เช่น กลไกแบบประหลาด หรือวิธีการตรวจวัดแบบแปลก ๆ เป็นต้น
    ต้นแบบกลไก ทำขึ้นจากแผ่นพลาสติกลูกฟูก
    ต้นแบบกลไก ทำขึ้นจากแผ่นพลาสติกลูกฟูก
  6. เมื่อได้แบบคร่าว ๆ ของหุ่นยนต์และอุปกรณ์สำคัญ ๆ แล้ว ก็ลงมือออกแบบรายละเอียดตัวหุ่นยนต์ เช่น ยึดจับอุปกรณ์ต้นกำลังอย่างไร กลไกเป็นอย่างไร โครงสร้างหุ่นยนต์เป็นอย่างไร ระบบอิเล็กทรอนิกส์เป็นอย่างไร โครงสร้างโปรแกรมควบคุมเป็นอย่างไร ระบบสื่อสาร/ควบคุมหุ่นยนต์เป็นอย่างไร เป็นต้น
    ตัวอย่างการวาดแบบหุ่นยนต์ปีนกำแพง
    ตัวอย่างการวาดแบบหุ่นยนต์ปีนกำแพง
  7. ได้เวลามือเลอะ ขึ้นรูปชิ้นงานโครงสร้าง ต่อวงจรไฟฟ้า เขียนโปรแกรมควบคุมหุ่นยนต์
  8. ทดสอบ แก้ไข ปรับปรุง ไม่มีอะไรใช้ได้มาครั้งแรกที่ทำเสร็จ เก่งแค่ไหนก็พลาดได้ เราจึงต้องทดสอบว่าหุ่นยนต์ทำงานได้ตามต้องการหรือไม่ ผิดที่อะไร กลไกผิด วงจรผิด หรือโปรแกรมผิด ถ้าเราค่อย ๆ สร้างแล้วทดสอบเป็นส่วน ๆ ย่อยๆ เราก็จะตรวจพบและแก้ไขข้อผิดพลาดได้ง่ายกว่าการทำให้เสร็จทั้งหมดแล้วทดสอบทีเดียว จะแยกยากว่าผิดที่ส่วนไหน
  9. เมื่อสร้างหุ่นยนต์เสร็จ หุ่นยนต์ทำงานได้ดั่งใจ รับรองว่าเราสนุกและภูมิใจกับความสำเร็จนั้นแน่นอน :D
ครั้งต่อ ๆ ไปเราจะมาลงรายละเอียดในแต่ละขั้นตอนว่าเราจะทำมันอย่างไร ติดตามกันนะครับ
** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **

ผ่าหุ่นยนต์ดูไส้ใน

byob-robot-component
Build Your Own Bot ตอนที่ 3 มาแล้วครับ คราวนี้เราจะใกล้ความจริงกับการสร้างหุ่นยนต์กันซักที เรามาดูกันว่า จะสร้างหุ่นยนต์ซักตัว มีองค์ประกอบอะไรที่เราต้องเข้าไปยุ่งด้วยบ้าง เช่นเดียวกับตอนที่แล้วที่ได้ทำการแบ่งประเภทของหุ่นยนต์ไป องค์ประกอบของหุ่นยนต์ก็แตกต่างกันไปตามแต่ชนิดของหุ่นยนต์ และยังสามารถแบ่งในรูปแบบอื่น ๆ ได้ตามแต่ผู้แบ่งจะอยากแบ่ง
ส่วนประกอบของหุ่นยนต์ (ตามที่ผมอยากจะแบ่ง) ได้แก่
  1. โครงสร้างและกลไก โครงสร้างของหุ่นยนต์เป็นส่วนที่ยึดส่วนต่าง ๆ ของหุ่นยนต์ไว้ด้วยกัน และ/หรือ เพื่อส่งกำลังไปตามส่วนต่าง ๆ ของหุ่นยนต์ ถึงแม้ว่าจะใช้คำว่าโครงสร้าง แต่ก็ไม่จำเป็นต้องเป็นโครง อาจจะเป็นแผ่น ก้อน ก็ได้ และก็ไม่จำเป็นต้องมีลักษณะแข็ง อาจจะมีโครงสร้างอ่อนนิ่มก็ได้ ขึ้นกับจุดประสงค์การออกแบบและวัสดุที่ใช้
    A) โครงสร้างและกลไกของหุ่นยนต์ตามแบบของ Theo Jansen สร้างด้วยโครงแข็ง, B) โครงสร้างหุ่นยนต์สร้างด้วยแผ่นโลหะ, C) แขนหุ่นยนต์งวงช้างของ Festo เป็นโครงสร้างอ่อนนิ่ม
    A) โครงสร้างและกลไกของหุ่นยนต์ตามแบบของ Theo Jansen สร้างด้วยโครงแข็ง, B) โครงสร้างหุ่นยนต์สร้างด้วยแผ่นโลหะ, C) แขนหุ่นยนต์งวงช้างของ Festo เป็นโครงสร้างอ่อนนิ่ม
  2. ต้นกำลัง (actuator) ขึ้นชื่อว่าหุ่นยนต์ ก็ต้องมีความสามารถในการเคลื่อนไหว ต้นกำเนิดการเคลื่อนไหวมาจากอุปกรณ์ต้นกำลัง ซึ่งมีหลายประเภท เช่น มอเตอร์ไฟฟ้า โซลินอยด์ไฟฟ้า (solenoid) โลหะจำรูป (shape memory alloy) โพลีเมอร์เปลี่ยนรูปได้ (electroactive polymer) กระบอกลม (pneumatic cylinder actuator) เป็นต้น
    A) DC motor, B) solenoid, C) shape memory alloy, D) electroactive polymer, E) กระบอกลม
    A) DC motor, B) solenoid, C) shape memory alloy, D) electroactive polymer, E) กระบอกลม
  3. อุปกรณ์ตรวจวัด (sensor) หุ่นยนต์ต่างจากเครื่องจักรทั่ว ๆ ไปตรงที่มันมีความสามารถในการรับรู้สภาพต่าง ๆ ทำให้หุ่นยนต์ทำงานได้ฉลาด อุปกรณ์ตรวจวัดก็มีมากมายไม่แพ้ต้นกำลัง เช่น เซนเซอร์ตรวจวัดการเข้าใกล้ (proximity sensor) เซนเซอร์แสง กล้อง เซนเซอร์วัดระยะ (range finder) เซนเซอร์วัดการหมุนของเพลา (encoder) เป็นต้น
    A) proximity sensor แบบต่าง ๆ, B) กล้อง, C) เซนเซอร์แสง, D) เซนเซอร์วัดระยะ Sharp IR range finder, E) encoder
    A) proximity sensor แบบต่าง ๆ, B) กล้อง, C) เซนเซอร์แสง, D) เซนเซอร์วัดระยะ Sharp IR range finder, E) encoder
  4. แหล่งพลังงาน หุ่นยนต์จะทำงานได้ต้องมีแหล่งพลังงานซึ่งมีหลายประเภทอีกเช่นกัน เช่น พลังงานไฟฟ้า พลังงานเชื้อเพลิงพลังงานชีวภาพ พลังงานจากอากาศอัด เป็นต้น
  5. ระบบอิเล็กทรอนิกส์ ถึงแม้ต้นกำลังและแหล่งพลังงานจะมีหลายรูปแบบ แต่ส่วนมากจะเป็นอุปกรณ์ไฟฟ้า หรือถ้าไม่ใช่ไฟฟ้าก็ยังจะต้องมีระบบไฟฟ้าไปควบคุมอยู่ดี ดังนั้นระบบอิเล็กทรอนิกส์จึงเป็นส่วนประกอบสำคัญอีกอย่างในหุ่นยนต์ที่ทำหน้าที่ติดต่อสื่อสาร รับสัญญาณตรวจวัดเข้ามา ส่งสัญญาณควบคุมออกไป
    A) บอร์ดไมโครคอนโทรลเลอร์ Arduino, B) วงจรควบคุมมอเตอร์ของ Maxon
    A) บอร์ดไมโครคอนโทรลเลอร์ Arduino, B) วงจรควบคุมมอเตอร์ของ Maxon
  6. ระบบควบคุม (control) เมื่อมีต้นกำลังแล้ว มีอุปกรณ์ตรวจวัดแล้ว มีระบบอิเล็กทรอนิกส์แล้ว ระบบควบคุมมีหน้าที่ควบคุมให้ต้นกำลังทำงานตามที่ต้องการ เช่น หมุนมอเตอร์ไปที่มุมต่าง ๆ ความเร็วต่าง ๆ แรงต่าง ๆ หรือดันกระบอกลมไปที่ระยะต่าง ๆ เป็นต้น
  7. ปัญญาประดิษฐ์ (artificial intelligence) ถือว่าเป็นขั้นสูงกว่าระบบควบคุมก็ว่าได้ หุ่นยนต์จะรู้ได้อย่างไรว่าต้องควบคุมกลไกต่าง ๆ ให้ทำงานแบบไหน นั่นคือหน้าที่ของปัญญาประดิษฐ์ที่จะต้องนำข้อมูลจากอุปกรณ์ตรวจวัดมาคิด คำนวณ วิเคราะห์ ตัดสินใจว่าหุ่นยนต์จะต้องทำอะไร เช่น จะหยิบของจากที่หนึ่งไปอีกที่หนึ่งก็จะต้องวิเคราะห์ว่าของที่จะหยิบอยู่ตรงไหน หน้าตาเป็นอย่างไร จะเอื้อมมือไปทิศไหน จะจับอย่างไร จับได้แล้วจะย้ายไปทิศไหน วางท่าไหน อย่างไร เป็นต้น
    ปัญญาประดิษฐ์ของรถอัตโนมัติวิเคราะห์ข้อมูลจากเซนเซอร์ต่าง ๆ เพื่อวางแผนการเคลื่อนที่
    ปัญญาประดิษฐ์ของรถอัตโนมัติวิเคราะห์ข้อมูลจากเซนเซอร์ต่าง ๆ เพื่อวางแผนการเคลื่อนที่
  8. ส่วนติดต่อผู้ใช้งาน (user interface) ตราบใดที่หุ่นยนต์ยังไม่ครองโลก ยังไงซะหุ่นยนต์ก็ต้องมีปฏิสัมพันธ์กับมนุษย์ ไม่ว่าจะเป็นตอนหุ่นยนต์ทำงานให้มนุษย์ หรือแม้กระทั่งตอนที่ผู้ควบคุมโปรแกรมให้หุ่นยนต์ทำงานตามที่ต้องการ
    A) แป้นควบคุมหุ่นยนต์ (teaching pendant), B) ชุดควบคุมหุ่นยนต์กู้ภัย iRobot, C) หุ่นยนต์ Baxter
    A) แป้นควบคุมหุ่นยนต์ (teaching pendant), B) ชุดควบคุมหุ่นยนต์กู้ภัย iRobot, C) หุ่นยนต์ Baxter
** บทความนี้เป็นส่วนหนึ่งของบทความชุด Build Your Own Bot แนะนำการสร้างหุ่นยนต์ด้วยตัวเอง **