วันเสาร์ที่ 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

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

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

วันอังคารที่ 7 กรกฎาคม พ.ศ. 2558

ROS คืออะไร


ก่อนที่จะศึกษา ROS เรามาทำความเข้าใจก่อนว่า ROS คืออะไรและมีประโยชน์อย่างไร ทำไมถึงต้องใช้ ROSและทำไมเราถึงต้องศึกษาและเรียนรู้ ROS



ROS (Robot Operating System) คือ กรอบการทำงาน (framework) ที่มีความยืดหยุ่นสำหรับการเขียนโปรแกรมทางด้านหุ่นยนต์ โดยได้รวบรวมเครื่องมือและไลบรารีไว้เป็นหมวดหมู่ ลดความซับซ้อนและเพิ่มประสิทธิภาพในการทำงานกับแพลตฟอร์มที่หลากหลายของหุ่นยนต์ หรืออาจากล่าวได้ว่า ROS ได้รวบรวมไลบรารีและเครื่องมือไม่ว่าจะเป็น hardware abstraction, device drivers, libraries, visualizers, message-passing, package management และอื่น ๆ อีกมากมาย เพื่อช่วยให้นักพัฒนาซอฟต์แวร์ในการสร้างแอพพลิเคชันทางด้านหุ่นยนต์ ที่สำคัญ ROS เป็นโอเพ่นซอร์ส
 

ทำไมถึงต้องใช้ ROS เพราะการสร้างซอฟต์แวร์ที่รองรับงานทุก ๆ อย่างที่จำเป็นสำหรับหุ่นยนต์เป็นเรื่องที่ยาก จากมุมมองในการทำงานด้านหุ่นยนต์ ปัญหาในการทำงานในสภาพแวดล้อมต่าง ๆ อาจเป็นปัญหาเพียงเล็กน้อยสำหรับมนุษย์ แต่สำหรับหุ่นยนต์แล้วไม่ใช่ จึงเป็นเรื่องยากสำหรับคนเพียงคนเดียวที่ไม่มีห้องปฎิบัติการหรือสถาบันการศึกษา ที่จะทำงานทางด้านหุ่นยนต์ด้วยตนเองเพียงคนเดียว

ด้วยเหตุผลข้างต้น ROS จึงถูกสร้างขึ้นมาเพื่อส่งเสริมให้นักพัฒนาหุ่นยนต์ได้พัฒนาซอฟต์แวร์ร่วมกัน ตัวอย่างเช่น ห้องปฎิบัติการหนึ่งอาจมีผู้เชียวชาญทางด้านการทำแผนที่ในสถาพแวดล้อมในร่ม และอาจนำไปสู่ระบบการทำแผนที่ อีกกลุ่มหนึ่งอาจมีผู้เชียวชาญในการใช้แผนที่เพื่อนำทาง และกลุ่มอื่น ๆ อาจค้นพบวิธีการทำงานกับการทำงานคอมพิวเตอร์วิชั่นเพื่อตรวจจับวัตถุขนาดเล็กในสภาพที่ยุ่งยาก ROS ได้ถูกออกแบบมาเพื่อให้กลุ่มคนเหล่านี้สามารถที่จะทำงานรวมกันและต่อเติมงานของกันและกันได้

จากที่กล่าวมาข้างต้น เราจึงเห็นประโยชน์ของ ROS ในการที่จะนำมาใช้ในการพัฒนาซอฟต์แวร์สำหรับหุ่นยนต์ โดยเฉพาะผู้ที่สนใจวิทยาการทางด้านหุ่นยนต์ ROS ได้เตรียมไลบรารีและวิธีการที่ใข้ในการเชื่อมต่อกับหุ่นยนต์ที่เราได้สร้างขึ้นมา ด้วยความที่ ROS เป็นโอเพ่นซอร์ส ทำให้เกิดการรวมตัวของนักพัฒนาทางด้านหุ่นยนต์จากทั่วทุกมุมโลก เพื่อสนับสนุนการใช้งาน ROS อย่างกว้างขวาง แกนนำหลักของ ROS คือ Willow Garage



จากที่กล่าวมาเราตอบได้หรือไม่ว่าทำไมเราถึงต้องศึกษาและเรียนรู้ ROS?

แปลมาจาก http://www.ros.org/about-ros/