[wpimath] Make public final values in feedforwards private and add getters (#6851)

This commit is contained in:
Joseph Eng
2024-07-20 07:01:56 -07:00
committed by GitHub
parent d827c84c5e
commit b4d42d8980
22 changed files with 288 additions and 94 deletions

View File

@@ -16,16 +16,16 @@ import edu.wpi.first.util.struct.StructSerializable;
*/
public class ArmFeedforward implements ProtobufSerializable, StructSerializable {
/** The static gain, in volts. */
public final double ks;
private final double ks;
/** The gravity gain, in volts. */
public final double kg;
private final double kg;
/** The velocity gain, in volt seconds per radian. */
public final double kv;
/** The velocity gain, in V/(rad/s). */
private final double kv;
/** The acceleration gain, in volt seconds² per radian. */
public final double ka;
/** The acceleration gain, in V/(rad/s²). */
private final double ka;
/** Arm feedforward protobuf for serialization. */
public static final ArmFeedforwardProto proto = new ArmFeedforwardProto();
@@ -69,6 +69,42 @@ public class ArmFeedforward implements ProtobufSerializable, StructSerializable
this(ks, kg, kv, 0);
}
/**
* Returns the static gain.
*
* @return The static gain, in volts.
*/
public double getKs() {
return ks;
}
/**
* Returns the gravity gain.
*
* @return The gravity gain, in volts.
*/
public double getKg() {
return kg;
}
/**
* Returns the velocity gain.
*
* @return The velocity gain, in V/(rad/s).
*/
public double getKv() {
return kv;
}
/**
* Returns the acceleration gain.
*
* @return The acceleration gain, in V/(rad/s²).
*/
public double getKa() {
return ka;
}
/**
* Calculates the feedforward from the gains and setpoints.
*

View File

@@ -18,16 +18,16 @@ import edu.wpi.first.util.struct.StructSerializable;
*/
public class ElevatorFeedforward implements ProtobufSerializable, StructSerializable {
/** The static gain. */
public final double ks;
private final double ks;
/** The gravity gain. */
public final double kg;
private final double kg;
/** The velocity gain. */
public final double kv;
private final double kv;
/** The acceleration gain. */
public final double ka;
private final double ka;
/** ElevatorFeedforward protobuf for serialization. */
public static final ElevatorFeedforwardProto proto = new ElevatorFeedforwardProto();
@@ -71,6 +71,42 @@ public class ElevatorFeedforward implements ProtobufSerializable, StructSerializ
this(ks, kg, kv, 0);
}
/**
* Returns the static gain.
*
* @return The static gain.
*/
public double getKs() {
return ks;
}
/**
* Returns the gravity gain.
*
* @return The gravity gain.
*/
public double getKg() {
return kg;
}
/**
* Returns the velocity gain.
*
* @return The velocity gain.
*/
public double getKv() {
return kv;
}
/**
* Returns the acceleration gain.
*
* @return The acceleration gain.
*/
public double getKa() {
return ka;
}
/**
* Calculates the feedforward from the gains and setpoints.
*

View File

@@ -14,16 +14,16 @@ import edu.wpi.first.units.Voltage;
/** A helper class that computes feedforward outputs for a simple permanent-magnet DC motor. */
public class SimpleMotorFeedforward {
/** The static gain. */
public final double ks;
private final double ks;
/** The velocity gain. */
public final double kv;
private final double kv;
/** The acceleration gain. */
public final double ka;
private final double ka;
/** The period. */
private double m_dt;
private final double m_dt;
/**
* Creates a new SimpleMotorFeedforward with the specified gains and period. Units of the gain
@@ -80,6 +80,42 @@ public class SimpleMotorFeedforward {
this(ks, kv, 0, 0.020);
}
/**
* Returns the static gain.
*
* @return The static gain.
*/
public double getKs() {
return ks;
}
/**
* Returns the velocity gain.
*
* @return The velocity gain.
*/
public double getKv() {
return kv;
}
/**
* Returns the acceleration gain.
*
* @return The acceleration gain.
*/
public double getKa() {
return ka;
}
/**
* Returns the period.
*
* @return The period in seconds.
*/
public double getDt() {
return m_dt;
}
/**
* Calculates the feedforward from the gains and setpoints.
*

View File

@@ -32,9 +32,9 @@ public class ArmFeedforwardProto implements Protobuf<ArmFeedforward, ProtobufArm
@Override
public void pack(ProtobufArmFeedforward msg, ArmFeedforward value) {
msg.setKs(value.ks);
msg.setKg(value.kg);
msg.setKv(value.kv);
msg.setKa(value.ka);
msg.setKs(value.getKs());
msg.setKg(value.getKg());
msg.setKv(value.getKv());
msg.setKa(value.getKa());
}
}

View File

@@ -33,9 +33,9 @@ public class ElevatorFeedforwardProto
@Override
public void pack(ProtobufElevatorFeedforward msg, ElevatorFeedforward value) {
msg.setKs(value.ks);
msg.setKg(value.kg);
msg.setKv(value.kv);
msg.setKa(value.ka);
msg.setKs(value.getKs());
msg.setKg(value.getKg());
msg.setKv(value.getKv());
msg.setKa(value.getKa());
}
}

View File

@@ -40,9 +40,9 @@ public class ArmFeedforwardStruct implements Struct<ArmFeedforward> {
@Override
public void pack(ByteBuffer bb, ArmFeedforward value) {
bb.putDouble(value.ks);
bb.putDouble(value.kg);
bb.putDouble(value.kv);
bb.putDouble(value.ka);
bb.putDouble(value.getKs());
bb.putDouble(value.getKg());
bb.putDouble(value.getKv());
bb.putDouble(value.getKa());
}
}

View File

@@ -40,9 +40,9 @@ public class ElevatorFeedforwardStruct implements Struct<ElevatorFeedforward> {
@Override
public void pack(ByteBuffer bb, ElevatorFeedforward value) {
bb.putDouble(value.ks);
bb.putDouble(value.kg);
bb.putDouble(value.kv);
bb.putDouble(value.ka);
bb.putDouble(value.getKs());
bb.putDouble(value.getKg());
bb.putDouble(value.getKv());
bb.putDouble(value.getKa());
}
}

View File

@@ -27,8 +27,8 @@ frc::ArmFeedforward wpi::Protobuf<frc::ArmFeedforward>::Unpack(
void wpi::Protobuf<frc::ArmFeedforward>::Pack(
google::protobuf::Message* msg, const frc::ArmFeedforward& value) {
auto m = static_cast<wpi::proto::ProtobufArmFeedforward*>(msg);
m->set_ks(value.kS.value());
m->set_kg(value.kG.value());
m->set_kv(value.kV.value());
m->set_ka(value.kA.value());
m->set_ks(value.GetKs().value());
m->set_kg(value.GetKg().value());
m->set_kv(value.GetKv().value());
m->set_ka(value.GetKa().value());
}

View File

@@ -27,8 +27,8 @@ frc::ElevatorFeedforward wpi::Protobuf<frc::ElevatorFeedforward>::Unpack(
void wpi::Protobuf<frc::ElevatorFeedforward>::Pack(
google::protobuf::Message* msg, const frc::ElevatorFeedforward& value) {
auto m = static_cast<wpi::proto::ProtobufElevatorFeedforward*>(msg);
m->set_ks(value.kS());
m->set_kg(value.kG());
m->set_kv(value.kV());
m->set_ka(value.kA());
m->set_ks(value.GetKs().value());
m->set_kg(value.GetKg().value());
m->set_kv(value.GetKv().value());
m->set_ka(value.GetKa().value());
}

View File

@@ -26,8 +26,8 @@ frc::ArmFeedforward StructType::Unpack(std::span<const uint8_t> data) {
void StructType::Pack(std::span<uint8_t> data,
const frc::ArmFeedforward& value) {
wpi::PackStruct<kKsOff>(data, value.kS());
wpi::PackStruct<kKgOff>(data, value.kG());
wpi::PackStruct<kKvOff>(data, value.kV());
wpi::PackStruct<kKaOff>(data, value.kA());
wpi::PackStruct<kKsOff>(data, value.GetKs().value());
wpi::PackStruct<kKgOff>(data, value.GetKg().value());
wpi::PackStruct<kKvOff>(data, value.GetKv().value());
wpi::PackStruct<kKaOff>(data, value.GetKa().value());
}

View File

@@ -26,8 +26,8 @@ frc::ElevatorFeedforward StructType::Unpack(std::span<const uint8_t> data) {
void StructType::Pack(std::span<uint8_t> data,
const frc::ElevatorFeedforward& value) {
wpi::PackStruct<kKsOff>(data, value.kS());
wpi::PackStruct<kKgOff>(data, value.kG());
wpi::PackStruct<kKvOff>(data, value.kV());
wpi::PackStruct<kKaOff>(data, value.kA());
wpi::PackStruct<kKsOff>(data, value.GetKs().value());
wpi::PackStruct<kKgOff>(data, value.GetKg().value());
wpi::PackStruct<kKvOff>(data, value.GetKv().value());
wpi::PackStruct<kKaOff>(data, value.GetKa().value());
}

View File

@@ -192,17 +192,46 @@ class WPILIB_DLLEXPORT ArmFeedforward {
return MaxAchievableAcceleration(-maxVoltage, angle, velocity);
}
/**
* Returns the static gain.
*
* @return The static gain.
*/
units::volt_t GetKs() const { return kS; }
/**
* Returns the gravity gain.
*
* @return The gravity gain.
*/
units::volt_t GetKg() const { return kG; }
/**
* Returns the velocity gain.
*
* @return The velocity gain.
*/
units::unit_t<kv_unit> GetKv() const { return kV; }
/**
* Returns the acceleration gain.
*
* @return The acceleration gain.
*/
units::unit_t<ka_unit> GetKa() const { return kA; }
private:
/// The static gain, in volts.
const units::volt_t kS;
units::volt_t kS;
/// The gravity gain, in volts.
const units::volt_t kG;
units::volt_t kG;
/// The velocity gain, in volt seconds per radian.
const units::unit_t<kv_unit> kV;
/// The velocity gain, in V/(rad/s)volt seconds per radian.
units::unit_t<kv_unit> kV;
/// The acceleration gain, in volt seconds² per radian.
const units::unit_t<ka_unit> kA;
/// The acceleration gain, in V/(rad/s²).
units::unit_t<ka_unit> kA;
};
} // namespace frc

View File

@@ -182,17 +182,46 @@ class ElevatorFeedforward {
return MaxAchievableAcceleration(-maxVoltage, velocity);
}
/**
* Returns the static gain.
*
* @return The static gain.
*/
units::volt_t GetKs() const { return kS; }
/**
* Returns the gravity gain.
*
* @return The gravity gain.
*/
units::volt_t GetKg() const { return kG; }
/**
* Returns the velocity gain.
*
* @return The velocity gain.
*/
units::unit_t<kv_unit> GetKv() const { return kV; }
/**
* Returns the acceleration gain.
*
* @return The acceleration gain.
*/
units::unit_t<ka_unit> GetKa() const { return kA; }
private:
/// The static gain.
const units::volt_t kS;
units::volt_t kS;
/// The gravity gain.
const units::volt_t kG;
units::volt_t kG;
/// The velocity gain.
const units::unit_t<kv_unit> kV;
units::unit_t<kv_unit> kV;
/// The acceleration gain.
const units::unit_t<ka_unit> kA;
units::unit_t<ka_unit> kA;
};
} // namespace frc

View File

@@ -245,16 +245,44 @@ class SimpleMotorFeedforward {
return MaxAchievableAcceleration(-maxVoltage, velocity);
}
/** The static gain. */
const units::volt_t kS;
/**
* Returns the static gain.
*
* @return The static gain.
*/
units::volt_t GetKs() const { return kS; }
/** The velocity gain. */
const units::unit_t<kv_unit> kV;
/**
* Returns the velocity gain.
*
* @return The velocity gain.
*/
units::unit_t<kv_unit> GetKv() const { return kV; }
/** The acceleration gain. */
const units::unit_t<ka_unit> kA;
/**
* Returns the acceleration gain.
*
* @return The acceleration gain.
*/
units::unit_t<ka_unit> GetKa() const { return kA; }
/**
* Returns the period.
*
* @return The period.
*/
units::second_t GetDt() const { return m_dt; }
private:
/** The static gain. */
units::volt_t kS;
/** The velocity gain. */
units::unit_t<kv_unit> kV;
/** The acceleration gain. */
units::unit_t<ka_unit> kA;
/** The period. */
units::second_t m_dt;
};

View File

@@ -19,9 +19,9 @@ class ArmFeedforwardProtoTest {
ArmFeedforward.proto.pack(proto, DATA);
ArmFeedforward data = ArmFeedforward.proto.unpack(proto);
assertEquals(DATA.ks, data.ks);
assertEquals(DATA.kg, data.kg);
assertEquals(DATA.kv, data.kv);
assertEquals(DATA.ka, data.ka);
assertEquals(DATA.getKs(), data.getKs());
assertEquals(DATA.getKg(), data.getKg());
assertEquals(DATA.getKv(), data.getKv());
assertEquals(DATA.getKa(), data.getKa());
}
}

View File

@@ -19,9 +19,9 @@ class ElevatorFeedforwardProtoTest {
ElevatorFeedforward.proto.pack(proto, DATA);
ElevatorFeedforward data = ElevatorFeedforward.proto.unpack(proto);
assertEquals(DATA.ks, data.ks);
assertEquals(DATA.kg, data.kg);
assertEquals(DATA.kv, data.kv);
assertEquals(DATA.ka, data.ka);
assertEquals(DATA.getKs(), data.getKs());
assertEquals(DATA.getKg(), data.getKg());
assertEquals(DATA.getKv(), data.getKv());
assertEquals(DATA.getKa(), data.getKa());
}
}

View File

@@ -22,9 +22,9 @@ class ArmFeedforwardStructTest {
buffer.rewind();
ArmFeedforward data = ArmFeedforward.struct.unpack(buffer);
assertEquals(DATA.ks, data.ks);
assertEquals(DATA.kg, data.kg);
assertEquals(DATA.kv, data.kv);
assertEquals(DATA.ka, data.ka);
assertEquals(DATA.getKs(), data.getKs());
assertEquals(DATA.getKg(), data.getKg());
assertEquals(DATA.getKv(), data.getKv());
assertEquals(DATA.getKa(), data.getKa());
}
}

View File

@@ -22,9 +22,9 @@ class ElevatorFeedforwardStructTest {
buffer.rewind();
ElevatorFeedforward data = ElevatorFeedforward.struct.unpack(buffer);
assertEquals(DATA.ks, data.ks);
assertEquals(DATA.kg, data.kg);
assertEquals(DATA.kv, data.kv);
assertEquals(DATA.ka, data.ka);
assertEquals(DATA.getKs(), data.getKs());
assertEquals(DATA.getKg(), data.getKg());
assertEquals(DATA.getKv(), data.getKv());
assertEquals(DATA.getKa(), data.getKa());
}
}

View File

@@ -26,8 +26,8 @@ TEST(ArmFeedforwardProtoTest, Roundtrip) {
ProtoType::Pack(proto, kExpectedData);
ArmFeedforward unpacked_data = ProtoType::Unpack(*proto);
EXPECT_EQ(kExpectedData.kS.value(), unpacked_data.kS.value());
EXPECT_EQ(kExpectedData.kG.value(), unpacked_data.kG.value());
EXPECT_EQ(kExpectedData.kV.value(), unpacked_data.kV.value());
EXPECT_EQ(kExpectedData.kA.value(), unpacked_data.kA.value());
EXPECT_EQ(kExpectedData.GetKs().value(), unpacked_data.GetKs().value());
EXPECT_EQ(kExpectedData.GetKg().value(), unpacked_data.GetKg().value());
EXPECT_EQ(kExpectedData.GetKv().value(), unpacked_data.GetKv().value());
EXPECT_EQ(kExpectedData.GetKa().value(), unpacked_data.GetKa().value());
}

View File

@@ -27,8 +27,8 @@ TEST(ElevatorFeedforwardProtoTest, Roundtrip) {
ProtoType::Pack(proto, kExpectedData);
ElevatorFeedforward unpacked_data = ProtoType::Unpack(*proto);
EXPECT_EQ(kExpectedData.kS.value(), unpacked_data.kS.value());
EXPECT_EQ(kExpectedData.kG.value(), unpacked_data.kG.value());
EXPECT_EQ(kExpectedData.kV.value(), unpacked_data.kV.value());
EXPECT_EQ(kExpectedData.kA.value(), unpacked_data.kA.value());
EXPECT_EQ(kExpectedData.GetKs().value(), unpacked_data.GetKs().value());
EXPECT_EQ(kExpectedData.GetKg().value(), unpacked_data.GetKg().value());
EXPECT_EQ(kExpectedData.GetKv().value(), unpacked_data.GetKv().value());
EXPECT_EQ(kExpectedData.GetKa().value(), unpacked_data.GetKa().value());
}

View File

@@ -26,8 +26,8 @@ TEST(ArmFeedforwardStructTest, Roundtrip) {
ArmFeedforward unpacked_data = StructType::Unpack(buffer);
EXPECT_EQ(kExpectedData.kS.value(), unpacked_data.kS.value());
EXPECT_EQ(kExpectedData.kG.value(), unpacked_data.kG.value());
EXPECT_EQ(kExpectedData.kV.value(), unpacked_data.kV.value());
EXPECT_EQ(kExpectedData.kA.value(), unpacked_data.kA.value());
EXPECT_EQ(kExpectedData.GetKs().value(), unpacked_data.GetKs().value());
EXPECT_EQ(kExpectedData.GetKg().value(), unpacked_data.GetKg().value());
EXPECT_EQ(kExpectedData.GetKv().value(), unpacked_data.GetKv().value());
EXPECT_EQ(kExpectedData.GetKa().value(), unpacked_data.GetKa().value());
}

View File

@@ -27,8 +27,8 @@ TEST(ElevatorFeedforwardStructTest, Roundtrip) {
ElevatorFeedforward unpacked_data = StructType::Unpack(buffer);
EXPECT_EQ(kExpectedData.kS.value(), unpacked_data.kS.value());
EXPECT_EQ(kExpectedData.kG.value(), unpacked_data.kG.value());
EXPECT_EQ(kExpectedData.kV.value(), unpacked_data.kV.value());
EXPECT_EQ(kExpectedData.kA.value(), unpacked_data.kA.value());
EXPECT_EQ(kExpectedData.GetKs().value(), unpacked_data.GetKs().value());
EXPECT_EQ(kExpectedData.GetKg().value(), unpacked_data.GetKg().value());
EXPECT_EQ(kExpectedData.GetKv().value(), unpacked_data.GetKv().value());
EXPECT_EQ(kExpectedData.GetKa().value(), unpacked_data.GetKa().value());
}