Mã hóa bằng cảm biến thị giác AI trong VEXcode V5 C++

Đảm bảo bạn đã cấu hình Chữ ký màuMã màu với Cảm biến thị giác AI để có thể sử dụng chúng với các khối của bạn. Để tìm hiểu thêm về cách cấu hình chúng, bạn có thể đọc các bài viết dưới đây:

Cảm biến AI Vision cũng có thể phát hiện Phân loại AI và AprilTags. Để tìm hiểu cách bật các chế độ phát hiện này, hãy vào đây:

Để tìm hiểu thêm chi tiết về từng lệnh này và cách sử dụng chúng trong VEXcode, hãy truy cập trang web API.


Thu thập dữ liệu trực quan bằng cảm biến thị giác AI

Mỗi lệnh AI Vision Sensor sẽ bắt đầu bằng tên của AI Vision Sensor được cấu hình. Đối với tất cả các ví dụ trong bài viết này, tên của Cảm biến thị giác AI được sử dụng sẽ là AIVision.

chụp ảnh nhanh

Phương pháp takeSnapshot chụp ảnh những gì Cảm biến thị giác AI đang nhìn thấy và lấy dữ liệu từ ảnh chụp nhanh đó để sử dụng trong một dự án. Khi chụp ảnh nhanh, bạn cần chỉ định loại đối tượng mà Cảm biến thị giác AI sẽ thu thập dữ liệu:

  • AChữ ký màu hoặcMã màu
    • Các Chữ ký trực quan này bắt đầu bằng tên của Cảm biến thị giác AI, dấu gạch dưới kép, sau đó là tên của Chữ ký trực quan, ví dụ: AIVision1__Blue.
  • Phân loại AI - aivision::ALL_AIOBJS
  • Tháng 4Thẻ- aivision::ALL_TAGS

Chụp ảnh nhanh sẽ tạo ra một mảng gồm tất cả các đối tượng được phát hiện mà bạn đã chỉ định. Ví dụ, nếu bạn muốn phát hiện Chữ ký màu "Xanh lam" và Cảm biến thịAI phát hiện 3 vật thể màu xanh lam khác nhau, dữ liệu từ cả ba vật thể sẽ được đưa vào mảng.

Trong ví dụ này, ảnh chụp nhanh được thực hiện từ Chữ ký màu "Xanh lam" từ Cảm biến thị giác AI có tên AIVision1. Nó hiển thị số lượng đối tượng được phát hiện trong mảng và chụp ảnh nhanh mới sau mỗi 0,5 giây.

while (true) {
// Lấy ảnh chụp nhanh của tất cả các đối tượng Màu xanh lam.
AIVision.takeSnapshot(AIVision1__Blue);

// Kiểm tra để đảm bảo rằng có một đối tượng được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
nếu (AIVision.objectCount > 0) {

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

các vật thể

Mỗi đối tượng từ ảnh chụp nhanh đều có các thuộc tính khác nhau có thể được sử dụng để báo cáo thông tin về đối tượng đó. Phương thức đối tượng cho phép bạn truy cập các thuộc tính này.

Các thuộc tính có sẵn như sau:

  • nhận dạng
  • centerX và centerY
  • originX và originY
  • chiều rộng
  • chiều cao
  • góc
  • tồn tại
  • điểm

Để truy cập vào thuộc tính của đối tượng, hãy sử dụng tên của AI Vision Sensor, theo sau là phương thức đối tượng và chỉ mục của đối tượng.

Chỉ mục đối tượng cho biết thuộc tính cụ thể của đối tượng nào mà bạn muốn lấy. Sau khi chụp ảnh nhanh, Cảm biến thị giác AI sẽ tự động sắp xếp các đối tượng theo kích thước. Đối tượng lớn nhất được gán chỉ số 0, đối tượng nhỏ hơn sẽ nhận được số chỉ số cao hơn.

Ví dụ, gọi chiều rộng của đối tượng lớn nhất sẽ là AIVision1.objects[0].width.

nhận dạng

Thuộc tính id chỉ khả dụng cho AprilTags AI Classifications.

Ba điểm đánh dấu nhận dạng hình vuông được gắn nhãn ID 0, 9 và 3, mỗi điểm có tọa độ và kích thước tương ứng được hiển thị bằng văn bản màu trắng. ID 0 ở bên trái, ID 9 ở bên phải và ID 3 ở chính giữa phía dưới. Mỗi điểm đánh dấu có một mẫu đen trắng độc đáo bên trong một hình vuông.

Đối với AprilTaglà, thuộc tính id biểu thị số IDAprilTag(s) được phát hiện.

Xác định cụ thể AprilTags cho phép điều hướng có chọn lọc. Bạn có thể lập trình cho robot của mình di chuyển theo các thẻ nhất định trong khi bỏ qua các thẻ khác, sử dụng chúng như các biển chỉ dẫn để điều hướng tự động.

Có hai quả bóng và hai chiếc nhẫn được xác định trong hình ảnh, với nhãn ghi rõ vị trí, kích thước và điểm số của chúng. Quả bóng màu đỏ ở bên trái, quả bóng màu xanh ở bên phải, vòng màu xanh lá cây ở góc dưới bên trái và vòng màu đỏ ở góc dưới bên phải. Mỗi đối tượng được phác thảo bằng một hộp màu trắng và các chi tiết như tọa độ X, Y, chiều rộng, chiều cao và điểm 99% được hiển thị bằng văn bản màu trắng.

Đối vớiPhân loại AI, thuộc tính id biểu thị loại Phân loại AI cụ thể được phát hiện.

Xác định các Phân loại AI cụ thể cho phép robot chỉ tập trung vào các đối tượng cụ thể, chẳng hạn như chỉ muốn di chuyển về phía Buckyball màu đỏ, không phải màu xanh.

Truy cập các bài viết này để biết thêm thông tin về AprilTagsAI Classifications và cách bật tính năng phát hiện chúng trong AI Vision Utility.

tâm Xtâm Y

Đây là tọa độ trung tâm của đối tượng được phát hiện tính bằng pixel.

Một quả Buckyball màu xanh đang được theo dõi bởi hệ thống thị giác máy tính. Vật thể được phác thảo bằng một hình vuông màu trắng, bên trong đường viền đó là một hình vuông màu đỏ nhỏ hơn bao quanh một chữ thập màu trắng ở giữa. Ở góc trên bên trái của hình ảnh, nhãn cho biết đối tượng có màu xanh lam, với tọa độ X:176, Y:117 và kích thước W:80, H:78.

Tọa độ CenterX và CenterY giúp điều hướng và định vị. Cảm biến AI Vision có độ phân giải 320 x 240 pixel.

Hai vật thể hình khối màu xanh được theo dõi bằng hệ thống thị giác. Đối tượng phía trên được dán nhãn với tọa độ X:215, Y:70 và kích thước W:73, H:84, với đường viền màu trắng và chữ thập màu trắng ở giữa. Đối tượng bên dưới được gắn nhãn với tọa độ X:188, Y:184 và kích thước W:144, H:113, cũng được viền màu trắng với dấu thập trắng ở giữa.

Bạn có thể thấy rằng một vật thể gần Cảm biến thị giác AI hơn sẽ có tọa độ CenterY thấp hơn so với một vật thể ở xa hơn.

Trong ví dụ này, vì tâm của góc nhìn của Cảm biến thị giác AI là (160, 120) nên robot sẽ rẽ phải cho đến khi tọa độ tâmX của vật thể được phát hiện lớn hơn 150 pixel nhưng nhỏ hơn 170 pixel.

while (true) {
  // Lấy ảnh chụp nhanh của tất cả các đối tượng Màu xanh lam.
  AIVision.takeSnapshot(AIVision__Blue);

  // Kiểm tra để đảm bảo rằng có một đối tượng được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
  nếu (AIVision.objectCount > 0) {

    nếu (AIVision.objects[0].centerX > 150,0 && 170,0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(phải);
    } nếu không {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

originXoriginY

OriginX và OriginY là tọa độ ở góc trên bên trái của đối tượng được phát hiện tính bằng pixel.

Một Buckyball màu xanh đang được theo dõi bằng hệ thống thị giác. Một đường viền màu trắng bao quanh vật thể, với một chữ thập màu trắng ở giữa bên trong đường viền. Nhãn trên cùng bên trái cho biết màu của vật thể là màu xanh lam, cùng với tọa độ X:176, Y:117 và kích thước W:80, H:78. Một hình vuông nhỏ màu đỏ làm nổi bật góc trên bên trái của đối tượng.

Tọa độ OriginX và OriginY giúp điều hướng và định vị. Bằng cách kết hợp tọa độ này với Chiều rộng và Chiều cao của đối tượng, bạn có thể xác định kích thước hộp giới hạn của đối tượng. Điều này có thể giúp theo dõi các vật thể chuyển động hoặc điều hướng giữa các vật thể.

chiều rộngchiều cao

Đây là chiều rộng hoặc chiều cao của đối tượng được phát hiện tính bằng pixel.

Hình ảnh cho thấy một Buckyball màu xanh có đường viền hình vuông màu trắng theo dõi nó. Góc trên bên trái có nhãn cho biết đây là vật thể màu xanh, có tọa độ X:176, Y:117 và kích thước W:80, H:78. Mũi tên màu đỏ làm nổi bật chiều rộng và chiều cao của đối tượng.

Các phép đo chiều rộng và chiều cao giúp xác định các vật thể khác nhau. Ví dụ, Buckyball sẽ có chiều cao lớn hơn Ring.

Hai vật thể hình khối màu xanh đang được theo dõi bởi hệ thống nhận dạng hình ảnh. Khối lập phương phía trên có đường viền màu trắng với nhãn chỉ vị trí của nó là X:215, Y:70 và kích thước W:73, H:84. Khối lập phương phía dưới có đường viền màu trắng tương tự với nhãn hiển thị X:188, Y:184 và kích thước W:144, H:113. Mỗi khối lập phương có một chữ thập màu trắng ở giữa, có thể là dấu hiệu cho biết điểm tập trung để theo dõi. Các nhãn làm nổi bật các phép đo và dữ liệu theo dõi cho từng đối tượng.

Chiều rộng và chiều cao cũng cho biết khoảng cách của vật thể đến Cảm biến thị giác AI. Các phép đo nhỏ hơn thường có nghĩa là vật thể ở xa hơn, trong khi các phép đo lớn hơn cho thấy vật thể ở gần hơn.

Trong ví dụ này, chiều rộng của đối tượng được sử dụng để điều hướng. Robot sẽ tiến lại gần vật thể cho đến khi đạt đến kích thước cụ thể trước khi dừng lại.

while (true) {
  // Lấy ảnh chụp nhanh của tất cả các đối tượng Blue.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Kiểm tra để đảm bảo rằng có một đối tượng được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
  nếu (AIVision.objectCount > 0) {

    nếu (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(tiến lên);
    } nếu không {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

góc

Một ảnh gif xoay hiển thị các khối màu đỏ và xanh lá cây. Khi các khối được đặt theo chiều ngang hoàn hảo từ màu đỏ đến màu xanh lá cây, chúng sẽ hiển thị góc 0 độ. Nếu khối màu đỏ nằm trên khối màu xanh lá cây theo chiều thẳng đứng thì góc giữa chúng là 90 độ. Nếu các khối có chiều ngang từ xanh lá cây đến đỏ thì góc là 180 độ. Nếu khối màu xanh lá cây nằm trên khối màu đỏ theo chiều thẳng đứng thì góc là 20 độ.

Thuộc tính góc chỉ khả dụng choMã màuAprilTags.

Điều này biểu thị liệu Mã màu hoặc AprilTag được phát hiện có định hướng khác nhau hay không.

Một chồng hai khối lập phương, một khối màu xanh lá cây ở trên và một khối màu xanh lam ở dưới, được theo dõi bằng hệ thống thị giác. Một đường viền màu trắng bao quanh cả hai khối lập phương, với một chữ thập màu trắng nằm ở giữa khối lập phương màu xanh lá cây. Nhãn ở cuối hình ảnh hiển thị Green_Blue A:87°, cho biết màu sắc được phát hiện và phép đo góc. Bên dưới đó, các tọa độ được sắp xếp theo thứ tự X:117, Y:186, với các chiều W:137, H:172, biểu thị vị trí và kích thước của các khối lập phương xếp chồng lên nhau trong khung.

Bạn có thể xem robot có định hướng khác nhau theo Mã màu hayAprilTag hay không và đưa ra quyết định điều hướng theo đó.

Hai khối lập phương, một khối màu xanh lá cây và một khối màu xanh lam, được đặt cạnh nhau và được theo dõi bằng hệ thống thị giác. Một đường viền màu trắng bao quanh cả hai khối lập phương với một chữ thập màu trắng ở giữa. Nhãn trên cùng bên trái biểu thị Green_Blue A:0°, tham chiếu đến các màu được phát hiện và phép đo góc. Bên dưới đó, tọa độ được hiển thị là X:150, Y:102, với các kích thước W:179, H:109, biểu thị vị trí và kích thước của các khối lập phương trong khung.

Ví dụ, nếu Mã màu không được phát hiện ở góc thích hợp thì vật thể mà nó đại diện có thể không được robot nhận diện đúng cách.

điểm

Thuộc tính điểm được sử dụng khi phát hiệnPhân loại AI bằng Cảm biến thị giác AI.

Hình ảnh cho thấy bốn vật thể đang được theo dõi bởi hệ thống thị giác: hai quả bóng và hai chiếc nhẫn. Quả bóng màu đỏ được dán nhãn với tọa độ X:122, Y:84, W:67, H:66 và điểm là 99%. Quả bóng màu xanh có X:228, Y:86, W:70, H:68, với số điểm là 99%. Vòng tròn màu xanh lá cây có tọa độ X:109, Y:186, W:98, H:92 và điểm số là 99%. Vòng màu đỏ được dán nhãn X:259, Y:187, W:89, H:91, với điểm số là 99%. Mỗi đối tượng được viền màu trắng, biểu thị độ chính xác khi theo dõi.

Điểm tin cậy cho biết mức độ chắc chắn của Cảm biến thị giác AI về khả năng phát hiện của nó. Trong hình ảnh này, có thể tự tin đến 99% trong việc xác định Phân loại AI của bốn đối tượng này. Bạn có thể sử dụng điểm số này để đảm bảo robot của bạn chỉ tập trung vào những phát hiện có độ tin cậy cao.

tồn tại

Thuộc tính tồn tại được sử dụng để phát hiện xem Chữ ký trực được chỉ định có được phát hiện trong ảnh chụp nhanh cuối cùng hay không.

Tính năng này cho phép bạn kiểm tra xem có bất kỳ đối tượng nào được phát hiện trong ảnh chụp nhanh trước đó hay không. Thuộc tính này sẽ trả về True khi đối tượng tồn tại và False khi đối tượng không tồn tại.


đối tượngCount

Phương thức objectCount trả về số lượng đối tượng được phát hiện trong ảnh chụp nhanh cuối cùng.

Giao diện AI Vision Utility có hai khối lập phương màu xanh được phát hiện ở phía bên trái, mỗi khối được đánh dấu tọa độ X và Y cùng kích thước của chúng. Hệ thống được kết nối và AprilTags được bật, trong khi AI Classification được tắt. Ở bên phải, cài đặt màu Xanh lam được hiển thị với phạm vi sắc độ và độ bão hòa có thể điều chỉnh, lần lượt được đặt ở mức 22 và 0,34. Có tùy chọn thêm hoặc cài đặt màu và đóng băng video. Phần mềm đã được cập nhật, chạy phiên bản 1.0.0.b16 và có nút đóng ở phía dưới.

Trong ví dụ này, hai vật thể đã được phát hiện với Chữ ký màu "Xanh lam". Cả hai đều sẽ được đưa vào mảng khi phương thức takeSnapshot được sử dụng.

Đoạn mã này liên tục cập nhật EXP Brain với số lượng đối tượng được phát hiện. Dựa trên ví dụ được cung cấp, nó sẽ liên tục gửi giá trị 2, cho biết đã phát hiện được hai đối tượng.

while (true) {
// Lấy ảnh chụp nhanh của tất cả các đối tượng Blue.
AIVision.takeSnapshot(AIVision__Blue);

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

// Kiểm tra để đảm bảo rằng có một đối tượng được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
nếu (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
chờ (5, msec);
}

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

Last Updated: