使用 VEX Brain/传感器记录数据(Python 版本)

介绍

在本文中,我们将讨论如何创建一个数据记录项目,指示 VEX 机器人使用 VEX Brain 收集数据并将其保存在 SD 卡上的 CSV 文件中以进行数据分析。

数据记录是一个强大的工具,我们可以用它来协助科学研究、进行自己的实验和解决具体问题。 我们可以通过数据记录驱动 VEX 机器人完成各种有趣且令人兴奋的任务。 以下是一些示例:

  • 使用距离传感器收集数据以计算机器人的速度
  • 驾驶机器人在教室周围行驶,并使用光学传感器收集数据,以观察不同位置的光线变化。
  • 让机器人去冒险并记录 GPS 坐标数据以创建地图。

开发数据记录项目所需的编码技能

  • 使用各种命令通过 VEX Brain/Sensors 收集数据并将其添加到数据结构中。
  • 将数据写入 SD 卡上的逗号分隔值 (CSV) 文件。

数据记录所需的硬件:

  • VEX 大脑(IQ、V5、EXP)
  • 一张SD卡
  • 一个传感器或多个传感器(可选,根据所需数据)

从传感器获取数据

我们可以对 VEX 机器人(IQ、V5、EXP)进行编程,以捕获来自以下传感器的数据:

  • 惯性传感器
  • 距离传感器
  • 光学传感器
  • 视觉传感器
  • 旋转传感器(V5、EXP)
  • GPS传感器(V5)

注意: VEX IQ(第二代)Brain 和 VEX EXP Brain 内置惯性传感器。 我们可以使用这些 VEX Brian 收集惯性传感器数据。

在本文中,我们将开发一个数据记录项目,使用 VEX IQ Brain (2nd) 收集加速度数据并将其存储到 SD 卡中。 

首先,我们需要编写一个简短的程序来获取 VEX IQ Brain 内置定时器和惯性传感器的读数(第 2 部分)。

  • 在此程序开始时,我们需要导入 Python 模块来控制 VEX IQ Brain (2nd) 并从中获取数据。 因此,首先将这些指令添加到项目中。

    图片5.png

  • 接下来添加代码声明变量 numOfDataEntries 存储记录的数据条数,声明变量 polling_delay_msec 存储读取数据的时间间隔值,创建一个空字符串变量 data_buffer 存储从传感器读取的数据。

    图片9.png

  • 由于我们将使用计时器的当前值将时间戳添加到数据中,因此我们需要在开始收集数据之前将计时器值重置回 0 秒。

    图片13.png

  • 在使用从VEX IQ Brain(第2)中获取数据并将数据记录到缓冲区的指令之前,我们需要先了解一下它。
    以下指令以特定格式将当前定时器值附加到 data_buffer 变量。

    图片14.png

    让我们分解一下格式字符串 “%1.3f”: 

    • “%”:引入转换说明符。
    • “1”:表示字符串中出现的最少位数
    • “.3”:指定格式化数字中包含的小数位数。
    • “f”:表示要格式化的值为浮点数。

    因此,我们可以使用格式字符串“%1.3f”来格式化一个最小宽度为1位、精度为3位小数的浮点数。

  • 现在,我们可以读取VEX IQ Brain(2nd)中内置的定时器和惯性传感器的加速度值,然后将数据以指定的格式附加到 data_buffer 变量中。

    图片7.png

    注: “\n”是换行符。 它表示该行在此结束并开始新行。

  • 然后,为了将一定数量的数据记录到 data_buffer 变量中,我们可以使用 for 循环 重复执行获取数据的指令,并将数据追加到 data_buffer 变量中,进行多次迭代。 我们的策略是使用变量 numOfDataEntries 的值来确定迭代次数。

    图片12.png

  • 到目前为止,我们的程序已尽可能快地记录数据。 然而,我们希望以特定的时间间隔记录数据。 因此,我们可以在 for循环 中使用 wait() 函数来暂停程序,以添加两次读数之间的特定时间间隔。 我们使用变量 polling_delay_msec 的值来确定时间间隔的值。

    图片8.png

恭喜! 我们已经完成了从 VEX Brain 内置惯性传感器获取读数(加速度数据)的程序。 接下来,我们将探讨如何将数据写入 SD 卡上的 CSV 文件。

图片1.png




将 SD 卡连接到 VEX Brain

将数据写入 SD 卡上的文件之前,请先将 SD 卡插入 VEX Brain 的 SD 卡插槽中。

IQ 读卡器标注 (1).png

注: 将SD 卡格式化为FAT32 以便写入数据。 我们建议使用 32GB 或更小的 SD 卡。

为了确保在适当的条件下可以将数据写入 SD 卡上的文件,我们需要添加代码来检查 SD 卡是否正确插入 VEX IQ Brain(第二)。

  • 使用 Brain.sdcard.is_inserted() 函数检查SD卡是否插入。 如果未插入SD卡,则VEX IQ Brain屏幕上显示相应消息并按住程序。

    image17.png


    注意:如果 SD 卡插入 Brain,则 Brain.sdcard.is_inserted() 函数返回 True。

将数据写入 SD 卡上的 CSV 文件

到目前为止,我们的程序可以使用 VEX IQ Brain (2nd) 收集数据。 为了完成数据记录项目,我们需要将数据写入 SD 卡上的逗号分隔值 (CSV) 文件,以供将来检查和分析。

  • 当将不同类型的数据写入CSV文件时,我们想知道每列包含哪种类型的数据。 为此,我们可以在记录数据之前将 CSV 标题文本附加到 data_buffer 变量。
    因此,添加代码来声明变量 csvHeaderText 来存储 CSV 标题文本以指定 CSV 文件的列名称,并声明变量 sd_file_name 来保存要写入的 CSV 文件的名称SD卡。

    图片10.png

注意: 确保标头的顺序与 data_buffer 变量中存储的数据的顺序相同。

  • 接下来,将 CSV 标头文本附加到 for 循环 之前的 data_buffer 字符串以进行数据收集。

    图片15.png

  • 在将数据写入SD卡上的文件之前,我们首先了解如何使用 Brain.sdcard.savefile() 函数。

    图片4.png


    该指令将存储在 data_buffer 变量中的数据写入 SD 卡上的命名 CSV 文件。
    我们来分解一下:
    • Brain.sdcard.savefile():该函数将字节数组保存到SD卡上的命名文件中。 该函数返回写入文件的字节数。

    • sd_file_name:函数的第一个参数。 指示要写入的文件的名称。 在此项目中,文件名存储在变量 sd_file_name 中。

    • bytearray(datat_buffer,'utf-8'):函数的第二个参数。 表示要写入文件的字节数组。

        • bytearray():该方法创建一个可变的字节数组。 在此指令中,我们使用它通过指定编码将字符串转换为字节数组。
        • data_buffer:该方法的第一个参数。 指示要转换为字节数组的源。 在本项目中,源是变量 data_buffer中存储的数据。 
        • 'utf-8':该方法的第二个参数。 指示用于对字符串进行编码的指定编码。 该指令中的编码为“utf-8”。 
  • 经过 for 循环 进行数据采集后,使用 Brain.sdcard.savefile() 函数将 data_buffer 变量中存储的数据写入到 SD 卡上的 CSV 文件中。 另外,添加代码来检查 Brain.sdcard.savefile() 函数的返回值,以验证数据是否已成功写入文件,并在 VEX IQ Brain 屏幕上显示相应的消息以获取真实信息:时间反馈。

    image6.png


    注意: Brain.sdcard.savefile() 函数返回写入文件的字节数。 在本项目中,我们使用它将收集到的数据写入CSV文件,因此写入文件的字节数必须大于零。 换句话说,如果 Brain.sdcard.savefile() 函数返回 0,我们可以断定数据尚未成功写入文件。 否则,数据已写入文件中。

恭喜! 我们开发了一个数据记录项目,该项目使用 VEX IQ Brain (2nd) 收集加速度数据并将其存储到 SD 卡上的 CSV 文件中。 接下来我们将探讨如何打开CSV文件进行数据分析。 

图片16.png

打开 CSV 文件进行数据分析

将数据写入 SD 卡上的 CSV 文件后,我们可以使用电子表格应用程序打开该文件以读取和分析数据。 

注意: 两种最常见的电子表格应用程序是 Google Sheets 和 Microsoft Excel。 在本文中,我们将使用 Google Sheets(基于网络)打开 SD 卡上的 CSV 文件。 使用其他应用程序的过程类似。

  • 从 VEX IQ Brain 的 SD 卡插槽中取出 SD 卡。 如果电脑内置Micro SD卡插槽,我们可以将SD卡直接插入该插槽。 否则,请将 SD 卡插入 SD 卡适配器,然后将适配器连接到计算机。 
  • 登录我们的 Google 帐户并打开 Google 表格。 创建一个新的电子表格。
  • 在电子表格中,打开“文件” 菜单,选择 “导入” -> “上传” -> “浏览” 按钮,然后选择计算机上的 CSV 文件。 上传 CSV 文件后,单击“导入数据” 按钮。 导入数据后,点击“立即打开” 可在 CSV 文件中查看收集到的数据。

    图片11.png

  • (可选)分析数据的一种简单方法是绘制图表,然后查找数据的趋势。 在电子表格中,打开“插入” 菜单并选择“图表” 使用 CSV 文件中的数据绘制图表。 下图是使用VEX IQ Brain(第2)收集的加速度数据的结果。

    image3.png


    注: 我们可以使用图表编辑器 选择不同的图表类型或根据需要编辑图表。

到目前为止,我们已经完成了数据记录项目,该项目使用 VEX IQ Brain (2nd) 收集数据并将其保存在 SD 卡上的 CSV 文件中。 此外,我们还学习了如何使用 Google Sheets 读取 SD 卡上的 CSV 文件,甚至创建图表以进行进一步分析。 接下来是什么? 让我们尝试利用VEX机器人进行数据记录来策划更多令人兴奋的实验,观察不断变化的环境因素如何影响各类数据,更深入地了解我们周围的世界。

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

Last Updated: