28 กันยายน 2561

ROS คืออะไร



การพัฒนาหุ่นยนต์ขึ้นมาซักตัวนี้ ต้องใช้อะไรเยอะแยะมากเลย ตั้งแต่ การออกแบบ Hardware มานั่งดูเรื่องของ Static , Dynamics ของหุ่นยนต์ ยังไม่รวมถึงพวก Vision , Sensor , AI , Controlling ในส่วนของ Software . . . . .  การจัดการแต่ละส่วนมันไม่ง่ายเลย

ถ้าไม่ได้ออกแบบแยกแต่ละ Module ออกมาให้ดี แถมถ้างานยิ่งซับซ้อนขึ้นมามากๆ การจัดการจะยิ่งปวดหัวและลำบากใจเป็นอย่างยิ่ง

ผู้เขียนก็เป็นคนหนึ่งที่เขียนโปรแกรมหุ่นยนต์ในชนิดที่ทุกอย่างแทบจะอยู่ที่เดียว ไฟล์เดียว ตามบล็อก ด้านล่างที่ผู้เขียนเคยเขียนเอาไว้


การสร้างหุ่นยนต์ ด้วย Araduino
https://codeprojectarduino.blogspot.com/


การสร้างหุ่นยนต์ ด้วย ESP8266
https://nodemcurobot.blogspot.com/


การสร้างหุ่นยนต์ ด้วย ESP32
https://esp32robot.blogspot.com/


การสร้างหุ่นยนต์ ด้วย Raspberry Pi
https://raspberrypi3robot.blogspot.com/


ตัวอย่างเช่น Code ชุดเดิม เราเคยเขียนหุ่นยนต์วิ่งตามเส้นมาแล้ว พอจะต้องมาทำแบบเดิม กับหุ่นยนต์ตัวใหญ่กว่า หรือ ขับเคลื่อน 4 ล้อ

ต้องมานั่งเขียนโปรแกรมควบคุมใหม่อีก แถมไม่พอ ต้องมานั่งแก้ตัวแปรให้ตรงกับ ฐานหุ่นใหม่ที่ซื้อมา

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


หลังจากเขียนการสร้างหุ่นยนต์มาซักสองปี ก็มาพบ Facebook Group หุ่นยนต์ไทยใช้ ROS - Robot Operating System Thailand  เห็นว่าน่าสนใจจึงลงมือเริ่มศึกษา ROS

ROS — Robot Operating System แปลเป็นภาษาไทยตรงๆ ก็คือ ระบบปฏิบัติการหุ่นยนต์นั่นเอง แต่จริงๆแล้ว มันไม่ใช่ระบบปฏิบัติการไปซะทีเดียว จริงๆแล้วมันเป็นเหมือน Framework ของ Software หุ่นยนต์ (Framework — ระเบียบวิธีการทำงานของโปรแกรมที่ เมื่อทำตามจะช่วยให้โปรแกรมเป็นระเบียบมากขึ้น ทำงานง่ายขึ้น)

ก่อนที่จะศึกษา ROS เรามาทำความเข้าใจก่อนว่า ROS คืออะไรและมีประโยชน์อย่างไร ทำไมถึงต้องใช้ ROSและทำไมเราถึงต้องศึกษาและเรียนรู้ ROS

ที่มาที่ไป => ROS คือ Framework ของการพัฒนาหุ่นยนต์ ที่ Willow Garage (บริษัทที่วิจัยหุ่นยนต์ ใน USA) คิดขึ้นมา เพื่อใช้กับเจ้า หุ่นยนต์ PR2



ความสามารถของมันก็คือ การแบ่งทุกๆอย่างเป็น Module (หรือจะเรียกย่อยๆว่า Node) Node แต่ละอันจะทำหน้าที่ของมันเองเป็นก้อนๆ ที่มีความยืดหยุ่นสำหรับการเขียนโปรแกรมทางด้านหุ่นยนต์ โดยได้รวบรวมเครื่องมือและไลบรารีไว้เป็นหมวดหมู่


ลดความซับซ้อนและเพิ่มประสิทธิภาพในการทำงานกับแพลตฟอร์มที่หลากหลายของหุ่นยนต์ หรืออาจกล่าวได้ว่า ROS ได้รวบรวมไลบรารีและเครื่องมือไม่ว่าจะเป็น Hardware Abstraction, Device Drivers, Libraries, Visualizers, Message-passing, Package Management และอื่น ๆ อีกมากมาย เพื่อช่วยให้นักพัฒนาซอฟต์แวร์ในการสร้างแอพพลิเคชันทางด้านหุ่นยนต์ ที่สำคัญ ROS เป็นโอเพ่นซอร์ส


และเมื่อเราเปลี่ยนหุ่น (เช่น อยากใช้หุ่นยนต์เจ้าอื่น , อยากเปลี่ยนจาก 2 เป็น 4 ล้อ) เราก็ยังอยากให้ การทำงานเป็นแบบเดิม โดยที่แก้แค่ส่วนที่เป็นการคุมล้อหุ่นยนต์จริงๆ ไม่ต้องแก้ Logic อื่นๆ ให้เสียเวลา (การเขียนโปรแกรมหุ่นยนต์แบบเดิมๆ บางครั้งต้องรื้อทั้งระบบเลย)

แต่ ROS เราก็แค่เปลี่ยนแค่ Code ในส่วนฐานก็ได้แล้ว

เพราะ ROS จะใช้การติดต่อสื่อสารกับ Node อื่นๆ ด้วยการส่งข้อมูลผ่านส่วนกลางของระบบ ที่ตกลงรูปแบบกันไว้แล้ว (เหลือแค่มาพัฒนาส่วนการแปลข้อมูลให้เป็นไปตาม Hardware , Algorithm ที่ต้องการ)

ใครอยากจะใช้ข้อมูลตัวไหน จะสั่งการอะไร ก็สามารถทำได้โดยง่าย เพราะข้อมูลมันถูกส่งผ่านตัวกลาง จะเรียกใช้อะไร ก็เรียกเลย


ทำไมถึงต้องใช้ ROS เพราะการสร้างซอฟต์แวร์ที่รองรับงานทุก ๆ อย่างที่จำเป็นสำหรับหุ่นยนต์เป็นเรื่องที่ยาก จากมุมมองในการทำงานด้านหุ่นยนต์ ปัญหาในการทำงานในสภาพแวดล้อมต่าง ๆ อาจเป็นปัญหาเพียงเล็กน้อยสำหรับมนุษย์ แต่สำหรับหุ่นยนต์แล้วไม่ใช่ จึงเป็นเรื่องยากสำหรับคนเพียงคนเดียวที่ไม่มีห้องปฎิบัติการหรือสถาบันการศึกษา ที่จะทำงานทางด้านหุ่นยนต์ด้วยตนเองเพียงคนเดียว

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

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

ROS หลักๆตอนนี้ใช้ ภาษา C++ หรือ Python ในการพัฒนาเป็นหลัก และ ROS ต้องการ Computer ระบบ Linux ใดๆ เช่น Ubuntu , Lubuntu , Redhat  ซึ่งส่วนใหญ่ก็จะใช้ อูบุนตู (Ubuntu)

...

หมายเหตุ : เรียบเรียงและแก้ไขดัดแปลงจากบทความต้นฉบับด้านล่าง