คำศัพท์ที่ควรรู้ก่อนใช้ ROS

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

ไปเริ่มรู้จักคำศัพท์กันเลย

  • ROS
            ROS เป็นเหมือนเครื่องมือที่ช่วยให้เราสามารถเขียนโปรแกรมหุ่นยนต์ได้ง่ายขึ้น มีฟีเจอร์ต่างๆ เช่น sensing, recognizing, mapping, motion planning, message passing, package management, visualizers และไลบรารี่อีกมากมาย

  • Master
            Master ทำหน้าที่เป็นเหมือนตัว Server สำหรับให้ Node หลายๆตัวสามารถเชื่อมต่อกัน และสามารถส่งข้อมูล Message หากันระหว่าง Node ได้ คำสั่งที่ใช้รัน master คือ roscore ที่เราใช้ก่อนหน้านี้นี่เอง เมื่อเรารัน Master แล้ว เราก็สามารถที่จะรัน Node ต่างๆเพื่อส่งข้อมูลและทำหน้าที่อื่นๆได้ การสื่อสารกันระหว่าง Node จะใช้การส่ง Message หากันผ่าน Topic
            Master ใช้โปรโตคอลแบบ HTTP ในการสื่อสารกัน Master สามารถที่จะตั้งค่า URI Address และ Port ได้ โดยการเปลี่ยนค่า ROS_MASTER_URI ในไฟล์ .bashrc ซึ่งโดยปกติแล้วถ้าเราไม่ได้ตั้งค่า Default Address จะเป็น localhost และ Port เป็น 11311

  • Node
            Node คือโปรแกรมย่อยที่สุดที่ทำงานอยู่ใน ROS เวลาเขียน โหนดมักจะเขียนเป็น 1 โหนด ทำหน้าที่ 1 อย่าง เพื่อทำให้สามารถเอากลับมาใช้ใหม่ ยกตัวอย่างเช่นเรามีหุ่นยนต์เคลื่อนที่ด้วยล้อ 2 ล้อ เวลาแบ่งการทำงานของโหนด ก็จะแบ่งเป็น โหนดสำหรับอ่านค่าเซนเซอร์, โหนดสำหรับขับเคลื่อนมอเตอร์, โหนดสำหรับประมวลผลนำร่อง หรือ โหนดสำหรับหลบหลีกสิ่งกีดขวาง
            ในการสร้างโหนดนั้นสามารถสร้างได้ไม่จำกัด ซึ่งแต่ละ Node จะมีชื่อ (name), ชนิดข้อมูล (message), ที่อยู่ (URI address, Port) เป็นของตัวเอง เวลาใช้งานก็จะส่งข้อมูลเหล่านี้ไปให้ Master จัดการ ตัวโหนดนั้นสามารถทำหน้าที่เป็น Publisher, Subscriber, Service server หรือ Service client ได้ และจะสื่อสารกับ Node ตัวอื่นๆผ่าน Topics และ Services

  • Package
            Package คือพื้นฐานของ ROS แอพพลิเคชั่นทั้งหมดใน ROS จะพัฒนาโดยมีแพ็กเกจเป็นรากฐาน ในแพ็กเกจนั้นจะเก็บไฟล์ configuration ไปจนถึงไฟล์ launch ซึ่งแพ็กเกจส่วนใหญ่จะใส่ไฟล์ทั้งหมดที่จำเป็นในการทำงานไว้ในแพ็กเกจแล้ว แต่จะมีการใส่ Dependency เอาไว้หากต้องการใช้งานแพ็กเกจอื่น

  • Metapackage
            Metapackage เป็นการรวมกันของแพ็กเกจต่างๆ ที่ทำหน้าที่คล้ายกันมารวมไว้ที่เดียวเพื่อความสะดวกในการใช้งาน เมื่อก่อนจะเรียกว่า Stack ยกตัวอย่าง เช่น Navigation metapackage ประกอบไปด้วย 10 แพ็กเกจ เช่น AMCL (partical filter), DWA, EKF (extended kalman filter) หรือ map_server ซึ่งหากติดตั้ง Metapackage ตัวนี้ก็จะได้ทั้ง 10 แพ็กเกจมาหมดเลย

  • Message
            Node แต่ละตัวจะคุยกันผ่านการส่ง-รับ Message โดยข้อความก็อาจจะเป็นชนิดของตัวแปร เช่น integer, floating point, boolean หรือ อาจจะเอามาประกอบกันเป็นโครงสร้าง structure เช่น ประกอบกันเป็น Array หรือประกอบรวม int, float, string เข้าด้วยกันเป็น Message เดียวก็ได้
            การส่ง Message ผ่าน Topic จะเป็นการส่งแบบ Unidirectional คือส่งทางเดียว แต่หากเป็น Service จะเป็นการส่งแบบ Bidirectional คือ ส่งแล้วมีตอบกลับ

  • Topic
            Topic เป็นเหมือนกับหัวข้อเรื่องที่เอาไว้คุยกัน ให้เข้าใจง่ายๆคือ Publisher node จะทำการส่ง Message ของตัวเองขึ้นไปที่ Topic แล้วจากนั้นหากมี Subscriber node ตัวไหนก็ได้ที่มารอรับ Message ที่ส่งมาทาง Topic ที่มีชื่อเดียวกัน ก็จะได้รับ Message อันนั้นไป ดังนั้นการจะรับ-ส่ง Message ได้จะต้องผ่าน Topic ที่มีชื่อเดียวกัน

  • Publish กับ Publisher
            เวลาพูดว่า Publish หมายถึงการที่ Node ส่ง Message ออกไปทาง Topic โดยการส่งออกไปนั้นเป็นเหมือนการ Broadcast คือไม่สนใจว่าจะมีใครมารอรับอยู่รึเปล่า Node 1 ตัวสามารถ Publish ออกไปได้หลาย Topic การส่ง Message เราจะเรียกว่าเป็นตัว Publisher

  • Subscribe กับ Subscriber
            เวลาพูดว่า Subscribe หมายถึงการที่ Node รับ Message ที่มาจาก Topic ที่รอรับอยู่ Node 1 ตัวสามารถ Subscribe message ที่มาจาก Topic ได้หลายตัว
            การสื่อสารแบบใช้ Topic นั้นจะเป็นแบบ asynchronous หรือก็คือทำหน้าที่แบบไม่สนใจคนอื่นเลย อยากส่งก็ส่ง อยากรับก็รับ ซึ่งจะต่างกับการใช้ Service ที่จะเป็นแบบ synchronization โดยจะต้องส่งไปขอแล้วก็รอตอบรับ นึกง่ายๆ Service ก็เหมือนกับการเรียกใช้ฟังก์ชัน

  • Service
            Service เป็น synchronous เป็นการสื่อสารกันแบบ Bidirectional ระหว่าง Service client กับ Service server การทำงานก็คือ Node ที่เป็น Service client จะส่ง Request คำขอเรียกใช้เซอร์วิสไปยัง Node ที่เป็น Service server แล้วตัว Server ก็จะตอบคำตอบ กลับไปที่ Client

    • Service Server
              Service server คือ Node ที่ทำหน้าที่เป็นเหมือน Server ที่จะคอยให้บริการเมื่อได้รับ Message request เข้ามาเป็น Input แล้วจากนั้นก็ประมวลผล และตอบกลับ Message response ออกไปเป็น Output

    • Service Client
              Service client คือ Node ที่ต้องการเรียกใช้งานฟังก์ชันบางอย่างจาก Service server การทำงานก็จะเป็นการส่ง Message request ไปหา Server แล้วก็รอให้ Server ประมวลผลแล้วตอบกลับมา จากนั้นจึงนำ Message response ที่ได้รับมาไปใช้งานต่อ

  • Action
            Action เป็นการเชื่อมต่อกันอีกรูปแบบใน ROS โดย Action จะทำงานคล้ายๆกับ Service แต่ต่างกันตรงที่เมื่อเราเรียกใช้งาน Service แล้ว เราจะต้องรอให้ Service ประมวลผลเสร็จก่อน แต่การเรียกใช้งาน Action นั้นเราไม่ต้องรอ เราสามารถทำงานอย่างอื่นต่อได้เลย แล้วแค่รอผลลัพธ์การทำงานส่งกลับมาภายหลัง

    • Action Server
                Action server คือ Node ที่ทำหน้าที่เหมือน Server เช่นเดียวกับ Service server โดยจะรอรับ Action goal จาก Action client แล้วก็ตอบกลับด้วย Message response เป็น Action feedback เรื่อยๆจนกว่าจะทำงานถึง Goal

    • Action Client
               Action client คือ Node ที่ต้องการเรียกใช้งาน Action การทำงานจะเป็นการ Action goal ไปยัง Server แล้วก็รับ Feedback กลับมาจาก Server ได้เรื่อยๆ เราสามารถส่งคำสั่งบอกให้ Cancel ยกเลิกการทำงานได้

  • Parameter
            Parameter ใน ROS นั้นจะใช้ใน Node ให้นึกถึงไฟล์ *.ini ของโปรแกรมใน Windows โดยปกติแล้ว Paremeter จะมีค่า Default อยู่ในโปรแกรม และสามารถที่จะอ่านหรือเขียนได้ ซึ่งส่วนใหญ่จะใช้กับค่าที่ต้องมีการเปลี่ยนบ่อยๆ เช่น ชื่อช่อง USBport, Camera calibration parameter หรือ ค่าความเร็วสูงสุด-ต่ำสุดของความเร็วมอเตอร์

    • Parameter Server
              เมื่อมีการเรียกใช้งาน Parameters ในแพ็กเกจ ทั้งหมดจะถูกนำไปเก็บไว้ใน Parameter Server ที่อยู่ใน Master

  • Catkin
            Catkin เป็นตัวที่ใช้สำหรับ build system ของ ROS การ build ปกติจะใช้ CMake (Cross Platform Make) และไฟล์ CMakeLists.txt ซึ่งในแพ็กเกจ ซึ่งถ้าใช้งาน ROS ในปัจจุบันจะใช้ Catkin แทน ROS build

  • ROS Build
            ROS build เป็นตัวที่ใช้สำหรับ build system ของ ROS ก่อนที่จะใช้ Catkin แต่ยังมีบางคนที่ยังใช้ตัวนี้อยู่ ซึ่งทาง Official แนะนำให้เลิกใช้ แล้วไปใช้ Catkin แทน

  • roscore
           
    คำสั่ง roscore เป็นคำสั่งสำหรับใช้รัน ROS Master ถ้าหากมีคอมพิวเตอร์หลายเครื่อง เชื่อมต่อกันในเน็ตเวิร์ก เราสามารถใช้ ROS Master ตัวเดียวกันได้ โดยการตั้งค่า IP address ที่อยู่ใน ROS_MASTER_URI

  • rosrun
            คำสั่ง rosrun เป็นคำสั่งพื้นฐานใน ROS ใช้สำหรับสั่งทำงานโหนด ใดๆในแพ็กเกจ

  • roslaunch
            คำสั่ง rosrun เป็นคำสั่งที่ใช้สำหรับสั่งทำงานเพียง 1 โหนด แต่ roslaunch สามารถสั่งทำงานได้พร้อมกันหลายโหนด นอกจากนั้นเรายังสามารถปรับแต่ง paremeter หรือชื่อของ node ได้
            roslaunch จะมีนามสกุลเป็น *.launch มีลักษณะเป็นภาษา XML (Extensible Markup Language)

  • bag
            ข้อมูลต่างๆใน ROS ที่มีการส่งหากันเราสามารถเก็บเอาไว้ได้ โดยใช้ rosbag ซึ่งจะเก็บเป็นไฟล์ *.bag แล้วไฟล์ตัวนี้นอกจากจะเก็บไว้แล้ว ยังเอามา playback ได้อีกด้วย ตัวอย่างการใช้งาน เช่น ถ้าเรามีหุ่นยนต์ที่อ่านค่าเซนเซอร์มาเก็บไว้ เมื่อเราเก็บไว้แล้ว เราสามารถเอาค่านั้นมาจำลองการทำงานของหุ่นยนต์ได้โดยไม่ต้องสั่งงานหุ่นจริงๆ

  • ROS Wiki
            ROS Wiki เป็นเหมือน Wiki ที่อธิบายการใช้งานแพ็กเกจต่างๆ ฟีเจอร์ต่างๆใน ROS มีเนื้อหาเกี่ยวกับการใช้งาน ROS ซึ่งปัจจุบันเนื้อหาทั้งหมดใน Wiki มีมากกว่า 18800 หน้า

  • Repository
            แพ็กเกจที่อยู่ในหน้า Wiki จะมี Repository ที่เป็นที่อยู่ URL ของเว็บไซต์ที่เก็บไฟล์แพ็กเกจเอาไว้ ซึ่งจะใช้เป็น Version Control Systems (VCS) เพื่อช่วยในจัดการปัญหาที่พบ วิธีแก้ไข ฟีเจอร์ใหม่ๆ VCS ที่ใช้ส่วนใหญ่คือ svn, hg หรือ git และแพ็กเกจใน ROS เกือบทั้งหมดจะอยู่ใน GitHub

  • Graph
           
    ความสัมพันธ์กันระหว่าง Node, Topic, Publisher หรือ Subscriber สามารถแสดงออกมาเป็นกราฟิกได้ การแสดงนั้นจะแสดงแค่การสื่อสารกันที่ใช้ Message ไม่แสดง Service ที่เกิดขึ้นเฉพาะเวลาเรียกใช้งาน กราฟิกนี้จะแสดงออกมาได้ โดยใช้คำสั่ง 'rqt_graph' หรือ 'rosrun rqt_graph rqt_graph'

  • Name
            Node, Parameter, Topic หรือ Service ทั้งหมดต้องมีชื่อ ชื่อนี้จะถูกส่งไปยัง Master และการส่ง Message จะส่งผ่านชื่อที่แตกต่างกัน ชื่อนั้นสามารถตั้งได้อิสระ และสามารถเปลี่ยนได้ การใช้ Name ใน ROS นั้นช่วยทำให้สามารถพัฒนาโปรเจคขนาดใหญ่ หรือระบบมีความซับซ้อนได้ง่ายขึ้น

  • Client Library
            ROS สามารถเขียนโปรแกรมพัฒนาได้หลายภาษาโดยการใช้ Client library ซึ่งภาษาที่ใช้เป็น C++, Python, Lisp และภาษาอื่นๆ เช่น Java, Lau, .NET, MATLAB หรือ R ซึ่งจะต้องใช้ Client library เช่น roscpp, rospy, roslisp, rosjava, roslau หรือ rosR ในการเขียนโปรแกรม

  • URI
            URI (Uniform Resource Identifier) เป็นที่อยู่ที่แสดงถึงแหล่งของข้อมูลบนอินเทอร์เน็ต URI เป็นส่วนพื้นฐานส่วนหนึ่งที่ใช้ในการเข้าถึงอินเทอร์เน็ต และใช้สำหรับระบุตัวตนในอินเทอร์เน็ตโปรโตคอล

  • MD5
            MD5 (Message-Digest algorithm 5) เป็นการเข้ารหัสแบบ 128-bit cryptographic hash function ใช้สำหรับในการตรวจสอบว่าข้อมูลที่ส่งหากันนั้นมีความถูกต้องสมบูรณ์หรือไม่ มีการแก้ไขหรือไม่ ซึ่งใน ROS การส่งและรับ Message นั้นจะใช้ MD5

  • RPC
            RPC ย่อมาจาก Remote Procedure Call เป็นเหมือนการเรียกฟังก์ชันในการทำอะไรบางอย่าง จากเครื่องคอมพิวเตอร์ไปยังเครื่องคอมพิวเตอร์เครื่องอื่น (รีโมทคอมพิวเตอร์) ที่อยู่ในระบบเน็ตเวิร์ก RPC ใช้รูปแบบการส่งได้หลายตัว เช่น TCP/IP หรือ IPX

  • XML
            XML ย่อมาจาก Extensible Markup Language เป็นเหมือนภาษากลางในการแลกเปลี่ยนข้อมูลซึ่ง W3C (องค์กรพัฒนาเทคโนโลยีเว็บ) แนะนำให้ใช้ XML ใช้ tags ในการอธิบายหรือจัดโครงสร้างของข้อมูล ใน ROS ก็จะใช้อยู่หลายที่ เช่น ไฟล์ *.launch, *.urdf หรือ package.xml

  • XMLRPC
            XMLRPC (XML-Remote Procedure Call) เป็นชนิดหนึ่งของโปรโตคอล RPC ที่ใช้ภาษา XML ในการเขียน เพื่อใช้ในการเรียก Request และตอบสนอง Response ฟังก์ชันการทำงานต่างๆ

  • TCP/IP
            
    TCP ย่อมาจาก Transmission Control Protocol ซึ่งส่วนใหญ่จะเรียกว่า TCP/IP เป็นรูปแบบการส่งข้อมูลที่การันตีว่า ตัวส่ง ส่งข้อมูลไปยัง ตัวรับ เสร็จแล้วแน่นอน TCPROS เป็นการส่งข้อมูลที่ใช้รูปแบบเดียวกับ TCP/IP และ UDPROS เป็นการส่งข้อมูลที่ใช้รูปแบบเดียวกับ UDP แต่ส่วนใหญ่แล้วใน ROS จะใช้งาน TCPROS

  • CMakeLists.txt
             Catkin ที่ใช้ build system ของ ROS นั้นปกติจะใช้ CMake ดังนั้นพวกการตั้งค่าต่างๆจึงอยู่ในไฟล์ CMakeLists.txt ซึ่งในทุกแพ็กเกจจะต้องมีไฟล์นี้อยู่

  • package.xml
           
    เป็นไฟล์ XML ที่เก็บข้อมูลที่อธิบายเกี่ยวกับ Package เช่น ชื่อแพ็กเกจ (package name), คนเขียน (author), ลิขสิทธิ์ (license) หรือ แพ็กเกจที่ต้องมี (dependent packages)


        คำศัพท์ทั้งหมดเหล่านี้ ก็เป็นคำที่จะเจอบ่อยหรือใน Wiki ได้พูดอธิบายไว้ เมื่อเราเข้าใจแล้วก็จะทำให้อ่านเอกสารได้เข้าใจมากขึ้น

Views
108 Total Views
0 Members Views
108 Public Views
Actions
0 Likes
0 Dislikes
0 Comments
Share on Social Networks
Share Link
Use permanent link to share in social media
Share by mail

Please login to share this webpage by email.