วันจันทร์ที่ 18 กรกฎาคม พ.ศ. 2559

ROS กับ Dynamic Reconfigure (Python version)

dynamic_reconfigure is on providing a standard way to expose a subset of a node's parameters to external reconfiguration. Client programs, e.g., GUIs, can query the node for the set of reconfigurable parameters, including their names, types, and ranges, and present a customized interface to the user. This is especially useful for hardware drivers, but has broader applicability.



 ขั้นตอนการทำ
Dynamic Reconfigure (Python version)
.
1. How to Write Your First .cfg File
http://wiki.ros.org/dynamic_reconfigure/Tutorials/HowToWriteYourFirstCfgFile
.
2. Setting up Dynamic Reconfigure for a Node (python)
http://wiki.ros.org/dynamic_reconfigure/Tutorials/SettingUpDynamicReconfigureForANode%28python%29
.
3. Using the Dynamic Reconfigure Python Client
http://wiki.ros.org/dynamic_reconfigure/Tutorials/UsingTheDynamicReconfigurePythonClient
.
Run It!
Once again make the node executable: chmod +x nodes/client.py Launch a core and your server node, and launch your new client node. If you've done everything correctly, both your client and server should begin to print out matching configurations every ten seconds.

วันเสาร์ที่ 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 สำหรับดาร์วินโอพี