为 VEX AI 机器人编写代码

本文将介绍一个示例项目,该项目显示一个仪表板,报告使用 VEXlink 的机器人到机器人通信的状态以及 Jetson 的状态。 ai_demo 项目托管在我们的 Github上。 该演示项目通过 USB 串行连接从 Jetson 处理器收集数据。 接收到数据后,数据会显示在 V5 Brain 的屏幕上,并传输到通过 VEXlink 连接的合作伙伴 V5 机器人。

:该项目需要最新版本的 VS Code Extension for V5。 在此处下载 V5 的 VS Code 扩展


NVIDIA Jetson Nano 与 VEX V5 大脑通信

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

上下.png

机器人位置数据:

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

物体检测数据(三种):

像素 (0,0).png

图像检测(类型一):
  • 该数据代表 VEX AI 英特尔相机检测到的物体。
  • 该数据参考相机图像描述对象。
  • X、Y、宽度和高度的值以像素为单位。 像素值参考图像和对象检测框的左上角。 图像分辨率为 640x480。

 

人工智能XY (1).png

地图检测(类型二):

  • 该数据表示与 GPS 传感器相同的坐标系中物体在场地上的位置,以米为单位报告。
  • 每个对象还包含该对象相对于场中心的位置。 X 和 Y 的值以距各自轴上的场中心的米为单位。 Z 的值是距场地图块的米(高度)。

检测对象(类型三):

结构.PNG

  • 这封装了有关检测到的对象的所有信息。
  • 每个对象都包含一个表示检测到的对象的分类的值。 (类别 ID:0 = GreenTriball、1 = RedTriBall、2 = BlueTriBall)
  • 每个对象还包含一个概率,代表 VEX AI 对检测的置信度。 这是在 model.py 中删除低概率检测的过滤器之后。
  • 此外,VEX AI 英特尔摄像头还以米为单位报告物体的深度。
  • 图像检测和地图检测附加到每个对象,以表示图像上以及现实世界中的对象的坐标。

ai_demo 程序的细分:

主要.cpp

图片5.png

VEX 项目的标准包括:

图片7.png

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

#定义MANAGER_ROBOT 1

Define_manager_robot_1.png

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

//#定义MANAGER_ROBOT 1

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

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

  • 竞赛活动处理者

    第一个自动标志.png

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

  • 主要的()

    主要(1).PNG

    这是该项目的主要任务。 它首先调用 vexcodeInit() 来正确设置 VEXcode 环境。 接下来,声明一个本地 AI_RECORD 对象来存储我们从 Jetson 接收的数据。 还设置了一个单独的任务来处理使用最新数据更新屏幕。 该任务的代码包含在dashboard.cpp 文件中。 自治回调也被注册来处理自治周期何时启动。

    主 while() 循环首先将 jetson_comms 对象中的最新数据复制到本地 AI_RECORD 对象中。 然后,它将机器人的位置信息传递给链接对象,以便将其传输给我们的伙伴机器人。 一旦处理完数据,它就会向 Jetson 请求更多数据并休眠 66 毫秒。 该数据的轮询率为 15Hz。 由于 AI 系统数据更新速度约为 15Hz,因此没有理由更快地进行轮询。

    :Jetson 地图数据仅需要由单个任务请求。

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

Last Updated: