ภาพของ PR2 หุ่นยนต์ที่ ROS ทำออกมาเพื่อจะคุมแหละ แต่สุดท้ายมันดัน work เลยใช้กับตัวอื่นๆได้เบยย ~

[ROS] Part 1, Introduction + Installation !

Framework ของการเขียนโปรแกรมหุ่นยนต์ ที่นักวิจัยใช้กันเยอะแยะเลย

ออกตัวก่อนนะครับ ผมไม่ใช่ผู้เชี่ยวชาญอะไร สิ่งที่อธิบายอาจผิดคอนเซป หรือผิดไปหมดซะทุกอย่างเลย แต่อยากจะแบ่งปันในสิ่งที่เข้าใจ ณ จุดนี้ฮะ ในแนวจาก คนที่ไม่รู้เรื่องไรอะไรเลย สำหรับ คนที่ไม่รู้เรื่องอะไรเลยเช่นกัน (555)
 
ถ้าผมเข้าใจผิด สามารถช่วยกันแก้ไขได้คับ

[เริ่มต้น]จากความหนักใจ . . .ในการ Code หุ่นยนต์ที่มีหลายๆ Module

การพัฒนาหุ่นยนต์ขึ้นมาซักตัวนี้ ต้องใช้อะไรเยอะแยะมากเลย
ตั้งแต่ การออกแบบ Hardware มานั่งดูเรื่องของ Static , Dynamics ของหุ่นยนต์
ยังไม่รวมถึงพวก Vision , Sensor , AI , Controlling ในส่วนของ Software . . . . . 
การจัดการแต่ละส่วนมันไม่ง่ายเลย

ยิ่ง Features เยอะ ก็ยิ่งซับซ้อนนะเออ

ถ้าไม่ได้ออกแบบแยกแต่ละ Module ออกมาให้ดี แถมถ้างานยิ่งซับซ้อนขึ้นมามากๆ การจัดการจะยิ่งปวดหัวและลำบากใจเป็นอย่างยิ่ง

ผมก็เป็นคนหนึ่งที่เขียนโปรแกรมหุ่นยนต์ในชนิดที่ทุกอย่างแทบจะอยู่ที่เดียว

อัดรวมกันอยู่ไฟล์เดียวจริงๆ 5555

ตอนเวลาบั๊คขึ้นมานี้ก็หากันไม่เจอเลย ว่าจะแก้ตรงไหน อะไรเป็นสาเหตุ 
(อาจเป็นเพราะความโง่เองส่วนหนึ่ง T_T)

หุ่นหลายๆแบบ หลายๆ Configuration แต่อยากให้ทำงานแบบเดียวกัน ต้องเซตใหม่ตลอดเลย เฮ้อออออ

ตัวอย่างเช่น Code ชุดเดิม เราเคยเขียนหุ่นยนต์วิ่งตามเส้นมาแล้ว
พอจะต้องมาทำแบบเดิม กับหุ่นยนต์ตัวใหญ่กว่า หรือ ขับเคลื่อน 4 ล้อ

ต้องมานั่งเขียนโปรแกรมควบคุมใหม่อีก แถมไม่พอ ต้องมานั่งแก้ตัวแปรให้ตรงกับ เอิ่มม ฐานหุ่นใหม่ที่ซื้อมา

การที่จะทำให้ Module เรา มี Reusability สูงๆ นี้ทำได้ยากมาก
ท้ายที่สุดก็ต้องมาแก้ Code เยอะๆ อยู่ดี

หลังจากเขียนหุ่นยนต์มา ปีสองปี กับ Code ที่พันกันเป็นสปาเก็ตตี้ ก็มีรุ่นพี่ในชมรมหุ่นยนต์ แนะนำให้รู้จักกับ ROS — Robot Operating System


ROS — Robot Operating System

แปลเป็นภาษาไทยตรงๆ ก็คือ ระบบปฏิบัติการหุ่นยนต์นั่นเอง แต่จริงๆแล้ว มันไม่ใช่ระบบปฏิบัติการไปซะทีเดียวนะ -_-

จริงๆแล้วมันเป็นเหมือน framework ของ Software หุ่นยนต์ 
(framework — ระเบียบวิธีการทำงานของโปรแกรมที่ เมื่อทำตามจะช่วยให้โปรแกรมเป็นระเบียบมากขึ้น ทำงานง่ายขึ้น อะไรประมาณนี่ ~)

หน้าเว็บของ http://www.ros.org เป็น Official Website ของ Framework Library นี้นะเออ

ที่มาที่ไป => ROS คือ Framework ของการพัฒนาหุ่นยนต์ ที่ Willow Garage (บริษัทที่วิจัยหุ่นยนต์ ใน USA) คิดขึ้นมา เพื่อใช้กับเจ้า หุ่นยนต์ PR2 ซึ่งมันก็เจ๋งมากเลยทีเดียวล่ะ

ความเจ๋งของมันก็คือ การแบ่งทุกๆอย่างเป็น Module (หรือจะเรียกย่อยๆว่า Node)
Node แต่ละอันจะทำหน้าที่ของมันเองเป็นก้อนๆ

ตัวอย่างโครงสร้างของ Node ต่างๆ ทำงานแยกๆกัน และพึ่งพากันจากข้อมูลที่ส่งออกมา — จากโปรเจคจบของผมเองคับ http://senior.itutor.name

และเมื่อเราเปลี่ยนหุ่น (เช่น อยากใช้หุ่นยนต์เจ้าอื่น , อยากเปลี่ยนจาก 4 เป็น 2 ล้อ) 
เราก็ยังอยากให้ การทำงานเป็นแบบเดิม โดยที่แก้แค่ส่วนที่เป็นการคุมล้อหุ่นยนต์จริงๆ ไม่ต้องแก้ Logic อื่นๆ ให้เสียเวลา (การเขียนโปรแกรมหุ่นยนต์แบบเดิมๆ บางครั้งต้องรื้อทั้งระบบเลย T_T)

แต่ ROS เราก็แค่เปลี่ยนแค่ Code ในส่วนฐานก็ได้แล้ว ~ !!

เพราะ ROS จะใช้การติดต่อสื่อสารกับ Node อื่นๆ ด้วยการส่งข้อมูลผ่านส่วนกลางของระบบ ที่ตกลงรูปแบบกันไว้แล้ว (เหลือแค่มาพัฒนาส่วนการแปลข้อมูลให้เป็นไปตาม Hardware , Algorithm ที่ต้องการ)

ใครอยากจะใช้ข้อมูลตัวไหน จะสั่งการอะไร ก็สามารถทำได้โดยง่าย
เพราะข้อมูลมันถูกส่งผ่านตัวกลาง จะเรียกใช้อะไร ก็เรียกเลย

ROS หลักๆตอนนี้ใช้ ภาษา C++ หรือ Python ในการพัฒนาเป็นหลักๆนะ
แม้ว่าตอนนี้จะมีคน Hack ให้ใช้ node.js (Javascript)ได้แล้วก็เถอะ แนะนำสองภาษาขั้นต้นดีกว่า

ส่วนเรื่องของ Concept แบบละเอียด(มั้ง) จะตามไปดู Part 2 ได้นะคับ(เร็วๆนี้)

แต่ตอนนี้ไปลงไว้ให้ใช้งานได้ก่อนน่าจะดีกว่า !


มาพูดถึงการลงเจ้าตัว ROS ดีกว่า

ROS มัน Require คอมพิวเตอร์นะ จะ install ลงไปใช้กับพวก Board Arduino อะไรทำนองนั้นไม่ได้ มันต้องการ Computer ระบบ Linux ใดๆ (Ubuntu , Lubuntu , Redhat 9ล9) ซึ่งส่วนใหญ่ก็จะใช้ Ubuntu

แต่ถ้าอยากจะคุม Arduino ไรงี้ ก็มี Module เอาไว้คุมมันอีกทีจาก ROS นะจ๊ะะ

ROS — Version

เจ้าตัว ROS มีหลาย Version เลย ซึ่งออกมาส่วนใหญ่จะ Support Ubuntu เป็นเวอร์ชั่นๆไป

โดย แวดล้อมการพัฒนา (Developing Environment) ที่ผมใช้อยู่ตอนนี้เป็น 
Ubuntu Xenial (16.04)
ซึ่งบังคับให้ใช้ ROS Kinetic Kame (เพราะไม่มีตัวเก่าๆให้ลงแบบง่ายๆนั่นเอง -_-)

Installation ! แบบคร่าวๆ (แต่ทำตามไปจนจบ ก็น่าจะใช้งานได้นะ)

ต่อไปนี้จะอ้างอิง การ install จาก Official Website ของ ROS 
http://wiki.ros.org/kinetic/Installation/Ubuntu

เริ่มต้นจากการเปิด Terminal ของ ubuntu ก่อน 
กด แป้นลัด Ctrl + Shift + T

หน้าตาของ Terminal เมื่อ Run ขึ้นมา

สามารถ Copy โดยใช้ Ctrl + C 
และ Paste ใน Terminal ด้วย Ctrl + Shift + V

  1. เริ่ม Add Repository ใส่ใน Ubuntu ก่อน
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2. Setup Key ของการเข้าถึง Package

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

3. หลังจาก Add Key Add repository แล้ว ก็ Update (ดึงข้อมูลจากแหล่ง)

sudo apt-get update

มันจะใช้เวลาซักพักนึง (ตามสภาพ Internet ของแต่ละที่)

4. พอเราได้ตำแหน่งของสิ่งของจากการ update แล้ว 
ก็เริ่มกระบวนการบูชายัญได้ (เริ่มลง ROS นั่นเอง)

sudo apt-get install ros-kinetic-desktop-full

จริงๆแล้วมีหลาย Version ทั้งแบบ Minimal (แบบไว้ใช้ในฐานหุ่นยนต์ที่ไม่จำเป็นต้องลง Module เกี่ยวกับการมองเห็น , AI) หรือ จะลงแบบ Full ตามที่ผมแปะไว้ด้านบนก็ได้ ถ้าที่เหลือ (มันเซฟกว่า 55555)

ระหว่างนี้ก็รอมันลง ซึ่งนานมากก แต่ก็รอไปนะจ๊ะ

5. เท่านี้เราก็ได้ ROS ไฟล์ดิบๆในเครื่องแล้ว 
ต่อไปเราจะมาติดตั้ง Environment ของ ROS กัน 
ด้วยคำสั่ง rosdep จะทำให้ ros จัดการเรื่อง dependencies ต่างๆ ที่จำเป็นกับ framework

sudo rosdep init
rosdep update

6. ทำให้ ROS สามารถ Run ได้ 
โดยปกติ เวลาเราจะ ใช้คำสั่งของ ROS เรามักจะใช้ใน Terminal 
(อันที่จริงทุกอย่างก็ใช้ผ่าน Terminal แหละ ) 
ซึ่ง Terminal มีหลายเจ้ามาก เช่น bash (คนใช้เยอะ) z-shell และอีกมากมาย

เราจะต้องทำให้ Terminal รู้จักคำสั่งของ ROS ด้วย Code ชุดนี้

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

เป็นการเอาคำสั่งต่างๆที่ ROS มี ไปแจ้งให้กับ terminal (ในที่นี้ใช้ bash — config file จะอยู่ที่ home folder ชื่อไฟล์(แม่งมีแต่นามสกุล5555) “.bashrc” )

source คือ การสั่งใช้ config นั้น นั่นเอง

**เพิ่มเติม การลง Package บางทีอาจต้องใช้ rosinstall ก็ลงเผื่อไว้ก่อนละกัน

sudo apt-get install python-rosinstall

ตอนนี้เราก็สามารถใช้คำสั่งของ ROS ได้ล๊าวว ~

ทดลอง run Core Program ของมันได้ด้วยการ พิมพ์

roscore

มันควรจะไม่มี error เด้งมา และ รันอย่างสวยงาม :D


CHAPTER ต่อไป

เราจะมาดูว่า Concept ของ ROS เป็นยังไง (ฉบับ noob ๆ ) 
และจะเริ่มโปรเจคที่ใช้ ROS ยังไง (Setup Workspace)

สำหรับวันนี้ ถ้า install ให้ได้ ถือว่าเป็นอันดี 5555555
สวัสดีคับ