VEXcode V5 C++에서 AI 비전 센서로 코딩하기

AI Vision Sensor에 색상 서명색상 코드 구성되어 블록과 함께 사용할 수 있는지 확인하세요. 이를 구성하는 방법에 대한 자세한 내용은 아래 문서를 읽어보세요.

AI 비전 센서는 AI 분류와 AprilTags도 감지할 수 있습니다. 이러한 감지 모드를 활성화하는 방법을 알아보려면 여기를 방문하세요.

이러한 개별 명령에 대한 자세한 내용과 VEXcode에서 이를 사용하는 방법을 알아보려면 API 사이트로 이동하세요.


AI Vision 센서로 시각적 데이터 획득

모든 AI Vision Sensor 명령은 구성된 AI Vision Sensor의 이름으로 시작합니다. 이 문서의 모든 예에서 사용되는 AI 비전 센서의 이름은 AIVision입니다.

스냅샷 찍기

takeSnapshot 메서드는 AI Vision Sensor가 현재 보고 있는 것의 사진을 찍고 해당 스냅샷에서 프로젝트에 사용할 수 있는 데이터를 가져옵니다. 스냅샷을 찍을 때 AI Vision Sensor가 어떤 유형의 개체에 대한 데이터를 수집해야 하는지 지정해야 합니다.

  • 색상 서명 또는색상 코드
    • 이러한 시각적 서명은 AI 비전 센서의 이름, 두 개의 밑줄, 그리고 시각적 서명의 이름으로 시작합니다(예: AIVision1__Blue).
  • AI 분류 - aivision::ALL_AIOBJS
  • 4월태그- aivision::ALL_TAGS

스냅샷을 찍으면 지정한 모든 감지된 객체의 배열이 생성됩니다. 예를 들어, "파란색" 색상 특징을 감지하려고 하고 AI 비전 센서가 3개의 서로 다른 파란색 물체를 감지한 경우, 3개 모두의 데이터가 배열에 저장됩니다.

이 예에서 AI Vision Sensor AIVision1에서 "Blue" Color Signature의 스냅샷이 촬영됩니다. 배열에서 감지된 객체의 수를 표시하고 0.5초마다 새로운 스냅샷을 캡처합니다.

while (true) {
// 모든 Blue Color 객체의 스냅샷을 가져옵니다.
AIVision.takeSnapshot(AIVision1__Blue);

// 데이터를 가져오기 전에 스냅샷에서 객체가 감지되었는지 확인합니다.
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

사물

스냅샷의 각 개체에는 해당 개체에 대한 정보를 보고하는 데 사용할 수 있는 서로 다른 속성이 있습니다. 객체 메서드를 사용하면 이러한 속성에 액세스할 수 있습니다.

이용 가능한 부동산은 다음과 같습니다.

  • ID
  • centerX와 centerY
  • originX와 originY
  • 너비
  • 각도
  • 존재한다
  • 점수

객체의 속성에 액세스하려면 AI Vision Sensor의 이름을 사용하고, 그 뒤에 객체의 메서드를 사용한 다음 객체의 인덱스를 사용합니다.

객체 인덱스는 검색하려는 특정 객체의 속성을 나타냅니다. AI 비전 센서는 스냅샷을 촬영한 후 자동으로 객체를 크기별로 정렬합니다. 가장 큰 객체에는 인덱스 0이 할당되고, 작은 객체일수록 더 높은 인덱스 번호가 할당됩니다.

예를 들어, 가장 큰 객체의 너비를 호출하는 것은 AIVision1.objects[0].width이 됩니다.

ID

id 속성은 AprilTags AI 분류에만 사용할 수 있습니다.

ID 0, 9, 3으로 표시된 세 개의 정사각형 식별 표시기에는 각각 해당 좌표와 크기 측정값이 흰색 텍스트로 표시되어 있습니다. ID 0은 왼쪽에, ID 9는 오른쪽에, ID 3은 하단 중앙에 있습니다. 각 마커는 사각형 내부에 고유한 흑백 패턴을 가지고 있습니다.

AprilTag의 경우 id 속성은 감지된AprilTag(s) ID 번호를 나타냅니다.

특정 AprilTag 를 식별하면 선택적 탐색이 가능합니다. 로봇이 다른 태그를 무시하고 특정 태그를 향해 이동하도록 프로그래밍할 수 있으며, 이를 자동 탐색을 위한 표지판으로 효과적으로 활용할 수 있습니다.

그림 속에는 공 두 개와 링 두 개가 표시되어 있으며, 각 공의 위치, 크기, 점수가 적힌 라벨이 붙어 있습니다. 빨간 공은 왼쪽에, 파란 공은 오른쪽에, 녹색 고리는 왼쪽 하단에, 빨간 고리는 오른쪽 하단에 있습니다. 각 객체는 흰색 상자로 윤곽이 그려지고, X, Y 좌표, 너비, 높이, 99% 점수와 같은 세부 정보는 흰색 텍스트로 표시됩니다.

AI 분류의 경우, id 속성은 감지된 특정 유형의 AI 분류를 나타냅니다.

특정 AI 분류을 식별하면 로봇이 특정 개체에만 집중할 수 있습니다. 예를 들어, 파란색 버키볼이 아닌 빨간색 버키볼을 향해만 이동하려고 합니다.

4월태그AI 분류 에 대한 자세한 내용과 AI Vision Utility에서 이를 감지하는 방법을 알아보려면 다음 문서를 참조하세요.

중심X중심Y

이는 감지된 객체의 중심 좌표를 픽셀 단위로 나타낸 것입니다.

컴퓨터 비전 시스템이 파란색 버키볼을 추적하고 있습니다. 물체는 흰색 사각형으로 윤곽이 그려져 있으며, 윤곽선 안에는 중앙에 흰색 십자가를 둘러싼 작은 빨간색 사각형이 있습니다. 이미지의 왼쪽 상단 모서리에 있는 라벨은 해당 물체가 파란색임을 나타내며, 좌표는 X:176, Y:117, 치수는 W:80, H:78입니다.

CenterX 및 CenterY 좌표는 탐색 및 위치 지정에 도움이 됩니다. AI 비전 센서의 해상도는 320 x 240픽셀입니다.

비전 시스템에 의해 추적되는 두 개의 파란색 입방체 개체. 위쪽 물체에는 좌표 X:215, Y:70, 치수 W:73, H:84가 표시되어 있고, 흰색 윤곽선과 중앙에 흰색 십자가가 있습니다. 아래쪽 물체에는 좌표 X:188, Y:184, 치수 W:144, H:113이 표시되어 있으며 역시 흰색 테두리와 중앙에 흰색 십자가가 그려져 있습니다.

AI 비전 센서에 가까운 객체는 먼 객체보다 CenterY 좌표가 낮은 것을 확인할 수 있습니다.

이 예에서 AI Vision Sensor의 시야 중심이 (160, 120)이므로 로봇은 감지된 객체의 centerX 좌표가 150픽셀보다 크고 170픽셀보다 작을 때까지 오른쪽으로 회전합니다.

while (true) {
  // 모든 Blue Color 객체의 스냅샷을 가져옵니다.
  AIVision.takeSnapshot(AIVision__Blue);

  // 데이터를 가져오기 전에 스냅샷에서 개체가 감지되었는지 확인합니다.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      구동계.회전(오른쪽);
    } else {
      구동계.정지();
    }
  }
  wait(5, 밀리초);
}

원점X원점

OriginX와 OriginY는 감지된 객체의 왼쪽 상단 모서리의 좌표(픽셀)입니다.

비전 시스템에 의해 추적되는 파란색 버키볼. 객체 주변에는 흰색 윤곽선이 있고, 윤곽선 안에 중앙에 흰색 십자가가 있습니다. 왼쪽 상단 라벨은 객체의 색상을 파란색으로 표시하고, 좌표는 X:176, Y:117, 치수는 W:80, H:78입니다. 작은 빨간색 사각형은 객체의 왼쪽 상단 모서리를 강조 표시합니다.

OriginX 및 OriginY 좌표는 탐색 및 위치 지정에 도움이 됩니다. 이 좌표를 객체의 너비와 높이와 결합하면 객체의 경계 상자 크기를 결정할 수 있습니다. 이는 움직이는 객체를 추적하거나 객체 간을 탐색하는 데 도움이 될 수 있습니다.

너비높이

이는 감지된 객체의 너비나 높이를 픽셀 단위로 나타낸 것입니다.

이 그림은 파란색 버키볼을 흰색 사각형 윤곽선이 따라가는 모습을 보여줍니다. 왼쪽 상단 모서리에는 파란색 물체임을 나타내는 라벨이 있는데, 좌표는 X:176, Y:117, 크기는 W:80, H:78입니다. 빨간색 화살표는 객체의 너비와 높이를 강조 표시합니다.

너비와 높이의 측정은 다양한 물체를 식별하는 데 도움이 됩니다. 예를 들어, 버키볼은 링보다 높이가 더 큽니다.

시각적 인식 시스템에 의해 추적되는 두 개의 파란색 입방체 물체. 위쪽 큐브에는 흰색 윤곽이 있고 위치가 X:215, Y:70, 치수가 W:73, H:84로 표시된 라벨이 있습니다. 아래쪽 큐브도 비슷한 흰색 윤곽을 띠고 있으며 라벨에는 X:188, Y:184, 치수는 W:144, H:113이 표시되어 있습니다. 각 큐브에는 중앙에 흰색 십자가가 있는데, 아마도 추적의 초점을 나타내는 것 같습니다. 라벨은 각 개체의 측정값과 추적 데이터를 강조 표시합니다.

너비와 높이는 AI 비전 센서로부터 물체까지의 거리를 나타냅니다. 일반적으로 측정값이 작을수록 물체가 멀리 있다는 것을 의미하고, 측정값이 클수록 물체가 가까이 있다는 것을 의미합니다.

이 예에서는 객체의 너비가 탐색에 사용됩니다. 로봇은 물체의 너비가 특정 크기에 도달할 때까지 물체에 접근한 후 멈춥니다.

while (true) {
  // 모든 Blue 객체의 스냅샷을 가져옵니다.
  AIVision.takeSnapshot(AIVision1__Blue);

  // 데이터를 가져오기 전에 스냅샷에서 개체가 감지되었는지 확인합니다.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(전진);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, 밀리초);
}

각도

빨간색과 녹색 블록을 보여주는 회전하는 GIF입니다. 블록이 빨간색에서 초록색까지 완벽하게 수평으로 배치되면 0도로 표시됩니다. 빨간색 블록이 녹색 블록 위에 수직으로 놓이면 90도가 됩니다. 블록이 수평으로 녹색에서 빨간색이면 180도입니다. 녹색 블록이 빨간색 블록 위에 수직으로 놓이면 각도가 20도입니다.

각도 속성은색상 코드AprilTags에만 사용할 수 있습니다.

이는 감지된 색상 코드또는 AprilTag 이 다르게 방향이 지정되어 있는지 여부를 나타냅니다.

위쪽은 녹색이고 아래쪽은 파란색인 두 개의 큐브가 쌓여서 비전 시스템에 의해 추적되고 있습니다. 두 개의 큐브를 둘러싼 것은 흰색 윤곽선이며, 녹색 큐브의 중앙에는 흰색 십자가가 있습니다. 이미지 하단의 라벨에는 감지된 색상과 각도 측정값을 나타내는 Green_Blue A:87°가 표시됩니다. 그 아래에는 좌표가 X:117, Y:186으로 배열되어 있으며, 치수는 W:137, H:172로 프레임 내에서 쌓인 큐브의 위치와 크기를 나타냅니다.

로봇이색상 코드 또는AprilTag 에 따라 다르게 방향이 지정되어 있는지 확인하고 그에 따라 탐색 결정을 내릴 수 있습니다.

녹색과 파란색의 두 개의 큐브가 나란히 배치되어 비전 시스템으로 추적됩니다. 두 개의 큐브를 둘러싼 흰색 윤곽선이 있고, 중앙에는 흰색 십자가가 있습니다. 왼쪽 상단 라벨은 감지된 색상과 각도 측정을 참조하는 Green_Blue A:0°를 나타냅니다. 그 아래에는 좌표가 X:150, Y:102로 표시되어 있고, 크기는 W:179, H:109로 프레임 내 큐브의 위치와 크기를 나타냅니다.

예를 들어,색상 코드 이 적절한 각도에서 감지되지 않으면 해당 물체를 로봇이 제대로 집어 올리지 못할 수 있습니다.

점수

점수 속성은 AI 비전 센서로AI 분류 감지할 때 사용됩니다.

이 그림은 비전 시스템이 4개의 물체를 추적하는 모습을 보여줍니다. 공 두 개와 반지 두 개입니다. 빨간 공에는 좌표 X:122, Y:84, W:67, H:66이 표시되어 있고 점수는 99%입니다. 파란색 공의 점수는 99%이며 X:228, Y:86, W:70, H:68입니다. 녹색 링의 좌표는 X:109, Y:186, W:98, H:92이고 점수는 99%입니다. 붉은색 링은 X:259, Y:187, W:89, H:91로 표시되어 있으며 점수는 99%입니다. 각 개체는 추적 정확도를 나타내는 흰색 윤곽이 표시됩니다.

신뢰도 점수는 AI 비전 센서가 감지에 얼마나 확신하는지를 나타냅니다. 이 이미지에서는 이 네 가지 객체의 AI 분류를 식별하는 데 99%의 확신도를 보입니다. 이 점수를 사용하면 로봇이 신뢰도 높은 감지에만 집중하도록 할 수 있습니다.

존재한다

exists 속성은 지정된 Visual Signature 이 마지막으로 찍은 스냅샷에서 감지되었는지 감지하는 데 사용됩니다.

이를 통해 이전 스냅샷에서 감지된 개체가 있는지 확인할 수 있습니다. 이 속성은 객체가 존재하면 True를 반환하고, 객체가 존재하지 않으면 False를 반환합니다.


객체 개수

objectCount 메서드는 마지막 스냅샷에서 감지된 객체의 양을 반환합니다.

왼쪽에 두 개의 파란색 큐브가 감지된 AI Vision Utility 인터페이스에는 각 큐브의 X, Y 좌표와 크기가 표시되어 있습니다. 시스템이 연결되었고, AprilTags가 켜져 있고, AI 분류는 꺼져 있습니다. 오른쪽에는 파란색 설정이 표시되어 있으며, 조정 가능한 색조와 채도 범위는 각각 22와 0.34로 설정되어 있습니다. 색상을 추가하거나 설정하고 비디오를 정지하는 옵션이 있습니다. 펌웨어는 최신 버전 1.0.0.b16으로 업데이트되었으며, 하단에 닫기 버튼이 있습니다.

이 예에서는색상 특징 "파란색"을 갖는 두 개의 객체가 감지되었습니다. takeSnapshot 메서드를 사용하면 두 가지 모두 배열에 저장됩니다.

이 코드 조각은 감지된 물체의 수를 EXP Brain에 지속적으로 업데이트합니다. 제공된 예를 기준으로, 두 개의 객체가 감지되었음을 나타내는 값 2를 반복적으로 전송합니다.

while (true) {
// 모든 Blue 객체의 스냅샷을 가져옵니다.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 데이터를 가져오기 전에 스냅샷에서 객체가 감지되었는지 확인합니다.
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: