บทความนี้จะครอบคลุมถึงโครงการตัวอย่างที่แสดงแดชบอร์ดที่รายงานสถานะสำหรับการสื่อสารระหว่างหุ่นยนต์กับหุ่นยนต์โดยใช้ VEXlink และสถานะไปยัง Jetson ด้วย โปรเจ็กต์ ai_demo โฮสต์บน Githubของเรา โครงการสาธิตนี้รวบรวมข้อมูลจากโปรเซสเซอร์ Jetson ผ่านการเชื่อมต่อแบบอนุกรม USB เมื่อได้รับข้อมูลแล้ว ข้อมูลดังกล่าวจะแสดงบนหน้าจอของ V5 Brain และยังส่งข้อมูลไปยังหุ่นยนต์ V5 คู่หูที่เชื่อมต่อผ่าน VEXlink
หมายเหตุ: โปรเจ็กต์นี้ต้องการ VS Code Extension เวอร์ชันล่าสุดสำหรับ V5 ดาวน์โหลด VS Code Extension สำหรับ V5 ที่นี่
NVIDIA Jetson Nano ถึง VEX V5 การสื่อสารทางสมอง
โปรเซสเซอร์ Jetson มีแอปพลิเคชันที่รวบรวมข้อมูลต่อไปนี้จากซอฟต์แวร์ VEX AI:
ข้อมูลตำแหน่งของหุ่นยนต์:
- ตำแหน่ง X,Y ของหุ่นยนต์เป็นเมตรจากศูนย์กลางสนาม
- ราบของหุ่นยนต์ (มุ่งหน้า) ยกระดับ (ขว้าง) หมุน (ม้วน) ทั้งหมดในเรเดียน
ข้อมูลการตรวจจับวัตถุ (สามประเภท):
- ข้อมูลนี้แสดงถึงวัตถุที่ตรวจพบโดยกล้อง VEX AI Intel
- ข้อมูลนี้อธิบายวัตถุโดยอ้างอิงกับภาพของกล้อง
- ค่าสำหรับ X, Y, ความกว้าง และความสูงอยู่ในหน่วยพิกเซล ค่าพิกเซลอ้างอิงถึงมุมซ้ายบนของกล่องการตรวจจับรูปภาพและวัตถุ ความละเอียดของภาพคือ 640x480
การตรวจจับแผนที่ (ประเภทที่สอง):
- ข้อมูลนี้แสดงถึงตำแหน่งของวัตถุบนสนามในระบบพิกัดเดียวกันกับเซ็นเซอร์ GPS ซึ่งรายงานเป็นหน่วยเมตร
- แต่ละออบเจ็กต์ยังมีตำแหน่งของออบเจ็กต์ที่สัมพันธ์กับศูนย์กลางของฟิลด์ด้วย ค่าของ X และ Y อยู่ในหน่วยเมตรจากศูนย์กลางของสนามในแกนที่เกี่ยวข้อง ค่าของ Z คือเมตรจากไทล์สนาม (ความสูง)
วัตถุตรวจจับ (ประเภทที่สาม):
- ซึ่งจะสรุปข้อมูลทั้งหมดเกี่ยวกับวัตถุที่ตรวจพบ
- แต่ละวัตถุมีค่าที่แสดงถึงการจัดประเภทของวัตถุที่ตรวจพบ (รหัสคลาส: 0 = กรีนไทรบอล, 1 = เรดไทรบอล, 2 = บลูไทรบอล)
- แต่ละวัตถุยังมีความน่าจะเป็นที่แสดงถึงความมั่นใจของ VEX AI ในการตรวจจับ นี่คือหลังจากตัวกรองใน model.py ที่ลบการตรวจจับความน่าจะเป็นต่ำ
- นอกจากนี้ ความลึกของวัตถุยังรายงานเป็นเมตรจากกล้อง VEX AI Intel
- การตรวจจับภาพและการตรวจจับแผนที่จะแนบไปกับแต่ละวัตถุเพื่อแสดงพิกัดของวัตถุบนภาพและในโลกแห่งความเป็นจริง
รายละเอียดของโปรแกรม ai_demo:
Main.cpp
มาตรฐานรวมถึงสำหรับโครงการ VEX:
ประกาศอินสแตนซ์ของคลาส Jetson คลาสนี้ใช้เพื่อส่งคำขอข้อมูลไปยัง Jetson รวมถึงรับข้อมูลผ่านการเชื่อมต่อแบบอนุกรม USB
#กำหนด MANAGER_ROBOT 1
ประกาศอินสแตนซ์ของคลาส robot_link วัตถุนี้จะถูกใช้เพื่อเชื่อมต่อและถ่ายโอนข้อมูลระหว่างหุ่นยนต์ตัวนี้และหุ่นยนต์คู่หู โปรเจ็กต์เดียวกันนี้สามารถดาวน์โหลดไปยังโรบ็อตสองตัวที่แยกจากกัน หุ่นยนต์ตัวหนึ่งจะต้องมีเส้น:
//#กำหนด MANAGER_ROBOT 1
ก่อนที่คุณจะโหลดโค้ดลงบนโรบ็อตตัวที่สอง คุณจะต้องใส่เครื่องหมายความคิดเห็นในบรรทัดนั้น:
คลาส robot_link ตั้งค่า VEXlink ของหุ่นยนต์และจัดการการส่งและรับข้อมูลระหว่างหุ่นยนต์ทั้งสอง เราจะไม่ลงรายละเอียดในบทความนี้เกี่ยวกับวิธีการทำงานของชั้นเรียน เป็นความคิดที่ดีที่จะทำความเข้าใจวิธีการทำงานของ VEXlink ก่อน สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการใช้ V5 VEXlink API เอกสารนี้ อธิบายไลบรารีใหม่และวิธีการใช้งานอย่างมีประสิทธิภาพสำหรับการสื่อสารระหว่างหุ่นยนต์กับหุ่นยนต์
-
ผู้จัดการกิจกรรมการแข่งขัน
ความแตกต่างที่ใหญ่ที่สุดประการหนึ่งระหว่าง VAIC และ VRC คือไม่มีช่วงควบคุมไดรเวอร์ แต่มีช่วงอิสระอยู่สองช่วง ได้แก่ ช่วงแยกและช่วงโต้ตอบ ในตัวอย่างนี้ มีกิจวัตรแยกกันสำหรับช่วงเวลาอิสระแต่ละช่วง เนื่องจาก VEX API ไม่รองรับการเรียกกลับที่แตกต่างกันสองครั้ง จึงต้องมีแฟล็กในโปรแกรมเพื่อกำหนดว่ารูทีนใดที่จะดำเนินการ ในโปรแกรมตัวอย่างนี้ "firstAutoFlag" ใช้เพื่อเรียกใช้ฟังก์ชัน Isolation ในครั้งแรกที่เปิดใช้งาน autonomous และฟังก์ชันโต้ตอบเมื่อ autonomous ถูกเปิดใช้งานเป็นครั้งที่สอง สิ่งหนึ่งที่ควรทราบก็คือ หากจำเป็นต้องรีเซ็ตการแข่งขันด้วยเหตุผลบางประการ โปรแกรมสาธิตจะต้องเริ่มต้นใหม่เพื่อให้สามารถรีเซ็ตการตั้งค่าสถานะอัตโนมัติครั้งแรกได้
-
หลัก()
นี่คืองานหลักสำหรับโครงการนี้ เริ่มต้นด้วยการเรียก vexcodeInit() เพื่อตั้งค่าสภาพแวดล้อม VEXcode อย่างถูกต้อง ถัดไป จะมีการประกาศวัตถุ AI_RECORD ในเครื่องเพื่อจัดเก็บข้อมูลที่เราได้รับจาก Jetson มีการตั้งค่างานแยกต่างหากเพื่อจัดการการอัปเดตหน้าจอด้วยข้อมูลล่าสุด รหัสสำหรับงานนั้นอยู่ในไฟล์ Dashboard.cpp การโทรกลับอัตโนมัติยังถูกลงทะเบียนเพื่อจัดการเมื่อมีการเริ่มต้นช่วงเวลาอัตโนมัติ
การวนซ้ำ while() หลักเริ่มต้นด้วยการคัดลอกข้อมูลล่าสุดจากออบเจ็กต์ jetson_comms ไปยังออบเจ็กต์ AI_RECORD ในเครื่องของเรา จากนั้นจะส่งข้อมูลตำแหน่งของหุ่นยนต์ไปยังออบเจ็กต์ลิงก์เพื่อให้สามารถส่งไปยังหุ่นยนต์คู่ของเราได้ เมื่อประมวลผลข้อมูลเสร็จแล้ว ก็จะขอข้อมูลเพิ่มเติมจาก Jetson และจะเข้าสู่โหมดสลีป 66 มิลลิวินาที อัตราการโพลสำหรับข้อมูลนี้คือ 15Hz ไม่มีเหตุผลที่จะสำรวจเร็วขึ้นเนื่องจากข้อมูลระบบ AI อัปเดตที่ประมาณ 15Hz
หมายเหตุ: ข้อมูลแผนที่ Jetson จำเป็นต้องได้รับการร้องขอเพียงงานเดียวเท่านั้น