Surrogate Robot : Robot’s head control (Part 2)
บทความนี้เป็นการอัพเดทความคืบหน้าครั้งที่ 2 เกี่ยวกับการควบคุมส่วนหัวของหุ่นยนต์ให้หมุนตาม VR headset ซึ่งการอัพเดทความคืบหน้าครั้งแรกจะอยู่ในลิงค์ด้านล่างครับ
ครั้งที่ 2 นี้จะอธิบายในส่วนของการรับค่าและส่งค่าสำหรับบอร์ด LattePanda โดยจะรับค่าด้วย TCP จากคอมพิวเตอร์ฝั่งผู้ใช้งานและส่งข้อมูลต่อไปยังบอร์ด Nucleo ด้วย วิธี Serial Communication ดังรูปที่ 1 ในกรอบสีน้ำเงิน ซึ่งการเขียนโปรแกรมในบอร์ด LattePanda จะใช้ภาษา C# ทั้งหมด เขียนด้วยโปรแกรม Visual Studio 2017
การรับข้อมูลจากคอมพิวเตอร์ผ่าน TCP
TCP หรือ Transmission Control Protocol เป็นรูปแบบการส่งข้อมูลผ่านอินเทอร์เน็ตที่เป็นมาตรฐาน มีความรวดเร็วและปลอดภัยในการส่งข้อมูล สามารถมั่นใจได้ว่าข้อมูลที่ถูกส่งไปนั้นจะถึงผู้รับได้ครอบถ้วนและถูกต้องแน่นอน
เมื่อเราเปิดโปรแกรม Visual Studio ขึ้นมาให้เราตั้งชื่อ class และ namespace ให้เรียบร้อย และ import namespace ดังนี้
using System.Net.Sockets; //จัดดการเกี่ยวกับการเชื่อมต่อและส่งข้อมูลผ่านอินเทอร์เน็ต
using System.Text; //จัดการเกี่ยวกับการแปลงข้อมูลดิบให้กลายเป็นข้อความ
รูปที่ 2 เป็นฟังก์ชันหลักในการรับและส่งข้อมูลของบอร์ด LattePanda มีการทำงานอย่างคร่าวๆ ดังนี้
บรรทัดที่ 18 : ถ้าเกิดข้อผิดพลาดใดๆ ในปีกกาของคีย์เวิร์ด try ระบบจะไปทำงานในคีย์เวิร์ด catch ทันที ซึ่งเป็นการบอก “Socket execption” นั่นเอง
บรรทัดที่ 22 : สร้างออปเจ็คจากคลาส TcpClient โดยให้ Client ตัวนี้เชื่อมต่อกับคอมพิวเตอร์ IP ที่ 10.61.152.78 บนพอร์ท 8052
บรรทัดที่ 26 : สร้าง NetworkStream ขึ้นมา เมื่อ server และ client เชื่อมต่อกัน จะทำงานในบรรทัดที่ 28-38
บรรทัดที่ 29–35 : ข้อมูลที่ถูกรับเข้ามาในรูปแบบ bytes จะถูกแปลงให้เป็นรูปแบบตัวอักษร string และเก็บไว้ในตัวแปร serverMessage สุดท้ายเราก็จะนำข้อความนี้ส่งต่อไปยังบอร์ด Nucleo ผ่าน Serial Communication ต่อไป
การส่งข้อมูลจาก LattePanda ผ่าน Serial Port
หลังจากที่เราได้ข้อความ serverMessage มาจากคอมพิวเตอร์เรียบร้อยแล้ว เราต้องการจะส่งข้อความนี้ไปยังบอร์ด Nucleo ผ่าน serial port โดยก่อนอื่นต้องทำการ import namespace using System.IO.ports;
และสิ่งที่ต้องทำต่อไปมีดังนี้(ดูในรูปที่ 2 ได้เหมือนเดิม)
บรรทัดที่ 17 : ทำการสร้างช่องทางการเชื่อมต่อ Serial Port เป็น port ของบอร์ด Nucleo ในที่นี้คือ “COM4” ความเร็วในการสื่อสารอยู่ที่ 115200 bps (ต้องตั้งค่าให้ตรงกับบอร์ด Nucleo ด้วย)
บรรทัดที่ 38 : ทำการส่งข้อมูลไปยังบอร์ด Nucleo โดยข้อมูลที่ส่งคือ serverMessage ที่เรารับมาจากคอมพิวเตอร์ฝั่งผู้ใช้งาน
การทดสอบระบบ
การทดสอบระบบนี้ จะรวมบทความการอัพเดทครั้งแรกและครั้งที่ 2 นี้เข้าด้วยกัน ซึ่งก่อนที่เราจะส่งข้อมูลไปให้ LattePanda ที่ทำหน้าที่เป็น client เราต้องมี server ก่อน ผู้วิจัยจะใช้แอปพลิเคชันในมือถือชื่อ “TCP Server” ดังรูปที่ 3 เพื่อสร้าง server ขึ้นมาเพื่อส่งข้อมูลไปที่ client
ในรูปที่ 4 หน้าแรกของแอปพลิเคชันจะประกอบไปด้วยชื่อ SSID หรือชื่อเครือข่ายที่เราทำการเชื่อมต่ออยู่ ข้อดีคือแอปพลิเคชันนี้จะทำการหา IP Address ของเครื่องเราให้โดยอัตโนมัติ ซึ่งในโค้ดบอร์ด LattePanda ต้องตั้งค่าให้ตรงกับ IP นี้ ต่อไปให้เราระบุเลขพอร์ทที่เชื่อมต่อและกดปุ่ม CREATE
ในรูปที่ 5 หลังจากที่ server ถูกสร้างแล้ว เราจะสามารถพิมพ์ข้อความที่เราต้องการได้ในช่อง “Enter ASCII Command” และกดปุ่ม “Send ASCII” เพื่อส่งข้อมูลออกไป ก็จะสามารถสั่งงานเพื่อควบคุมมอเตอร์ Dynamixel จากบทความอัพเดทครั้งแรกได้เลย