คลังเก็บหมวดหมู่: robot

Deep Learning กับ nvidia jetson nano ตอนที่ 1

ตอนนี้ เราจะมาทดลองรันโปรแกรมบน jetbot กัน โดยจะเป็น examples ที่มากับตัว install 2 ตัวอย่างแรกจะเป็นการแนะนำการเขียนโปรแกรมเพื่อควบคุม jetbot ทั้งด้วย widgets และจอย

โปรแกรมตัวอย่างเขียนด้วย jupyter notebook และระบบที่รัน jetbot ก็ลงมาให้เรียบร้อยแล้ว เราสามารถรันแบบรีโมทผ่านบราวเซอร์จากเครื่องคอมเราได้เลย โดยเราก็รัน jetbot ด้วย power bank ทีติดตั้งไว้แล้ว เพื่อไม่ให้เป็นอุปสรรคในการเคลื่อนที่ของ jetbot การทดลองรันก็เพียงแค่เปิดไฟล์ ขึ้นมาแล้วให้มันรัน จะทีละส่วน(เค้าเรียกว่า cell)เพื่อทำความเข้าใจ หรือสั่งรันทั้งหมดเลยก็ได้ แต่ไม่แนะนำ เพราะ cell ท้ายๆ อาจจะเป็นการสั่งหยุดการทำงาน

ตัวอย่างถัดมา เริ่มน่าตื้นเต้นและปวดหัวขึ้นมาบ้างแล้ว เพราะจะเริ่มใช้งาน deep learning โดยตัวอย่างนี้จะเป็นการทำให้เคลื่อนที่หลบสิ่งกีดขวางได้ โดยจะแบ่งโค้ดเป็น 3 ไฟล์ 3 ขั้นตอน โดย

1. ขั้นตอนแรก จะเป็นการเก็บ samples โดยโค้ดจะทำการเก็บภาพและให้เราแยกว่าภาพไหนคือ blocked หุ่นจะไปต่อไม่ได้ หรือ ภาพไหนคือ free หุ่นสามารถเคลื่อนที่ไปได้ เพื่อจะนำไป train
2. ทำการ train ขั้นตอนนี้ยุ่งยากหน่อย ผมพบว่า หากเก็บ samples จำนวนมาก (> 100) จะทำการ train บน jetbot ไม่สำเร็จ มีอาการดับไปซะเฉยๆ (เรื่องนี้ เดี๋ยวว่ากันอีกที) ดังนั้นจึงต้องทำการ train บนเครื่อง pc แทน ซึ่งใช้เป็น ubuntu 18.04 ก็ต้องไปทำการ install โปรแกรมที่จำเป็นทั้งหมด เรียกว่า ก็ต้องให้เหมือนบน jetbot นั่นเอง
หลังจากงมอยู่นาน จึงได้ขั้นตอนการ install ดังนี้

  • ลง anaconda ก็จะได้ python มาด้วย
  • ลง pytorch โดยเลือกได้ว่าจะใช้ cuda หรือไม่ ซึ่งบางคนใช้การ์ดจอ nvidia อาจอยากใช้ gpu ในการคำนวณ ก็ต้องไปลง driver cuda ก่อนนะ
  • ลง jupyter (อันนี้ไม่แน่ใจว่าตอนลง anaconda มันลงให้เลยอัตโนมัติแล้วหรือเปล่า)

*** ข้อที่ต้องระวังคือ เวอร์ชั่นของ pytorch บนเครื่องที่ใช้เทรนกับบน jetbot จะต้องเหมือนกัน ไม่งั้นจะโหลดโมเดลที่เทรนมาไม่ได้ ของผมใช้วิธีอัพเกรด jetpack เป็น เวอร์ชั่น 4.4 และอัพเกรด pytorch ไปเป็นเวอร์ชั่น 1.6

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

*เดี๋ยวจะลองเปลี่ยนไปใช้กล้อง USB ดูบ้างว่าอาการจะแตกต่างกันมั้ย

ทีนี้ เมื่อสามารถรันตัวอย่างนี้ได้แล้ว หมายความว่าเราพอจะรู้ขั้นตอนของการใช้งาน deep learning บ้างแล้ว ในตอนต่อไป เราก็ควรจะต้องรู้หลักการสักหน่อย เพื่อให้สามารถทำการปรับปรุงโมเดลของเราได้ เพื่อเพิ่มประสิทธิภาพการของทำงาน หรือการเคลื่อนที่ของหุ่นให้ดียิ่งขึ้น

Deep Learning กับ nvidia jetson nano ตอนที่ 0

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

ผมไม่ค่อยได้เคยเขียนอะไรยาวๆสักเท่าไร แต่จะพยายามไล่เป็นขั้นเป็นตอนตามการเรียนรู้ เป็นการลองกลับมาหัดเขียนอีกครั้ง

คำถาม คือ ทำไมต้อง jetbot ทำไมต้อง nvidia jetson nano
– เพราะมันฮอต และมันง่าย เนื่องจากมีเครื่องมือ มีซอฟแวร์ มีไกด์ไลน์ ให้เราทำตามไปก่อน ทำให้เริ่มต้นได้ง่าย ตัวบอร์ดถึงแม้จะราคาสูงกว่า raspberry pi ไปพอสมควร แต่ผมว่าคุ้มนะ
– ตัว hardware อุปกรณ์ไม่เยอะ ประกอบง่าย บัดกรี ไม่กี่จุด ก็เล่นได้ละ

เพิ่มเติมอีกหน่อย
nvidia ไม่ได้มีเพียงแค่โปรเจ็ค jetbot เท่านั้น ยังมีโปรเจ็คอื่นๆ ซึ่งใช้ซอฟแวร์ ISAAC SDK เช่น Kaya robot ก็จะมีอุปกรณ์ที่ต้องประกอบมากขึ้น
หรือถ้าไม่ใช้ SDK จาก nvidia จะไปใช้ ROS ก็ได้ ก็จะมีโปรเจ็คอย่างเช่น racecar ซึ่งแตกย่อยไปอีกหลายโปรเจ็คจากหลากหลายนักพัฒนา มีรายละเอียดที่แตกต่างกันในเรื่องของการใช้ hardware บางตัว

คำถามต่อมา แล้วเกี่ยวอะไรกับ deep learning
– deep learning มันก็คือเรื่องของ AI กรณีศึกษาในเรื่องนี้มักเกี่ยวข้องกับ vision system เกี่ยวข้องกับภาพ เช่น รู้จำป้ายทะเบียน รู้จำสิ่งกีดขวาง การนำทาง ดังนั้น jetbot หุ่นที่มีล้อ และติดกล้อง มันจึงเป็นอะไรที่เหมาะมากในการเอามาเรียนรู้ แถมสนุกด้วย

เริ่มต้นยังงัย
– อย่างน้อย ก็ต้องมีความรู้ มีประสบการณ์ ทั้ง hardware และ software สักหน่อย ใครที่ไม่เคยประกอบหุ่นเล่นเลย ก็ไปหาชุดคิทประกอบหุ่นยนต์มาลองเล่นก่อน ลองดูที่ www.ioteshop.com ร้านของผมเองก็มี อิอิ ให้รู้จักส่วนประกอบต่างๆของตัวหุ่นยนต์ หลักการไฟฟ้า อิเล็กทรอนิกส์เบื้องต้น อาจจะต้องมีเครื่องมือสำหรับงานประกอบ งานบัดกรี ต่างๆ
– ส่วน software ก็ต้องรู้เรื่อง linux เคยใช้งานมาบ้าง อ่านภาษาอังกฤษพอได้ เพราะต้องไป download และอ่านข้อมูลจากเว็บของ nvidia ส่วนภาษาที่ใช้เขียน สำหรับ jetbot นี้เป็น python ก็มีพื้นฐานสักหน่อย ภาษาอื่นก็ได้แต่เข้าใจหลักการเขียนโปรแกรม ก็โอเค

Hardware
1. nvidia jetson nano
ตัวบอร์ด jetson nano จริงๆประกอบด้วย 2 ส่วน คือ core module ที่มี CPU กับส่วนที่เรียกว่า carrier board ก็เป็นบอร์ดขยาย ที่ทำให้เราสามารถต่ออุปกรณ์อื่นๆได้ผ่านทางพอร์ทต่างๆ รวมทั้งจ่ายไฟให้มันด้วย
การจ่ายไฟให้ jetson nano ทำได้สองทาง คือผ่านทาง micro USB port และ jack DC เป็น 5V ทั้งคู่ เลือกเอาอย่างใดอย่างหนึ่ง โดยการใช้ jumper
ความแตกต่างนั้น ตามความเข้าใจของผม USB port นั้นสามารถรับ-จ่ายกระแสได้น้อยกว่า อย่าง jetbot นี้ ตอนรันใช้ไฟจาก power bank ผ่าน USB port ระบบจะถูกกำหนดให้ทำงานในโหมดกินพลังงานต่ำ
ส่วน jack DC คงไม่มีปัญหานี้ จัดเต็มได้เลย บริโภคไฟกันได้สุดๆ ดังนั้น adapter ที่ใช้ ก็น่าจะเป็น 5V 4A ขึ้นไป ก็เผื่อคุณภาพและประสิทธิภาพการทำงานของตัว adapter ไว้ด้วย

2. ชุดคิท jetbot
ประกอบไปด้วย 3D printed โครงหุ่นและล้อ ส่วนที่เป็นอุปกรณ์อิเล็กทรอนิกส์ ก็มีเพียง มอเตอร์ บอร์ดขับมอเตอร์ featherwing และกล้อง raspberry pi camera แค่นั้นเอง อ้อแล้วก็ power bank อีกอย่างนึง

เรื่องการประกอบ ใน github ของ jetbot มีอธิบายไว้ชัดเจนพอสมควร ผมคงไม่เขียนถึง

ก็ไปเตรียมหุ่นกันไว้นะ แล้วในตอนหน้า มาเริ่มใช้งานกันดีกว่า