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/