0

10 เหตุผลที่หุ่นยนต์ควรใช้ Robot Operating System (ROS)

ROS.org

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

  1. ROS เกิดมาเพื่อใช้งานกับหุ่นต์โดยเฉพาะ
    อันนี้ด้วยชื่อมันก็บอกอยู่แล้วครับว่า Robot Operating System (ระบบปฏิบัติการหุ่นยนต์) ถือกำหนิดภายใน Lab AI ของ Standford ในปี 2007 แล้วก็พัฒนาเรื่อยมาจนถึงปัจจุบัน โดยเป็น Software framework สำหรับพัฒนาหุ่นยนต์ โดยตัวระบบ framework นั้นพัฒนามาในลักษณะคล้ายๆกับระบบปฏิบัติการ แต่รันบนระบบปฏิบัติการ คือมีคำสั่ง cd ls install หรืออื่นๆ ทำให้ผู้ใช้งานนั้นรู้สึกเหมือนว่ากำลังใช้งานระบบ OS อยู่นั่นเอง ด้วยข้อดีหลายอย่างจึงทำให้มีผู้ใช้งานมากขึ้นเรื่อยมา
  2. ROS เปิดให้ใช้งานได้ฟรี
    แน่นอนครับตัว framework ของ ROS นั้นประกอบด้วยแพ็กเกจที่เข้ามาเสริมมากมาย และตัวแพ็กเกจเหล่านั้นเป็นตัว Opensource ที่ปล่อยออกมาในรูปแบบของ BSD License ทำให้ตัวโปรแกรมที่ออกมานั้นรองรับทั้งแบบที่เป็นการค้าและทั้งการใช้งานเพื่อการค้นคว้าพัฒนาอีกด้วย
  3. มีภาษาให้เลือกพัฒนาที่หลากหลาย
    หลักๆแล้วตัวแพ็กเกจนั้นสามารถเขียนได้ด้วยภาษา C++ ซึ่งตอบโจทย์ในเรื่องความเร็วในการประมวลผลได้อย่างดี แต่หากคิดว่ามันยากเกินไปยังมีภาษา Python และ LISP รองรับ นอกจากนั้นยังมี rosjava ซึ่งเป็น client library ที่ทำงานกับภาษา java ได้ และด้วย rosjava นี่เองทำให้เกิดการพัฒนาส่วนเสริมของภาษาอื่นๆเพิ่มมาอีกเช่น Android, JavaScript, NodeJS, Matlab, .Net เรียกได้ว่าถนัดภาษาไหนก็เขียนกับภาษานั้นได้เลย
  4. อัพเดทระบบทุกปี
    ROS คล้ายๆกับระบบปฏิบัติการอื่นๆ เช่น Android, ISO, Windows, Linux คือมีการอัพเดทเพื่อให้ตัวระบบนั้นใหม่อยู่ตลอดเวลา ให้ระบบนั้นเสถียรยิ่งขึ้นและยังแก้ไขข้อผิดพลาดต่างๆ ผู้ใช้จึงมั่นใจได้ว่าไม่ได้ใช้ของเก่าจนตกรุ่นแน่นอน (จริงๆแล้วผมมองว่ามันไปเร็วไปด้วยซ้ำ ปีนึงๆมีแพ็กเกจออกใหม่ตลอดตามไม่ค่อยทันเลย แต่มันก็มี Long Term Support อยู่นะ) โดยเริ่มแรกนั้นปี 2010 – 2013 ออกอัพเดทปีหนึ่งเกือบ 2 ครั้งโดยแต่ล่ะครั้ง จะมีการใช้ชื่อและโลโก้ของเต่าตลอด แต่ช่วงหลัง 2 ปีมานี้มีกำหนดที่แน่นอนคือวันที่ 23 พฤษภาคม รายชื่อของเต่าแต่ล่ะตัวมีดังนี้ (เรียงจากเก่าไปใหม่)
    Box Turtle,C Turtle,Diamondback,Electric Emys,Fuerte Turtle,Groovy Galapagos,Hydro Medusa,Indigo Igloo,Jade Turtle,Kinetic Kame
    B-turtle C-turtleD-turtleE-turtleF-turtleG-turtleH-turtleI-turtleJade TurtleKinetic Kame
  5. รองรับหุ่นยนต์ บอร์ดพัฒนา เซนเซอร์ที่หลากหลาย
    ได้ชื่อว่าระบบปฏิบัติการหุ่นยนต์แล้วก็ต้องมีหุ่นยนต์ใช่ไหมหล่ะ โดยหุ่นที่ใช้กับ ROS ได้เลยนั้นมีทั้งหมด 97 ตัวมีตั้งแต่หุ่นราคาหลายล้านไปจนถึงหุ่นกระป๋องกระแป๋ง และที่ไม่ใช่หุ่นเช่นรถยนต์ โดรน แขนกล บอร์ดพัฒนาต่างๆ (เช่น Intel Edison, Lego NXT), เครื่องดูดฝุ่น โทรศัพท์มือถือ เครื่องบิน รวมไปถึงเซนเซอร์ต่างๆ เช่น เซนเซอร์หาระยะ 1,2, และ 3 มิติ เซนเซอร์เสียง/รู้จำเสียง กล้องแบบต่างๆ เซนเซอร์รับรู้สิ่งแวดล้อม เซนเซอร์รับแรงกด/บิด/แตะ โมชั่นแคปเจอร์ เซนเซอร์จับท่าทางพิกัด(IMU/GPS) เซนเซอร์ไฟฟ้าต่างๆ ไฟเลี้ยง RFID และส่วนเชื่อต่อเซนเซอร์อื่นๆเช่น Arduino เป็นต้น เยอะไหมหล่ะ คุณสามารถสร้างหุ่น/ไม่ใช่หุ่น ขึ้นมาเองใช้เซนเซอร์ต่างๆ ในหุ่น/ไม่ใช่หุ่น ของคุณ และสามารถผนวกกับ ROS ได้อย่างง่ายดาย
  6. มีชุมชนออนไลน์ขนาดใหญ่ มีคนคุยด้วยไม่เหงา
    สิ่งที่ขาดไม่ได้เลยของการพัฒนาอะไรสักอย่างก็เรื่อง Community นี่แหละ อย่างน้อยเราก็ไม่เหงา มีคนทำ มีคนมีปัญหาเหมือนเรา อย่างน้อยก็อุ่นใจ ว่าเราไม่ได้ทำคนเดียว คุณลองคิดถึงการเขียนโปรแกรมโดยไม่มี Stack Overflow หรือ Google ดูสิ มันจะเป็นอย่างไร … นึกภาพออกใช่ไหมหล่ะ และแน่นอนระบบ Community ของ ROS ใช้แบบเดียวกับ StackOverflow เลยทีเดียว มี site อยู่ที่ answers.ros.org ในปี 2015(july) นั้นมีสมาชิกอยู่ที่ 11,406 คน คำถามนั้นอยู่ที่ 24,026 คำถาม และตอบไปแล้วกว่า 17,414 คำตอบ เยอะขนาดนี้ผมทดสอบดูแล้วทุก error ที่เจอ ไปค้นมีคำตอบแล้วเจอประมาณ 90% เลยทีเดียว
  7. มีคู่มือและเอกสารแนะนำการใช้งานชั้นเยี่ยม
    สำหรับมือใหม่ที่หลงเข้ามาหรือ ตั้งใจเข้ามาใช้งาน ROS โดยเฉพาะ ผมบอกได้เลยการเริ่มต้นนั้นไม่ยากอย่างที่คิด เพราะตัวเว็บ wiki.ros.org นั้นเป็น wiki และ tutorial ชั้นเยี่ยมที่อธิบายราวกับจับมือทำ ครั้งแรกที่ผมเริ่มเข้ามาใช้งานนั้นสามารถติดตั้งระบบผ่านฉลุย รันได้โดยที่ไม่ติดปัญหาอะไรเลย นอกจากนั้นทุกส่วนประกอบ ทุกเครื่องมือของ ROS นั้นยังมี wiki อธิบายวิธีใช้งานเอาไว้หมด มีภาษาที่แปลไว้ 12 ภาษา รวมถึงภาษาไทยด้วย(แต่แปลไม่หมด) จากสถิติปี 2015(May) wiki ของ ros มีจำนวนหน้าถึง 16,043 หน้า ผู้เข้าชมมากถึง 37,235 คนต่อวัน และการแก้ไขหน้า wiki ให้อัพเดทนั้นเฉลี่ยอยู่ที่ประมาณ 32 หน้าต่อวัน
  8. มีเพกเกจเสริมสำหรับหุ่นยนต์ทุกรูปแบบ
    ระบบของ ROS นั้นประกอบด้วยแพ็กเกจต่างๆมาประกอบกันมาแต่ล่ะแพ็กเกจนั้นจะประกอบไปด้วย โหนด(Node) (เปรียบเสมือนโปรแกรมหนึ่งเลือกปิดเปิดรันได้อิสระ) ด้วยแพ็กเกจเหล่านี้เองทำให้ ROS สามารถใช้งานได้หลายหลาย ผู้ใช้สามารถดาวน์โหลดมาติดตั้งได้ตามใจชอบ ตัวอย่างเช่น rosserial ทำหน้าที่เชื่อมต่อ Serial Port, openni_kinect เป็นแพ็กเกจสำหรับใช้ในการเชื่อมต่อกล้อง Kinect, ardrone_autonomy เป็นแพ็กเกจในการเชื่อมต่อกับ Parrot AR Drone เป็นต้น นอกจากนั้นแต่ล่ะคนสามารถพัฒนาแพ็กเกจของตัวเองแล้วเอาเข้ามาประกอบกับ ROS ได้อีกด้วย
  9. โครงสร้างระบบออกมาอย่างดี เข้าใจง่าย
    อย่างที่บอกไปเมื่อข้อที่แล้วครับว่า ROS นั้นประกอบกันขึ้นจากแพ็กเกจต่างๆมากมายหลายคนๆอาจมองว่ามันยาก แต่เวลาเราไปใช้งานจริงๆกลับไม่ยากอย่างที่คิดเพราะแพ็กเกจต่างๆที่รันเป็นโหนดนั้นสามารถทำงานร่วมกันได้เป็นหนึ่งเดียว โดยโหนดแต่ล่ะตัวจะทำงานของใครของมันไม่ทำงานขัดขากัน(เช่นโหนดกล้อง ก็จะรับแต่ภาพ)แต่มันสามารถสื่อสารกันได้ด้วย Message มีมากมายหลายประเภท และแต่ล่ะโหนดนั้นยังสามารถทำตัวเป็น Subscriber และ Publisher โดย Publisher จะส่งข้อมูล Message ออกจาก Node ตัวเองไปเป็นชื่อพาทเรียกว่า Topic และโหนดที่ทำหน้าที่ Subscriber ก็จะรับเอาข้อมูลนั้นไปประมวลผล (เช่น โหนดกล้องส่งข้อมูลประเภทภาพออกทาง Topic  ชื่อว่า ‘/image’ แล้วโหนดประมวลผลภาพก็จะ subscribe เอา Topic ‘/image’ แล้วก็จะได้รูปไปประมวลผล) การออกแบบเช่นนี้จะทำให้ผู้พัฒนาไม่ต้องคิดเขียนโครงสร้างใหญ่โตเองทั้งหมด แต่ focus ไปที่งานใดงานหนึ่งแค่นั้นเอง
  10. สามารถพัฒนาระบบหุ่นยนต์ที่มีขนาดใหญ่ได้ไม่ยุ่งยาก
    อันนี้ก็มาจากข้อที่แล้ว เนื่องจากแต่ล่ะโหนดสื่อสารกันด้วย Topic แต่ความเจ๋งของมันคือเราสามารถแยกโหนดแต่ล่ะโหนดออกจากกันได้(หมายถึงแยกเครื่องไปเลยได้) โดยจะมีเครื่องแม่เครื่องหนึ่งที่รัน roscore ไว้เป็นศูนย์กลางข้อมูล เมื่อเครื่องลูกรันโหนด พร้อมกันเซตไอพีของเครื่องแม่ เพียงแค่นี้ระบบก็จะเชื่อมถึงกันได้แล้ว ทำให้เราสามารถพัฒนาระบบใหญ่ๆออกเป็นโครงสร้างย่อยๆได้ ตัวอย่างเช่นผมทำหุ่น Arduino ต่อ wifi ไว้ ผมก็เอา rosserial ไปรันไว้เป็นโหนดนึง subscribe และ publish topic ชื่อ /serial พร้อมกับเซ็ตไอพีเครื่องแม่ พอรันระบบขึ้นเครื่องแม่ก็จะเห็น topic ‘/serial’ ของ arduino อัตโนมัติ พอรันสั่งการ ‘/serial’ จากเครื่องแม่คำสั่งนั้นก็จะไปโผล่ที่ arduino ทันที โดยที่เราไม่ต้องจัดการ การส่งข้อมูลเลย!!!

เป็นอย่างไรกันบ้างสำหรับ 10 ข้อคุณประโยชน์จากการใช้ ROS พัฒนาหุ่นยนต์ ถ้าเกิดใครสนใจเพิ่มเติมก็ลองเข้าไปดูกันได้ที http://www.ros.org คราวหน้าถ้าพัฒนาหุ่นยนต์ขึ้นมาสักตัวก็อย่าลืมมอง ROS เป็นอีกทางเลือกหนึ่งในการพัฒนานะครับ ^^
คมเดช (ตต.)
อ้างอิง
http://wiki.ros.org
http://wiki.ros.org/Distributions
http://wiki.ros.org/Robots
http://wiki.ros.org/Metrics

Comdet

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *