이 기사에서는 VEXlink를 사용하여 로봇 간 통신 상태와 Jetson에 대한 상태를 보고하는 대시보드를 표시하는 예제 프로젝트를 다룹니다. ai_demo 프로젝트는 Github에서 호스팅됩니다. 이 데모 프로젝트는 USB 직렬 연결을 통해 Jetson 프로세서에서 데이터를 수집합니다. 데이터가 수신되면 V5 Brain의 화면에 표시되고 VEXlink를 통해 연결된 파트너 V5 로봇에도 전송됩니다.
참고: 이 프로젝트에는 최신 버전의 V5용 VS Code Extension이 필요합니다. 여기에서 V5 용 VS Code 확장을 다운로드하세요.
NVIDIA Jetson Nano에서 VEX V5 두뇌 통신으로
Jetson 프로세서에는 VEX AI 소프트웨어에서 다음 데이터를 수집하는 애플리케이션이 포함되어 있습니다.
로봇 위치 데이터:
- 필드 중심으로부터 미터 단위의 로봇의 X,Y 위치입니다.
- 로봇의 방위각(방향), 고도(피치), 회전(롤)은 모두 라디안 단위입니다.
객체 감지 데이터(3가지 유형):
- 이 데이터는 VEX AI Intel 카메라가 감지한 개체를 나타냅니다.
- 이 데이터는 카메라 이미지를 참조하여 개체를 설명합니다.
- X, Y, 너비, 높이 값은 픽셀 단위입니다. 픽셀 값은 이미지 및 개체 감지 상자의 왼쪽 상단을 참조합니다. 이미지 해상도는 640x480입니다.
지도 감지(유형 2):
- 이 데이터는 GPS 센서와 동일한 좌표계에서 필드에 있는 물체의 위치를 미터 단위로 나타냅니다.
- 각 객체에는 필드 중심을 기준으로 한 객체의 위치도 포함됩니다. X 및 Y 값은 해당 축의 필드 중심으로부터 미터 단위입니다. Z 값은 필드 타일(높이)로부터의 미터입니다.
감지 개체(유형 3):
- 이는 감지된 개체에 대한 모든 정보를 캡슐화합니다.
- 각 개체에는 감지된 개체의 분류를 나타내는 값이 포함되어 있습니다. (클래스 ID: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- 각 객체에는 VEX AI의 탐지 신뢰도를 나타내는 확률도 포함되어 있습니다. 이는 확률이 낮은 탐지를 제거하는 model.py의 필터 뒤에 있습니다.
- 또한 VEX AI Intel 카메라에서 물체의 깊이가 미터 단위로 보고됩니다.
- 각 객체에는 이미지 감지 및 지도 감지 기능이 부착되어 실제 세계뿐만 아니라 이미지에서도 객체의 좌표를 나타냅니다.
ai_demo 프로그램 분석:
메인.cpp
VEX 프로젝트에 대한 표준에는 다음이 포함됩니다.
Jetson 클래스의 인스턴스를 선언합니다. 이 클래스는 Jetson에 데이터 요청을 보내고 USB 직렬 연결을 통해 데이터를 수신하는 데 사용됩니다.
#MANAGER_ROBOT 1 정의
robots_link 클래스의 인스턴스를 선언합니다. 이 개체는 이 로봇과 파트너 로봇을 연결하고 데이터를 전송하는 데 사용됩니다. 이 동일한 프로젝트를 두 개의 별도 로봇에 다운로드할 수 있습니다. 하나의 로봇에는 다음 라인이 필요합니다.
//#MANAGER_ROBOT 1 정의
두 번째 로봇에 코드를 로드하기 전에 해당 줄을 주석 처리해야 합니다.
robots_link 클래스는 로봇의 VEXlink를 설정하고 두 로봇 간의 데이터 전송 및 수신을 처리합니다. 해당 클래스가 어떻게 작동하는지에 대해서는 이 기사에서 자세히 다루지 않을 것입니다. 먼저 VEXlink가 어떻게 작동하는지 이해하는 것이 좋습니다. V5 VEXlink API 사용에 대한 자세한 내용을 보려면 이 문서 에서 새로운 라이브러리와 로봇 간 통신을 위해 이를 효과적으로 사용하는 방법을 설명합니다.
-
대회 이벤트 핸들러
VAIC와 VRC의 가장 큰 차이점 중 하나는 운전자 제어 기간이 없다는 점입니다. 대신 격리 기간과 상호 작용 기간이라는 두 가지 자율 기간이 있습니다. 이 예에는 각 자율 기간에 대한 별도의 루틴이 있습니다. VEX API는 두 가지 다른 콜백을 지원하지 않기 때문에 어떤 루틴을 실행할지 결정하기 위한 플래그가 프로그램에 있어야 합니다. 이 예제 프로그램에서는 "firstAutoFlag"를 사용하여 자율이 처음 활성화될 때 격리 기능을 호출하고 두 번째로 자율이 활성화될 때 상호 작용 기능을 호출합니다. 한 가지 주의할 점은 어떤 이유로 경기를 재설정해야 하는 경우 데모 프로그램을 다시 시작하여 firstAutoFlag를 재설정해야 한다는 것입니다.
-
기본()
이번 프로젝트의 주요 업무입니다. VEXcode 환경을 올바르게 설정하기 위해 vexcodeInit()를 호출하는 것으로 시작됩니다. 다음으로 Jetson으로부터 받은 데이터를 저장하기 위해 로컬 AI_RECORD 개체가 선언됩니다. 최신 데이터로 화면 업데이트를 처리하기 위해 별도의 작업도 설정됩니다. 해당 작업의 코드는 Dashboard.cpp 파일에 포함되어 있습니다. 자율 콜백은 자율 기간이 시작될 때 처리하도록 등록됩니다.
주요 while() 루프는 jetson_comms 개체의 최신 데이터를 로컬 AI_RECORD 개체에 복사하는 것으로 시작됩니다. 그런 다음 로봇의 위치 정보를 링크 개체에 전달하여 파트너 로봇에 전송할 수 있습니다. 데이터 처리가 완료되면 Jetson에 추가 데이터를 요청하고 66밀리초 동안 대기합니다. 이 데이터의 폴링 속도는 15Hz입니다. AI 시스템 데이터가 약 15Hz로 업데이트되므로 더 빨리 폴링할 이유가 없습니다.
참고: Jetson 지도 데이터는 단일 작업에서만 요청하면 됩니다.