# ROS 2 Architecture & Core Concepts (สถาปัตยกรรมและหลักการทำงาน)
หลังจากติดตั้งระบบเสร็จสิ้น ในบทนี้เราจะเจาะลึกถึง "ไส้ใน" ของ **ROS 2** เพื่อทำความเข้าใจว่าระบบทำงานอย่างไร ทำไมจึงเสถียรกว่าเวอร์ชันแรก และเทคโนโลยีเบื้องหลังที่ขับเคลื่อนหุ่นยนต์ระดับอุตสาหกรรมคืออะไร
## What is ROS really? (นิยามเชิงลึก)
แม้จะชื่อว่า **Robot Operating System** แต่แท้จริงแล้ว ROS คือ **Meta-Operating System** หรือ **Middleware Framework** ที่ทำงานอยู่บนระบบปฏิบัติการหลัก (เช่น Ubuntu, Windows) อีกทีหนึ่ง
### หน้าที่หลักของ ROS (The 4 Pillars)
1. **Plumbing (ระบบท่อส่งข้อมูล):** จัดการการสื่อสารระหว่างชิ้นส่วนต่างๆ (Process Management) เช่น กล้องส่งภาพไปหา AI, AI ส่งคำสั่งไปที่ล้อ โดยที่เราไม่ต้องเขียน Socket หรือ TCP/IP เอง
2. **Tools (เครื่องมือ):** มีโปรแกรมสำหรับดีบักและวิเคราะห์ข้อมูลที่ทรงพลัง เช่น **Rviz2** (3D Visualization), **RQT** (Graph & Plot), **Rosbag** (Data Recording)
3. **Capabilities (ความสามารถ):** มีฟังก์ชันสำเร็จรูปที่ซับซ้อนให้ใช้ฟรี เช่น **Nav2** (ระบบนำทาง), **MoveIt2** (ระบบแขนกล), **SLAM** (การสร้างแผนที่)
4. **Ecosystem (ระบบนิเวศ):** มีชุมชนนักพัฒนาที่ใหญ่ที่สุดในโลก ทำให้มี Driver สำหรับเซนเซอร์แทบทุกรุ่นในท้องตลาด
## ROS 2 Architecture (สถาปัตยกรรมระบบ)
โครงสร้างของ ROS 2 ถูกออกแบบมาเป็นชั้นๆ (Layered Architecture) เพื่อให้ยืดหยุ่นและรองรับ Real-time Application
### รายละเอียดแต่ละเลเยอร์ (Layers Breakdown)
```{list-table}
:widths: 20 80
:header-rows: 1
* - Layer Name
- Description
* - **1. User Application**
- โค้ดที่เราเขียน (Python/C++) เช่น `my_robot_node.py` หรือระบบนำทาง
* - **2. RCL (ROS Client Library)**
- ไลบรารีมาตรฐานที่ทำหน้าที่เป็น API ให้ผู้ใช้เรียกงาน เช่น `rclpy` (สำหรับ Python) และ `rclcpp` (สำหรับ C++) ทำหน้าที่แปลงคำสั่งของเราให้ระบบเข้าใจ
* - **3. RMW (ROS Middleware Interface)**
- **หัวใจสำคัญ:** เป็นตัวกลาง (Abstraction Layer) ที่ทำให้ ROS 2 สามารถเปลี่ยนยี่ห้อของระบบสื่อสาร (DDS) ได้โดยไม่ต้องแก้โค้ดโปรแกรมหลัก
* - **4. DDS (Data Distribution Service)**
- มาตรฐานการสื่อสารระดับอุตสาหกรรม ทำหน้าที่รับ-ส่งข้อมูลจริงๆ ผ่านระบบเครือข่าย (UDP/IP)
* - **5. OS Layer**
- ระบบปฏิบัติการพื้นฐาน เช่น Linux, Windows, macOS หรือ RTOS (Real-time OS)
```
## The Heart of ROS 2: DDS
ความเปลี่ยนแปลงที่ใหญ่ที่สุดจาก ROS 1 สู่ ROS 2 คือการนำ **DDS (Data Distribution Service)** มาใช้เป็นมาตรฐานการสื่อสาร
### DDS คืออะไร?
**DDS** คือมาตรฐานสากล (Open Standard) สำหรับการสื่อสารข้อมูลแบบ Real-time ที่มีความน่าเชื่อถือสูง นิยมใช้ในระบบการบิน, การทหาร, และโรงงานอุตสาหกรรม
### กลไกการทำงาน (Discovery & Transport)
* **Distributed System:** ไม่จำเป็นต้องมี **Master Node** (เหมือน ROS 1) คอมพิวเตอร์ทุกเครื่องในวงแลนสามารถ "ค้นหา" (Discovery) กันเองได้อัตโนมัติผ่านโปรโตคอล Multicast
* **Real-time Transport:** ส่งข้อมูลผ่าน **UDP** เป็นหลัก เพื่อความรวดเร็วและรองรับ Quality of Service (QoS)
### ตารางเปรียบเทียบ DDS Vendors (ผู้ให้บริการ)
ROS 2 อนุญาตให้เราเลือกใช้ DDS เจ้าไหนก็ได้ (ผ่าน RMW) โดยแต่ละเจ้ามีจุดเด่นต่างกัน:
```{list-table}
:widths: 20 30 50
:header-rows: 1
* - Vendor / RMW
- Performance
- Note
* - **Cyclone DDS** (Eclipse)
- High / Low Latency
- **Default for ROS 2 Jazzy.** เหมาะสำหรับงานทั่วไปและหุ่นยนต์ขนาดเล็ก-กลาง กินทรัพยากรน้อย
* - **Fast DDS** (eProsima)
- High Throughput
- มีฟีเจอร์ปรับแต่งเยอะ เหมาะสำหรับระบบขนาดใหญ่ หรือส่งข้อมูลภาพความละเอียดสูง
* - **RTI Connext** (Commercial)
- Enterprise Grade
- เสถียรที่สุดและรองรับมาตรฐานความปลอดภัยสูง (ใช้ในงานอวกาศ/การแพทย์) แต่มีค่าใช้จ่ายลิขสิทธิ์
```
## Quality of Service (QoS)
ในระบบเครือข่ายไร้สาย (WiFi) สัญญาณอาจขาดหายได้ **QoS** คือเครื่องมือที่ให้เรา "จูน" พฤติกรรมการส่งข้อมูลให้เหมาะกับสถานการณ์
**ตารางสรุป QoS Policy ที่สำคัญ**
```{list-table}
:widths: 20 30 50
:header-rows: 1
* - Policy
- Options
- Use Case
* - **Reliability**
- **Reliable:** ส่งให้ถึงแน่นอน (มี ACK)
**Best Effort:** ส่งแล้วส่งเลย (เร็วแต่ข้อมูลอาจหาย)
- **Reliable:** ใช้กับคำสั่งควบคุม (ห้ามหาย)
**Best Effort:** ใช้กับภาพจากกล้อง (หายเฟรมเดียวไม่เป็นไร)
* - **Durability**
- **Volatile:** มาไม่ทันก็อด (ไม่เก็บค่าเก่า)
**Transient Local:** เก็บค่าล่าสุดไว้ให้คนมาทีหลัง
- **Volatile:** ข้อมูล Sensor ทั่วไป
**Transient Local:** ใช้กับค่า Config หรือ Map (แผนที่) ที่ต้องโหลดให้ Node ที่เพิ่งตื่น
* - **History**
- **Keep Last (N):** เก็บ N ค่าล่าสุด
**Keep All:** เก็บทุกค่า
- **Keep Last (10):** ค่ามาตรฐาน ป้องกัน RAM เต็ม
```
## Security (SROS2)
ความปลอดภัยเป็นเรื่องใหญ่ใน ROS 2 โดยใช้มาตรฐาน **DDS-Security** ซึ่งประกอบด้วย 3 เสาหลัก (CIA Triad):
1. **Authentication (ระบุตัวตน):**
* ใช้ระบบ **PKI (Public Key Infrastructure)** และใบรับรอง **X.509**
* หุ่นยนต์ทุกตัวต้องมี "บัตรประจำตัว" (Certificate) ที่ออกโดย CA (Certificate Authority) เท่านั้นจึงจะเข้าร่วมวงสนทนาได้
2. **Access Control (กำหนดสิทธิ์):**
* ใช้ไฟล์ **Permissions** และ **Governance**
* กำหนดได้ละเอียดว่า Node A มีสิทธิ์แค่ "อ่าน" Topic นี้ แต่ห้าม "เขียน"
3. **Cryptography (การเข้ารหัส):**
* ใช้มาตรฐาน **AES-GCM** ในการเข้ารหัสข้อมูล
* แม้จะมีคนดักจับข้อมูล (Sniffing) ในวง WiFi ก็จะอ่านไม่รู้เรื่อง
```{note}
**สถานะเริ่มต้น:** ตามปกติ ROS 2 จะปิดระบบ Security ไว้เพื่อความสะดวกในการเรียนรู้ (ใครก็เชื่อมต่อได้) หากต้องการใช้งานจริงในโปรดักส์ ต้องเปิดใช้งานฟีเจอร์ **SROS2** เพื่อสร้าง Key และ Certificate
```