บทความนี้จะกล่าวถึงโครงการตัวอย่างที่แสดงแดชบอร์ดที่รายงานสถานะสำหรับการสื่อสารระหว่างหุ่นยนต์กับหุ่นยนต์โดยใช้ VEXlink และสถานะไปยัง Jetson โปรเจ็กต์ ai_demo โฮสต์อยู่ใน Githubของเรา โปรเจ็กต์สาธิตนี้รวบรวมข้อมูลจากโปรเซสเซอร์ Jetson ผ่านการเชื่อมต่อแบบอนุกรม USB เมื่อได้รับข้อมูลแล้ว จะแสดงบนหน้าจอของ V5 Brain และส่งไปยังหุ่นยนต์ V5 ที่เป็นพันธมิตรที่เชื่อมต่อผ่าน VEXlink

โปรเจ็กต์นี้ต้องใช้ VEXcode Pro V5 เวอร์ชันล่าสุด (เวอร์ชัน 2.0.2 ขึ้นไป) ดาวน์โหลด VEXcode Pro V5 ที่นี่

VEXcode-Pro-V5-icon.png


Nvidia Jetson Nano ถึง VEX V5 Brain Communications

โปรเซสเซอร์ Jetson มีแอปพลิเคชันที่รวบรวมข้อมูลต่อไปนี้จากซอฟต์แวร์ VEX AI:

Screen_Shot_2021-02-05_at_3.30.04_PM.png

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

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

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

image4.png

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

image2.png

image6.png

ข้อมูลแผนที่ (ประเภทที่สอง):

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

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

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

        • Main.cpp

          image5.png

          มาตรฐานรวมถึงโครงการ VEX:

          image7.png

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

          #define MANAGER_ROBOT 1

          Define_manager_robot_1.png

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

          //#define MANAGER_ROBOT 1

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

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

  • ตัวจัดการเหตุการณ์การแข่งขัน

    firstAutoFlag.png

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

  • หลัก()

    image3.png

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

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

    หมายเหตุ: งานเดียวต้องขอข้อมูลแผนที่ Jetson

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