วันเสาร์ที่ 12 กันยายน พ.ศ. 2558

ควบคุมเต่าบน ROS ด้วย Python


การเขียนโปรแกรมภาษา Python ควบคุม  Turtlesim

    การศึกษา ROS นั้นเราหนีไม่พ้นที่จะต้องศึกษาการเขียนโปรแกรมควบคู่ไปด้วย ผู้เขียนก็เช่นกัน ระหว่างที่ศึกษาการใช้งาน ROS ร่วมกับนักศึกษานั้น ก็ได้มองเรื่องการเขียนโปรแกรมไว้ด้วยเช่นเดียวกัน แต่ในช่วงแรก นั้นเราจะเน้นไปที่เรื่องของการทำความเข้าใจในตัว ROS เป็นหลัก

    แต่หลังจากที่เราพอจะเข้าใจกระบวนการทำงานของ ROS แล้ว เราก็เริ่มต้นหันมามองภาษาที่ใช้ในการควบคุมและติดต่อกับ ROS โดยมีภาษาให้เราเลือก 2 ภาษาคือ C++ และ Python แม้ว่าผู้เขียนจะมีความถนัดและคุ้นเคยในภาษา C++ มากกว่า แต่ก็เลือกที่จะเริ่มต้นใหม่กับ ROS ด้วยภาษา Python ด้วยเหตุผลคือ ถ้าเราจะนำ ROS ไปให้กับนักศึกษาหรือชักจุงเขามาร่วมกันเล่น ROS แล้ว หากเริ่มต้นด้วยภาษาการเขียนโปรแกรมที่ยาก อาจจะหาคนมาเล่นด้วยไม่ได้เลย สรุปเลยมาลงที่ Python 

    และในตัว ROS จะมี Turtlesim (เต่าจำลอง) ให้เราได้ศึกษาการใช้งานคำสั่งพื้นฐานควบคุมการทำงานต่าง ๆ ผ่านทาง command line ได้ และจะดีมากหากเราศึกษาการส่งชุดคำสั่งด้วย command line แล้ว นำชุดคำสั่งเหล่านั้นมาควบคุมด้วยรหัสโค้ดโปรแกรมหรือเขียนโปรแกรมควบคุมแทนคำสั่ง ผ่าน command line เพราะจะทำให้เราส่งคำสั่งได้ยืดหยุ่นกว่ามาก .. มาเริ่มกันเลยดีกว่าครับ ..

ด้วยวิธีการนี้เราจะได้ความรู้ 2 ทางพร้อมกันคือ ได้ศึกษาภาษา Python และการเขียนทำงานบน ROS เพื่อควบคุมหุ่นยนต์

new terminal 
~/catkin_ws# roscore

new terminal
~/catkin_ws# rosrun turtlesim turtlesim_node


ด้วย 2 คำสั่งข้างต้น ... เต่า ก็มาปรากฎให้เราเห็นแล้วดังรูปข้างต้น

เขียนโค้ด python ควบคุมการทำงานturtlesim
1. สร้าง package ชื่อ turtlesim_py
$ cd ~/catkin_ws/src
$ catkin_create_pkg turtlesim_py std_msgs rospy roscpp

2. Built package...
$ cd ~/catkin_ws
$ catkin_make

3. สร้างโฟลเดอร์เก็บไฟล์ py
$ cd ~/catkin_ws/src/turtlesim_py
$ mkdir scripts
$ cd scripts

4. สร้าง node “turtlesim101.py”
$ gedit turtlesim101.py 

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




เมื่อเขียนโค้ดเสร็จแล้วให้ save แล้วทำตามขั้นตอนต่อไปดังนี้

$ chmod +x turtlesim101.py

5. run
$ cd ~/catkin_ws
$ source devel/setup.bash

// (Python)
$ rosrun turtlesim_py turtlesim101.py

ด้วยชุดคำสั่งดังกล่าวเต่าก็จะหมุน ๆๆๆ แล้วครับ

พบกันใหม่โอกาสหน้าครับ