本文将介绍一个示例项目,该项目显示一个仪表板,报告使用 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 大脑通信

Jetson 处理器包含一个从 VEX AI 软件收集以下数据的应用程序:

Screen_Shot_2021-02-05_at_3.30.04_PM.png

机器人位置数据:

  • 机器人距离场地中心的 X、Y 位置(以毫米为单位)。
  • 机器人的方位角(航向)、仰角(俯仰)、旋转(滚动)均以弧度表示。

物体检测数据(两种):

图像4.png

盒子信息(类型一):
  • 该数据表示 AI 图像传感器检测到的对象。
  • 数据包含一个值,表示检测到的对象的分类。 (值:0 = 红球,1 = 蓝球,2 = 目标)
  • 该数据参照视频图像描述对象。
  • X、Y、宽度和高度的值以像素为单位。 像素值参考视频屏幕的左上角。 图像分辨率为 320x240。

图像2.png

图片6.png

地图信息(类型二):

  • 此数据表示与框信息相同的数据,但如果停止检测对象,此数据将持续存在。
  • 每个对象都有一个年龄值,该值随着未检测到该对象的每一帧视频而增加。 因此,物体的年龄数字越大,人工智能系统检测到该物体的时间就越长。
  • 每个对象都包含一个值,表示检测到的对象的分类。 (值:0 = 红球,1 = 蓝球,2 = 目标)
  • 每个对象还包含对象相对于场中心的位置。 X 和 Y 的值以它们各自轴上距场中心的毫米为单位。 Z 的值是距字段瓦片的毫米。

    注意:这些值转换为英寸和度数以匹配 Web 仪表板上显示的数据。
  • 在 ai_demo 程序中,这些对象的值由 MAP_RECORD 结构表示。

ai_demo 程序的细分:

        • 主程序

          图像5.png

          VEX 项目的标准包括:

          图片7.png

          声明一个 Jetson 类的实例。 此类用于向 Jetson 发送数据请求以及通过 USB 串行连接接收数据。

          #define MANAGER_ROBOT 1

          Define_manager_robot_1.png

          声明robot_link 类的一个实例。 此对象将用于在此机器人和伙伴机器人之间连接和传输数据。 同一个项目可以下载到两个独立的机器人上。 一个机器人需要有线路:

          //#define MANAGER_ROBOT 1

          在将代码加载到第二个机器人之前,您需要注释掉该行:

robots_link 类设置机器人的 VEXlink 并处理两个机器人之间的数据传输和接收。 我们不会在本文中详细介绍该类的工作原理。 最好先了解 VEXlink 的工作原理。 有关使用 V5 VEXlink API 的更多详细信息, 本文档 解释了新库以及如何有效地将它们用于机器人对机器人的通信。

  • 比赛事件处理程序

    第一个AutoFlag.png

    VAIC 和 VRC 之间最大的区别之一是没有驾驶员控制期。 相反,有两个自治时期,隔离时期和互动时期。 在这个例子中,每个自治时期都有单独的例程。 由于 VEX API 不支持两种不同的回调,因此程序中必须有一个标志来确定要执行哪个例程。 在本例程序中,“firstAutoFlag”用于第一次开启自治时调用Isolation函数,第二次开启自治时调用交互函数。 需要注意的一点是,如果由于某种原因需要重置匹配,则需要重新启动演示程序,以便可以重置 firstAutoFlag。

  • 主要的()

    图像3.png

    这是该项目的主要任务。 它首先调用 vexcodeInit() 以正确设置 VEXcode 环境。 接下来,声明一个本地 MAP_RECORD 对象来存储我们从 Jetson 接收到的数据。 还设置了一个单独的任务来处理使用最新数据更新屏幕。 该任务的代码包含在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