# การสร้าง Workspace, Package และ Node ในบทนี้คุณจะได้เรียนรู้วิธีสร้างพื้นที่ทำงานของ ROS 2 (Workspace) ซึ่งเป็นจุดเริ่มต้นของการพัฒนาแพ็กเกจ (Package) ที่จะใช้เก็บ Node และไฟล์ที่เกี่ยวข้อง จากนั้นเราจะทำการสร้าง Node ซึ่งเป็นหน่วยประมวลผลพื้นฐานของ ROS 2 เพื่อให้สามารถทำงานและสื่อสารกับระบบอื่นๆ ได้ ## การสร้าง Workspace **เปิด Terminal รันคำสั่งดังนี้:** ```{code-block} bash mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build ``` ```{image} images/c7/7.1.1.png :width: 80% :align: center ``` **ใช้คำสั่ง ls เพื่อแสดงโฟลเดอร์** ```{code-block} bash ls ``` ```{image} images/c7/7.1.2.png :width: 80% :align: center ``` ## การสร้าง Package (Python) **รันคำสั่งดังนี้(เปิดTerminal ใหม่ หรือ ใช้Terminal เดิมก็ได้ ) :** ```{code-block} bash cd ~/ros2_ws/src ros2 pkg create --build-type ament_python --license Apache-2.0 my_package cd ~/ros2_ws colcon build ``` **หากต้องการสร้างแพ็กเกจ C++ ให้ใช้คำสั่งนี้แทน :** ```{code-block} bash ros2 pkg create --build-type ament_cmake --license Apache-2.0 my_package ``` **ภาพตัวอย่างการใช้คำสั่ง สร้าง Package (ชื่อ my_package)** ```{image} images/c7/7.2.1.png :width: 80% :align: center ``` ```{image} images/c7/7.2.2.png :width: 80% :align: center ``` ## การสร้าง Node ใน ROS2 ด้วย Python ### สร้างไฟล์ Python Node **รันคำสั่งดังนี้(เปิดTerminal ใหม่ หรือ ใช้Terminal เดิมก็ได้ ) :** ```{code-block} bash cd ~/ros2_ws/src/my_package/my_package touch my_node.py ``` **และตรวจสอบไฟล์ ด้วยคำสั่ง** ```{code-block} bash ls ``` **จะเห็นได้ว่ามีไฟล์ my_node.py ปรากฎขึ้นมาดังภาพ** ```{image} images/c7/7.3.1.png :width: 80% :align: center ``` ### เขียนโค้ดสำหรับ Python Node **เข้าไปแก้ไขไฟล์ด้วยคำสั่ง:** ```{code-block} bash gedit ~/ros2_ws/src/my_package/my_package/my_node.py ``` ```{image} images/c7/7.3.2.png :width: 80% :align: center ``` **เขียนโค้ด Python ลงไป หลังจากนั้นกด Save** ```{image} images/c7/7.3.3.png :width: 80% :align: center ``` **โค้ด my_node.py** ```{code-block} python import rclpy from rclpy.node import Node class MyNode(Node): def __init__(self): super().__init__('my_node') self.get_logger().info("Hello, ROS2!") def main(): rclpy.init() node = MyNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main() ``` ### การตั้งค่า setup.py สำหรับ Python Package ใน ROS2 หลังจากที่เราสร้าง Node ใน Python แล้ว จำเป็นต้อง ตั้งค่าไฟล์ setup.py เพื่อให้ ROS 2 สามารถรัน Node ได้อย่างถูกต้อง **แก้ไขไฟล์ setup.py ด้วยคำสั่ง:** ```{code-block} bash gedit ~/ros2_ws/src/my_package/setup.py ``` ```{image} images/c7/7.3.4.png :width: 80% :align: center ``` **เพิ่ม 'my_node = my_package.my_node:main' จากนั้นกด Save** ```{code-block} bash 'my_node = my_package.my_node:main' ``` **หลังจากสร้างไฟล์ Python เสร็จสิ้นแล้ว ขั้นตอนต่อไปคือ การคอมไพล์ด้วยคำสั่ง colcon build** ```{code-block} bash cd ~/ros2_ws colcon build ``` ```{image} images/c7/7.3.5.png :width: 80% :align: center ``` ## วิธีการรัน Node หลังจากได้สร้าง Node ในหัวข้อ 6.3 การสร้าง Node ใน ROS2 ด้วย Python เสร็จสิ้น ขั้นตอนต่อไปนี้คือการรัน Node ที่เราสร้างขึ้น ### เปิด Terminal รันคำสั่ง แก้ไขไฟล์ ~/.bashrc ดังนี้ ```{code-block} bash gedit ~/.bashrc ``` แก้ไขไฟล์ ~/.bashrc ดังนี้ ```{code-block} bash source ~/ros2_ws/install/setup.bash ``` เพิ่มบรรทัดนี้ที่ด้านล่างของไฟล์ แล้วกด Save จากนั้นปิด Terminal แล้วเปิด Terminal ใหม่ ```{image} images/c7/7.4.1.png :width: 80% :align: center ``` ### รันโหนด ```{code-block} bash ros2 run my_package my_node ``` ```{image} images/c7/7.4.2.png :width: 80% :align: center ``` ข้อความ [INFO] ... [my_node]: Hello, ROS 2! แสดงว่าการทำงานของโหนดสำเร็จ และโหนดได้ทำการพิมพ์ข้อความผ่าน get_logger().info("Hello, ROS 2!") **สรุปคำสั่งและคำอธิบาย** ```{list-table} :widths: 25 25 :header-rows: 1 * - **คำสั่ง** - **ตัวอย่าง** * - `mkdir -p/ros2_ws/src` - สร้างโฟลเดอร์ Workspace ros2_ws และโฟลเดอร์ src/ สำหรับเก็บแพ็กเกจ * - `cd ~/ros2_ws` - เปลี่ยนไปยังโฟลเดอร์ Workspace ros2_ws * - `cd ~/ros2_ws/src` - เปลี่ยนไปยังโฟลเดอร์ src/ ภายใน Workspace * - `colcon build` - คอมไพล์ Workspace และแพ็กเกจทั้งหมดที่อยู่ใน src/ โดยใช้ colcon build * - `ls` - แสดงรายการไฟล์และโฟลเดอร์ในไดเรกทอรีปัจจุบัน * - `ros2 pkg create --build-type ament_python --license Apache-2.0 my_package` - สร้างแพ็กเกจใหม่ชื่อ my_package โดยใช้ ament_python และกำหนดไลเซนส์เป็น Apache-2.0 * - `cd ~/ros2_ws/src/my_package/my_package` - เปลี่ยนไปยังไดเรกทอรี my_package/my_package ซึ่งเป็นที่เก็บโค้ดของแพ็กเกจ * - `touch my_node.py` - สร้างไฟล์ my_node.py ซึ่งเป็นโค้ดสำหรับรันโหนด * - `gedit ~/ros2_ws/src/my_package/my_package/my_node.py` - เปิดไฟล์ my_node.py ด้วย gedit เพื่อแก้ไขโค้ด * - `gedit ~/ros2_ws/src/my_package/setup.py` - เปิดไฟล์ setup.py ด้วย gedit เพื่อกำหนดค่าแพ็กเกจ * - `source install/setup.bash` - โหลดค่าต่าง ๆ สภาพแวดล้อม ROS2 เพื่อให้ระบบรู้จักแพ็กเกจ * - `ros2 run my_package my_node` - รันโหนด my_node ที่อยู่ในแพ็กเกจ my_package ```