Görüntü Sensörü#
giriiş#
vision sınıfı, EXP Vision Sensöründen gelen verileri kontrol etmek ve bunlara erişmek için kullanılır. Bu sensör, görüş alanındaki Renk İmzalarını algılar ve izler; bu sayede robotunuz hedefleri belirleyebilir ve görsel bilgilere gerçek zamanlı olarak yanıt verebilir.
Görsel Sensör, aynı anda birden fazla imza nesnesini algılayabilir ve nesne konumu, genişliği, yüksekliği ve merkez koordinatları gibi bilgiler sağlar.
Sınıf Oluşturucuları#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Sınıf Yıkıcısı#
vision nesnesini yok eder ve ilgili kaynakları serbest bırakır.
~vision();
Parametreler#
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Görüntü sensörünün bağlı olduğu akıllı port, |
|
|
Görüntü sensörünün parlaklık seviyesi. |
|
|
Sensöre kaydedilecek bir veya daha fazla |
Örnekler#
// 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
Üye Fonksiyonları#
vision sınıfı aşağıdaki üye fonksiyonlarını içerir:
takeSnapshot— Belirli bir Renk İmzası veya Renk Kodu için verileri yakalar.installed— Görsel Sensörün EXP Beynine bağlı olup olmadığı.
takeSnapshot çağrıldıktan sonra tespit edilen nesne verilerine erişmek için mevcut Özellikleri kullanın.
Herhangi bir vision üye fonksiyonunu çağırmadan önce, aşağıda gösterildiği gibi bir vision örneği oluşturulmalıdır:
/* 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#
Görüntü sensöründen bir görüntü yakalar, imzaya göre işler ve objects dizisini günceller. Bu yöntem ayrıca anlık görüntüde yakalanan nesne sayısını da sınırlayabilir.
objects dizisi, 0 dizininden başlayarak, genişliğe göre en büyükten en küçüğe doğru sıralanmış nesneleri saklar. Her nesnenin özelliklerine dizini kullanılarak erişilebilir. Eşleşen nesne bulunmazsa, objectCount 0 olur ve objects[i].exists yanlış olur.
1 — Anlık görüntü alır ve belirtilen imza kimliğiyle eşleşen nesneleri arar.
int32_t takeSnapshot( uint32_t id );
2 — Bir anlık görüntü alır ve belirtilen
vision::codenesnesiyle eşleşen nesneleri arar.int32_t takeSnapshot( code &cc );
3 — Bir anlık görüntü alır ve belirtilen
vision::signaturenesnesiyle eşleşen nesneleri arar.int32_t takeSnapshot( signature &sig );
4 — İmza kimliğiyle eşleşen nesnelerin yalnızca belirtilen en büyük sayısını içeren bir anlık görüntü alır ve saklar.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Belirtilen
vision::codenesnesiyle eşleşen nesnelerin yalnızca belirtilen en büyük sayısını içeren bir anlık görüntü alır ve depolar.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Belirtilen
vision::signaturenesnesiyle eşleşen nesnelerin yalnızca belirtilen en büyük sayısını içeren bir anlık görüntü alır ve depolar.int32_t takeSnapshot( signature &sig, uint32_t count );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Aranacak imza kimlik numarası. |
|
|
Aranacak |
|
|
Aranacak |
|
|
Algılanabilecek maksimum nesne sayısı. |
Tespit edilen eşleşen nesne sayısını temsil eden int32_t değerini döndürür.
Nesne verilerine erişilebilmesi için önce Görüntü Sensörü bir anlık görüntü almalıdır.
countolarak belirtildiğinde, yalnızca tespit edilen en büyük nesneler (belirtilen miktara kadar) saklanır.
Örnek
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#
Görsel sensörün EXP beynine bağlı olup olmadığını döndürür.
Available Functionsbool installed();
Bu fonksiyon herhangi bir parametre almaz.
Return ValuesGörüntü sensörünün bağlı olup olmadığını gösteren bir Boolean değeri döndürür:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Özellikler#
takeSnapshot çağrısı, Görsel Sensörün algılama sonuçlarını günceller. Her anlık görüntü, istenen Renk İmzası veya Renk Kodu için algılanan nesneleri içeren objects dizisini yeniler.
Görüntü Sensörü verilerine, Vision1.objects[index]depolanan nesnelerin özellikleri aracılığıyla erişilir; burada index , 0 başlar.
Görüntü sensörünün çözünürlüğü 316 x 212 pikseldir. Nesne konumu ve boyut özellikleri, sensörün mevcut görüş alanına göre piksel birimleri cinsinden rapor edilir.
Aşağıdaki özellikler mevcuttur:
largestObject— En son anlık görüntüden tespit edilen en büyük nesneyi seçer.objectCount—objectssaklanan geçerli nesnelerin sayısını döndürür.objects—takeSnapshotile güncellenen tespit edilen nesnelerin dizisi..exists— Nesne girişinin geçerli veri içerip içermediği..width— Algılanan nesnenin piksel cinsinden genişliği..height— Tespit edilen nesnenin piksel cinsinden yüksekliği..centerX— Nesnenin merkezinin piksel cinsinden X konumu..centerY— Nesnenin merkezinin piksel cinsinden Y konumu..originX— Nesnenin sol üst köşesinin piksel cinsinden X konumu..originY— Nesnenin sol üst köşesinin piksel cinsinden Y konumu..angle— Algılanan Renk Kodunun derece cinsinden yönü (uygulanabilir olduğunda).
largestObject#
objects nesnelik diziden tespit edilen en büyük nesneyi alır.
Bu yöntem, indeks belirtmeden objects her zaman en büyük nesneyi elde etmek için kullanılabilir.
VisionSensor.largestObject
Bileşen |
Tanım |
|---|---|
|
Vision Sensor örneğinizin adı. |
Örnek
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#
objects dizi içindeki öğe sayısını tam sayı olarak döndürür.
VisionSensor.objectCount
Bileşen |
Tanım |
|---|---|
|
Vision Sensor örneğinizin adı. |
Örnek
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 , takeSnapshot’e yapılan en son çağrıdan tespit edilen nesneleri içeren bir dizidir.
Dizideki her bir eleman, tespit edilen bir nesneyi temsil eder ve width, height, centerX ve daha fazlası gibi özelliklerine erişim sağlar.
Nesneler 0 indeksinden başlayarak, genişliklerine göre en büyükten en küçüğe doğru sıralanmıştır.
VisionSensor.objects[index].property
Bileşen |
Tanım |
|---|---|
|
Vision Sensor örneğinizin adı. |
|
Dizideki nesne indeksi. İndeks |
|
Mevcut nesne özelliklerinden biri. |
.vardır#
.exists , belirtilen nesne dizininin geçerli bir tespit edilmiş nesne içerip içermediğini döndürür.
Erişim
SensorName.objects[index].exists
Dönüş Değeri
Belirtilen nesne dizininin geçerli bir tespit edilmiş nesne içerip içermediğini gösteren bir Boolean değer döndürür:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Örnek
// 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);
}
.Genişlik#
.width , tespit edilen nesnenin genişliğini döndürür.
Erişim
SensorName.objects[index].width
Dönüş Değeri
Algılanan nesnenin piksel cinsinden genişliğini temsil eden int tamsayı değeri döndürür. Değer 1 ile 316 arasında değişir.
Örnek
// 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);
}
.yükseklik#
.height , tespit edilen nesnenin yüksekliğini döndürür.
Erişim
SensorName.objects[index].height
Dönüş Değeri
Algılanan nesnenin piksel cinsinden yüksekliğini temsil eden int değeri döndürür. Değer 1 ile 212 arasında değişir.
Örnek
// 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 , tespit edilen nesnenin merkezinin x koordinatını döndürür.
Erişim
SensorName.objects[index].centerX
Dönüş Değeri
Nesnenin merkezinin piksel cinsinden x koordinatını temsil eden int tamsayı değeri döndürür. Değer 0 ile 316 arasında değişir.
Örnek
// 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 tespit edilen nesnenin merkezinin y koordinatını döndürür.
Erişim
SensorName.objects[index].centerY
Dönüş Değeri
Nesnenin merkezinin y koordinatını piksel cinsinden temsil eden int tamsayı değeri döndürür. Değer 0 ile 212 arasında değişir.
Örnek
// 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 tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını döndürür.
Erişim
SensorName.objects[index].originX
Dönüş Değeri
Nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını piksel cinsinden temsil eden int değerini döndürür. Değer 0 ile 316 arasında değişir.
Örnek
// 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);
}
.orijinY#
.originY tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını döndürür.
Erişim
SensorName.objects[index].originY
Dönüş Değeri
Nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını piksel cinsinden temsil eden int değerini döndürür. Değer 0 ile 212 arasında değişir.
Örnek
// 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);
}
.açı#
.angle , algılanan Renk Kodunun yönünü döndürür.
Erişim
SensorName.objects[index].angle
Dönüş Değeri
Algılanan Renk Kodunun yönünü derece cinsinden temsil eden double değerini döndürür. Değer 0 ile 359.9 arasında değişir.
Örnek
// 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);
}