이 기사에서는 VEXlink를 사용하는 로봇과 로봇 간의 통신 상태와 Jetson에 대한 상태를 보고하는 대시보드를 표시하는 예제 프로젝트를 다룹니다. ai_demo 프로젝트는 Github에서 호스팅됩니다. 이 데모 프로젝트는 USB 직렬 연결을 통해 Jetson 프로세서에서 데이터를 수집합니다. 데이터가 수신되면 V5 Brain의 화면에 표시되고 VEXlink를 통해 연결된 파트너 V5 로봇에도 전송됩니다.

이 프로젝트에는 최신 버전의 VEXcode Pro V5(버전 2.0.2 이상)가 필요합니다. 다운로드 VEXcode Pro V5 여기.

VEXcode-Pro-V5-icon.png


Nvidia Jetson Nano-VEX V5 Brain Communications

Jetson 프로세서에는 VEX AI 소프트웨어에서 다음 데이터를 수집하는 애플리케이션이 포함되어 있습니다.

스크린샷_2021-02-05_at_3.30.04_PM.png

로봇 위치 데이터:

  • 필드 중심에서 로봇의 X, Y 위치(mm).
  • 로봇의 방위각(방향), 고도(피치), 회전(롤)은 모두 라디안 단위입니다.

물체 감지 데이터(2가지 유형):

이미지4.png

상자 정보(유형 1):
  • 이 데이터는 AI 이미지 센서가 감지한 물체를 나타냅니다.
  • 데이터에는 감지된 개체의 분류를 나타내는 값이 포함됩니다. (값: 0 = 빨간 공, 1 = 파란 공, 2 = 목표)
  • 이 데이터는 비디오 이미지를 참조하여 객체를 설명합니다.
  • X, Y, 너비 및 높이 값은 픽셀 단위입니다. 픽셀 값은 비디오 화면의 왼쪽 상단 모서리를 기준으로 합니다. 이미지 해상도는 320x240입니다.

이미지2.png

이미지6.png

지도 정보(유형 2):

  • 이 데이터는 상자 정보와 동일한 데이터를 나타내지만 이 데이터는 개체가 감지되지 않으면 유지됩니다.
  • 각 개체에는 개체가 감지되지 않는 비디오의 각 프레임에 대해 증가하는 연령 값이 있습니다. 따라서 개체의 나이 번호가 높을수록 AI 시스템이 해당 개체를 감지한 이후로 더 오래되었습니다.
  • 각 개체에는 탐지된 개체의 분류를 나타내는 값이 포함됩니다. (값: 0 = 빨간 공, 1 = 파란 공, 2 = 목표)
  • 각 개체에는 필드 중심을 기준으로 한 개체의 위치도 포함됩니다. X 및 Y 값은 해당 축의 필드 중심에서 밀리미터 단위로 표시됩니다. Z 값은 필드 타일에서 밀리미터입니다.

    참고: 웹 대시보드에 표시되는 데이터와 일치하도록 이 값을 인치 및 도 단위로 변환합니다.
  • ai_demo 프로그램에서 이러한 개체의 값은 MAP_RECORD 구조로 표시됩니다.

ai_demo 프로그램 분석:

        • 메인.cpp

          이미지5.png

          표준에는 VEX 프로젝트에 대한 다음이 포함됩니다.

          이미지7.png

          Jetson 클래스의 인스턴스를 선언합니다. 이 클래스는 Jetson에 데이터 요청을 보내고 USB 직렬 연결을 통해 데이터를 수신하는 데 사용됩니다.

          #define MANAGER_ROBOT 1

          Define_manager_robot_1.png

          robots_link 클래스의 인스턴스를 선언합니다. 이 개체는 이 로봇과 파트너 로봇 간에 데이터를 연결하고 전송하는 데 사용됩니다. 이 동일한 프로젝트를 두 개의 개별 로봇에 다운로드할 수 있습니다. 한 로봇에는 다음 라인이 필요합니다.

          //#MANAGER_ROBOT 1 정의

          코드를 두 번째 로봇에 로드하기 전에 해당 행을 주석 처리해야 합니다.

robots_link 클래스는 로봇의 VEXlink를 설정하고 두 로봇 간의 데이터 송수신을 처리합니다. 해당 클래스가 어떻게 작동하는지에 대해서는 이 기사에서 자세히 다루지 않을 것입니다. VEXlink가 어떻게 작동하는지 먼저 이해하는 것이 좋습니다. V5 VEXlink API 사용에 대한 자세한 내용은 이 문서 에서 새 라이브러리와 이를 효과적으로 사용하는 방법을 설명합니다. 로봇 대 로봇 통신.

  • 대회 이벤트 핸들러

    첫 번째AutoFlag.png

    VAIC와 VRC의 가장 큰 차이점 중 하나는 드라이버 제어 기간이 없다는 것입니다. 대신 격리 기간과 상호 작용 기간이라는 두 가지 자율 기간이 있습니다. 이 예에서는 각 자율 기간에 대해 별도의 루틴이 있습니다. VEX API는 두 개의 다른 콜백을 지원하지 않기 때문에 어떤 루틴을 실행할지 결정하기 위해 프로그램에 플래그가 있어야 합니다. 이 예제 프로그램에서 "firstAutoFlag"는 자율이 처음 활성화될 때 Isolation 기능을 호출하고 두 번째로 자율이 활성화될 때 상호 작용 기능을 호출하는 데 사용됩니다. 한 가지 주의할 점은 어떤 이유로 경기를 재설정해야 하는 경우 데모 프로그램을 다시 시작해야 firstAutoFlag를 재설정할 수 있다는 것입니다.

  • 기본()

    이미지3.png

    이것이 이 프로젝트의 주요 작업입니다. VEXcode 환경을 올바르게 설정하기 위해 vexcodeInit()를 호출하여 시작합니다. 다음으로 Jetson에서 받은 데이터를 저장하기 위해 로컬 MAP_RECORD 개체가 선언됩니다. 최신 데이터로 화면 업데이트를 처리하는 별도의 작업도 설정됩니다. 해당 작업에 대한 코드는 Dashboard.cpp 파일에 포함되어 있습니다. 자율 콜백은 자율 기간이 시작될 때 처리하도록 등록됩니다.

    주요 while() 루프는 jetson_comms 객체의 최신 데이터를 로컬 MAP_RECORD 객체로 복사하여 시작합니다. 그런 다음 로봇의 위치 정보를 링크 개체에 전달하여 파트너 로봇에 전송할 수 있습니다. 데이터 처리가 완료되면 Jetson에서 더 많은 데이터를 요청하고 66밀리초 동안 휴면합니다. 이 데이터의 폴링 속도는 15Hz입니다. AI 시스템 데이터가 약 15Hz로 업데이트되기 때문에 더 빨리 폴링할 이유가 없습니다.

    참고: Jetson 지도 데이터는 단일 작업에서만 요청하면 됩니다.

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