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

วันอังคารที่ 25 มีนาคม พ.ศ. 2557

ทักษะการหมุนรอบบอลของหุ่นยนต์แตะฟุตบอล

    ทักษะหนึ่งของหุ่นยนต์แตะฟุตบอล คือ ความสามารถในการหมุนตัวรอบบอลได้ ด้วยเหตุผลเมื่อหุ่นยนต์เข้าถึงบอลแล้ว หากตำแหน่งของหุ่นยนต์ ไม่เหมาะสมที่จะแตะบอลไปที่ประตู เพราะตัวหุ่นยนต์ไม่ตรงกับตำแหน่งประตู จึงต้องมีการหมุนตัวไปหาประตู แต่การหมุนตัวไปหาประตู บอลจะต้องยังคงอยู่ระหว่างตัวหุ่นยนต์กับประตู เมื่อหมุนไปตรงประตูจะแตะบอลได้ทันที


 


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

การหมุนด้วยการคำนวณการหมุน
    ในการทดลองนี้ได้ ใช้วิธีการหมุนโดยการคำนวณค่าระยะห่างระหว่างบอลกับตัวหุ่นยนต์ไปพร้อม ๆ กันกับท่าการหมุนเริ่มต้นและปรับเปลี่ยนการหมุนให้เหมาะสมได้ตลอดเวลาของการ หมุน





การทดลองครั้งที่ 1. ศึกษาและเซตท่าการหมุนเริ่มต้น
    การทดลองนี้จะเป็นการศึกษาเรื่องการเคลื่อนที่ของหุ่นยนต์ในลักษณะเป็นวงกลมก่อน ว่าทำได้อย่างไร พารามิเตอร์ที่เกี่ยวข้องกับการหมุนตัวของหุ่นยนต์มีอะไรบ้าง

ผลการทดลองที่ได้
    เราจะได้ค่าพารามิเตอร์แต่ละตัวที่ใช้ในการหมุนของตัวหุ่นยนต์


การทดลองครั้งที่ 2. การทดลองหมุนรอบบอล
    โดยการคำนวณเพื่อรักษาระยะห่างระหว่างตัวหุ่นยนต์กับบอลให้มีระยะห่างที่คงที่และสม่ำเสมอตลอดเวลาของการหมุน

ผลการทดลองที่ได้
   เราจะได้การหมุนของตัวหุ่นยนต์ที่รักษาระยะห่างของตัวหุ่นยนต์ได้ตลอดเวลาของการหมุน


การทดลองครั้งต่อไป (ครั้งที่ 3.) การหาค่าแฟกเตอร์ที่เหมาะสม
    การทดลองครั้งนี้ จะเป็นการหาค่าแฟกเตอร์ ที่เหมาะสม เพื่อที่จะให้หุ่นยนต์สามารถเคลื่อนที่รอบบอลได้อย่างแม่นยำและรวดเร็ว โดยคงความสามารถในการรักษาระยะห่างระหว่างหุ่นยนต์กับบอลได้อย่างคงที่ และสามารถปรับตำแหน่งระยะห่างของตัวหุ่นยนต์กับบอลได้ตลอดเวลาที่ต้องการ

หมายเหตุ DARwIn-OP ได้รับการสนับสนุนจากบริษัท INEX

วันอาทิตย์ที่ 2 มีนาคม พ.ศ. 2557

GameController สำหรับหุ่นยนต์แตะฟุตบอล


การแข่งขันหุ่นยนต์แตะฟุตบอลนั้น หุ่นยนต์จะต้องมีความสามารถในการทำงานแบบอัตโนมัติ และจะมีซอฟต์แวร์มาควบคุมการทำงานเพื่อบอกสถานะของเกมส์การแข่งขันในขณะนั้น ที่เรียกว่า Game Controller ดังรูปที่ 1. โดยที่โปรแกรมดังกล่าวจะให้ข้อมูลข่าวสารของเกมส์การแข่งขั้นทั้งหมด เช่น หุ่นยนต์อยู่ในสถานะการเริ่มต้น ความพร้อม ติดตั้งระบบ เล่น เป็นต้น
รูปที่ 1. Game Controller

 โดยหลัก ๆ แล้วหุ่นยนต์จะเน้นรับข้อมูล ตามรูปที่ 2 เป็นหลัก ซึ่งเป็นข้อมูลสำคัญ(หัวใจ) เพราะเป็นข้อมูลที่บอกว่า หุ่นยนต์ควรเริ่มต้นเล่นหรือหยุดเล่นได้หรือยัง
 
รูปที่ 2. การส่งสถานะการทำงานของเกมคอนโทรลเลอร์ระหว่างการแข่งขัน

ซอร์สโค้ดที่มาพร้อมกับตัวดาร์วินโอพี ยังไม่ได้ให้ซอร์สโค้ดที่เกี่ยวข้องกับการรับข้อมูลของเกมส์คอนโทรลเลอร์ ซึ่งจะส่งข้อมูลผ่าน Network มาในรูปแบบโปรโตคอล UDP ในส่วนการรับข้อมูลนี้ หากเราใช้ดาร์วินโอพีก็คงต้องพัฒนาขึ้นมาเอง แต่ในซอร์สโค้ดของดาร์วินโอพี จะให้ซอร์สโค้ดที่เกี่ยวข้องกับการติดต่อในรูปแบบ TCP/IP มาให้ในตัวอย่าง โปรแกรมซอร์สโค้ด roboplus ที่ใช้ในการเชื่อมต่อระหว่าง DARwIn-OP กับโปรแกรม Roboplus เราสามารถใช้ซอร์สโปรแกรมนี้เป็นแนวทางในการศึกษาได้ หรือจะให้ง่ายกว่านั้นให้ศึกษาการเขียนโปรแกรมติดต่อ network udp จากอินเตอร์เน็ตจะมีตัวอย่างง่าย ๆ ให้ศึกษามากมาย ลองดูครับไม่ใช่เรื่องยากสำหรับการรับข้อมูลจาก GameController

วันศุกร์ที่ 28 กุมภาพันธ์ พ.ศ. 2557

การปรับเวอร์ชันโค้ดดาร์วินโอพี


Firmware Installer...

การปรับเวอร์ชั่นซอฟต์แวร์ที่มาพร้อมกับตัวดาร์วิน สิ่งสำคัญที่ต้องทำลำดับแรกคือ การปรับปรุง Firmware ของตัวซอร์สโค้ดเช่น ถ้าซอฟต์แวร์ในตัวหุ่นยนต์ดาร์วินเป็นเวอร์ชั่น 1.5.0 แล้วต้องการปรับปรุงเป็นเวอร์ชั่น 1.6.0 ก็ต้องใช้ Firmware จากโค้ดเวอร์ชั่น 1.6.0 โดยทำตามขั้นตอนจาก VDO นี้

DARwIn-OP S/W Tutorial 5.Firmware Installer (http://youtu.be/Hox8dXP8grQ)



link ซอฟต์แวร์ดาวน์โหลดโค้ดต้นฉบับจาก ROBOTIS

หมายเหตุ OpenController จะใช้ โค้ดที่มาจากทีมงาน ROBOTIS ในการศึกษาและเรียนรู้ในครั้งต่อ ๆ ไปครับ

ขอบคุณ INEX สำหรับดาร์วินโอพี