ROS (Robot Operating System) Part 1

Robot Operting System(ROS)      

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

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

      ROS มีเครื่องมือการสื่อสารหลายอย่างเช่น topics, services, actions เพื่อช่วยในการสื่อสารระหว่างโปรแกรม และมีไลบรารีที่นำไปใช้งานได้หลากหลาย เช่น การควบคุมระบบ, การวาดแผนทางการเคลื่อนที่, การแสดงผล 3 มิติ, การสร้างและจำลองโมเดล 3 มิติ, และอื่นๆ ที่สามารถนำมาใช้งานเพื่อสนับสนุนการพัฒนาซอฟต์แวร์หุ่นยนต์ได้

ความเป็นมาของ ROS

      ROS เริ่มพัฒนาที่มหาวิทยาลัยสแตนฟอร์ดในปี 2007 โดยนักศึกษาปริญญาโทสองคน คือ Eric Berger และ Keenan Wyrobek ได้พัฒนา ROS ขึ้นเพื่อค้นหาวิธีในการจัดการซอฟต์แวร์และฮาร์ดแวร์เพื่อพัฒนาหุ่นยนต์อย่างมีประสิทธิภาพ โดย ROS เปิดตัวในปี 2010 หลังจากนั้นถูกส่งต่อให้กับบริษัท Open Robotics ในปี 2013 และตั้งแต่นั้นมา บริษัทนี้ได้รับผิดชอบดูแลและพัฒนา ROS มาอย่างต่อเนื่องโดยความร่วมมือระหว่างสมาชิกใน ROS community. [1]

ทำไมถึงมีการพัฒนาและใช้งาน ROS? [2]

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

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

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

เป้าหมายหลักของระบบปฏิบัติการหุ่นยนต์ [2]

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

แล้ว ROS คืออะไรกันแน่ [2]

      ถึงแม้จะมีชื่อว่าเป็นระบบปฏิบัติการ แต่ ROS ไม่ใช่ระบบปฏิบัติการ ROS เป็นเครื่องมือที่ทำหน้าที่คล้ายกับมิดเดิลแวร์ (middleware)  หรือ เฟรมเวิร์ก (framework) ที่พัฒนาบนระบบปฏิบัติการที่มีอยู่แล้ว โดยทั่วไประบบปฏิบัติการหลักที่รองรับสำหรับ ROS คือ Ubuntu  (ในปัจจุบัน ROS2 มีเวอร์ชั่นบน MacOS และ Window)  การใช้งานเราต้องติดตั้ง ROS บนระบบปฏิบัติการของเราเพื่อใช้งาน  ในการใช้งาน ROS  จะเป้นการทำงานร่วมกันของ 2 ส่วนคือ

  • ROS Core (middleware) พร้อมเครื่องมือสื่อสาร
  • ชุดไลบรารีแบบ ” plug & play “

มิดเดิลแวร์ (Middleware) คืออะไร [2]

      โดยทั่วไป เมื่อเราต้องการพัฒนาซอฟต์แวร์ใหม่ขึ้นมาตัวหนึ่ง เราสามารถเลือกที่จะดำเนินการอย่างใดอย่างหนึ่ง ระหว่าง 2 แนวทาง คือ

  1. พัฒนาโปรแกรมภายใต้โค้ดเดียวกันทั้งหมด ซึ่งคอมไพล์และเรียกใช้งานได้ในโปรแกรมเดียว หรือ
  2. สร้างโปรแกรมย่อยๆ หลายโปรแกรม หนึ่งโปรแกรมสำหรับแต่ละงานย่อย/ฟังก์ชันของแอปพลิเคชัน

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

     มิดเดิลแวร์ คือระบบที่มีหน้าที่รับผิดชอบการสื่อสารระหว่างโปรแกรมย่อยในระบบหลายๆโปรแกรมที่ทำงานร่วมกันแบบกระจาย (distributed system) ดังนั้นหน้าที่หลักของ ROS ก็คือ เป็นระบบที่ช่วยให้ โปรแกรมย่อยของเราหลายๆโปรแกรมสื่อสารกันได้อย่างถูกต้องบนรูปแบบที่กำหนดไว้

Reference

[1] https://duradigital.io/building-the-future-an-overview-of-the-robot-operating-system-ros/

[2] https://roboticsbackend.com/what-is-ros/

This entry was posted in Blog 101. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *