การสร้าง Package ด้วยภาษา Python
เริ่มแรก เรามาออกแบบกันก่อน เรากำลังจะทำ Node 2 อัน ที่ทำหน้าที่พูดคนนึง และ รับฟังคนนึง
Package ชื่อ : test_python
โดยใช้ Dependencies ดังนี้:
1. catkin (build system)
2. rospy (ROS ภาษา Python)
3. std_msgs (Package ข้อความพื้นฐานใน ROS)
อยากจะสร้าง Node ที่ทำหน้าที่เป็น
Publisher 1 Node ทำหน้าที่ สุ่มตัวเลข แล้วส่งตัวเลขนั้นออกไป
Subscriber 1 Node ทำหน้าที่รับตัวเลขที่ส่งออกมา — แล้วแสดง
เปิด Terminal ของ Ubuntu
catkin_create_pkg ชื่อ วรรค ตามด้วย dependency หลายๆตัว ที่เว้นวรรค 1 ที
cd catkin_ws/src
catkin_create_pkg test_python std_msgs rospy
เราจะได้ โฟลเดอร์ ที่มีชื่อว่า test_python ขึ้นมา พอเป็นเข้าไปด้านใน จะพบว่ามี โฟลเดอร์ และไฟล์มารอดังนี้
เปิด Terminal ใหม่
mkdir catkin_ws/src/test_python/scripts
เขียนโค้ดภาษา Python
1. สร้าง Node ตัวส่งข้อความ “Publisher”
ไฟล์ : random_number.py
#!/usr/bin/env python import rospy from std_msgs.msg import Int32 from random import randint def random_number_publisher(): rospy.init_node('random_number') pub=rospy.Publisher('rand_no', Int32, queue_size=10) rate= rospy.Rate(2) while not rospy.is_shutdown(): random_msg=randint(0,5000) rospy.loginfo(random_msg) pub.publish(random_msg) rate.sleep() if __name__=='__main__': try: random_number_publisher() except rospy.ROSInterruptException: pass
cd catkin_ws/src/test_python/scripts
chmod u+x random_number.py
2. สร้าง Node ตัวรับข้อความ “Subscriber”
ไฟล์ : random_subscriber.py
#!/usr/bin/env python import rospy from std_msgs.msg import Int32 def callback(data): rospy.loginfo("I receive %s", data.data) def random_subscriber(): rospy.init_node('random_subscriber') rospy.Subscriber('rand_no',Int32, callback) rospy.spin() if __name__=='__main__': random_subscriber()
cd catkin_ws/src/test_python/scripts
chmod u+x random_subscriber.py
หลังจากเขียนโค้ดเสร็จแล้ว ให้ทำการ Build โดย เปิด Terminal ใหม่ แล้วใช้คำสั่ง
cd catkin_ws
catkin_make
ทดสอบการทำงาน
หน้าต่างที่1 เราจะ RUN ระบบ ROS จะต้องมี Core ที่ทำหน้าที่เป็นหัวใจของระบบ
roscore
หลังจากนั้นจึง Run Node ของเราได้
หน้าต่างที่ 2 เปิด Publisher (ตัวส่งข้อมูล)
rosrun test_python random_number.py
rosrun test_python random_subscriber.py
หมายเหตุ : เรียบเรียงและแก้ไขดัดแปลงจากบทความต้นฉบับด้านล่าง