Sensor Penglihatan#
Perkenalan#
Kelas vision digunakan untuk mengontrol dan mengakses data dari Sensor Visi EXP. Sensor ini mendeteksi dan melacak Tanda Warna dalam bidang pandangnya, memungkinkan robot Anda untuk mengidentifikasi target dan merespons informasi visual secara real time.
Sensor penglihatan dapat mendeteksi beberapa objek khas secara bersamaan dan memberikan informasi seperti posisi objek, lebar, tinggi, dan koordinat pusat.
Konstruktor Kelas#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Destruktor Kelas#
Menghancurkan objek vision dan melepaskan sumber daya terkait.
~vision();
Parameter#
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Port Pintar yang terhubung ke Sensor Penglihatan, ditulis sebagai |
|
|
Tingkat kecerahan Sensor Penglihatan. |
|
|
Satu atau lebih objek |
Contoh#
// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
1, // signature id
10121, // uMin
10757, // uMax
10439, // uMean
-1657, // vMin
-1223, // vMax
-1440, // vMean
2.5, // range
1 ); // type
vision::signature Vision1__BLUEBOX = vision::signature(
2, // signature id
-4479, // uMin
-3277, // uMax
-3878, // uMean
5869, // vMin
7509, // vMax
6689, // vMean
2.5, // range
1 ); // type
// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
Vision1__REDBOX, // first signature
Vision1__BLUEBOX // second signature
);
// Create the Vision Sensor instance
vision Vision1 = vision(
PORT1, // Smart Port
50, // brightness
Vision1__REDBOX, // signature
Vision1__BOXCODE ); // Color Code
Fungsi Keanggotaan#
Kelas vision mencakup fungsi anggota berikut:
takeSnapshot— Mengambil data untuk Tanda Warna atau Kode Warna tertentu.installed— Apakah Sensor Penglihatan terhubung ke EXP Brain.
Untuk mengakses data objek yang terdeteksi setelah memanggil takeSnapshot, gunakan Properti yang tersedia.
Sebelum memanggil fungsi anggota vision apa pun, sebuah instance vision harus dibuat, seperti yang ditunjukkan di bawah ini:
/* This constructor is required when using VS Code.
Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
1, // signature id
10121, // uMin
10757, // uMax
10439, // uMean
-1657, // vMin
-1223, // vMax
-1440, // vMean
2.5, // range
1 ); // type
vision::signature Vision1__BLUEBOX = vision::signature(
2, // signature id
-4479, // uMin
-3277, // uMax
-3878, // uMean
5869, // vMin
7509, // vMax
6689, // vMean
2.5, // range
1 ); // type
// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
Vision1__REDBOX, // first signature
Vision1__BLUEBOX // second signature
);
// Create the Vision Sensor instance
vision Vision1 = vision(
PORT1, // Smart Port
50, // brightness
Vision1__REDBOX, // signature
Vision1__BOXCODE ); // Color Code
takeSnapshot#
Mengambil gambar dari Sensor Penglihatan, memprosesnya berdasarkan tanda tangan, dan memperbarui array objects Metode ini juga dapat membatasi jumlah objek yang diambil dalam snapshot.
Array objects menyimpan objek yang diurutkan dari terbesar ke terkecil berdasarkan lebar, dimulai dari indeks 0. Properti setiap objek dapat diakses menggunakan indeksnya. Jika tidak ada objek yang cocok yang terdeteksi, objectCount akan menjadi 0 dan objects[i].exists akan menjadi false.
1 — Mengambil cuplikan dan mencari objek yang cocok dengan ID tanda tangan yang ditentukan.
int32_t takeSnapshot( uint32_t id );
2 — Mengambil cuplikan dan mencari objek yang cocok dengan objek
vision::codeyang ditentukan.int32_t takeSnapshot( code &cc );
3 — Mengambil cuplikan dan mencari objek yang cocok dengan objek
vision::signatureyang ditentukan.int32_t takeSnapshot( signature &sig );
4 — Mengambil cuplikan dan hanya menyimpan sejumlah objek terbesar yang sesuai dengan ID tanda tangan.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Mengambil cuplikan dan hanya menyimpan sejumlah objek terbesar yang sesuai dengan objek
vision::codeyang ditentukan.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Mengambil cuplikan dan hanya menyimpan sejumlah objek terbesar yang sesuai dengan objek
vision::signatureditentukan.int32_t takeSnapshot( signature &sig, uint32_t count );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Nomor ID tanda tangan yang akan dicari. |
|
|
Referensi ke objek |
|
|
Referensi ke objek |
|
|
Jumlah maksimum objek yang akan dideteksi. |
Mengembalikan nilai int32_t yang mewakili jumlah objek yang cocok yang terdeteksi.
Sensor penglihatan harus mengambil gambar terlebih dahulu sebelum data objek dapat diakses.
Saat nilai
countditentukan, hanya objek terbesar yang terdeteksi (hingga jumlah yang ditentukan) yang akan disimpan.
Contoh
while (true) {
// Display if a blue object is detected
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Blue detected");
}
else {
Brain.Screen.print("No blue");
}
wait(0.5, seconds);
}
// Display when a blue object is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Color detected!");
}
wait(100, msec);
}
// Display when BOXCODE is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BOXCODE);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Code detected!");
}
wait( 100, msec);
}
installed#
Mengembalikan nilai yang menunjukkan apakah Sensor Penglihatan terhubung ke EXP Brain.
Available Functionsbool installed();
Fungsi ini tidak memerlukan parameter apa pun.
Return ValuesMengembalikan nilai Boolean yang menunjukkan apakah Sensor Penglihatan terhubung atau tidak:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Properti#
Memanggil takeSnapshot memperbarui hasil deteksi Sensor Visi. Setiap snapshot menyegarkan array objects , yang berisi objek yang terdeteksi untuk Tanda Warna atau Kode Warna yang diminta.
Data Sensor Penglihatan diakses melalui properti objek yang disimpan di Vision1.objects[index], di mana index dimulai pada 0.
Resolusi gambar Sensor Penglihatan adalah 316 x 212 piksel. Posisi dan ukuran objek dilaporkan dalam satuan piksel relatif terhadap tampilan sensor saat ini.
Properti berikut tersedia:
largestObject— Memilih objek terbesar yang terdeteksi dari snapshot terbaru.objectCount— Mengembalikan jumlah objek valid yang disimpan dalamobjects.objects— Array objek yang terdeteksi diperbarui olehtakeSnapshot..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 yang terdeteksi dalam derajat (jika berlaku).
largestObject#
Mengambil objek terbesar yang terdeteksi dari array objects.
Metode ini dapat digunakan untuk selalu mendapatkan objek terbesar dari objects tanpa menentukan indeks.
VisionSensor.largestObject
Komponen |
Keterangan |
|---|---|
|
Nama instance Vision Sensor Anda. |
Contoh
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the largest detected object's width
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (Vision1.objects[0].exists) {
Brain.Screen.print("%d", Vision1.largestObject.width);
}
wait(0.5, seconds);
}
}
objectCount#
Mengembalikan jumlah item di dalam array objects sebagai bilangan bulat.
VisionSensor.objectCount
Komponen |
Keterangan |
|---|---|
|
Nama instance Vision Sensor Anda. |
Contoh
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display how many blue objects are detected
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Object Count: %d", Vision1.objectCount);
wait(0.5, seconds);
}
}
objects#
objects adalah array yang berisi objek yang terdeteksi dari panggilan terakhir ke takeSnapshot.
Setiap elemen dalam array mewakili objek yang terdeteksi dan menyediakan akses ke propertinya, seperti width, height, centerX, dan banyak lagi.
Objek diurutkan dari yang terbesar ke yang terkecil (berdasarkan lebar), dimulai dari indeks 0.
VisionSensor.objects[index].property
Komponen |
Keterangan |
|---|---|
|
Nama instance Vision Sensor Anda. |
|
Indeks objek dalam larik. Indeks dimulai dari |
|
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
// Display when a blue object is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Color detected!");
}
wait(100, msec);
}
.lebar#
.width mengembalikan lebar objek yang terdeteksi.
Akses
SensorName.objects[index].width
Nilai Pengembalian
Mengembalikan nilai integer int yang mewakili lebar objek yang terdeteksi dalam piksel. Nilainya berkisar dari 1 hingga 316.
Contoh
// Approach an object until it's at least 100 pixels wide
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists && Vision1.objects[0].width < 100) {
Drivetrain.driveFor(forward, 10, mm);
}
else {
Drivetrain.stop();
}
wait(0.5, seconds);
}
.tinggi#
.height mengembalikan tinggi objek yang terdeteksi.
Akses
SensorName.objects[index].height
Nilai Pengembalian
Mengembalikan nilai integer int yang mewakili tinggi objek yang terdeteksi dalam piksel. Nilainya berkisar dari 1 hingga 212.
Contoh
// Approach an object until it's at least 100 pixels tall
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists && Vision1.objects[0].height < 100) {
Drivetrain.driveFor(forward, 10, mm);
}
else {
Drivetrain.stop();
}
wait(0.5, seconds); // Avoid over-processing
}
.centerX#
.centerX mengembalikan koordinat x dari pusat objek yang terdeteksi.
Akses
SensorName.objects[index].centerX
Nilai Pengembalian
Returns an int representing the x-coordinate of the object’s center in pixels. The value ranges from 0 to 316.
Contoh
// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
int centerX = Vision1.largestObject.centerX;
if (140 < centerX && centerX < 180) {
Drivetrain.stop();
}
}
wait(0.5, seconds);
}
.centerY#
.centerY mengembalikan koordinat y dari pusat objek yang terdeteksi.
Akses
SensorName.objects[index].centerY
Nilai Pengembalian
Returns an int representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 212.
Contoh
// Approach an object until it's at least 90 pixels tall
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].centerY < 90) {
Drivetrain.drive(forward);
} 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
Returns an int representing the x-coordinate of the top-left corner of the object’s bounding box in pixels. The value ranges from 0 to 316.
Contoh
// Display if an object is to the left or the right
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].originX < 160) {
Brain.Screen.print("To the left!");
}
else {
Brain.Screen.print("To the right!");
}
}
wait(0.5, seconds);
}
.asalY#
.originY mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi.
Akses
SensorName.objects[index].originY
Nilai Pengembalian
Returns an int representing the y-coordinate of the top-left corner of the object’s bounding box in pixels. The value ranges from 0 to 212.
Contoh
// Display if an object is close or far
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].originY < 80) {
Brain.Screen.print("Far");
} else {
Brain.Screen.print("Close");
}
}
wait(0.5, seconds);
}
.sudut#
.angle mengembalikan orientasi Kode Warna yang terdeteksi.
Akses
SensorName.objects[index].angle
Nilai Pengembalian
Mengembalikan nilai double yang mewakili orientasi Kode Warna 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) {
Vision1.takeSnapshot(Vision1__BOXCODE);
if (Vision1.objects[0].exists) {
double angle = Vision1.objects[0].angle;
if (70 < angle && angle < 110) {
Drivetrain.turnFor(right, 45, degrees);
}
else if (250 < angle && angle < 290) {
Drivetrain.turnFor(left, 45, degrees);
}
else {
Drivetrain.stop();
}
}
wait(0.5, seconds);
}