Add usage reporting for many new things (#2184)

- new CommandScheduler
- kinematics and odometry classes
- new PIDController
- ProfiledPIDController
- TrapezoidProfile (reported in Constraints class)

Also update instances.txt to match latest NI version.

One side effect is that a couple of classes are no longer constexpr.
This commit is contained in:
Peter Johnson
2019-12-25 00:42:14 -06:00
committed by GitHub
parent 93cdf68694
commit 7b952d599d
29 changed files with 155 additions and 11 deletions

View File

@@ -3,6 +3,7 @@ kLanguage_CPlusPlus = 2
kLanguage_Java = 3
kLanguage_Python = 4
kLanguage_DotNet = 5
kLanguage_Kotlin = 6
kCANPlugin_BlackJagBridge = 1
kCANPlugin_2CAN = 2
kFramework_Iterative = 1
@@ -41,4 +42,11 @@ kDriverStationEIO_TouchSlider = 11
kADXL345_SPI = 1
kADXL345_I2C = 2
kCommand_Scheduler = 1
kCommand2_Scheduler = 2
kSmartDashboard_Instance = 1
kKinematics_DifferentialDrive = 1
kKinematics_MecanumDrive = 2
kKinematics_SwerveDrive = 3
kOdometry_DifferentialDrive = 1
kOdometry_MecanumDrive = 2
kOdometry_SwerveDrive = 3

View File

@@ -89,7 +89,7 @@ public final class CommandScheduler implements Sendable {
CommandScheduler() {
HAL.report(tResourceType.kResourceType_Command, tInstances.kCommand_Scheduler);
HAL.report(tResourceType.kResourceType_Command, tInstances.kCommand2_Scheduler);
SendableRegistry.addLW(this, "Scheduler");
}

View File

@@ -11,6 +11,7 @@
#include <frc/WPIErrors.h>
#include <frc/smartdashboard/SendableBuilder.h>
#include <frc/smartdashboard/SendableRegistry.h>
#include <hal/FRCUsageReporting.h>
#include <hal/HALBase.h>
#include <networktables/NetworkTableEntry.h>
#include <wpi/DenseMap.h>
@@ -67,6 +68,8 @@ static bool ContainsKey(const TMap& map, TKey keyToCheck) {
}
CommandScheduler::CommandScheduler() : m_impl(new Impl) {
HAL_Report(HALUsageReporting::kResourceType_Command,
HALUsageReporting::kCommand2_Scheduler);
frc::SendableRegistry::GetInstance().AddLW(this, "Scheduler");
}

View File

@@ -22,7 +22,7 @@ PIDController::PIDController(double Kp, double Ki, double Kd,
: m_Kp(Kp), m_Ki(Ki), m_Kd(Kd), m_period(period) {
static int instances = 0;
instances++;
HAL_Report(HALUsageReporting::kResourceType_PIDController, instances);
HAL_Report(HALUsageReporting::kResourceType_PIDController2, instances);
frc::SendableRegistry::GetInstance().Add(this, "PIDController", instances);
}

View File

@@ -0,0 +1,16 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) 2008-2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#include "frc/controller/ProfiledPIDController.h"
#include <hal/FRCUsageReporting.h>
void frc::detail::ReportProfiledPIDController() {
static int instances = 0;
++instances;
HAL_Report(HALUsageReporting::kResourceType_ProfiledPIDController, instances);
}

View File

@@ -7,6 +7,8 @@
#include "frc/kinematics/DifferentialDriveOdometry.h"
#include <hal/FRCUsageReporting.h>
using namespace frc;
DifferentialDriveOdometry::DifferentialDriveOdometry(
@@ -14,6 +16,8 @@ DifferentialDriveOdometry::DifferentialDriveOdometry(
: m_pose(initialPose) {
m_previousAngle = m_pose.Rotation();
m_gyroOffset = m_pose.Rotation() - gyroAngle;
HAL_Report(HALUsageReporting::kResourceType_Odometry,
HALUsageReporting::kOdometry_DifferentialDrive);
}
const Pose2d& DifferentialDriveOdometry::Update(const Rotation2d& gyroAngle,

View File

@@ -7,6 +7,8 @@
#include "frc/kinematics/MecanumDriveOdometry.h"
#include <hal/FRCUsageReporting.h>
using namespace frc;
MecanumDriveOdometry::MecanumDriveOdometry(MecanumDriveKinematics kinematics,
@@ -15,6 +17,8 @@ MecanumDriveOdometry::MecanumDriveOdometry(MecanumDriveKinematics kinematics,
: m_kinematics(kinematics), m_pose(initialPose) {
m_previousAngle = m_pose.Rotation();
m_gyroOffset = m_pose.Rotation() - gyroAngle;
HAL_Report(HALUsageReporting::kResourceType_Odometry,
HALUsageReporting::kOdometry_MecanumDrive);
}
const Pose2d& MecanumDriveOdometry::UpdateWithTime(

View File

@@ -21,6 +21,9 @@
#include "frc/trajectory/TrapezoidProfile.h"
namespace frc {
namespace detail {
void ReportProfiledPIDController();
} // namespace detail
/**
* Implements a PID control loop whose setpoint is constrained by a trapezoid
@@ -54,7 +57,9 @@ class ProfiledPIDController
*/
ProfiledPIDController(double Kp, double Ki, double Kd,
Constraints constraints, units::second_t period = 20_ms)
: m_controller(Kp, Ki, Kd, period), m_constraints(constraints) {}
: m_controller(Kp, Ki, Kd, period), m_constraints(constraints) {
detail::ReportProfiledPIDController();
}
~ProfiledPIDController() override = default;

View File

@@ -7,6 +7,7 @@
#pragma once
#include <hal/FRCUsageReporting.h>
#include <units/units.h>
#include "frc/kinematics/ChassisSpeeds.h"
@@ -31,8 +32,11 @@ class DifferentialDriveKinematics {
* empirical value may be larger than the physical measured value due to
* scrubbing effects.
*/
constexpr explicit DifferentialDriveKinematics(units::meter_t trackWidth)
: trackWidth(trackWidth) {}
explicit DifferentialDriveKinematics(units::meter_t trackWidth)
: trackWidth(trackWidth) {
HAL_Report(HALUsageReporting::kResourceType_Kinematics,
HALUsageReporting::kKinematics_DifferentialDrive);
}
/**
* Returns a chassis speed from left and right component velocities using

View File

@@ -9,6 +9,7 @@
#include <Eigen/Core>
#include <Eigen/QR>
#include <hal/FRCUsageReporting.h>
#include "frc/geometry/Translation2d.h"
#include "frc/kinematics/ChassisSpeeds.h"
@@ -63,6 +64,8 @@ class MecanumDriveKinematics {
SetInverseKinematics(frontLeftWheel, frontRightWheel, rearLeftWheel,
rearRightWheel);
m_forwardKinematics = m_inverseKinematics.householderQr();
HAL_Report(HALUsageReporting::kResourceType_Kinematics,
HALUsageReporting::kKinematics_MecanumDrive);
}
MecanumDriveKinematics(const MecanumDriveKinematics&) = default;

View File

@@ -12,6 +12,7 @@
#include <Eigen/Core>
#include <Eigen/QR>
#include <hal/FRCUsageReporting.h>
#include <units/units.h>
#include "frc/geometry/Rotation2d.h"
@@ -71,6 +72,9 @@ class SwerveDriveKinematics {
}
m_forwardKinematics = m_inverseKinematics.householderQr();
HAL_Report(HALUsageReporting::kResourceType_Kinematics,
HALUsageReporting::kKinematics_SwerveDrive);
}
SwerveDriveKinematics(const SwerveDriveKinematics&) = default;

View File

@@ -7,6 +7,8 @@
#pragma once
#include <hal/FRCUsageReporting.h>
namespace frc {
template <size_t NumModules>
SwerveDriveOdometry<NumModules>::SwerveDriveOdometry(
@@ -15,6 +17,8 @@ SwerveDriveOdometry<NumModules>::SwerveDriveOdometry(
: m_kinematics(kinematics), m_pose(initialPose) {
m_previousAngle = m_pose.Rotation();
m_gyroOffset = m_pose.Rotation() - gyroAngle;
HAL_Report(HALUsageReporting::kResourceType_Odometry,
HALUsageReporting::kOdometry_SwerveDrive);
}
template <size_t NumModules>

View File

@@ -7,6 +7,7 @@
#pragma once
#include <hal/FRCUsageReporting.h>
#include <units/units.h>
namespace frc {
@@ -53,6 +54,13 @@ class TrapezoidProfile {
public:
class Constraints {
public:
Constraints() {
HAL_Report(HALUsageReporting::kResourceType_TrapezoidProfile, 1);
}
Constraints(Velocity_t maxVelocity_, Acceleration_t maxAcceleration_)
: maxVelocity{maxVelocity_}, maxAcceleration{maxAcceleration_} {
HAL_Report(HALUsageReporting::kResourceType_TrapezoidProfile, 1);
}
Velocity_t maxVelocity{0};
Acceleration_t maxAcceleration{0};
};

View File

@@ -16,3 +16,10 @@ const frc::MecanumDriveKinematics kDriveKinematics{
frc::Translation2d(-kWheelBase / 2, -kTrackWidth / 2)};
} // namespace DriveConstants
namespace AutoConstants {
const frc::TrapezoidProfile<units::radians>::Constraints
kThetaControllerConstraints{kMaxAngularSpeed, kMaxAngularAcceleration};
} // namespace AutoConstants

View File

@@ -83,8 +83,8 @@ constexpr double kPXController = 0.5;
constexpr double kPYController = 0.5;
constexpr double kPThetaController = 0.5;
constexpr frc::TrapezoidProfile<units::radians>::Constraints
kThetaControllerConstraints{kMaxAngularSpeed, kMaxAngularAcceleration};
extern const frc::TrapezoidProfile<units::radians>::Constraints
kThetaControllerConstraints;
} // namespace AutoConstants

View File

@@ -0,0 +1,13 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#include "Constants.h"
using namespace DriveConstants;
const frc::DifferentialDriveKinematics DriveConstants::kDriveKinematics(
kTrackwidth);

View File

@@ -18,6 +18,8 @@
#include <frc2/command/SequentialCommandGroup.h>
#include <frc2/command/button/JoystickButton.h>
#include "Constants.h"
RobotContainer::RobotContainer() {
// Initialize all of your commands and subsystems here

View File

@@ -33,7 +33,7 @@ constexpr bool kLeftEncoderReversed = false;
constexpr bool kRightEncoderReversed = true;
constexpr auto kTrackwidth = 0.69_m;
constexpr frc::DifferentialDriveKinematics kDriveKinematics(kTrackwidth);
extern const frc::DifferentialDriveKinematics kDriveKinematics;
constexpr int kEncoderCPR = 1024;
constexpr double kWheelDiameterInches = 6;

View File

@@ -0,0 +1,15 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#include "Constants.h"
namespace AutoConstants {
const frc::TrapezoidProfile<units::radians>::Constraints
kThetaControllerConstraints{kMaxAngularSpeed, kMaxAngularAcceleration};
} // namespace AutoConstants

View File

@@ -103,8 +103,8 @@ constexpr double kPThetaController = 0.5;
//
constexpr frc::TrapezoidProfile<units::radians>::Constraints
kThetaControllerConstraints{kMaxAngularSpeed, kMaxAngularAcceleration};
extern const frc::TrapezoidProfile<units::radians>::Constraints
kThetaControllerConstraints;
} // namespace AutoConstants

View File

@@ -100,7 +100,7 @@ public class PIDController implements Sendable, AutoCloseable {
instances++;
SendableRegistry.addLW(this, "PIDController", instances);
HAL.report(tResourceType.kResourceType_PIDController, instances);
HAL.report(tResourceType.kResourceType_PIDController2, instances);
}
@Override

View File

@@ -7,6 +7,8 @@
package edu.wpi.first.wpilibj.controller;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.wpilibj.Sendable;
import edu.wpi.first.wpilibj.smartdashboard.SendableBuilder;
import edu.wpi.first.wpilibj.trajectory.TrapezoidProfile;
@@ -17,6 +19,8 @@ import edu.wpi.first.wpilibj.trajectory.TrapezoidProfile;
*/
@SuppressWarnings("PMD.TooManyMethods")
public class ProfiledPIDController implements Sendable {
private static int instances;
private PIDController m_controller;
private TrapezoidProfile.State m_goal = new TrapezoidProfile.State();
private TrapezoidProfile.State m_setpoint = new TrapezoidProfile.State();
@@ -54,6 +58,8 @@ public class ProfiledPIDController implements Sendable {
double period) {
m_controller = new PIDController(Kp, Ki, Kd, period);
m_constraints = constraints;
instances++;
HAL.report(tResourceType.kResourceType_ProfiledPIDController, instances);
}
/**

View File

@@ -7,6 +7,10 @@
package edu.wpi.first.wpilibj.kinematics;
import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
/**
* Helper class that converts a chassis velocity (dx and dtheta components) to
* left and right wheel velocities for a differential drive.
@@ -29,6 +33,7 @@ public class DifferentialDriveKinematics {
*/
public DifferentialDriveKinematics(double trackWidthMeters) {
this.trackWidthMeters = trackWidthMeters;
HAL.report(tResourceType.kResourceType_Kinematics, tInstances.kKinematics_DifferentialDrive);
}
/**

View File

@@ -7,6 +7,9 @@
package edu.wpi.first.wpilibj.kinematics;
import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.wpilibj.geometry.Pose2d;
import edu.wpi.first.wpilibj.geometry.Rotation2d;
import edu.wpi.first.wpilibj.geometry.Twist2d;
@@ -43,6 +46,7 @@ public class DifferentialDriveOdometry {
m_poseMeters = initialPoseMeters;
m_gyroOffset = m_poseMeters.getRotation().minus(gyroAngle);
m_previousAngle = initialPoseMeters.getRotation();
HAL.report(tResourceType.kResourceType_Odometry, tInstances.kOdometry_DifferentialDrive);
}
/**

View File

@@ -9,6 +9,9 @@ package edu.wpi.first.wpilibj.kinematics;
import org.ejml.simple.SimpleMatrix;
import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.wpilibj.geometry.Translation2d;
/**
@@ -70,6 +73,8 @@ public class MecanumDriveKinematics {
setInverseKinematics(frontLeftWheelMeters, frontRightWheelMeters,
rearLeftWheelMeters, rearRightWheelMeters);
m_forwardKinematics = m_inverseKinematics.pseudoInverse();
HAL.report(tResourceType.kResourceType_Kinematics, tInstances.kKinematics_MecanumDrive);
}
/**

View File

@@ -7,6 +7,9 @@
package edu.wpi.first.wpilibj.kinematics;
import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.geometry.Pose2d;
import edu.wpi.first.wpilibj.geometry.Rotation2d;
@@ -42,6 +45,7 @@ public class MecanumDriveOdometry {
m_poseMeters = initialPoseMeters;
m_gyroOffset = m_poseMeters.getRotation().minus(gyroAngle);
m_previousAngle = initialPoseMeters.getRotation();
HAL.report(tResourceType.kResourceType_Odometry, tInstances.kOdometry_MecanumDrive);
}
/**

View File

@@ -12,6 +12,9 @@ import java.util.Collections;
import org.ejml.simple.SimpleMatrix;
import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.wpilibj.geometry.Rotation2d;
import edu.wpi.first.wpilibj.geometry.Translation2d;
@@ -69,6 +72,8 @@ public class SwerveDriveKinematics {
m_inverseKinematics.setRow(i * 2 + 1, 0, /* Start Data */ 0, 1, +m_modules[i].getX());
}
m_forwardKinematics = m_inverseKinematics.pseudoInverse();
HAL.report(tResourceType.kResourceType_Kinematics, tInstances.kKinematics_SwerveDrive);
}
/**

View File

@@ -7,6 +7,9 @@
package edu.wpi.first.wpilibj.kinematics;
import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.geometry.Pose2d;
import edu.wpi.first.wpilibj.geometry.Rotation2d;
@@ -42,6 +45,7 @@ public class SwerveDriveOdometry {
m_poseMeters = initialPose;
m_gyroOffset = m_poseMeters.getRotation().minus(gyroAngle);
m_previousAngle = initialPose.getRotation();
HAL.report(tResourceType.kResourceType_Odometry, tInstances.kOdometry_SwerveDrive);
}
/**

View File

@@ -9,6 +9,9 @@ package edu.wpi.first.wpilibj.trajectory;
import java.util.Objects;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
/**
* A trapezoid-shaped velocity profile.
*
@@ -59,11 +62,19 @@ public class TrapezoidProfile {
public double maxAcceleration;
public Constraints() {
HAL.report(tResourceType.kResourceType_TrapezoidProfile, 1);
}
/**
* Construct constraints for a TrapezoidProfile.
*
* @param maxVelocity maximum velocity
* @param maxAcceleration maximum acceleration
*/
public Constraints(double maxVelocity, double maxAcceleration) {
this.maxVelocity = maxVelocity;
this.maxAcceleration = maxAcceleration;
HAL.report(tResourceType.kResourceType_TrapezoidProfile, 1);
}
}