Sensor Penglihatan AI#

Perkenalan#

Kelas aivision digunakan untuk mengontrol dan mengakses data dari Sensor Visi AI V5. Sensor Visi AI dapat mendeteksi:

  • Klasifikasi AI (seperti objek game)

  • ID AprilTag

  • Tanda Tangan Warna Kustom

  • Kode Warna Kustom

Ini menyediakan data objek termasuk posisi, ukuran, orientasi, ID klasifikasi, dan skor kepercayaan.

Sensor memproses informasi visual menggunakan model AI onboard yang dipilih di AI Vision Utility dalam VEXcode. Model yang dipilih menentukan Klasifikasi AI mana yang dapat dideteksi oleh sensor. Saat menggunakan VS Code, model AI harus dikonfigurasi terlebih dahulu di VEXcode sebelum dapat digunakan dalam program Anda. Objek yang terdeteksi dikembalikan melalui array objects setelah takeSnapshot dipanggil.

Konstruktor Kelas#

aivision(
  int32_t index,
  Args&... sigs );

Parameter#

Parameter

Jenis

Keterangan

index

int32_t

Port Pintar yang terhubung ke Sensor Penglihatan AI, ditulis sebagai PORTx, di mana x adalah nomor port (misalnya, PORT1).

sigs

colordesc, codedesc, or AI constants

Satu atau lebih tipe deteksi untuk didaftarkan ke sensor:

  • aivision::ALL_AIOBJS — Semua Klasifikasi AI
  • aivision::ALL_TAGS — Semua ID AprilTag
  • aivision::colordesc — Tanda Tangan Warna Kustom
  • aivision::codedesc — Kode Warna Kustom

Model dan Klasifikasi AI#

Sensor Penglihatan AI dapat mendeteksi berbagai objek dengan Klasifikasi AI tertentu. Bergantung pada model Klasifikasi AI yang dipilih saat mengkonfigurasi Sensor Penglihatan AI di jendela Perangkat, objek yang berbeda dapat dideteksi. Model yang tersedia saat ini adalah:

Elemen-Elemen Kelas

Nomor ID

Klasifikasi AI

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

Kompetisi Robotika VEX V5 dengan Taruhan Tinggi

Nomor ID

Klasifikasi AI

0

mobileGoal

1

redRing

2

blueRing

Kompetisi Robotika VEX V5 Dorong Mundur

Nomor ID

Klasifikasi AI

0

blueBlock

1

redBlock

Penggantian Kompetisi Robotika VEX V5

Nomor ID

Klasifikasi AI

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Contoh#

// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT11,                  // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

Fungsi Keanggotaan#

Kelas aivision mencakup fungsi anggota berikut:

  • takeSnapshot — Mengambil data untuk Tanda Warna, Kode Warna, grup Klasifikasi AI, atau grup ID AprilTag tertentu.

  • installed — Mengembalikan apakah Sensor Visi AI terhubung ke Otak V5.

Untuk mengakses data objek yang terdeteksi setelah memanggil takeSnapshot, gunakan Properti yang tersedia.

Sebelum memanggil fungsi anggota aivision apa pun, sebuah instance aivision harus dibuat, seperti yang ditunjukkan di bawah ini:

/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT1,                   // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

takeSnapshot#

Mengambil gambar dari Sensor Penglihatan AI, memprosesnya menggunakan model AI yang dipilih atau tanda warna yang dikonfigurasi, dan memperbarui larik objects.

Setiap panggilan memperbarui array objects dengan hasil deteksi terbaru. Objek diurutkan dari terbesar ke terkecil (berdasarkan lebar), dimulai dari indeks 0Jika tidak ada objek yang terdeteksi objectCount akan menjadi 0 dan objects[i].exists akan menjadi false.

1 — Mengambil cuplikan menggunakan ID objek dan tipe objek.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — Mengambil cuplikan menggunakan Tanda Tangan Warna.

int32_t takeSnapshot(
  const colordesc &desc,
  int32_t count = 8 );

3 — Mengambil cuplikan menggunakan Kode Warna.

int32_t takeSnapshot(
  const codedesc &desc,
  int32_t count = 8 );

4 — Mengambil cuplikan menggunakan ID AprilTag.

int32_t takeSnapshot(
  const tagdesc &desc,
  int32_t count = 8 );

5 — Mengambil cuplikan menggunakan Klasifikasi AI.

int32_t takeSnapshot(
  const aiobjdesc &desc,
  int32_t count = 8 );

6 — Mengambil snapshot menggunakan Deskriptor Objek.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

Parameter

Jenis

Keterangan

id

uint32_t

Pengidentifikasi objek yang akan dideteksi saat menggunakan fungsi (id, type, count) Artinya tergantung pada type:

  • colorObject — Indeks Deskriptor Warna (1–7)
  • codeObject — Indeks Kode Warna (1–8)
  • modelObject — ID Klasifikasi AI
  • tagObject — ID AprilTag (0–36)

Catatan: Di VEXcode, nama Klasifikasi AI (seperti blueBall) dapat digunakan secara langsung. Di VS Code, ID numerik harus digunakan.

type

objectType

Menentukan kategori objek yang terkait dengan id id:

  • objectType::tagObject — Mendeteksi ID AprilTag
  • objectType::colorObject — Mendeteksi Tanda Warna
  • objectType::codeObject — Mendeteksi Kode Warna
  • objectType::modelObject — Mendeteksi Klasifikasi AI
  • objectType::allObject — Mendeteksi semua yang dapat dikenali sensor

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Deskriptor yang digunakan untuk mendeteksi objek tertentu. Diteruskan langsung ke takeSnapshot, misalnya:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Konstanta deskriptor yang telah ditentukan sebelumnya:
  • aivision::ALL_TAGS — Mendeteksi semua ID AprilTag
  • aivision::ALL_COLORS — Mendeteksi semua Tanda Tangan Warna yang dikonfigurasi
  • aivision::ALL_CODES — Mendeteksi semua Kode Warna yang dikonfigurasi
  • aivision::ALL_AIOBJS — Mendeteksi semua Klasifikasi AI
  • aivision::ALL_OBJECTS — Mendeteksi semua yang dapat dikenali oleh sensor

count

uint32_t / int32_t

Jumlah maksimum objek yang disimpan dari snapshot. Nilai default adalah 8.

Nilai Pengembalian

Mengembalikan nilai int32_t yang mewakili jumlah objek yang terdeteksi yang sesuai dengan tanda tangan atau tipe deteksi yang ditentukan.

Catatan

  • Sensor Penglihatan AI harus mengambil gambar terlebih dahulu sebelum data objek dapat diakses.

  • Array objects diperbarui pada setiap panggilan.

  • Saat nilai count ditentukan, hanya objek terbesar yang terdeteksi (hingga jumlah yang ditentukan) yang akan disimpan.

Klasifikasi AI bergantung pada model yang dipilih di AI Vision Utility di VEXcode.

Contoh

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

installed#

Mengembalikan nilai yang menunjukkan apakah Sensor Penglihatan AI terhubung ke V5 Brain.

Fungsi yang Tersedia

bool installed();

Parameter

Fungsi ini tidak memerlukan parameter apa pun.

Nilai Pengembalian

Mengembalikan nilai Boolean yang menunjukkan apakah Sensor Penglihatan AI terhubung atau tidak:

  • true — Sensor Penglihatan AI terhubung.

  • false — Sensor Penglihatan AI tidak terhubung.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

Properti#

Memanggil takeSnapshot memperbarui hasil deteksi Sensor Visi AI. Setiap snapshot menyegarkan array objects , yang berisi objek yang terdeteksi untuk Klasifikasi AI, Tanda Warna, Kode Warna, atau ID AprilTag yang diminta.

Data AI Vision diakses melalui properti objek yang disimpan di AIVisionSensor.objects[index], di mana index dimulai pada 0.

Benda-benda diurutkan dari yang terbesar hingga terkecil (berdasarkan luas).

Resolusi gambar Sensor Visi AI adalah × 240. Nilai posisi dan ukuran objek dilaporkan dalam satuan piksel relatif terhadap tampilan sensor saat ini.

Properti berikut tersedia:

  • objectCount — Mengembalikan jumlah objek yang terdeteksi dari snapshot terbaru.

  • largestObject — Memilih objek terbesar yang terdeteksi dari snapshot terbaru.

  • objects — Array berisi objek yang terdeteksi diperbarui oleh takeSnapshot.

  • .exists — Apakah entri objek berisi data yang valid.

  • .width — Lebar objek yang terdeteksi dalam piksel.

  • .height — Tinggi objek yang terdeteksi dalam piksel.

  • .centerX — Posisi X dari pusat objek dalam piksel.

  • .centerY — Posisi Y dari pusat objek dalam piksel.

  • .originX — Posisi X dari sudut kiri atas objek dalam piksel.

  • .originY — Posisi Y dari sudut kiri atas objek dalam piksel.

  • .angle — Orientasi Kode Warna atau ID AprilTag dalam derajat.

  • .id — ID Klasifikasi atau ID AprilTag.

  • .score — Skor kepercayaan untuk Klasifikasi AI.

objectCount#

objectCount mengembalikan jumlah item di dalam array objects sebagai bilangan bulat.

Syntax
AIVisionSensor.objectCount

Components

Komponen

Keterangan

AIVisionSensor

Nama instance AI Vision Sensor Anda.

Contoh

// Display the number of detected objects
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.objectCount);
  }
  wait(50, msec);
}

largestObject#

largestObject mengambil objek terbesar yang terdeteksi dari array objects.

Metode ini dapat digunakan untuk selalu mendapatkan objek terbesar dari objects tanpa menentukan indeks.

Syntax
AIVisionSensor.largestObject

Components

Komponen

Keterangan

AIVisionSensor

Nama instance AI Vision Sensor Anda.

Contoh

// Display the closest AprilTag ID
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.largestObject.id);
  }
  wait(50, msec);
}

objects#

objects mengembalikan array properti objek yang terdeteksi. Gunakan array untuk mengakses nilai properti spesifik dari masing-masing objek.

Terdapat sepuluh properti yang disertakan dengan setiap objek yang disimpan dalam array objects setelah takeSnapshot digunakan.

Semua nilai properti kecuali id dan score menjelaskan posisi dan ukuran objek yang terdeteksi dalam tampilan Sensor Visi AI pada saat takeSnapshot digunakan. Nilai-nilai ini diukur dalam piksel, berdasarkan resolusi sensor 320 x 240 piksel.

Syntax
AIVisionSensor.objects[index].property

Components

Komponen

Keterangan

AIVisionSensor

Nama instance AI Vision Sensor Anda.

index

Indeks objek dalam larik. Indeks dimulai dari 0.

property

Salah satu properti objek yang tersedia.

.ada#

.exists mengembalikan nilai boolean yang menunjukkan apakah indeks objek yang ditentukan berisi objek yang terdeteksi dan valid.

Akses

SensorName.objects[index].exists

Nilai Pengembalian

Mengembalikan nilai Boolean yang menunjukkan apakah indeks objek yang ditentukan berisi objek yang terdeteksi dan valid:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

Contoh

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

.lebar#

.width mengembalikan lebar objek yang terdeteksi.

Akses

SensorName.objects[index].width

Nilai Pengembalian

Mengembalikan nilai int16_t yang mewakili lebar objek yang terdeteksi dalam piksel. Nilainya berkisar dari 1 hingga 320.

Contoh

// Approach an object until it's at least 100 pixels wide
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].width < 100) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.tinggi#

.height mengembalikan tinggi objek yang terdeteksi.

Akses

SensorName.objects[index].height

Nilai Pengembalian

Mengembalikan nilai int16_t yang mewakili tinggi objek yang terdeteksi dalam piksel. Nilainya berkisar dari 1 hingga 240.

Contoh

// Approach an object until it's at least 90 pixels tall
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].height < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.centerX#

.centerX mengembalikan koordinat x dari pusat objek yang terdeteksi.

Akses

SensorName.objects[index].centerX

Nilai Pengembalian

Mengembalikan nilai int16_t yang mewakili koordinat x dari pusat objek dalam piksel. Nilainya berkisar dari 0 hingga 320.

Contoh

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(10, msec);
}

.centerY#

.centerY mengembalikan koordinat y dari pusat objek yang terdeteksi.

Akses

SensorName.objects[index].centerY

Nilai Pengembalian

Mengembalikan nilai int16_t yang mewakili koordinat y dari pusat objek dalam piksel. Nilainya berkisar dari 0 hingga 240.

Contoh

// Approach an object until it's close to the sensor
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerY < 150) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.sudut#

.angle mengembalikan orientasi Kode Warna atau ID AprilTag yang terdeteksi.

Akses

SensorName.objects[index].angle

Nilai Pengembalian

Mengembalikan nilai float float yang mewakili rotasi Kode Warna atau ID AprilTag yang terdeteksi dalam derajat. Nilainya berkisar dari 0 hingga 359.9.

Contoh

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  AIVision1.takeSnapshot(AIVision1__redBlue);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
      Drivetrain.turn(right);
    }
    else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[0].angle < 330) {
      Drivetrain.turn(left);
    }
    else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.originX#

.originX mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi.

Akses

SensorName.objects[index].originX

Nilai Pengembalian

Mengembalikan nilai int16_t yang mewakili koordinat x dari titik asal kotak pembatas objek dalam piksel. Nilainya berkisar dari 0 hingga 320.

Contoh

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originX < 120) {
      Brain.Screen.print("To the left!");
    } else {
      Brain.Screen.print("To the right!");
    }
  } else {
    Brain.Screen.print("No objects");
  }
  wait(100, msec);
}

.asalY#

.originY mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi.

Akses

SensorName.objects[index].originY

Nilai Pengembalian

Mengembalikan nilai int16_t yang mewakili koordinat y dari titik asal kotak pembatas objek dalam piksel. Nilainya berkisar dari 0 hingga 240.

Contoh

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originY < 110) {
      Brain.Screen.print("Close");
    } else {
      Brain.Screen.print("Far");
    }
  }
  wait(100, msec);
}

.pengenal#

.id mengembalikan ID AprilTag atau ID Klasifikasi AI yang terdeteksi.

Akses

SensorName.objects[index].id

Nilai Pengembalian

Mengembalikan nilai int32_t yang mewakili ID objek yang terdeteksi:

  • Untuk Klasifikasi AI, ini sesuai dengan ID yang ditentukan oleh model AI terpilih.

  • Untuk ID AprilTag, ini mewakili nomor ID AprilTag yang terdeteksi (0–36).

Contoh

// Move forward when AprilTag ID 1 is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].id == 1) {
      Drivetrain.drive(forward);
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.skor#

.score mengembalikan skor kepercayaan dari Klasifikasi AI yang terdeteksi.

Akses

SensorName.objects[index].score

Nilai Pengembalian

Mengembalikan nilai int16_t yang menunjukkan skor kepercayaan dari Klasifikasi AI yang terdeteksi antara 1 dan 100.

Skor yang lebih rendah berarti sensor kurang yakin terhadap objek yang terdeteksi, sedangkan skor yang lebih tinggi berarti sensor lebih yakin.

Contoh

// Display if a score is confident
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);

    if (AIVision1.objects[0].score > 95) {
      Brain.Screen.print("Confident");
    } else {
      Brain.Screen.print("Not confident");
    }
  }
  wait(50, msec);
}