基于matplotlib的FRC日志和网络表绘图仪

frc1678-lime-plotter的Python项目详细描述


概述

lime plotter应用程序绘制从中的机器人收集的数据 第一次机器人比赛,并将它们绘制到屏幕上或 PNG文件。它可以从基于CSV的日志文件中读取数据,或者通过 networktables服务器(即通过其无线网络从机器人获得)。在

使用

安装

安装任何需要的模块和石灰绘图仪:

pip3 install --user --upgrade frc1678-lime-plotter

要绘制的内容可以通过复杂的命令行参数指定 使用-p开关,或通过更易于读写YAML 配置文件(请参阅下面的示例)。在

从日志中读取

石灰-绘图仪.py可以使用-L开关来从 文件、多个文件或一个目录。例如称之为:

^{pr2}$

将从DIR目录加载所有文件。表名 将假定来自CSV文件名。在

从FRC网络表读取

要从网络表读取,请使用-N开关指定 要连接到的网络地址,以及可选的要指定的-T开关 要从中读取的默认表。在

lime-plotter.py -N 10.0.0.1 -t nettable

列出可用的表/列

这适用于NetworkTables和CSV日志:

lime-plotter.py -N 10.0.0.1 -l

示例配置

以下是YAML文件配置示例。在

单个图形示例

下面的配置文件示例指定了一个打印 调用position并从 机器人的drivetrain_status表:

plots:position:-x:estimated_x_positiony:estimated_y_positionxmax:7xmin:-7ymax:7ymin:-7table:drivetrain_statusfixedAspect:Truetitle:X/Y Test-x:profiled_x_goaly:profiled_y_goaltable:drivetrain_statuslast:100

将此保存到xy.yml公司和流动石灰-绘图仪.py从中加载日志 'log'目录如下:

lime-plotter.py -L log -y xy.yml -o xytest.png

可能会生成以下图表:

X/Y Test Graph

示例多个图

要显示多个打印,配置文件可以包含多个 命名条目。注意,在这种情况下,工具将尝试查找 适合您的右表;也就是说,您不需要指定表甚至 如果你不愿意的话,请按x列。在

plots:
  velocity:
    - y: linear_velocity
    - y: angular_velocity
      title: Velocity
  elevator:
    - y: elevator_height
      title: elevator Height

和他一起跑

lime-plotter.py -L log -y multiple.yml -o multiple.yng

将生成类似于以下内容的图形:

Multiple Graphs

注意:可以使用-Y标志仅打印选定的一组截面 YAML文件的。例如lime-plotter.py -L log -y multiple.yml -Y velocity 将只绘制第一个图形。在

包括svg图像(如字段映射)

可以使用绘图中的“数据源”项完成:

plots:
  - data_source: svg
    file: 2020map.svg
    xmax: 629.25 # scale svg to these dimensions
    ymax: 323.25 # (2020 dimensions in inches)
    alpha: .5

以下是作为可打印SVG的FRC 2020 map的副本:

包括内置地图

可以指定以下映射文件,而不实际具有 文件存在,因为它们包含在包数据中:

  • 2019年地图.svg在
  • 2020年地图.svg(只是比赛场地)
  • 2020地图-svg版(从上到下颠倒比赛场地)
  • 2020地图-完整.svg(全场有人区)

为机器人的起始位置添加偏移

当你的机器人在场地的某个点开始时,你可以调整它的 xoffyoff值设置字段中的偏移量,使用0,0 在左下角。在

plots:
  position:
    - x: Robot X
      y: Robot Y
      xoff: 100
      yoff: 50
      fixedAspect: true

动画

networktables或应用-a开关进行绘图时, 将打开一个窗口,该窗口将动态显示随时间流动的数据(实时 对于networktables)。您可以使用-f开关来 改变帧速率(当绘制CSV文件时,使用 更高的值——默认值为20;从网络表绘制时 它将使用此值作为轮询频率,并应设置为 与robot用于更新表的毫秒数相同)。在

时间标记

你可以打开时间标记,每N秒标记一个更大的点 配置如下:

plots:
  timemarkers:
    # plot the regular robot x/y coordinates
    - x: Robot X
      y: Robot Y
      fixedAspect: true

    # Plot a larger (size 20) dot every 1 second ontop the Robot X/Y marks
    - data_source: timer
      marker_size: 20
      x: Robot X
      y: Robot Y
      delta: 1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java允许具有不同父类的类扩展类,而无需多重继承   java如何创建动态化的JScrollPane w/JPanel作为客户端?   java如何组织和命名包   在Java中读取属性文件   java无法解释的Android意图行为   在Java中动态执行多个BPEL文件的部署   ssl Java 6 SNI(服务器名称指示)?   java我们可以使用Robot框架自动化web和移动应用程序来执行并行执行   java for star pettern的循环   java为什么BinaryReader在线程中,从netty读取错误的数据包?   在java中将华氏度转换为摄氏度   使用Spark和java处理空值和引号编写CSV文件   Java中已排序日期到块的列表   visual studio代码VSCode Java不是linting或自动完成局部变量,而是自动完成Java快捷方式,如“sysout”