Robot Operating System(ROS) Part 2 เครื่องมือสื่อสาร
การพัฒนาหุ่นยนต์ด้วย ROS เราสามารถแยกส่วนต่างๆของโปรแกรมควบคุมหุ่นยนต์ของเราให้เป็นโปรแกรมย่อยๆหลายโปรแกรมที่ทำงานร่วมกันได้ โดยโปรแกรมย่อยๆแต่ละตัวนี้จะเรียกว่า Node การทำให้โปรแกรมหรือ Node ย่อยๆสื่อสารกันได้อย่างถูกต้องจะต้องใช้เครื่องมือสื่อสารของ ROS สำหรับจัดการการสื่อสารระหว่างแต่ละ Node 3 ส่วน ดังนี้:
- Topics: ใช้สำหรับส่งสตรีมข้อมูล (Data Stream) ระหว่าง Node ตัวอย่างเช่น เรากำลังตรวจสอบอุณหภูมิของมอเตอร์บนหุ่นยนต์ Node ที่ตรวจสอบอุณหภูมิของมอเตอร์นี้จะส่งสตรีมข้อมูลพร้อมค่าอุณหภูมิเข้าไปในระบบ Node อื่นๆ ที่ทำงานอยู่ สามารถติดตาม (Subscribe) หัวข้อ(topic) นี้และรับข้อมูลไปใช้งานได้
- Services: เป็นส่วนที่ช่วยให้เราสร้างการสื่อสารระหว่างแต่ละ Node ให้เป็นแบบ client/server แบบเข้าจังหวะ(synchronous)อย่างง่าย ซึ่งมีประโยชน์มากในการเปลี่ยนการตั้งค่าบนหุ่นยนต์ หรือการร้องขอการกระทำที่เฉพาะเจาะจงบางอย่าง ประกอบด้วย มีสองส่วนคือ service server และ service client หลักการทำงานก็คือ node ที่ทำหน้าที่เป็น service client จะส่ง message request ไปหา node service server เมื่อได้รับ request แล้ว node server ก็จะตอบคำตอบกลับไปที่ node client ที่ขอข้อมูลมา
- Service server จะทำหน้าที่เป็นเหมือน server ที่จะคอยรับ request จาก client เป็น input จากนั้นจะมีการตอบกลับ response เป็น output, โดยจะใช้ message ในการรับและส่งข้อมูล
- Service client ในการใช้งานจะส่ง message ไปหา service server แล้วรอให้ server ตอบกลับมา แล้วเอาข้อมูลที่ได้ไปประมวลผลต่อตามฟังก์ชันของ node
- Actions: เป็นการเชื่อมต่อกันอีกรูปแบบหนึ่ง ทำหน้าที่คล้ายกับ service แต่ต่างกันตรงที่ Service เป็นการติดต่อแบบเข้าจังหวะ(synchronous) หมายถึง เมื่อเกิดการ call service จะต้องรอให้ service ทำงานเสร็จก่อน แล้วจึงไปทำงานอื่นได้ แต่การ call action จะเป็น การสื่อสารแบบไม่เข้าจังหวะ(asynchronous) นั่นคือ ภายหลังการร้องขอ (request) ระหว่างการรอการตอบกลับจาก server ตัว client สามารถทำงานอย่างอื่นต่อเนื่องได้เลย(และยกเลิกคำขอได้ตลอดเวลา)
- Action server จะรอรับ goal หรือคำสั่งบางอย่างจาก client แล้วดำเนินการตามคำสั่งนั้น โดยจะรับ goal จาก client ครั้งเดียวแล้วมันจะทำงานตาม process จนเสร็จเอง ในระหว่างการทำงาน จะมีการตอบกลับ(response) เป็นระยะๆ ด้วย feedback
- Action client จะทำหน้าที่ส่ง goal หรือคำสั่งบางอย่าง ไปหา server และรับ feedback กลับมาจาก server, โดยที่สามารถส่ง instruction ให้ cancel การทำงานได้ตลอดเวลา
คำศัพท์อื่นๆที่ควรทราบเกี่ยวกับ ROS
MASTER
| ทำหน้าที่เป็น server สำหรับให้ node หลายๆตัวเชื่อมต่อและสามารถส่ง message หากันได้ (คำสั่งที่ใช้รัน master คือ roscore) โดยในการสื่อสารกัน master ใช้โปรโตคอลแบบ HTTP-based เมื่อเรารัน master แล้ว เราก็สามารถที่จะสร้าง node ต่างๆขึ้นมาเพื่อทำงานและ รับ/ส่ง ข้อมูลระหว่างได้ การเชื่อมต่อกันระหว่าง node จะส่งข้อความ(message) หากันผ่าน Topic |
NODE
| คือโปรแกรมย่อยๆต่างๆที่เราสร้างขึ้นให้ทำงานเฉพาะเจาะจงตามที่เราต้องการซึ่งรันอยู่ใน ROS ในการสร้าง node ควรออกแบบให้ 1 node ทำหน้าที่เพียง 1 อย่างเท่านั้น เพื่อให้สามารถนำกลับมาใช้งานใหม่ได้ง่าย ตัวอย่างเช่น หุ่นยนต์ mobile robot อาจประกอบด้วย node ที่ทำหน้าที่อ่านเซนเซอร์, node ที่ทำหน้าที่ขับเคลื่อนมอเตอร์, node ที่ทำหน้าที่อ่านเอนโค้ดเดอร์, node ที่ทำหน้าที่นำทาง(navigation) , node ที่ทำหน้าที่ประมวลผลภาพเฉพาะทาง(image processing) เป็นต้น เราสามารถ node ได้มากเท่าที่ต้องการ โดยที่แต่ละ node จะเชื่อมต่อกันผ่าน master, แต่ละ node จะมีชื่อ(name), ชนิดของ message, uri address และ port เป็นของตัวเอง เรานั้นแต่ละ node สามารถที่จะทำหน้าที่เป็นได้ทั้ง publisher, subscriber, service server หรือ service client ได้ และจะคุยกับ node ตัวอื่นๆผ่าน topic และ service |
PACKAGE
| หมายถึงโครงสร้างหน่วยของซอฟต์แวร์ที่ใช้ในการจัดการโปรแกรมที่เกี่ยวข้องกับหนึ่งหรือหลาย node ในระบบ ROS โดยรวมถึงไฟล์และไดเรกทอรีที่เกี่ยวข้องกัน Package ใน ROS เป็นวิธีการจัดระเบียบโครงสร้างของโปรแกรม ROS ที่มีไฟล์และโค้ดที่เกี่ยวข้องกันรวมอยู่ด้วยกันในที่เดียว แต่ละ Package จะมีโครงสร้างข้อมูลที่เป็นมาตรฐานและไดเรกทอรีที่กำหนดไว้ ที่รวมถึงไฟล์การตั้งค่าและแหล่งข้อมูลอื่น ๆ ที่ใช้ในการกำหนดค่าหรือการทำงานของ node ภายใน Package นั้น ๆ Package เป็นหน่วยพื้นฐานในการจัดการโครงสร้างของโปรแกรมใน ROS ซึ่งช่วยให้การพัฒนาและการจัดการโครงสร้างโปรแกรมในระบบ ROS เป็นไปอย่างมีระเบียบและเป็นระเบียบ นอกจากนี้ Package ยังสามารถแบ่งปันและเผยแพร่ได้ในชุมชนของผู้ใช้ ROS ซึ่งช่วยส่งเสริมการแลกเปลี่ยนและการสร้างสรรค์ซอฟต์แวร์ใน ROS อีกด้วย |
METAPACKAGE
| หมายถึงแพ็กเกจที่ใช้สำหรับจัดการกับหลาย ๆ แพ็กเกจ (packages) ที่เกี่ยวข้องกัน โดยรวมอยู่ด้วยกันในแพ็กเกจเดียว โดยทั่วไปแล้ว Meta Package เป็นเพียงแพ็กเกจที่ใช้ในการจัดการและเรียกใช้แพ็กเกจอื่น ๆ ในรูปแบบที่สะดวกและเป็นระเบียบ Meta Package มักจะประกอบด้วยไฟล์การตั้งค่า (configuration files) และข้อมูลเพิ่มเติมที่เกี่ยวข้องกับการตั้งค่าและการใช้งานของแพ็กเกจต่าง ๆ ที่อยู่ภายใน Meta Package นั้น ๆ ซึ่งช่วยให้ผู้ใช้งานสามารถติดตั้งและใช้งานกลุ่มของแพ็กเกจที่เกี่ยวข้องกันได้อย่างง่ายดาย Meta Package ช่วยในการจัดการและอำนวยความสะดวกในการพัฒนาและบริหารโปรแกรมใน ROS โดยเฉพาะอย่างยิ่งเมื่อมีความสัมพันธ์และความเกี่ยวข้องกันระหว่างแพ็กเกจต่าง ๆ ที่ใช้ร่วมกันในโปรเจ็กต์หรือแอปพลิเคชัน ROS ที่ใหญ่ขึ้น |
MESSAGE
| node แต่ละตัวจะรับส่งข้อมูลระหว่างกันผ่านทาง message, โดย message อาจจะเป็นชนิดของตัวแปร เช่น integer, floating point, boolean หรืออาจเป็น structure ที่เรากำหนดขึ้นเองก็ได้ |
PUBLISH AND PUBLISHER
| การ publish หมายถึง node ใดๆจะส่ง message ออกไปที่ topic โดยส่ง ออกไปที่ master โดยไม่สนใจว่าจะมี node รอรับอยู่หรือไม่ node 1 ตัวสามารถ publish message ออกไปได้ในหลายๆ topic โดย node ที่ทำการ ส่งข้อมูลออกไป จะเรียกว่า publisher |
SUBSCRIBE AND SUBSCRIBER | การ subscribe หมายถึงการที่ node ใดๆรับ message จาก topic ที่ตัวเองติกตาม หรือรอรับข้อมูลอยู่ โดย node แต่ละตัวสามารถ subscribe message ที่มาจากหลายๆ topic ได้ การสื่อสารแบบใช้ topic นั้นจะเป็นแบบ asynchronous คือทำการรับส่งข้อมูลแบบไม่สนใจการทำงานของส่วนอื่นว่ากำลังดำเนินการใดอยู่บ้าง ส่วนมากแล้วก็จะใช้กับงานที่ต้องการให้มีความถี่คงที่ เช่นการอ่านค่า sensor บางชนิด ซึ่งต่างกับการใช้ service ที่จะเป็นแบบ synchronization โดยจะต้องส่งไปขอแล้วก็รอตอบรับซึ่งจะเหมือนกับการเรียก function ที่จะดำเนินการต่อได้ก็ต่อเมื่อได้รับการตอบกลับจากผู้ถูกเรียกแล้วเสียก่อน |
PARAMETER | parameter เป็นค่า setting ต่างๆที่เกี่ยวข้องกับ node โดยใช้ Parameter Server เพื่อจัดเก็บและแชร์ข้อมูลเหล่านี้ระหว่าง Node ต่าง ๆ โดยปกติแล้ว paremeter จะมีค่าตั้งต้น(default) และสามารถที่จะอ่านหรือเขียนได้ Parameters ใช้ในการกำหนดค่าตัวแปรที่สำคัญสำหรับการทำงานของ Node ตัวอย่างเช่น ค่าความเร็วของหุ่นยนต์, ค่าสถานะของระบบ, ระยะทาง, ค่า PID ในการควบคุมการเคลื่อนที่ และค่าพารามิเตอร์อื่น ๆ ที่เกี่ยวข้องกับการทำงานของ Node ในระบบ ROS โดย Node สามารถเข้าถึงค่าพารามิเตอร์ผ่าน Parameter Server เพื่ออ่านค่าที่ต้องการหรือแก้ไขค่าที่มีอยู่ได้ และการเปลี่ยนแปลงค่าพารามิเตอร์ที่ Parameter Server จะส่งผลต่อการทำงานของ Node ที่อ้างถึงค่าพารามิเตอร์นั้น ๆ |
PARAMETER SERVER | ระบบที่ใช้เพื่อเก็บและแชร์ข้อมูลพารามิเตอร์ (parameters) ที่ใช้ในการกำหนดค่าต่าง ๆ สำหรับโหนด (node) ต่าง ๆ ในระบบ ROS ซึ่ง Parameter Server เป็นส่วนหนึ่งของระบบ Master ใน ROS. Parameter Server เป็นที่ตั้งสำหรับการจัดเก็บข้อมูลพารามิเตอร์ที่สามารถเข้าถึงได้จากโหนดทั้งหมดในระบบ ROS รูปแบบการเก็บข้อมูลของ Parameter Server จะเป็น key-value pairs (คีย์-ค่า) โดยใช้ชื่อ (key) เพื่อเข้าถึงค่า (value) ที่เก็บไว้ โหนดแต่ละตัวสามารถอ่านและเขียนค่าของพารามิเตอร์จาก Parameter Server ได้ตลอดเวลา ซึ่งทำให้สามารถแชร์ค่าพารามิเตอร์ระหว่างโหนดได้ Parameter server จะถูกใช้ตอนเรียก package โดยค่าเหล่านี้จะถูก load ไปให้ master |
GRAPH | แผนภาพความสัมพันธ์กันระหว่าง nodes, topics, publisher, subscribers สามารถแสดงออกมาเป็น grpah ได้ โดยทั่วไปแล้ว การตรวจสอบและการวิเคราะห์กราฟ ROS ช่วยให้ผู้ใช้งานสามารถเข้าใจและทำความเข้าใจเกี่ยวกับโครงสร้างและประสิทธิภาพของระบบ ROS ได้อย่างชัดเจน นอกจากนี้ กราฟ ROS ยังช่วยในการตรวจสอบและวิเคราะห์ปัญหาที่เกี่ยวข้องกับการเชื่อมต่อและการสื่อสารระหว่างโหนด |
รูปที่ 1 แสดงตัวอย่างการเชื่อมต่อของ 3 ส่วน (Package) ได้แก่ Hardware control, Motion Planning pkg และ Camera pkg. ลูกศรแสดงถึงทิศทางการไหลของข้อมูล Node ใดๆที่มีทั้งลูกศรออกและเข้า แสดงว่า เป็นทั้งผู้ส่ง(publisher) และผู้รอรับ(subscriber) ข้อมูล
รูปที่ 1 ตัวอย่างการเชื่อมต่อระหว่างโมดูลต่างๆใน ROS[2]