เขียน Node ภาษา Python แบบ OOP
การเขียนโปรแกรมเชิงวัตถุ OOP (Object Oriented Programming) เป็นวิธีการเขียนโปรแกรมที่นำแนวคิดในโลกของความเป็นจริงมาใช้กับในโลกของการเขียนโปรแกรมในการที่ โปรแกรมเมอร์ สร้างซอฟต์แวร์ขึ้นมาเพื่อแก้ไขปัญหาต่างๆ OOP เป็นวิธีการเขียนโปรแกรมรูปแบบหนึ่ง โดยมองสิ่งต่างๆในระบบเป็นวัตถุ (Object) ชิ้นหนึ่งที่มีหน้าที่และความหมายในตัว โดยวัตถุๆนั้น ก็มี คุณสมบัติ (Attributes) และ พฤติกรรม (Method,Behavior) หรือการกระทำของมัน เป็นการมองบนพื้นฐานความเป็นจริงมากขึ้น
คำศัพท์ที่จำเป็นต้องทราบสำหรับการเขียนโปรแกรมเชิงวัตถุในภาษา Python
- คลาส คือประเภทข้อมูลที่สร้างโดยผู้ใช้ โดยจะนำไปใช้สร้างออบเจ็ค กล่าวอีกนัยหนึ่ง คลาสคือประเภทข้อมูลของออบเจ็ค
- ออบเจ็ค คือสิ่งที่สร้างมาจากคลาสหรือ class instances
- แอตทริบิวต์ (instance attributes) คือข้อมูลที่เป็นสมาชิกของแต่ละออบเจ็ค โดยมักจะกำหนดไว้ในเมธอด init() ของคลาส
- เมธอด คือฟังก์ชันการทำงานที่กำหนดไว้ในคลาส
- คลาสแอตทริบิวต์ (class attributes) คือตัวแปรที่ประกาศไว้ในคลาส ซึ่งจะแชร์กับออบเจ็คทั้งหมดที่สร้างจากคลาสนั้นๆ
1 : เขียน Node ภาษา Python เบื้องต้น
เขียน Node ภาษา Python เบื้องต้น ตามขั้นตอนลิงค์ด้านล่าง
2 : เขียน Node ภาษา Python แบบ OOP
ใช้ Visual Studio Code เปิดไฟล์ my_first_node.py เขียนโค้ด + Save ตามโค้ดด้านล่าง
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
class MyNode(Node):
def __init__(self):
super().__init__("py_test")
self.get_logger().info("Hello ROS2")
def main(args=None):
rclpy.init(args=args)
node = MyNode()
rclpy.spin(node)
rclpy.shutdown()
if __name__ == "__main__":
main()
เริ่มการทำงานโดย เปิด Terminator
เข้าไปใน โฟลเดอร์ ros2_ws
cd ros2_ws/
Build แพ็คเกจ my_py_pkg
colcon build --packages-select my_py_pkg
เรียกใช้งานด้วยคำสั่งของ ros2 จะได้ผลลัพธ์ การทำงาน เหมือนกับ การเขียน Node ภาษา Python เบื้องต้น
ros2 run my_py_pkg py_node
กด Ctrl + c เพื่อหยุดการทำงาน
3 : เพิ่ม ฟังก์ชั่น timer_callback
ใช้ Visual Studio Code เปิดไฟล์ my_first_node.py เขียนโค้ด + Save ตามโค้ดด้านล่าง
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
class MyNode(Node):
def __init__(self):
super().__init__("py_test")
self.counter_ = 0
self.get_logger().info("Hello ROS2")
self.create_timer(0.5, self.timer_callback)
def timer_callback(self):
self.counter_ += 1
self.get_logger().info("Hello" + str(self.counter_))
def main(args=None):
rclpy.init(args=args)
node = MyNode()
rclpy.spin(node)
rclpy.shutdown()
if __name__ == "__main__":
main()
เปิด Terminator เข้าไปใน โฟลเดอร์ ros2_ws
cd ros2_ws/
Build แพ็คเกจ my_py_pkg
colcon build --packages-select my_py_pkg
เปิด Terminator หน้าต่างที่ 2
เรียกใช้งานด้วยคำสั่งของ ros2
ros2 run my_py_pkg py_node
จะได้ผลลัพธ์ การทำงานตามรูปด้านล่าง