Robot Operating System(ROS) Part 3

Robot Operating System(ROS) Part 3 ภาษาในการพัฒนาแอปพลิเคชั่นใน ROS

ROS ถูกพัฒนาขึ้นโดยใช้ภาษาสองภาษาหลักคือ C++ และ Python ซึ่งเป็นภาษาที่นิยมใช้มากที่สุดในการพัฒนาแอปพลิเคชันหุ่นยนต์ สามารถใช้ไลบรารี roscpp เพื่อเขียนโค้ดภาษา C++ และไลบรารี rospy เพื่อเขียนโค้ดภาษา Python นอกจากนี้ยังมีไลบรารีบางส่วนที่ช่วยสร้างการเชื่อมต่อกับกับภาษาอื่น ๆ เช่น rosjava สำหรับภาษา Java และ roslibjs หรือ rosnodejs สำหรับภาษา JavaScript

รูปที่ 1 communication & Language layerใน ROS[2]

     เนื่องจากใน ROS เลเยอร์ที่จัดการเกี่ยวกับการสื่อสารอยู่ต่ำกว่าของ เลเยอร์ของภาษาโปรแกรม โดย ROS ใช้ส่วนติดต่อมาตรฐานแบบ TCP/IP sockets เพื่อสื่อสารระหว่าง node ย่อยแต่ละตัว ในการสร้างแอปพลิเคชันด้วย ROS โปรแกรมย่อย (Node) จึงสามารถเขียนด้วยภาษาใดก็ได้ ในแอปพลิเคชันที่สร้างขึ้น สามารถมีโหนดที่เขียนด้วยภาษา Python ที่สื่อสารกับโหนดอื่นๆที่เขียนด้วยภาษา C++ ได้

ไลบรารีใน ROS (ROS Library)

ใน ROS ไม่ได้มีเพียงแค่ชุดโปรแกรม(library) พื้นฐานทั่วไปและเครื่องมือการสื่อสารเท่านั้น แต่ยังมีชุดโปรแกรมอื่นๆให้เลือกใช้อีกมากมายที่จะช่วยให้เราพัฒนาแอพลิเคลั่นหุ่นยนต์ได้ในหลายๆ ด้าน ตัวอย่างเช่น

  • ไดรเวอร์สำหรับมอเตอร์
  • วงจรควบคุม PID
  • การวางแผนการเคลื่อนที่
  • การแสดงผลสามมิติ
  • ไดรเวอร์กล้อง
  • อื่นๆ

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

  • ตัวควบคุมหลักของหุ่นยนต์ของ ros_control(http://wiki.ros.org/ros_control)
  • การแสดงแบบจำลองสามมิติของหุ่นยนต์ ทำได้โดยใช้ XML เพื่ออธิบายด้วยรูปแบบ URDF (http://wiki.ros.org/urdf)
  • การวางแผนเส้นทางและการวางแผนการเคลื่อนที่ใช้ Moveit(https://moveit.ros.org/) โดย Moveit จะใช้รูปแบบ URDF จาก XML ไฟล์ที่เราสร้างไว้
  • ในการเคลื่อนที่ของหุ่นยนต์เคลื่อนที่ใช้ชุดการนำทาง navigation stack(http://wiki.ros.org/navigation)
  • การแสดงผลสามมิติใช้ Rviz (http://wiki.ros.org/rviz)
  • หากต้องการเครื่องมือจำลองที่มีที่มีความสามารถสูง สามารถเลือกใช้ Gazebo (https://gazebosim.org/home) ที่สามารถจำลองการทำงานของเครื่องบินด้วยแรงโน้มถ่วงและลมได้ หากเครื่องบินบินได้ใน Gazebo ก็มีโอกาสที่จะบินในโลกจริงสูงมาก

รูปที่ 2 ตัวอย่างการเชื่อมต่อระหว่างโมดูลต่างๆของ Mobile Robot [2]

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

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

กรณีใดบ้างควรใช้ ROS ในการพัฒนาหุ่นยนต์:

  • หุ่นยนต์มี Sensor และ Actuator หลากหลายชนิด : กรณีนี้ ROS จะช่วยให้เราสร้างระบบกระจายสำหรับส่วนประกอบต่างๆ แทนที่จะพัฒนาบนโปรแกรมเดียวที่มีขนาดใหญ่และรวมทุกส่วนไว้ด้วยกัน  ซึ่งจะยากต่อการทดสอบและพัฒนาเพิ่มเติมในอนาคต
  • ผู้พัฒนากำลังเรียนรู้ด้านหุ่นยนต์ : ROS จะช่วยให้เราสามารถรันแอปพลิเคชันหุ่นยนต์ที่สมบูรณ์แบบและมองเห็นภาพรวมของการทำงานของระบบหุ่นยนต์ที่มีขนาดใหญ่ขึ้นได้ เมื่อเราใช้ ROS ได้อย่างชำนาญ เราะสามารถเขียน  Code สำหรับหุ่นยนต์ตัวใหม่ได้อย่างรวดเร็ว
  • ผู้พัฒนากำลังทำการวิจัยด้านหุ่นยนต์ : ROS เป็นเครื่องมือที่เหมาะสำหรับงานลักษณะนี้อย่างมาก โดยปกติแล้วงานวิจัยมักจะเกี่ยวกับประเด็นที่มีความเฉพาะเจาะจงมาก ซึ่งนักวิจัยควรให้ความสำคัญกับประเด็นที่ต้องการเท่านั้น ด้วยการใช้ ROS ที่มีองค์ประกอบต่างๆที่จำเป็น เช่น code, เครื่องมือที่จำเป็นสำหรับ communication , และ libraries ต่างๆอีกมากมาย สำหรับสร้างซอฟต์แวร์หุ่นยนต์  นักวิจัยสามารถใช้เวลาไม่นานในการศึกษาวิธีการใช้งาน ROS แทนที่จะพยายามสร้างระบบทั้งหมดขึ้นใหม่
  • ผู้พัฒนาต้องการจำลองการทำงานของหุ่นยนต์ : การจำลองมักหมายถึงเราต้องการทำสิ่งต่างๆให้เสร็จในเวลาที่เร็วที่สุด ถ้าเราสามารถใช้ 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 *