विज़न सेंसर#
परिचय#
vision क्लास का उपयोग EXP विज़न सेंसर से डेटा को नियंत्रित करने और एक्सेस करने के लिए किया जाता है। यह सेंसर अपने दृश्य क्षेत्र के भीतर रंग संकेतों का पता लगाता है और उन्हें ट्रैक करता है, जिससे आपका रोबोट लक्ष्यों की पहचान कर सकता है और वास्तविक समय में दृश्य जानकारी पर प्रतिक्रिया दे सकता है।
विजन सेंसर एक साथ कई विशिष्ट वस्तुओं का पता लगा सकता है और वस्तु की स्थिति, चौड़ाई, ऊंचाई और केंद्र निर्देशांक जैसी जानकारी प्रदान करता है।
क्लास कंस्ट्रक्टर#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
क्लास डिस्ट्रक्टर#
vision ऑब्जेक्ट को नष्ट करता है और उससे जुड़े संसाधनों को मुक्त करता है।
~vision();
पैरामीटर#
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
स्मार्ट पोर्ट जिससे विज़न सेंसर जुड़ा हुआ है, उसे |
|
|
विज़न सेंसर का चमक स्तर। |
|
|
सेंसर के साथ पंजीकरण करने के लिए एक या अधिक |
उदाहरण#
// 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 गलत होगा।
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 );
Parameters6 — स्नैपशॉट लेता है और निर्दिष्ट
vision::signatureऑब्जेक्ट से मेल खाने वाली निर्दिष्ट संख्या में से केवल सबसे बड़ी ऑब्जेक्ट को स्टोर करता है।int32_t takeSnapshot( signature &sig, uint32_t count );
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
जिस हस्ताक्षर आईडी नंबर की खोज करनी है। |
|
|
खोज करने के लिए |
|
|
खोज करने के लिए |
|
|
पता लगाने के लिए वस्तुओं की अधिकतम संख्या। |
मिलान करने वाली वस्तुओं की संख्या को दर्शाते हुए int32_t लौटाता है।
ऑब्जेक्ट डेटा तक पहुंचने से पहले विजन सेंसर को एक स्नैपशॉट लेना होगा।
जब
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 Functionsbool installed();
यह फ़ंक्शन कोई पैरामीटर नहीं लेता है।
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 ऑब्जेक्ट में से हमेशा सबसे बड़ा ऑब्जेक्ट प्राप्त करने के लिए किया जा सकता है।
VisionSensor.largestObject
अवयव |
विवरण |
|---|---|
|
आपके विज़न सेंसर इंस्टेंस का नाम। |
उदाहरण
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 ऐरे के अंदर मौजूद आइटमों की संख्या को पूर्णांक के रूप में लौटाता है।
VisionSensor.objectCount
अवयव |
विवरण |
|---|---|
|
आपके विज़न सेंसर इंस्टेंस का नाम। |
उदाहरण
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 से शुरू होता है।
VisionSensor.objects[index].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);
}