บันทึกการปฎิบัติงานประจำวัน โครงการ 2B-KMUTT รุ่นที่ 18 โดย นางสาว ณัชชา เงาประเสริฐวงศ์

day1 : brainstorming

เรียนรู้เกี่ยวกับ HCI พวกเราพยายามมองให้กว้างโดยมองภาพรวมว่า HCI ในปัจจุบันถูกนั้นไปประยุกค์ใช้ในส่วนไหนบ้าง ทําให้พวกเห็นเห็นภาพเเละเข้าใจ HCL มากขึ้น จากนั้นภายในกลุ่มก็ช่วยกันมองหาปัญหาที่น่าสนใจ คิดหาวิธีเเก้โดยใช้เเนวคิด HCI

day2 : process design and set up

เมื่อ final ไอเดียกันเรียบร้อยเเล้ว พวกเราเริ่มคิดขบวนการทํางานในส่วนต่างๆ ทั้ง software เเละ hardware โดยเขียนออกเป็น flow chart การทํางาน ซึ่งสําหรับงานนี้จะเเบ่งเป็นสาน part หลักๆ นั้นคือ walk recognition, camera control เเละ hard ware หนูได้รับหน้าที่ในส่วนของ camera control โดยเป้าหมายคือการ control การหมุนของ camera ให้ตรงกับการขยับศรีษะของ user ที่กําลัง operate ตัวหุ่นโดยใช้เเว่น VR oculus quest 2 เเละใช้โปรเเกรม unity ในการรับค่าเเละเขียนโปรเเกรมเเปลงค่านั้นเป็นคําสั่งให้ raspberry pi ที่จะสั่งให้ servo motor ที่กําลังคุมกล้องให้หมุน ผ่านทาง protocol MQTT วันนี้หนูได้ศึกษาเกี่ยวลักษณะการทํางานของ oculus quest 2, unity เเละ MQTT พร้อมกับการ setup program ที่มีส่วนเกี่ยวข้อง

day3 : programming, research and testing – Connecting oculus and unity

วันนี้หนูได้เรียนรู้เกี่ยวกับการเชื่อม Oculus quest 2 => Computer/Laptop => Unity เพื่อให้ภาพใน unity นั้นขึ้นไปเเสดงในเเว่น VR โปรเเกรมที่เป็นตัวเชื่อมทั้งสองเข้าด้วยกันคือ Steam VR บนโปรเเกรม Steam

day4 : programming, research and testing – Understand and test MQTT

หาข้อมูลเกี่ยวกับการเขียนโปรเเกรมเพื่อใช้ MQTT

MQTT คือ protocol ที่ใช้ในการส่งข้อความระหว่าง device กับ device นิยมใช้ในการทํา IOT ซึ่งมีข้อดีคือ ใช้ทรัพยากรน้อยเเต่มีประสิทธิภาพสูง, ปรับขนาดได้, น่าเชื่อถือ, ปลอดภัย เเละ มีการสนับสนุนที่ดี ข้อมูลนี้อ้างอิงมาจากเว็บ https://aws.amazon.com/th/what-is/mqtt/ ซึ่งสามารถเข้าไปอ่านเพิ่มเติมได้

ก่อนที่จะเขียนโปรเเกรม MQTT สิ่งที่สําคัญคือการเข้าใจวิธีทํางานเเละ keyword ในการอ่าน code MQTT

  1. Publisher : ผู้ส่งข้อความ
  2. Subscriber : ผู้รับข้อความ
  3. MQTT broker : Server ที่เชื่อมระหว่าง Publisher เเละ Subscriber
  4. Broker address : หมายเลขของ Server ที่ต้องการส่งผ่าน เป็นตัวกําหนดว่าจะส่งไป Server ไหน
  5. Port : เป็น port เฉพาะสําหรับการใช้ protocol MQTT นั้นคือ 1883 เเละ 8884
  6. Topic : หัวข้อของข้อความที่รับ

หนูใช้ Protocol นี้ใน Unity ได้โดยการใช้ Open source code จาก Github https://github.com/gpvigano/M2MqttUnity ซึ่งมีการเขียน code เเละ UI สําเร็จรูปไว้เรียบร้อยเเล้ว ทําให้สามารถนําไปปรับตามจุดประสงค์การใช้งานได้ง่ายเเละสะดวก สามารถกรอก Port เเละ Broker address ได้ที่ UI โดยตรงเเต่ในส่วนของ Topic ต้องเข้าไปเเก้ในตัว Code สามารถเข้าไปอ่านเเละทําความเข้าใรการทํางานของเเต่ละ function ได้ใน file index

นอกจากการได้เรียนรู้เกี่ยวกับ techniques การทํางานต่างๆ อย่างที่ได้เรียนรู้ที่หนูมองว่าเป็น soft skill ที่สําคัญมากๆ ในการเขียนโปรเเกรมคือการค้นหาข้อมูล เพราะการเขียนโปรเเกรมนั้นจําเป็นต้องเรียนรู้เเละทํางานกับเทคโนโลยีหรือระบบใหม่ๆ ตลอดเวลา การเรียนรู้ด้วยตนเองโดยการค้นหาข้อมูลจึงเป็นสิ่งสําคัญ เเละหนูมองว่าจริงๆเเล้วมันไม่ใช่เรื่องยากเลย เเค่ต้องทําให้ชินเเละจะจับทางได้เอง เเหล่งข้อมูลที่เข้าถึงได้ง่ายที่สุดคือคู่มือการใช้งานของ software นั้น

day 5 : programming, research and testing – Unity

หน้าที่ของ Unity ใน project นี้คือ

  1. รับค่าตําเเหน่งจาก HTC Vive เเละ Oculus quest 2 ส่งให้ board ESP32
  2. รับภาพจาก Webcam ที่เชื่อมอยู่กับ Raspberry pi เพื่อเข้ามา Display ใน Oculus quest2

วันนี้หนูทําใน part ที่ 1 โดยรับค่าตํ่าเเหน่งจาก HTC Vive tracker เเละนํามาประมวลผลเป็นคําสั่งเพื่อส่งให้ board ESP32

วิธีการทํางาน : การรับค่าเเละประมวลผล

เพราะจุดเริ่มต้นในการวัดค่านั้นเเตกต่างกันเเละมีค่าที่ไม่สมํ่าเสมอ ทําให้เราใช้ค่านั้นมาทําการประมวลผลเลยไม่ได้ สิ่งที่ต้องทําคือการสร้าง block เป็นจุดอ้างอิงในการทํางานโดยใช้ Parent and Child ให้ parent อ้างอิงจุดจริงๆของเรา ส่วน block child อ้างอิงจุดที่ผ่านการ calibrate เป็นจุด (0,0,0) เเล้ว โดยในการประมวลผลจะใช้ค่าพิกัดจาก Child เพราะค่าเริ่มต้นนั้นคงที่ทุกรอบของการทํางาน

day 6 : programming, research and testing – MQTT Setup Unity

จากเมื่อวานที่ทําการ calibrate ตําเเหน่ง วันนี้หนูได้ set up MQTT ในโปรเเกรม Unity เเละช่วยทําในส่วนของ walk recognition โดยอ้างอิงมากจากการสังเกตุการเดินของเพื่อนๆ โดย

  1. การเดินหน้าเดินหลัง อ้างอิงจากตําเเหน่งพิกัดเเกน X
  2. การเลี้ยวซ้ายขวา อ้างอิงจากตําเเหน่งพิกัดเเกน Z

day 7: programming, research and testing – MQTT Setup ESP32

วันนี้หนูได้ทําในส่วนของการเชื่อม MQTT กับ board ESP32 โดยเเบ่ง command เป็นสองชนิด

  1. Servo Motor จะส่งในรูปเเบบ M(ตามด้วยตัวอักษรเเรกของคําสั่ง) เช่น MF = เดินหน้า
  2. Stepper Motor จะส่งในรูปเเบบ S(ตามด้วยองศาที่ต้องการให้หมุนไป) เช่น S100 = หมุนกล้องไปตําเเหน่ง 100 องศา

จากนั้นก็ทําการเเยก case คําสั่งโดยใช้ string ตําเเหน่งที่ 0 เป็นตัวเเยก case เเละสั่งคําสั่งตามตําเเหน่งที่ 1 ถึง ตําเเหน่งสุดท้าย

ซึ่งพบกับปัญหา คือ โปรเเกรมรันเข้าเงื่อนไข if else ทั้งสองกรณี ซึ่งคาดว่าน่าจะมีสาเหตุอย่างอื่นเช่น การผิดพลาดในการเขียนโปรเเกรมเพราะ if else เข้าทั้งสองกรณีไม่มีทางเป็นไปได้

day 8: programming, research and testing – debug

วันนี้หนูได้พยายาม debug ปัญหาที่พบเมื่อวันที่ 8 หลังจากลองผิดลองถูกเเละเเก้โปรเเกรมหลายๆครั้ง ก็พบว่าจริงๆ โปรเเกรมไม่ได้เข้า if else ทั้งสองกรณีเเต่ไม่ได้ clear message ทําให้ message ที่ส่งนั้นต่อกันไปเรื่อยๆ ทําให้ตอน check case ซึ่งตรวจจากตําเเหน่งที่ 0 ค่าเลยเหมือนเดิมทุกรอบ

เมื่อทุกคนทําให้ส่วนของตัวเองเรียบร้อยเเล้วก็นําที่อย่างที่ทํามารวมเเบบเชื่อมต่อกัน ทําให้วันนี้ถือว่างานสําเร็จเป็นรูปเป็นร่างเเล้ว โดยสามารถควบควมกับหมุยของกล้องเเละการขับเคลื่อนของหุ่นยนต์ได้ผ่านทาง เเว่น Oculus quest 2 เเละ HTC Vive tracker เเต่ถึงอย่างไรก็ตามก็ยังพบปัญหาอยู่ คือ ระบบในการส่งข้อมูลของทั้งกล้องเเละ command มี delay มากทําให้การควบคุมนั้นยังไม่มีเสถียรภาพเเละประสิทธิภาพในการประยุกค์ใช้มากพอ ดังนั้นหนูมองว่าต้องปรับจูน frequency ในการส่ง data ของทั้งสองช่องทางให้เหมาะสม

day 9: programming, research and testing – Tuning

เเก้โปรเเกรมเพื่อลด delay โดยพบว่าการ delay มาจาก overload ของข้อมูล จึงเลือกส่งข้อมูลที่ไม่ซ้ำเท่านั้น ทําให้เกิด delay ลดลงจาก ~10 วินาที เหลือเพียง ~0.2 วินาที

ก่อนเเก้โปรเเกรม

หลังเเก้โปรเเกรม

day10 : summary and presentation

พวกเราได้ทําการสรุปผลการทํางานเเละเรียบเรียงข้อมูลเพื่อนําไป Present

ในการทํา Presentation ข้อมูลควรมีความครบท้วนเเละถูกต้อง อีกทั้งลําดับเเละวิธีการเล่าเรื่องราวยังเป็นสิ่งที่สําคัญไม่เเพ้กันเราควรคิดไว้เสมอว่าผู้ฟังไม่เคยรู้จักงานนี้มาก่อน

day11 : final presentation day

การนําเสนอเป็นไปได้ด้วยดี เเละได้ comment ที่น่าสนใจมากมาย สิ่งที่ควรปรับปรุงอยู่ที่วิธีการนําเสนอ Objectives เเละ Result เป็นสิ่งที่สําคัญเเละควรสอดคล้องกัน พวกเราพลาดเล็กน้อยในส่วนมี่นําเสนอปัญหาที่พบเเละวิธีทางเเก้ โดยไม่มีการเกริ่นนําปัญหาเเละจุดประสงค์ในการเเก้ก่อนทําให้กรรมการเห็นภาพไม่ชัด เเต่ยังดีที่ตอนตอบคําถามพวกเราได้มีโอกาสอธิบายให้ชัดเจนมากขึ้น

พวกเราได้รางวัล Outstanding Awards ซึ่งเป็นอะไรที่ทุกคนในทีมดีใจมากๆ

งานนี้หนูมองว่าเป็นหนึ่งในงานที่ท้าทายทั้งระยะเวลาที่น้อย,โจทย์ที่มีความใหม่ กับ อุปกรณ์ที่ไม่เคยใช้มากก่อน การทํางานในครั้งนี้หนูได้เรียนรู้อะไรหลายๆอย่างทั้งในด้าน Soft Skills เเละ Hard Skills อีกทั้งยังได้รู้จักเพื่อนๆที่มีความสนใจในด้านที่คล้ายๆกันอีกด้วย การทํางานวิจัยครั้งนี้เป็นประสบการณ์ที่มีค่ามากๆสําหรับหนูค่ะ