diff --git a/wpilibcExamples/src/main/cpp/snippets/AccelerometerFilter/cpp/Robot.cpp b/wpilibcExamples/src/main/cpp/snippets/AccelerometerFilter/cpp/Robot.cpp new file mode 100644 index 0000000000..df9973578e --- /dev/null +++ b/wpilibcExamples/src/main/cpp/snippets/AccelerometerFilter/cpp/Robot.cpp @@ -0,0 +1,35 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +#include +#include +#include +#include + +/** + * Accelerometer filtering snippets for frc-docs. + * https://docs.wpilib.org/en/stable/docs/software/hardware-apis/sensors/accelerometers-software.html + */ +class Robot : public frc::TimedRobot { + public: + void RobotPeriodic() override { + double XAccel = m_accelerometer.GetX(); + // Get the filtered X acceleration + double filteredXAccel = m_xAccelFilter.Calculate(XAccel); + + frc::SmartDashboard::PutNumber("X Acceleration", XAccel); + frc::SmartDashboard::PutNumber("Filtered X Acceleration", filteredXAccel); + } + + private: + frc::BuiltInAccelerometer m_accelerometer; + frc::LinearFilter m_xAccelFilter = + frc::LinearFilter::MovingAverage(10); +}; + +#ifndef RUNNING_FRC_TESTS +int main() { + return frc::StartRobot(); +} +#endif diff --git a/wpilibcExamples/src/main/cpp/snippets/snippets.json b/wpilibcExamples/src/main/cpp/snippets/snippets.json index 43d37a4867..db114169f0 100644 --- a/wpilibcExamples/src/main/cpp/snippets/snippets.json +++ b/wpilibcExamples/src/main/cpp/snippets/snippets.json @@ -144,5 +144,15 @@ ], "foldername": "AccelerometerCollision", "gradlebase": "cpp" + }, + { + "name": "AccelerometerFilter", + "description": "Snippets of filterning Accelerometer for frc-docs.", + "tags": [ + "Hardware", + "Accelerometer" + ], + "foldername": "AccelerometerFilter", + "gradlebase": "cpp" } ] diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/accelerometerfilter/Main.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/accelerometerfilter/Main.java new file mode 100644 index 0000000000..149c542bb2 --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/accelerometerfilter/Main.java @@ -0,0 +1,25 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package edu.wpi.first.wpilibj.snippets.accelerometerfilter; + +import edu.wpi.first.wpilibj.RobotBase; + +/** + * Do NOT add any static variables to this class, or any initialization at all. Unless you know what + * you are doing, do not modify this file except to change the parameter class to the startRobot + * call. + */ +public final class Main { + private Main() {} + + /** + * Main initialization function. Do not perform any initialization here. + * + *

If you change your main robot class, change the parameter type. + */ + public static void main(String... args) { + RobotBase.startRobot(Robot::new); + } +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/accelerometerfilter/Robot.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/accelerometerfilter/Robot.java new file mode 100644 index 0000000000..1e09c6c89b --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/accelerometerfilter/Robot.java @@ -0,0 +1,31 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package edu.wpi.first.wpilibj.snippets.accelerometerfilter; + +import edu.wpi.first.math.filter.LinearFilter; +import edu.wpi.first.wpilibj.BuiltInAccelerometer; +import edu.wpi.first.wpilibj.TimedRobot; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; + +/** + * Accelerometer filtering snippets for frc-docs. + * https://docs.wpilib.org/en/stable/docs/software/hardware-apis/sensors/accelerometers-software.html + */ +public class Robot extends TimedRobot { + BuiltInAccelerometer m_accelerometer = new BuiltInAccelerometer(); + // Create a LinearFilter that will calculate a moving average of the measured X acceleration over + // the past 10 iterations of the main loop + LinearFilter m_xAccelFilter = LinearFilter.movingAverage(10); + + @Override + public void robotPeriodic() { + double xAccel = m_accelerometer.getX(); + // Get the filtered X acceleration + double filteredXAccel = m_xAccelFilter.calculate(xAccel); + + SmartDashboard.putNumber("X Acceleration", xAccel); + SmartDashboard.putNumber("Filtered X Acceleration", filteredXAccel); + } +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/snippets.json b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/snippets.json index 1edef3dc4a..f3f98a4752 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/snippets.json +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/snippets/snippets.json @@ -158,5 +158,16 @@ "foldername": "accelerometercollision", "gradlebase": "java", "mainclass": "Main" + }, + { + "name": "AccelerometerFilter", + "description": "Snippets of filtering Accelerometer for frc-docs.", + "tags": [ + "Hardware", + "Accelerometer" + ], + "foldername": "accelerometerfilter", + "gradlebase": "java", + "mainclass": "Main" } ]