# Appendix C: Essential Tools for Developers (เครื่องมือเสริมที่ควรมี) นอกเหนือจากโปรแกรมพื้นฐานที่มาพร้อมกับ Ubuntu แล้ว ยังมีเครื่องมืออำนวยความสะดวกสำหรับนักพัฒนา (Developer Tools) ที่จะช่วยให้การเขียนโค้ดและการแก้ปัญหาทำได้รวดเร็วและมีประสิทธิภาพมากขึ้น ## Terminator (เทอร์มินัลอเนกประสงค์) ในงาน ROS2 เรามักต้องเปิด Terminal พร้อมกันหลายหน้าต่าง (เช่น ช่อง 1 รัน Rviz, ช่อง 2 รัน Node, ช่อง 3 ดู Log) การใช้ Terminal ธรรมดาทำให้หน้าจอรกรุงรัง **Terminator** ช่วยให้เราแบ่งหน้าจอ (Split Screen) ได้ภายในหน้าต่างเดียว และสามารถพิมพ์คำสั่งพร้อมกันทุกช่องได้ (Broadcast) ### การติดตั้ง ```{code-block} bash sudo apt install terminator ``` ### การตั้งค่าที่แนะนำ (Configuration) คลิกขวาที่ว่างใน Terminator เลือก **Preferences** 1. **Profiles -> Scrolling:** * ตั้งค่า **Scrollback** เป็น `50000` lines * **ทำไมไม่เลือก Infinite?** การตั้งแบบไม่จำกัดมีความเสี่ยง หากโปรแกรมทำงานผิดพลาดและพ่นข้อความ Log ออกมาต่อเนื่อง จะทำให้ **RAM** ของเครื่องเต็มและระบบอาจค้างได้ ค่า 50,000 เพียงพอสำหรับการดู Log ย้อนหลังในการคอมไพล์โปรแกรมส่วนใหญ่ 2. **Profiles -> Colors:** * เลือก Scheme เป็น **Ambience** (พื้นหลังเทาเข้ม ตัวหนังสือขาว) หรือ **Black on Yellow** * **เหตุผล:** สีที่มี Contrast ดีจะช่วยลดอาการล้าของสายตาเมื่อต้องจ้อง Log เป็นเวลานาน 3. **Profiles -> General -> Font:** * แนะนำให้ใช้ฟอนต์เดิม (**Monospace** หรือ **Ubuntu Mono**) * **เหตุผล:** ฟอนต์แบบ Monospace มีความกว้างเท่ากันทุกตัวอักษร ทำให้การจัดระเบียบโค้ดและการแสดงผลตารางใน Terminal ไม่เบี้ยว * **การปรับขนาด:** สามารถกด `Ctrl` + `+` (ขยาย) หรือ `Ctrl` + `-` (ย่อ) หรือกด `Ctrl` ค้างไว้แล้วเลื่อนลูกกลิ้งเมาส์ (Scroll) เพื่อปรับขนาดชั่วคราวได้ทันที **คีย์ลัดสำคัญ (Shortcuts):** * `Ctrl` + `Shift` + `O`: แบ่งหน้าจอแนวนอน (Horizontal) * `Ctrl` + `Shift` + `E`: แบ่งหน้าจอแนวตั้ง (Vertical) * `Alt` + `Arrow Keys`: กระโดดข้ามไปมาระหว่างช่อง * `Ctrl` + `Shift` + `W`: ปิดหน้าจอปัจจุบัน ## Visual Studio Code (VS Code) โปรแกรมแก้ไขโค้ด (IDE) ที่ได้รับความนิยมสูงสุด รองรับทั้ง Python, C++ และมี Extension สำหรับ ROS2 โดยเฉพาะ ### การติดตั้ง (Official Snap Method) Ubuntu แนะนำให้ติดตั้งผ่าน **Snap Store** เพื่อให้ได้เวอร์ชันล่าสุดและอัปเดตอัตโนมัติ ```{code-block} bash # Install VS Code classic edition sudo snap install --classic code ``` ```{note} **Snap vs Apt:** การติดตั้งแบบ **Snap** เป็นเทคโนโลยีใหม่ของ Ubuntu ที่รวบรวม Library ที่จำเป็นไว้ในกล่องเดียว (Sandbox) ทำให้โปรแกรมทำงานได้เสถียรโดยไม่กวนระบบหลัก ส่วน **Apt** (.deb) เป็นวิธีดั้งเดิมที่อาจได้เวอร์ชันเก่ากว่า ``` ## Network Tools (การจัดการเครือข่าย) ระบบ ROS2 สื่อสารกันผ่านเครือข่าย (DDS) ดังนั้นการตรวจสอบ IP Address และสถานะเครือข่ายจึงเป็นเรื่องสำคัญ ### `ip` vs `ifconfig` ในอดีตเราคุ้นเคยกับคำสั่ง `ifconfig` แต่ใน Ubuntu เวอร์ชันใหม่ๆ แนะนำให้ใช้ชุดคำสั่ง `ip` แทน เนื่องจากทำงานได้เร็วกว่าและให้ข้อมูลครบถ้วนกว่า (ติดตั้งมาให้แล้วโดย Default) **ตารางเปรียบเทียบคำสั่ง** ```{list-table} :widths: 30 35 35 :header-rows: 1 * - Action - Old Command - **New Command (Recommended)** * - ดู IP Address - `ifconfig` - `ip addr` (หรือ `ip a`) * - ดูสถานะการ์ดแลน - `ifconfig -a` - `ip link` * - ดู Gateway - `route -n` - `ip route` ``` **คำศัพท์เครือข่ายที่ควรรู้** ```{list-table} :widths: 25 75 :header-rows: 1 * - Term - Description * - **Interface** - ชื่อของการ์ดเครือข่าย เช่น `eth0` (สายแลน), `wlan0` (ไวไฟ), `lo` (Loopback/Localhost) * - **IP Address** - ที่อยู่ของเครื่อง เช่น `192.168.1.50` (สำคัญมากในการตั้งค่า ROS_DOMAIN_ID) * - **Localhost** - `127.0.0.1` หมายถึง "เครื่องนี้เอง" ใช้ทดสอบระบบภายในโดยไม่ออกเน็ต * - **Ping** - คำสั่งทดสอบการเชื่อมต่อ เช่น `ping 8.8.8.8` (เช็คเน็ต) หรือ `ping 192.168.1.x` (เช็คหุ่นยนต์) ``` ## Nano Cheat Sheet (คู่มือ Nano ฉบับพกพา) **Nano** เป็น Text Editor ใน Terminal ที่ใช้งานง่ายที่สุด เหมาะสำหรับการแก้ไขไฟล์ Config เล็กๆ น้อยๆ บนหุ่นยนต์ผ่าน SSH **สัญลักษณ์:** `^` หมายถึงปุ่ม **Ctrl** ```{list-table} :widths: 30 70 :header-rows: 1 * - Shortcut - Action * - `^O` (Write Out) - **บันทึกไฟล์ (Save)** (ระบบจะถามชื่อไฟล์ ให้กด Enter ยืนยัน) * - `^X` (Exit) - **ออกจากโปรแกรม** (ถ้ายังไม่เซฟ ระบบจะถามว่าต้องการเซฟไหม ให้ตอบ `Y` หรือ `N`) * - `^W` (Where Is) - **ค้นหาคำ** (Search) * - `^K` (Cut) - **ตัดบรรทัด** (ใช้ลบบรรทัดได้ด้วย) * - `^U` (Uncut) - **วางบรรทัด** (Paste) ที่ตัดไป * - `^_` (Go To Line) - **กระโดดไปบรรทัดที่ระบุ** (มีประโยชน์มากเวลา Debug Error ที่แจ้งบรรทัดมา) ``` ## System Logs (การตรวจสอบอุปกรณ์ต่อพ่วง) เมื่อเราเสียบอุปกรณ์ USB เช่น Lidar, กล้อง หรือบอร์ด Microcontroller เราต้องตรวจสอบว่าระบบมองเห็นอุปกรณ์หรือไม่ ### `dmesg` vs `journalctl` * **`dmesg`:** เป็นคำสั่งดั้งเดิมที่แสดง Log จาก Kernel * **`journalctl`:** เป็นคำสั่งสมัยใหม่ของระบบ systemd ที่เก็บ Log อย่างเป็นระเบียบ ค้นหาย้อนหลังได้ และแสดงเวลาที่ชัดเจนกว่า **แนะนำให้ใช้:** `journalctl -k` (หรือ `--dmesg`) **เทคนิคการดู Log แบบ Real-time (แนะนำ)** ให้ถอดสาย USB ออกก่อน พิมพ์คำสั่งด้านล่าง แล้วเสียบสาย USB เข้าไปใหม่ จะเห็นข้อความเด้งขึ้นมาทันที ```{code-block} bash # Follow kernel logs in real-time # -f : Follow (Keep reading new messages) # -k : Kernel messages only (For USB, Driver) sudo journalctl -k -f ``` *ถ้าเห็นข้อความเช่น `ch341-uart converter now attached to ttyUSB0` แสดงว่าบอร์ดเชื่อมต่อสำเร็จที่พอร์ต `/dev/ttyUSB0`* ## Other Recommendations (แนะนำเพิ่มเติม) ### Tree (ดูโครงสร้างไฟล์) ช่วยให้เห็นภาพรวมของโฟลเดอร์ในรูปแบบต้นไม้ เหมาะสำหรับดูโครงสร้าง ROS2 Package ```{code-block} bash # Install sudo apt install tree # Usage (Show tree structure) tree # Show only 2 levels deep tree -L 2 ```