विज़न सेंसर#

परिचय#

vision क्लास का उपयोग EXP विज़न सेंसर से डेटा को नियंत्रित करने और एक्सेस करने के लिए किया जाता है। यह सेंसर अपने दृश्य क्षेत्र के भीतर रंग संकेतों का पता लगाता है और उन्हें ट्रैक करता है, जिससे आपका रोबोट लक्ष्यों की पहचान कर सकता है और वास्तविक समय में दृश्य जानकारी पर प्रतिक्रिया दे सकता है।

विजन सेंसर एक साथ कई विशिष्ट वस्तुओं का पता लगा सकता है और वस्तु की स्थिति, चौड़ाई, ऊंचाई और केंद्र निर्देशांक जैसी जानकारी प्रदान करता है।

क्लास कंस्ट्रक्टर#

vision(
  int32_t  index,
  uint8_t  bright,
  Args&... sigs );

क्लास डिस्ट्रक्टर#

vision ऑब्जेक्ट को नष्ट करता है और उससे जुड़े संसाधनों को मुक्त करता है।

~vision();

पैरामीटर#

पैरामीटर

प्रकार

विवरण

index

int32_t

स्मार्ट पोर्ट जिससे विज़न सेंसर जुड़ा हुआ है, उसे PORTxके रूप में लिखा जाता है, जहाँ x पोर्ट संख्या है (उदाहरण के लिए, PORT1)।

bright

uint8_t

विज़न सेंसर का चमक स्तर।

sigs

vision::signature or vision::code objects

सेंसर के साथ पंजीकरण करने के लिए एक या अधिक vision::signature या vision::code ऑब्जेक्ट।

उदाहरण#

// 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

सदस्य कार्य#

vision क्लास में निम्नलिखित सदस्य फ़ंक्शन शामिल हैं:

  • takeSnapshot — एक विशिष्ट रंग हस्ताक्षर या रंग कोड के लिए डेटा कैप्चर करता है।

  • installed — क्या विज़न सेंसर EXP ब्रेन से जुड़ा है।

takeSnapshot को कॉल करने के बाद पता लगाए गए ऑब्जेक्ट डेटा तक पहुँचने के लिए, उपलब्ध Properties का उपयोग करें।

किसी भी vision सदस्य फ़ंक्शन को कॉल करने से पहले, एक vision इंस्टेंस बनाना आवश्यक है, जैसा कि नीचे दिखाया गया है:

/* 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#

यह विधि विज़न सेंसर से एक छवि कैप्चर करती है, सिग्नेचर के आधार पर उसे प्रोसेस करती है और objects ऐरे को अपडेट करती है। यह विधि स्नैपशॉट में कैप्चर किए गए ऑब्जेक्ट्स की संख्या को भी सीमित कर सकती है।

objects ऐरे में ऑब्जेक्ट्स को चौड़ाई के अनुसार सबसे बड़े से सबसे छोटे क्रम में संग्रहीत किया जाता है, जो इंडेक्स 0 से शुरू होता है। प्रत्येक ऑब्जेक्ट के प्रॉपर्टीज़ को उसके इंडेक्स का उपयोग करके एक्सेस किया जा सकता है। यदि कोई मिलान करने वाले ऑब्जेक्ट्स नहीं मिलते हैं, तो objectCount 0 होगा और objects[i].exists गलत होगा।

Available Functions

1 — एक स्नैपशॉट लेता है और निर्दिष्ट हस्ताक्षर आईडी से मेल खाने वाली वस्तुओं की खोज करता है।

int32_t takeSnapshot( uint32_t id );

2 — स्नैपशॉट लेता है और निर्दिष्ट vision::code ऑब्जेक्ट से मेल खाने वाली वस्तुओं की खोज करता है।

int32_t takeSnapshot( code &cc );

3 — स्नैपशॉट लेता है और निर्दिष्ट vision::signature ऑब्जेक्ट से मेल खाने वाली वस्तुओं की खोज करता है।

int32_t takeSnapshot( signature &sig );

4 — एक स्नैपशॉट लेता है और हस्ताक्षर आईडी से मेल खाने वाली निर्दिष्ट वस्तुओं की सबसे बड़ी संख्या को ही संग्रहीत करता है।

int32_t takeSnapshot( uint32_t id, uint32_t count );

5 — स्नैपशॉट लेता है और निर्दिष्ट vision::code ऑब्जेक्ट से मेल खाने वाली निर्दिष्ट वस्तुओं की सबसे बड़ी संख्या को ही संग्रहीत करता है।

int32_t takeSnapshot( code &cc, uint32_t count );

6 — स्नैपशॉट लेता है और निर्दिष्ट vision::signature ऑब्जेक्ट से मेल खाने वाली निर्दिष्ट संख्या में से केवल सबसे बड़ी ऑब्जेक्ट को स्टोर करता है।

int32_t takeSnapshot( signature &sig, uint32_t count );

Parameters

पैरामीटर

प्रकार

विवरण

id

uint32_t

जिस हस्ताक्षर आईडी नंबर की खोज करनी है।

cc

code &

खोज करने के लिए vision::code ऑब्जेक्ट का संदर्भ।

sig

signature &

खोज करने के लिए vision::signature ऑब्जेक्ट का संदर्भ।

count

uint32_t

पता लगाने के लिए वस्तुओं की अधिकतम संख्या।

Return Values

मिलान करने वाली वस्तुओं की संख्या को दर्शाते हुए int32_t लौटाता है।

Notes
  • ऑब्जेक्ट डेटा तक पहुंचने से पहले विजन सेंसर को एक स्नैपशॉट लेना होगा।

  • जब count निर्दिष्ट किया जाता है, तो केवल सबसे बड़ी पहचानी गई वस्तुएं (निर्दिष्ट मात्रा तक) ही संग्रहीत की जाती हैं।

उदाहरण

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#

यह बताता है कि विज़न सेंसर EXP ब्रेन से जुड़ा है या नहीं।

Available Functions
bool installed();

Parameters

यह फ़ंक्शन कोई पैरामीटर नहीं लेता है।

Return Values

यह एक बूलियन मान लौटाता है जो दर्शाता है कि विज़न सेंसर कनेक्टेड है या नहीं:

  • true — The Vision Sensor is connected.
  • false — The Vision Sensor is not connected.

गुण#

takeSnapshot को कॉल करने से विज़न सेंसर के डिटेक्शन परिणाम अपडेट होते हैं। प्रत्येक स्नैपशॉट objects सरणी को रीफ़्रेश करता है, जिसमें अनुरोधित रंग हस्ताक्षर या रंग कोड के लिए पता लगाए गए ऑब्जेक्ट होते हैं।

विज़न सेंसर डेटा को Vision1.objects[index]में संग्रहीत वस्तुओं के गुणों के माध्यम से एक्सेस किया जाता है, जहां index 0 से शुरू होता है।

विज़न सेंसर की इमेज का रिज़ॉल्यूशन 316 x 212 पिक्सल है। ऑब्जेक्ट की स्थिति और आकार की जानकारी पिक्सल इकाइयों में सेंसर के वर्तमान दृश्य के सापेक्ष दी जाती है।

निम्नलिखित प्रॉपर्टीज़ उपलब्ध हैं:

  • largestObject — सबसे हालिया स्नैपशॉट से सबसे बड़ी पता लगाई गई वस्तु का चयन करता है।

  • objectCount — objects में संग्रहीत वैध ऑब्जेक्टों की संख्या लौटाता है।

  • objects — पता लगाए गए ऑब्जेक्टों की सरणी takeSnapshot.

  • .exists — क्या ऑब्जेक्ट प्रविष्टि में वैध डेटा है।

  • .width — पिक्सेल में पता लगाई गई वस्तु की चौड़ाई।

  • .height — पिक्सेल में पता लगाई गई वस्तु की ऊँचाई।

  • .centerX — पिक्सेल में वस्तु के केंद्र की X स्थिति।

  • .centerY — पिक्सेल में वस्तु के केंद्र की Y स्थिति।

  • .originX — पिक्सेल में वस्तु के शीर्ष-बाएँ कोने की X स्थिति।

  • .originY — पिक्सेल में वस्तु के शीर्ष-बाएँ कोने की Y स्थिति।

  • .angle — डिग्री में पता लगाए गए रंग कोड का अभिविन्यास (जब लागू हो)।

largestObject#

objects ऐरे से सबसे बड़ी पहचानी गई वस्तु को पुनः प्राप्त करता है।

इस विधि का उपयोग बिना इंडेक्स निर्दिष्ट किए, objects ऑब्जेक्ट में से हमेशा सबसे बड़ा ऑब्जेक्ट प्राप्त करने के लिए किया जा सकता है।

Syntax
VisionSensor.largestObject

Components

अवयव

विवरण

VisionSensor

आपके विज़न सेंसर इंस्टेंस का नाम।

उदाहरण

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 ऐरे के अंदर मौजूद आइटमों की संख्या को पूर्णांक के रूप में लौटाता है।

Syntax
VisionSensor.objectCount

Components

अवयव

विवरण

VisionSensor

आपके विज़न सेंसर इंस्टेंस का नाम।

उदाहरण

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 के सबसे हालिया कॉल से पता लगाए गए ऑब्जेक्ट शामिल हैं।

सरणी में प्रत्येक तत्व एक पता लगाए गए ऑब्जेक्ट का प्रतिनिधित्व करता है और इसके गुणों तक पहुंच प्रदान करता है, जैसे width, height, centerX, और अधिक।

वस्तुओं को सबसे बड़ी से सबसे छोटी (चौड़ाई के अनुसार) क्रम में व्यवस्थित किया गया है, जो सूचकांक 0 से शुरू होता है।

Syntax
VisionSensor.objects[index].property

Components

अवयव

विवरण

VisionSensor

आपके विज़न सेंसर इंस्टेंस का नाम।

index

ऐरे में ऑब्जेक्ट इंडेक्स। इंडेक्स 0 से शुरू होता है।

property

उपलब्ध वस्तु गुणधर्मों में से एक।

मौजूद है#

.exists यह बताता है कि क्या निर्दिष्ट ऑब्जेक्ट इंडेक्स में एक वैध पता लगाया गया ऑब्जेक्ट है।

पहुँच

SensorName.objects[index].exists

वापसी मान

यह एक बूलियन मान लौटाता है जो यह दर्शाता है कि निर्दिष्ट ऑब्जेक्ट इंडेक्स में कोई वैध ऑब्जेक्ट मौजूद है या नहीं:

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

उदाहरण

// 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); 
}

।चौड़ाई#

.width पता लगाए गए ऑब्जेक्ट की चौड़ाई लौटाता है।

पहुँच

SensorName.objects[index].width

वापसी मान

यह मान पिक्सेल में पता लगाए गए ऑब्जेक्ट की चौड़ाई को दर्शाने वाला एक पूर्णांक int लौटाता है। मान 1 से 316 तक होता है।

उदाहरण

// 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);
}

।ऊंचाई#

.height पता लगाए गए ऑब्जेक्ट की ऊंचाई लौटाता है।

पहुँच

SensorName.objects[index].height

वापसी मान

यह मान पिक्सेल में पता लगाए गए ऑब्जेक्ट की ऊंचाई को दर्शाने वाला एक पूर्णांक int लौटाता है। मान 1 से 212 तक होता है।

उदाहरण

// 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 पता लगाए गए ऑब्जेक्ट के केंद्र का x-निर्देशांक लौटाता है।

पहुँच

SensorName.objects[index].centerX

वापसी मान

यह ऑब्जेक्ट के केंद्र के x-निर्देशांक को पिक्सेल में दर्शाने वाला एक int लौटाता है। मान 0 से 316 तक होता है।

उदाहरण

// 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 पता लगाए गए ऑब्जेक्ट के केंद्र का y-निर्देशांक लौटाता है।

पहुँच

SensorName.objects[index].centerY

वापसी मान

Returns an int representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 212.

उदाहरण

// 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 पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का x-निर्देशांक लौटाता है।

पहुँच

SensorName.objects[index].originX

वापसी मान

यह ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने के x-निर्देशांक को पिक्सेल में दर्शाने वाला एक int लौटाता है। मान 0 से 316 तक होता है।

उदाहरण

// 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); 
}

.originY#

.originY पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का y-निर्देशांक लौटाता है।

पहुँच

SensorName.objects[index].originY

वापसी मान

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.

उदाहरण

// 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);
}

।कोण#

.angle पता लगाए गए रंग कोड का अभिविन्यास लौटाता है।

पहुँच

SensorName.objects[index].angle

वापसी मान

यह मान double लौटाता है जो पता लगाए गए रंग कोड के अभिविन्यास को डिग्री में दर्शाता है। मान 0 से 359.9 तक होता है।

उदाहरण

// 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);
}