运动学和底盘速度类简介

什么是运动学?

全新的运动学套件包含了差速驱动、转向驱动和麦轮驱动运动学和测距法。运动学类有助于将包含机器人线性和角速度的通用 “ChassisSpeeds “对象转换为每个单独类型的传动系统的可用速度,即差速驱动的左轮和右轮速度,麦轮驱动的四轮速度,或转向驱动的单个模块状态(速度和角度)。

什么是测距法?

测距法涉及使用机器人上的传感器来估计机器人在场上的位置。在FRC中,这些传感器通常是几个编码器(具体数量取决于驱动类型)和一个陀螺仪来测量机器人的角度。运动学类利用运动学类和用户定期输入的速度(和转弯时的角度)来估计机器人在场上的位置。

底盘速度类

``ChassisSpeeds``对象对新的WPILib运动学和里程测量套件至关重要。``ChassisSpeeds``对象表示机器人底盘的速度。该结构有三个组成部分:

  • vx:机器人在x(前进)方向的速度。

  • vy:机器人在y(横向)方向的速度。(正值表示机器人向左移动)。

  • omega:机器人的角速度,单位为每秒弧度。

备注

非整体性传动系统(即不能横向移动的传动系统,例如:差速驱动)由于不能横向移动,其 “vy “分量为零。

构造一个ChassisSpeeds对象

ChassisSpeeds``对象的构造函数非常简单,接受三个参数``vxvy``和``omega。在Java中,``vx``和``vy``必须以米/秒为单位。在C++中,单位库可用于提供使用任何线性速度单位的线性速度。

// The robot is moving at 3 meters per second forward, 2 meters
// per second to the right, and rotating at half a rotation per
// second counterclockwise.
var speeds = new ChassisSpeeds(3.0, -2.0, Math.PI);

从相对场地速度创建ChassisSpeeds对象

当机器人角度给定时,还可以用一组场内相对速度创建一个``底盘速度``对象。这将一组相对于场域的期望速度(例如,朝向对面联盟站和朝向右场边界)转换为``ChassisSpeeds``对象,它表示相对于机器人框架的速度。这对于实现面向场地的控制,对转向或麦轮驱动机器人是有用的。

静态的``ChassisSpeeds.fromFieldRelativeSpeeds``(Java)/``ChassisSpeeds::FromFieldRelativeSpeeds``(C++)方法可用于从场相对速度生成``ChassisSpeeds``对象。该方法接受``vx``(相对于场)、``vy``(相对于场)、``omega``和机器人角度。

// The desired field relative speed here is 2 meters per second
// toward the opponent's alliance station wall, and 2 meters per
// second toward the left field boundary. The desired rotation
// is a quarter of a rotation per second counterclockwise. The current
// robot angle is 45 degrees.
ChassisSpeeds speeds = ChassisSpeeds.fromFieldRelativeSpeeds(
  2.0, 2.0, Math.PI / 2.0, Rotation2d.fromDegrees(45.0));

备注

角速度没有明确说是 “相对于场”,因为从场角度或机器人角度测量的角速度是一样的。