Surrogate Robot : Robot’s head control (Part 2)

Teng Suktipol Kiatthaveephong
2 min readJan 21, 2019

--

บทความนี้เป็นการอัพเดทความคืบหน้าครั้งที่ 2 เกี่ยวกับการควบคุมส่วนหัวของหุ่นยนต์ให้หมุนตาม VR headset ซึ่งการอัพเดทความคืบหน้าครั้งแรกจะอยู่ในลิงค์ด้านล่างครับ

ครั้งที่ 2 นี้จะอธิบายในส่วนของการรับค่าและส่งค่าสำหรับบอร์ด LattePanda โดยจะรับค่าด้วย TCP จากคอมพิวเตอร์ฝั่งผู้ใช้งานและส่งข้อมูลต่อไปยังบอร์ด Nucleo ด้วย วิธี Serial Communication ดังรูปที่ 1 ในกรอบสีน้ำเงิน ซึ่งการเขียนโปรแกรมในบอร์ด LattePanda จะใช้ภาษา C# ทั้งหมด เขียนด้วยโปรแกรม Visual Studio 2017

รูปที่ 1 : ภาพกรอบสีน้ำเงินแสดงส่วนการรับส่งค่าสำหรับบอร์ด LattePanda

การรับข้อมูลจากคอมพิวเตอร์ผ่าน TCP

TCP หรือ Transmission Control Protocol เป็นรูปแบบการส่งข้อมูลผ่านอินเทอร์เน็ตที่เป็นมาตรฐาน มีความรวดเร็วและปลอดภัยในการส่งข้อมูล สามารถมั่นใจได้ว่าข้อมูลที่ถูกส่งไปนั้นจะถึงผู้รับได้ครอบถ้วนและถูกต้องแน่นอน

เมื่อเราเปิดโปรแกรม Visual Studio ขึ้นมาให้เราตั้งชื่อ class และ namespace ให้เรียบร้อย และ import namespace ดังนี้

using System.Net.Sockets; //จัดดการเกี่ยวกับการเชื่อมต่อและส่งข้อมูลผ่านอินเทอร์เน็ต
using System.Text; //จัดการเกี่ยวกับการแปลงข้อมูลดิบให้กลายเป็นข้อความ
รูปที่ 2 : ภาพแสดงการทำงานหลักของบอร์ด LattePanda

รูปที่ 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

รูปที่ 3 : แอปพลิเคชันชื่อ TCP Server

ในรูปที่ 4 หน้าแรกของแอปพลิเคชันจะประกอบไปด้วยชื่อ SSID หรือชื่อเครือข่ายที่เราทำการเชื่อมต่ออยู่ ข้อดีคือแอปพลิเคชันนี้จะทำการหา IP Address ของเครื่องเราให้โดยอัตโนมัติ ซึ่งในโค้ดบอร์ด LattePanda ต้องตั้งค่าให้ตรงกับ IP นี้ ต่อไปให้เราระบุเลขพอร์ทที่เชื่อมต่อและกดปุ่ม CREATE

รูปที่ 4 : หน้าต่างหน้าแรกของแอปพลิเคชัน TCP Server

ในรูปที่ 5 หลังจากที่ server ถูกสร้างแล้ว เราจะสามารถพิมพ์ข้อความที่เราต้องการได้ในช่อง “Enter ASCII Command” และกดปุ่ม “Send ASCII” เพื่อส่งข้อมูลออกไป ก็จะสามารถสั่งงานเพื่อควบคุมมอเตอร์ Dynamixel จากบทความอัพเดทครั้งแรกได้เลย

รูปที่ 5 : หน้าต่างหลังจาก Server ถูกสร้างขึ้น

--

--