การเข้ารหัสหุ่นยนต์ VEX AI

บทความนี้จะครอบคลุมถึงโครงการตัวอย่างที่แสดงแดชบอร์ดที่รายงานสถานะสำหรับการสื่อสารระหว่างหุ่นยนต์กับหุ่นยนต์โดยใช้ 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:

โอเวอร์อันเดอร์.png

ข้อมูลตำแหน่งของหุ่นยนต์:

  • ตำแหน่ง X,Y ของหุ่นยนต์เป็นเมตรจากศูนย์กลางสนาม
  • ราบของหุ่นยนต์ (มุ่งหน้า) ยกระดับ (ขว้าง) หมุน (ม้วน) ทั้งหมดในเรเดียน

ข้อมูลการตรวจจับวัตถุ (สามประเภท):

พิกเซล (0,0).png

การตรวจจับภาพ (ประเภทที่หนึ่ง):
  • ข้อมูลนี้แสดงถึงวัตถุที่ตรวจพบโดยกล้อง VEX AI Intel
  • ข้อมูลนี้อธิบายวัตถุโดยอ้างอิงกับภาพของกล้อง
  • ค่าสำหรับ X, Y, ความกว้าง และความสูงอยู่ในหน่วยพิกเซล ค่าพิกเซลอ้างอิงถึงมุมซ้ายบนของกล่องการตรวจจับรูปภาพและวัตถุ ความละเอียดของภาพคือ 640x480

 

AI XY (1).png

การตรวจจับแผนที่ (ประเภทที่สอง):

  • ข้อมูลนี้แสดงถึงตำแหน่งของวัตถุบนสนามในระบบพิกัดเดียวกันกับเซ็นเซอร์ GPS ซึ่งรายงานเป็นหน่วยเมตร
  • แต่ละออบเจ็กต์ยังมีตำแหน่งของออบเจ็กต์ที่สัมพันธ์กับศูนย์กลางของฟิลด์ด้วย ค่าของ X และ Y อยู่ในหน่วยเมตรจากศูนย์กลางของสนามในแกนที่เกี่ยวข้อง ค่าของ Z คือเมตรจากไทล์สนาม (ความสูง)

วัตถุตรวจจับ (ประเภทที่สาม):

โครงสร้าง.PNG

  • ซึ่งจะสรุปข้อมูลทั้งหมดเกี่ยวกับวัตถุที่ตรวจพบ
  • แต่ละวัตถุมีค่าที่แสดงถึงการจัดประเภทของวัตถุที่ตรวจพบ (รหัสคลาส: 0 = กรีนไทรบอล, 1 = เรดไทรบอล, 2 = บลูไทรบอล)
  • แต่ละวัตถุยังมีความน่าจะเป็นที่แสดงถึงความมั่นใจของ VEX AI ในการตรวจจับ นี่คือหลังจากตัวกรองใน model.py ที่ลบการตรวจจับความน่าจะเป็นต่ำ
  • นอกจากนี้ ความลึกของวัตถุยังรายงานเป็นเมตรจากกล้อง VEX AI Intel
  • การตรวจจับภาพและการตรวจจับแผนที่จะแนบไปกับแต่ละวัตถุเพื่อแสดงพิกัดของวัตถุบนภาพและในโลกแห่งความเป็นจริง

รายละเอียดของโปรแกรม ai_demo:

Main.cpp

image5.png

มาตรฐานรวมถึงสำหรับโครงการ VEX:

image7.png

ประกาศอินสแตนซ์ของคลาส Jetson คลาสนี้ใช้เพื่อส่งคำขอข้อมูลไปยัง Jetson รวมถึงรับข้อมูลผ่านการเชื่อมต่อแบบอนุกรม USB

#กำหนด MANAGER_ROBOT 1

กำหนด_manager_robot_1.png

ประกาศอินสแตนซ์ของคลาส robot_link วัตถุนี้จะถูกใช้เพื่อเชื่อมต่อและถ่ายโอนข้อมูลระหว่างหุ่นยนต์ตัวนี้และหุ่นยนต์คู่หู โปรเจ็กต์เดียวกันนี้สามารถดาวน์โหลดไปยังโรบ็อตสองตัวที่แยกจากกัน หุ่นยนต์ตัวหนึ่งจะต้องมีเส้น:

//#กำหนด MANAGER_ROBOT 1

ก่อนที่คุณจะโหลดโค้ดลงบนโรบ็อตตัวที่สอง คุณจะต้องใส่เครื่องหมายความคิดเห็นในบรรทัดนั้น:

คลาส robot_link ตั้งค่า VEXlink ของหุ่นยนต์และจัดการการส่งและรับข้อมูลระหว่างหุ่นยนต์ทั้งสอง เราจะไม่ลงรายละเอียดในบทความนี้เกี่ยวกับวิธีการทำงานของชั้นเรียน เป็นความคิดที่ดีที่จะทำความเข้าใจวิธีการทำงานของ VEXlink ก่อน สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการใช้ V5 VEXlink API เอกสารนี้ อธิบายไลบรารีใหม่และวิธีการใช้งานอย่างมีประสิทธิภาพสำหรับการสื่อสารระหว่างหุ่นยนต์กับหุ่นยนต์

  • ผู้จัดการกิจกรรมการแข่งขัน

    firstAutoFlag.png

    ความแตกต่างที่ใหญ่ที่สุดประการหนึ่งระหว่าง VAIC และ VRC คือไม่มีช่วงควบคุมไดรเวอร์ แต่มีช่วงอิสระอยู่สองช่วง ได้แก่ ช่วงแยกและช่วงโต้ตอบ ในตัวอย่างนี้ มีกิจวัตรแยกกันสำหรับช่วงเวลาอิสระแต่ละช่วง เนื่องจาก VEX API ไม่รองรับการเรียกกลับที่แตกต่างกันสองครั้ง จึงต้องมีแฟล็กในโปรแกรมเพื่อกำหนดว่ารูทีนใดที่จะดำเนินการ ในโปรแกรมตัวอย่างนี้ "firstAutoFlag" ใช้เพื่อเรียกใช้ฟังก์ชัน Isolation ในครั้งแรกที่เปิดใช้งาน autonomous และฟังก์ชันโต้ตอบเมื่อ autonomous ถูกเปิดใช้งานเป็นครั้งที่สอง สิ่งหนึ่งที่ควรทราบก็คือ หากจำเป็นต้องรีเซ็ตการแข่งขันด้วยเหตุผลบางประการ โปรแกรมสาธิตจะต้องเริ่มต้นใหม่เพื่อให้สามารถรีเซ็ตการตั้งค่าสถานะอัตโนมัติครั้งแรกได้

  • หลัก()

    หลัก (1).PNG

    นี่คืองานหลักสำหรับโครงการนี้ เริ่มต้นด้วยการเรียก vexcodeInit() เพื่อตั้งค่าสภาพแวดล้อม VEXcode อย่างถูกต้อง ถัดไป จะมีการประกาศวัตถุ AI_RECORD ในเครื่องเพื่อจัดเก็บข้อมูลที่เราได้รับจาก Jetson มีการตั้งค่างานแยกต่างหากเพื่อจัดการการอัปเดตหน้าจอด้วยข้อมูลล่าสุด รหัสสำหรับงานนั้นอยู่ในไฟล์ Dashboard.cpp การโทรกลับอัตโนมัติยังถูกลงทะเบียนเพื่อจัดการเมื่อมีการเริ่มต้นช่วงเวลาอัตโนมัติ

    การวนซ้ำ while() หลักเริ่มต้นด้วยการคัดลอกข้อมูลล่าสุดจากออบเจ็กต์ jetson_comms ไปยังออบเจ็กต์ AI_RECORD ในเครื่องของเรา จากนั้นจะส่งข้อมูลตำแหน่งของหุ่นยนต์ไปยังออบเจ็กต์ลิงก์เพื่อให้สามารถส่งไปยังหุ่นยนต์คู่ของเราได้ เมื่อประมวลผลข้อมูลเสร็จแล้ว ก็จะขอข้อมูลเพิ่มเติมจาก Jetson และจะเข้าสู่โหมดสลีป 66 มิลลิวินาที อัตราการโพลสำหรับข้อมูลนี้คือ 15Hz ไม่มีเหตุผลที่จะสำรวจเร็วขึ้นเนื่องจากข้อมูลระบบ AI อัปเดตที่ประมาณ 15Hz

    หมายเหตุ: ข้อมูลแผนที่ Jetson จำเป็นต้องได้รับการร้องขอเพียงงานเดียวเท่านั้น

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: