Látóérzékelő#
Bevezetés#
A vision osztály a V5 Vision Sensor adatainak vezérlésére és elérésére szolgál. Ez az érzékelő a látóterében lévő színaláírásokat érzékeli és követi nyomon, lehetővé téve a robot számára, hogy valós időben azonosítsa a célpontokat és reagáljon a vizuális információkra.
A vizuális érzékelő több jellegzetes objektumot képes egyszerre érzékelni, és olyan információkat szolgáltat, mint az objektum pozíciója, szélessége, magassága és középpontjának koordinátái.
Osztálykonstruktorok#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Osztálydestruktor#
Megsemmisíti a vision objektumot és felszabadítja a hozzá tartozó erőforrásokat.
~vision();
Paraméterek#
Paraméter |
Típus |
Leírás |
|---|---|---|
|
|
Az az intelligens port, amelyhez a vizuális érzékelő csatlakozik, |
|
|
A vizuális érzékelő fényerőszintje. |
|
|
Egy vagy több |
Példák#
// 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
Tagfüggvények#
A vision osztály a következő tagfüggvényeket tartalmazza:
takeSnapshot— Egy adott színaláíráshoz vagy színkódhoz tartozó adatokat rögzít.installed— Azt jelzi, hogy a vizuális érzékelő csatlakoztatva van-e a V5 Brain-hez.
A takeSnapshot meghívása után az észlelt objektumadatok eléréséhez használd a rendelkezésre álló Properties tulajdonságot.
Bármely vision tagfüggvény meghívása előtt létre kell hozni egy vision példányt, az alábbiak szerint:
/* 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#
Képet rögzít a vizuális érzékelőről, feldolgozza azt az aláírás alapján, és frissíti a objects tömböt. Ez a metódus korlátozhatja a pillanatképben rögzített objektumok számát is.
A objects tömb a 0 indexszel kezdődően szélesség szerint a legnagyobbtól a legkisebbig rendezett objektumokat tárolja. Minden objektum properties tulajdonsága a saját indexével érhető el. Ha nem található egyező objektum, akkor a objectCount értéke 0, az objects[i].exists pedig hamis lesz.
1 — Pillanatképet készít, és megkeresi a megadott aláírás-azonosítónak megfelelő objektumokat.
int32_t takeSnapshot( uint32_t id );
2 — Pillanatképet készít, és megkeresi a megadott
vision::codeobjektumnak megfelelő objektumokat.int32_t takeSnapshot( code &cc );
3 — Pillanatképet készít, és megkeresi a megadott
vision::signatureobjektumnak megfelelő objektumokat.int32_t takeSnapshot( signature &sig );
4 — Pillanatképet készít, és csak a megadott számú, az aláírás-azonosítónak megfelelő objektumot tárolja.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Pillanatképet készít, és csak a megadott
vision::codeobjektumnak megfelelő objektumok legnagyobb megadott számú elemét tárolja.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Pillanatképet készít, és csak a megadott
vision::signatureobjektumnak megfelelő objektumok legnagyobb megadott számú elemét tárolja.int32_t takeSnapshot( signature &sig, uint32_t count );
Paraméter |
Típus |
Leírás |
|---|---|---|
|
|
A keresendő aláírás-azonosító szám. |
|
|
Egy |
|
|
Egy |
|
|
Az észlelendő objektumok maximális száma. |
Egy int32_t értéket ad vissza, amely az észlelt egyező objektumok számát jelöli.
A vizuális érzékelőnek pillanatképet kell készítenie, mielőtt hozzáférhetne az objektumadatokhoz.
Ha
countértéket adjuk meg, akkor csak a legnagyobb észlelt objektumok (a megadott mennyiségig) kerülnek tárolásra.
Példa
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#
Visszaadja, hogy a Vision Sensor csatlakoztatva van-e a V5 Brain-hez.
Available Functionsbool installed();
Ez a függvény nem fogad el paramétereket.
Return ValuesEgy logikai értéket ad vissza, amely jelzi, hogy a Vision Sensor csatlakoztatva van-e:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Tulajdonságok#
A takeSnapshot meghívása frissíti a Vision Sensor érzékelési eredményeit. Minden pillanatfelvétel frissíti a objects tömböt, amely a kért színaláíráshoz vagy színkódhoz tartozó érzékelt objektumokat tartalmazza.
A Vision Sensor adataihoz Vision1.objects[index]mappában tárolt objektumok tulajdonságain keresztül lehet hozzáférni, ahol index index 0 -nél kezdődik.
A Vision Sensor képfelbontása 316 x 212 pixel. Az objektum pozícióját és méretét a rendszer pixelegységben adja meg az érzékelő aktuális nézetéhez viszonyítva.
A következő ingatlanok érhetők el:
largestObject— Kiválasztja a legutóbbi pillanatképből a legnagyobb észlelt objektumot.objectCount— Visszaadja aobjects.objects—takeSnapshotáltal frissített, észlelt objektumok tömbje..exists— Azt jelzi, hogy az objektumbejegyzés érvényes adatokat tartalmaz-e..width— A detektált objektum szélessége pixelben..height— A detektált objektum magassága pixelben..centerX— Az objektum középpontjának X pozíciója pixelben..centerY— Az objektum középpontjának Y pozíciója pixelben..originX— Az objektum bal felső sarkának X pozíciója pixelben..originY— Az objektum bal felső sarkának Y pozíciója pixelben..angle— A detektált színkód tájolása fokban (ha alkalmazható).
largestObject#
A legnagyobb észlelt objektumot kéri le a objects tömbből.
Ez a metódus arra használható, hogy mindig a legnagyobb objektumot kapjuk meg objects közül index megadása nélkül.
VisionSensor.largestObject
Összetevő |
Leírás |
|---|---|
|
A Vision Sensor példány neve. |
Példa
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#
Visszaadja a objects tömbben lévő elemek számát egész számként.
VisionSensor.objectCount
Összetevő |
Leírás |
|---|---|
|
A Vision Sensor példány neve. |
Példa
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 egy tömb, amely a takeSnapshot legutóbbi hívásából származó észlelt objektumokat tartalmazza.
A tömb minden eleme egy detektált objektumot jelöl, és hozzáférést biztosít annak tulajdonságaihoz, például a width, height, centerX és egyebekhez.
Az objektumok a legnagyobbtól a legkisebbig (szélesség szerint) vannak rendezve, 0 indextől kezdve.
VisionSensor.objects[index].property
Összetevő |
Leírás |
|---|---|
|
A Vision Sensor példány neve. |
|
Az objektum indexe a tömbben. Az index |
|
Az elérhető objektumtulajdonságok egyike. |
.létezik#
.exists függvény visszaadja, hogy a megadott objektumindex tartalmaz-e érvényes észlelt objektumot.
Hozzáférés
SensorName.objects[index].exists
Visszatérési értékek
Egy logikai értéket ad vissza, amely jelzi, hogy a megadott objektumindex tartalmaz-e érvényes észlelt objektumot:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Példa
// 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);
}
.szélesség#
.width visszaadja az észlelt objektum szélességét.
Hozzáférés
SensorName.objects[index].width
Visszatérési értékek
Egy int értéket ad vissza, amely a detektált objektum szélességét jelöli pixelben. Az érték 1 és 316 között lehet.
Példa
// 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);
}
.magasság#
.height visszaadja az észlelt objektum magasságát.
Hozzáférés
SensorName.objects[index].height
Visszatérési értékek
Egy int értéket ad vissza, amely a detektált objektum magasságát jelöli pixelben. Az érték 1 és 212 között lehet.
Példa
// 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 visszaadja a detektált objektum középpontjának x koordinátáját.
Hozzáférés
SensorName.objects[index].centerX
Visszatérési értékek
Egy int értéket ad vissza, amely az objektum középpontjának x koordinátáját jelöli pixelben. Az érték 0 és 316 között lehet.
Példa
// 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 visszaadja a detektált objektum középpontjának y koordinátáját.
Hozzáférés
SensorName.objects[index].centerY
Visszatérési értékek
Egy int értéket ad vissza, amely az objektum középpontjának y koordinátáját jelöli pixelben. Az érték 0 és 212 között lehet.
Példa
// 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 visszaadja az észlelt objektum határolókeretének bal felső sarkának x koordinátáját.
Hozzáférés
SensorName.objects[index].originX
Visszatérési értékek
Egy int értéket ad vissza, amely az objektum határolókeretének bal felső sarkának x koordinátáját jelöli pixelben. Az érték 0 és 316 között lehet.
Példa
// 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 visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját.
Hozzáférés
SensorName.objects[index].originY
Visszatérési értékek
Egy int értéket ad vissza, amely az objektum határolókeretének bal felső sarkának y koordinátáját jelöli pixelben. Az érték 0 és 212 között lehet.
Példa
// 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);
}
.szög#
.angle visszaadja az észlelt színkód orientációját.
Hozzáférés
SensorName.objects[index].angle
Visszatérési értékek
Returns a double representing the orientation of the detected Color Code in degrees. The value ranges from 0 to 359.9.
Példa
// 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);
}