7. การสร้าง Workspace, Package และ Node

ในบทนี้คุณจะได้เรียนรู้วิธีสร้างพื้นที่ทำงานของ ROS 2 (Workspace) ซึ่งเป็นจุดเริ่มต้นของการพัฒนาแพ็กเกจ (Package) ที่จะใช้เก็บ Node และไฟล์ที่เกี่ยวข้อง จากนั้นเราจะทำการสร้าง Node ซึ่งเป็นหน่วยประมวลผลพื้นฐานของ ROS 2 เพื่อให้สามารถทำงานและสื่อสารกับระบบอื่นๆ ได้

7.1. การสร้าง Workspace

เปิด Terminal รันคำสั่งดังนี้:

mkdir -p ~/ros2_ws/src         
cd ~/ros2_ws
colcon build
_images/7.1.1.png

ใช้คำสั่ง ls เพื่อแสดงโฟลเดอร์

ls
_images/7.1.2.png

7.2. การสร้าง Package (Python)

รันคำสั่งดังนี้(เปิดTerminal ใหม่ หรือ ใช้Terminal เดิมก็ได้ ) :

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python --license Apache-2.0 my_package
cd ~/ros2_ws
colcon build

หากต้องการสร้างแพ็กเกจ C++ ให้ใช้คำสั่งนี้แทน :

ros2 pkg create --build-type ament_cmake --license Apache-2.0 my_package

ภาพตัวอย่างการใช้คำสั่ง สร้าง Package (ชื่อ my_package)

_images/7.2.1.png _images/7.2.2.png

7.3. การสร้าง Node ใน ROS2 ด้วย Python

7.3.1. สร้างไฟล์ Python Node

รันคำสั่งดังนี้(เปิดTerminal ใหม่ หรือ ใช้Terminal เดิมก็ได้ ) :

cd ~/ros2_ws/src/my_package/my_package
touch my_node.py

และตรวจสอบไฟล์ ด้วยคำสั่ง

ls

จะเห็นได้ว่ามีไฟล์ my_node.py ปรากฎขึ้นมาดังภาพ

_images/7.3.1.png

7.3.2. เขียนโค้ดสำหรับ Python Node

เข้าไปแก้ไขไฟล์ด้วยคำสั่ง:

gedit ~/ros2_ws/src/my_package/my_package/my_node.py
_images/7.3.2.png

เขียนโค้ด Python ลงไป หลังจากนั้นกด Save

_images/7.3.3.png

โค้ด my_node.py

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()

7.3.3. การตั้งค่า setup.py สำหรับ Python Package ใน ROS2

หลังจากที่เราสร้าง Node ใน Python แล้ว จำเป็นต้อง ตั้งค่าไฟล์ setup.py เพื่อให้ ROS 2 สามารถรัน Node ได้อย่างถูกต้อง แก้ไขไฟล์ setup.py ด้วยคำสั่ง:

gedit ~/ros2_ws/src/my_package/setup.py
_images/7.3.4.png

เพิ่ม 'my_node = my_package.my_node:main' จากนั้นกด Save

'my_node = my_package.my_node:main'

หลังจากสร้างไฟล์ Python เสร็จสิ้นแล้ว ขั้นตอนต่อไปคือ การคอมไพล์ด้วยคำสั่ง colcon build

cd ~/ros2_ws
colcon build
_images/7.3.5.png

7.4. วิธีการรัน Node

หลังจากได้สร้าง Node ในหัวข้อ 6.3 การสร้าง Node ใน ROS2 ด้วย Python เสร็จสิ้น ขั้นตอนต่อไปนี้คือการรัน Node ที่เราสร้างขึ้น

7.4.1. เปิด Terminal รันคำสั่ง

แก้ไขไฟล์ ~/.bashrc ดังนี้

gedit ~/.bashrc

แก้ไขไฟล์ ~/.bashrc ดังนี้

source ~/ros2_ws/install/setup.bash

เพิ่มบรรทัดนี้ที่ด้านล่างของไฟล์ แล้วกด Save จากนั้นปิด Terminal แล้วเปิด Terminal ใหม่

_images/7.4.1.png

7.4.2. รันโหนด

ros2 run my_package my_node
_images/7.4.2.png

ข้อความ [INFO] ... [my_node]: Hello, ROS 2! แสดงว่าการทำงานของโหนดสำเร็จ และโหนดได้ทำการพิมพ์ข้อความผ่าน get_logger().info("Hello, ROS 2!") สรุปคำสั่งและคำอธิบาย

คำสั่ง

ตัวอย่าง

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