เขียน 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 เพื่อหยุดการทำงาน