การควบคุมขั้นตอนการทำงานของระบบ FOBI
การควบคุมการทำงานนั้นก็เป็นส่วนที่สำคัญที่ทำให้แต่ละส่วนของระบบทำงานร่วมกันได้อย่างมีประสิทธิภาพ โดยการจะทำให้ก็ทำงานนั้นมีประสิทธิภาพมากแค่ไหนก็ขึ้นอยู่กับการเรียงลำดับการทำงานของแต่ละส่วนใหห้เป็นลำดับอย่างถูกต้อง ดังนั้นเราจึงใช้เทคโนโลยีของ Node-RED เข้าช่วยในการทำเป็น่วนของแต่ละโมดูล เพื่อให้มองง่ายสำหรับการออกแบบและการเชื่อมโยงของแต่ละโมดูล นอกจากนั้นยังทำให้การเรียงลำดับการทำงานของแต่ละส่วนนั้นมองง่ายว่า ส่วนไหนจะทำก่อน ส่วนไหนต่อไป และส่วนไหนทำทีหลัง เช่น จะต้องมีการมองเห็นจาก โมดูลการมอง (Looking Module) และจึงจะสามารถให้ โมดูลการฟัง (Listening Module) ทำงานต่อได้เมื่อมีการมองเห็นผู้ใช้งาน ทำให้แก้ไขงานได้ง่ายและรวดเร็วและยังลดโอกาสในการทำงานผิดพลาดของระบบ เพราะผู้ผัฒนาสามารถมองเห็นการเชื่อมต่อแบบได้ชัดเจนดังรูปภาพส่วนของการสร้างลำดับการทำงานตามภาพ Brain
- Brain
- motor
- ALL_INIT
- Listening
Node-red
วิธีการติดตั้ง Node-red
ก่อนอื่นต้องทำการติดตั้ง NodeJS ก่อน โดยการพิมพ์คำสั่ง
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt install nodejs
เมื่อติดตั้งเสร็จ ตรวจสอบเวอร์ชัน
node -v
npm -v
ต่อมาใช้คำสั่งในการติดตั้ง Node-red ใช้คำสั่ง
npm install -g --unsafe-perm node-red
การใช้งาน Node-red
เมื่อติดตั้งเสร็จสามารถ Run Node-red
node-red demo
แล้วลองเบิด browser ดู โดยใช้ Localhost:1880

ลองสร้าง subflow
สำหรับ subflow นั้นจะเป็น flow ย่อยที่รับอินพุตได้ 1 อินพุต แต่สามารถมีได้หลายเอาท์พุท เพื่อที่เราจะรับค่าเข้ามา 1 อินพุท เพื่อ นำมาตัดสินใจข้างใน subflow ว่าจะเป็น output อะไรในลำดับถัดไป

สร้าง brain state เมื่อสร้าง subflow เสร็จและจัดการทำงานใน subflow จนถูกต้องแล้ว เราก็จะทำเอา subflow พวกนั้นมาใช้งาน โดยจะเรียงลำดับการทำงานของ brain ตามที่เราได้ออกแบบไว้ ได้ดังนี้
Brain
เมื่อเรามี subflow ที่เราสร้างและทำการกำหนดการทำงานของแต่ละ subflow เสร็จแล้ว ก็จะนำมาสร้างเป็น diagram และเชื่อมโยงเรียงลำดับขั้นตอนการทำงานในส่วนของ brain เพื่อมให้ brain module ที่เป็น module ควบคุมเป็นตัวควบคุมการทำงาน และตัดสินใจในการทำงานในแต่ละ subflow เพื่อให้การทำงานเป็นไปตามลำดับขั้นตอน

แล้วลองสร้าง Module ต่างๆ
ส่วนของ Module ที่สร้างขึ้นที่ไม่ใช่ subflow นั้นมีไว้เพื่อควบคุมการทำงานของแต่ละส่วนเพื่อให้การทำงานเป็นอิสระต่อกันแล้วค่อยถูกควบคุมการทำงานอีกทีจาก brain module
Motor Module ก็จะทำเหมือนกันกับ brain โดยการนำเอาการทำงานที่ได้ออกแบบไว้ มาเขียนเป็นการทำงานใน Node-red
Motor
ส่วนของ Motors Module ถูกสร้างขึ้นเพื่อกำหนดการทำงานของมอเตอร์โดยเฉพาะ จากถาพด้านล่างแสดงให้เห็นถึงการทำงาน
เมื่อมีการรับค่าจาก MQTT node ได้รับค่าที่ส่งมาจาก backend ที่ควบคุมการทำงานส่วนของการมองเห็น ว่ามีคนหรือไม่ ถ้ามีอยู่ทางซ้ายหรือขวาก็จะส่งมาทางแกน x ด้านบนกับด้านล่าวจะส่งมายังแกน y แล้วเข้าไปยังเงื่อนไขว่าควรจะหมุนไปทางไหน และเมื่อหมุนไปจนตำแหน่งที่ไดรับมาอยู่จุดศูนย์กลางก็จะหยุดการทำงาน โดยการทำงานในการหมุน จะถูงส่งผ่าน MQTT กลับไปยัง backend ที่ควบคุมมอเตอร์อยู่

Listening
เป็น Module ที่ใช้ในการฟัง การทำงานของ Module นี้จะทำงานเมื่อได้รับข้อความที่ได้รับการแปลงมาจากไฟล์เสียงแล้ว เพื่อที่จะนำข้อความมาแยกให้เป็นคำ เมื่อมีคพูดที่ตรงกับเงื่อนไขก็ให้ทำตามเงื่อนไขนั้น เช่น เปิดไฟสีแดง keyword ก็จะมีคำว่าเปิดไฟและสีแดง ทำให้สรุปคำสั่งได้ว่าให้เปิดไฟที่มีสีแดง

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