เขียน Node ภาษา Python เบื้องต้น

Node :เป็นกระบวนการที่ใช้ในการดำเนินการโปรแกรมต่าง ซึ่ง ROS ได้รับการออกแบบให้เป็นระบบแบบแยกส่วนในระดับที่ละเอียด ระบบควบคุมหุ่นยนต์มักจะประกอบด้วยหลายโหนด ตัวอย่างเช่นหนึ่งโหนดควบคุม laser range-finder, หนึ่งโหนดควบคุมมอเตอร์ล้อ, หนึ่งโหนดทำการแปลงค่าต่างๆ, หนึ่งโหนดทำการวางแผนเส้นทาง, หนึ่งโหนดให้มุมมองกราฟิกของระบบและอื่น ๆ เป็นต้น

1 : สร้าง Package ภาษา Python


สร้าง Package ภาษา Python ตามขั้นตอนลิงค์ด้านล่าง


2 : เขียน Node ภาษา Python เบื้องต้น


เริ่มการทำงานโดย เปิด Terminator หน้าต่างที่ 1


คลิกขวาที่ Terminator -> New Windows



จะได้หน้าต่างที่ 2


เริ่มเขียนคำสั่ง ที่หน้าต่างที่ 1

เริ่มสร้าง Node โดยเข้าไปที่โฟลเดอร์ของ Workspace ของ ROS2 โดยเราจะสร้าง Node ไว้ใน ros2_ws/scr/

cd ros2_ws/scr/


ดูรายชื่อไฟล์และ โฟลเดอร์ จะพบโฟลเดอร์ my_py_pkg และ my_cpp_pkg ซึ่งเป็น Package ที่ได้สร้างไว้ก่อนหน้านี้

ls


เข้าไปใน โฟลเดอร์ my_py_pkg

cd my_py_pkg/


ดูรายชื่อไฟล์และ โฟลเดอร์ จะพบโฟลเดอร์ my_py_pkg

ls


เข้าไปใน โฟลเดอร์ my_py_pkg อีกครั้ง

cd my_py_pkg/


ดูรายชื่อไฟล์และ โฟลเดอร์ จะพบไฟล์ init.py

ls


สร้าง Node ภาษา Python ชื่อ my_first_node.py

touch my_first_node.py


3 : ติดตั้ง Visual Studio Code


ติดตั้ง Visual Studio Code บน Ubuntu 20.04 และ ทดสอบ โปรแกรมแรก ภาษา Python ตามขั้นตอนลิงค์ด้านล่าง


4 : เขียนโค้ดด้วย Visual Studio Code


เปิด Visual Studio Code



เปิดโฟลเดอร์ scr แล้วคลิกเปิดไฟล์ my_first_node.py เริ่มเขียนโค้ด


เขียนโค้ดดังนี้

 
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
  
def main(args=None):
    rclpy.init(args=args)
    node = Node("py_test")
    node.get_logger().info("Hello ROS2")
    rclpy.shutdown()
  
if __name__ == "__main__":
    main() 

http://www.lungmaker.com/code/my_first_node.py


File -> Save


กลับไปที่ Terminator เขียนคำสั่ง

chmod +x my_first_node.py

ทดสอบการทำงาน ด้วยคำสั่ง

./my_first_node.py

แสดงผลลัพธ์ การทำงาน

แทรกโค้ดด้านล่าง ไปที่ บรรทัดที่ 9 แล้ว Save

rclpy.spin(node)


เขียนโค้ดดังนี้

 
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
  
def main(args=None):
    rclpy.init(args=args)
    node = Node("py_test")
    node.get_logger().info("Hello ROS2")
    rclpy.spin(node)
    rclpy.shutdown()
  
if __name__ == "__main__":
    main() 


File -> Save


ทดสอบการทำงานอีกครั้ง

./my_first_node.py

กด Ctrl + c เพื่อหยุดการทำงาน


5 : เรียกใช้งาน py_node


เปิดไฟล์ setup.py เพิ่มโค้ดบรรทัดที่ 23 ล่าง ‘console scripts’ ด้วยโค้ดด้านล่าง

"py_node = my_py_pkg.my_first_node:main"

File -> Save


โดย โค้ดที่เพิ่มมี 4 ส่วนดังนี้

1. py_node คือชื่อที่จะเรียกใช้ในการทำงาน

2. my_py_pkg คือ ชื่อ Packag

3. my_first_node คือ ชื่อไฟล์ ของโค้ด Python

4. main คือ ชื่อฟังก์ชัน จากไฟล์ข้อที่ 3


เริ่มทำงานต่อจากขั้นที่ 4

กลับไปที่ Home

cd

เข้าไปใน โฟลเดอร์ ros2_ws

cd ros2_ws/

Build แพ็คเกจ my_py_pkg อีกครั้ง

colcon build --packages-select my_py_pkg


เรียกใช้งาน py_node ได้อย่างไร ?


เปิดไฟล์ setup.cfg จะแสดงที่อยู่ของ py_node อยู่ที่ /lib/my_py_pkg


เข้าไปที่โฟลเดอร์ install

cd install/


ลิสรายการ

ls


เข้าไปโฟลเดอร์ my_py_pkg

cd my_py_pkg/


ลิสรายการ

ls


เข้าไปในโฟลเดอร์ lib

cd lib


ลิสรายการ

ls


เข้าไปโฟลเดอร์ my_py_pkg

cd my_py_pkg/


ลิสรายการ จะพบ py_node อยู่ในโฟลเดอร์นี้

ls


เรียกใช้งาน py_node จะแสดงผลลัพธ์ การทำงาน

./py_node

กด Ctrl + c เพื่อหยุดการทำงาน


6 : เรียกใช้งาน py_node โดยใช้ ROS2


ซึ่งการเรียกใช้งาน py_node แบบขั้นตอนที่ผ่านมา จะเห็นได้ว่ามีหลายขั้นตอน ที่ยุ่งยาก โดยการเรียกใช้งานด้วย ROS2 มีขั้นตอนดังนี้


ไปที่ Terminator หน้าต่างที่ 2


ใช้คำสั่ง

source .bashrc


เรียกใช้งานด้วยคำสั่ง ros2 run ชื่อPackag ชื่อNode จะแสดงผลลัพธ์ การทำงาน

ros2 run my_py_pkg py_node


กด Ctrl + c เพื่อหยุดการทำงาน