Bài viết này sẽ đề cập đến một dự án mẫu hiển thị trang tổng quan báo cáo trạng thái liên lạc giữa robot với robot bằng VEXlink và cả trạng thái với Jetson. Dự án ai_demo được lưu trữ trên Githubcủa chúng tôi. Dự án demo này thu thập dữ liệu từ bộ xử lý Jetson thông qua kết nối nối tiếp USB. Sau khi nhận được dữ liệu, nó sẽ được hiển thị trên màn hình của V5 Brain và cũng được truyền đến robot V5 đối tác được kết nối qua VEXlink.
Lưu ý: Dự án này yêu cầu phiên bản mới nhất của Tiện ích mở rộng mã VS cho V5. Tải xuống Tiện ích mở rộng Mã VS cho V5 tại đây.
Truyền thông não NVIDIA Jetson Nano đến VEX V5
Bộ xử lý Jetson chứa một ứng dụng thu thập dữ liệu sau từ phần mềm VEX AI:
Dữ liệu vị trí robot:
- Vị trí X,Y của Robot tính bằng mét tính từ tâm sân.
- Góc phương vị (Tiêu đề), Độ cao (Cao độ), Xoay (Cuộn) của Robot đều tính bằng radian.
Dữ liệu phát hiện đối tượng (ba loại):
- Dữ liệu này đại diện cho một đối tượng được phát hiện bởi Camera VEX AI Intel.
- Dữ liệu này mô tả đối tượng có tham chiếu đến hình ảnh camera.
- Các giá trị cho X, Y, chiều rộng và chiều cao tính bằng đơn vị pixel. Các giá trị pixel được tham chiếu đến góc trên cùng bên trái của hộp phát hiện hình ảnh và đối tượng. Độ phân giải hình ảnh là 640x480.
Phát hiện bản đồ (loại hai):
- Dữ liệu này thể hiện vị trí của đối tượng trên thực địa trong cùng hệ tọa độ với Cảm biến GPS, được báo cáo bằng mét.
- Mỗi đối tượng cũng chứa vị trí của đối tượng so với tâm của trường. Giá trị của X và Y tính bằng đơn vị mét tính từ tâm trường trên trục tương ứng của chúng. Giá trị của Z là mét tính từ ô hiện trường (chiều cao).
Đối tượng phát hiện (loại ba):
- Điều này gói gọn tất cả thông tin về các đối tượng được phát hiện.
- Mỗi đối tượng chứa một giá trị đại diện cho việc phân loại đối tượng được phát hiện. (ID lớp: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Mỗi đối tượng cũng chứa một xác suất thể hiện độ tin cậy của VEX AI trong khả năng phát hiện. Đây là sau một bộ lọc trong model.py giúp loại bỏ các phát hiện có xác suất thấp.
- Ngoài ra, độ sâu của vật thể được báo cáo tính bằng mét từ Camera VEX AI Intel.
- Phát hiện hình ảnh và Phát hiện bản đồ được gắn vào từng đối tượng để thể hiện tọa độ của đối tượng trên ảnh cũng như trong thế giới thực.
Phân tích chương trình ai_demo:
Main.cpp
Tiêu chuẩn bao gồm cho các dự án VEX:
Khai báo một thể hiện của lớp Jetson. Lớp này được sử dụng để gửi yêu cầu dữ liệu tới Jetson cũng như nhận dữ liệu qua kết nối nối tiếp USB.
#define MANAGER_ROBOT 1
Khai báo một thể hiện của lớp robot_link. Đối tượng này sẽ được sử dụng để kết nối và truyền dữ liệu giữa robot này và robot đối tác. Dự án tương tự này có thể được tải xuống hai robot riêng biệt. Một robot sẽ cần có dòng:
//#xác định MANAGER_ROBOT 1
Trước khi tải mã lên robot thứ hai, bạn cần phải nhận xét dòng đó:
Lớp robot_link thiết lập VEXlink của robot và xử lý việc truyền và nhận dữ liệu giữa hai robot. Chúng tôi sẽ không đi sâu vào chi tiết trong bài viết này về cách thức hoạt động của lớp đó. Sẽ là một ý tưởng hay nếu bạn hiểu cách hoạt động của VEXlink trước tiên. Để biết thêm thông tin chi tiết về cách sử dụng API VEXlink V5, tài liệu này giải thích các thư viện mới và cách sử dụng chúng một cách hiệu quả để giao tiếp giữa robot với robot.
-
Người xử lý sự kiện cạnh tranh
Một trong những khác biệt lớn nhất giữa VAIC và VRC là không có thời gian kiểm soát lái xe. Thay vào đó có hai thời kỳ tự trị, thời kỳ cô lập và thời kỳ tương tác. Trong ví dụ này, có các quy trình riêng biệt cho từng giai đoạn tự trị. Vì API VEX không hỗ trợ hai lệnh gọi lại khác nhau nên phải có cờ trong chương trình để xác định quy trình nào sẽ được thực thi. Trong chương trình ví dụ này, “firstAutoFlag” được sử dụng để gọi hàm Cách ly khi tính năng tự động được bật lần đầu tiên và chức năng tương tác khi tính năng tự động được bật lần thứ hai. Một điều cần lưu ý là nếu vì lý do nào đó trận đấu cần được đặt lại, chương trình demo sẽ cần được khởi động lại để có thể đặt lại FirstAutoFlag.
-
Chủ yếu()
Đây là nhiệm vụ chính của dự án này. Nó bắt đầu bằng cách gọi vexcodeInit() để thiết lập chính xác môi trường VEXcode. Tiếp theo, một đối tượng AI_RECORD cục bộ được khai báo để lưu trữ dữ liệu chúng ta nhận được từ Jetson. Một tác vụ riêng cũng được thiết lập để xử lý việc cập nhật màn hình với dữ liệu mới nhất. Mã cho tác vụ đó được chứa trong tệp dash.cpp. Cuộc gọi lại tự trị cũng được đăng ký để xử lý khi bắt đầu giai đoạn tự trị.
Vòng lặp while() chính bắt đầu bằng cách sao chép dữ liệu mới nhất từ đối tượng jetson_comms vào đối tượng AI_RECORD cục bộ của chúng ta. Sau đó, nó chuyển thông tin vị trí của robot đến đối tượng liên kết để có thể truyền thông tin đó đến robot đối tác của chúng ta. Sau khi xử lý xong dữ liệu, nó sẽ yêu cầu thêm dữ liệu từ Jetson và ngủ trong 66 mili giây. Tỷ lệ bỏ phiếu cho dữ liệu này là 15Hz. Không có lý do gì để thăm dò nhanh hơn vì dữ liệu hệ thống AI cập nhật ở tần số khoảng 15Hz.
Lưu ý: dữ liệu bản đồ Jetson chỉ cần được yêu cầu bởi một tác vụ duy nhất.