2023-04-08 13:14:18 -05:00
<!DOCTYPE HTML>
< html lang = "en" >
< head >
2023-08-09 16:23:30 -05:00
<!-- Generated by javadoc (17) -->
< title > SwervePoseEstimator2 (YAGSL-Lib API)< / title >
2023-04-08 13:14:18 -05:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta name = "description" content = "declaration: package: swervelib.math, class: SwervePoseEstimator2" >
< meta name = "generator" content = "javadoc/ClassWriterImpl" >
< link rel = "stylesheet" type = "text/css" href = "../../stylesheet.css" title = "Style" >
< link rel = "stylesheet" type = "text/css" href = "../../script-dir/jquery-ui.min.css" title = "Style" >
< link rel = "stylesheet" type = "text/css" href = "../../jquery-ui.overrides.css" title = "Style" >
< script type = "text/javascript" src = "../../script.js" > < / script >
2023-08-09 16:23:30 -05:00
< script type = "text/javascript" src = "../../script-dir/jquery-3.6.1.min.js" > < / script >
2023-04-08 13:14:18 -05:00
< script type = "text/javascript" src = "../../script-dir/jquery-ui.min.js" > < / script >
< / head >
< body class = "class-declaration-page" >
< script type = "text/javascript" > v a r e v e n R o w C o l o r = " e v e n - r o w - c o l o r " ;
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../";
loadScripts(document, 'script');< / script >
< noscript >
< div > JavaScript is disabled on your browser.< / div >
< / noscript >
< div class = "flex-box" >
< header role = "banner" class = "flex-header" >
< nav role = "navigation" >
<!-- ========= START OF TOP NAVBAR ======= -->
< div class = "top-nav" id = "navbar-top" >
< div class = "skip-nav" > < a href = "#skip-navbar-top" title = "Skip navigation links" > Skip navigation links< / a > < / div >
< ul id = "navbar-top-firstrow" class = "nav-list" title = "Navigation" >
< li > < a href = "../../index.html" > Overview< / a > < / li >
< li > < a href = "package-summary.html" > Package< / a > < / li >
< li class = "nav-bar-cell1-rev" > Class< / li >
< li > < a href = "package-tree.html" > Tree< / a > < / li >
2023-08-09 16:23:30 -05:00
< li > < a href = "../../index-all.html" > Index< / a > < / li >
2023-04-08 13:14:18 -05:00
< li > < a href = "../../help-doc.html#class" > Help< / a > < / li >
< / ul >
< / div >
< div class = "sub-nav" >
< div >
< ul class = "sub-nav-list" >
< li > Summary: < / li >
2023-08-09 16:23:30 -05:00
< li > Nested | < / li >
< li > Field | < / li >
2023-04-08 13:14:18 -05:00
< li > < a href = "#constructor-summary" > Constr< / a > | < / li >
< li > < a href = "#method-summary" > Method< / a > < / li >
< / ul >
< ul class = "sub-nav-list" >
< li > Detail: < / li >
2023-08-09 16:23:30 -05:00
< li > Field | < / li >
2023-04-08 13:14:18 -05:00
< li > < a href = "#constructor-detail" > Constr< / a > | < / li >
< li > < a href = "#method-detail" > Method< / a > < / li >
< / ul >
< / div >
< div class = "nav-list-search" > < label for = "search-input" > SEARCH:< / label >
< input type = "text" id = "search-input" value = "search" disabled = "disabled" >
< input type = "reset" id = "reset-button" value = "reset" disabled = "disabled" >
< / div >
< / div >
<!-- ========= END OF TOP NAVBAR ========= -->
< span class = "skip-nav" id = "skip-navbar-top" > < / span > < / nav >
< / header >
< div class = "flex-content" >
< main role = "main" >
<!-- ======== START OF CLASS DATA ======== -->
< div class = "header" >
< div class = "sub-title" > < span class = "package-label-in-type" > Package< / span > < a href = "package-summary.html" > swervelib.math< / a > < / div >
< h1 title = "Class SwervePoseEstimator2" class = "title" > Class SwervePoseEstimator2< / h1 >
< / div >
< div class = "inheritance" title = "Inheritance Tree" > < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title = "class or interface in java.lang" class = "external-link" > java.lang.Object< / a >
< div class = "inheritance" > swervelib.math.SwervePoseEstimator2< / div >
< / div >
< section class = "class-description" id = "class-description" >
< hr >
< div class = "type-signature" > < span class = "modifiers" > public class < / span > < span class = "element-name type-name-label" > SwervePoseEstimator2< / span >
< span class = "extends-implements" > extends < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title = "class or interface in java.lang" class = "external-link" > Object< / a > < / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Clone of < code > SwerveDrivePoseEstimator< / code > which takes into account gyroscope pitch and roll to
achieve a more accurate estimation, originally made by Team 1466.< / div >
2023-04-08 13:14:18 -05:00
< / section >
< section class = "summary" >
< ul class = "summary-list" >
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
< li >
< section class = "constructor-summary" id = "constructor-summary" >
< h2 > Constructor Summary< / h2 >
< div class = "caption" > < span > Constructors< / span > < / div >
< div class = "summary-table two-column-summary" >
< div class = "table-header col-first" > Constructor< / div >
< div class = "table-header col-last" > Description< / div >
< div class = "col-constructor-name even-row-color" > < code > < a href = "#%3Cinit%3E(edu.wpi.first.math.kinematics.SwerveDriveKinematics,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition%5B%5D,edu.wpi.first.math.geometry.Pose2d)" class = "member-name-link" > SwervePoseEstimator2< / a > < wbr > (edu.wpi.first.math.kinematics.SwerveDriveKinematics kinematics,
edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions,
edu.wpi.first.math.geometry.Pose2d initialPoseMeters)< / code > < / div >
< div class = "col-last even-row-color" >
2023-08-09 16:23:30 -05:00
< div class = "block" > Constructs a SwerveDrivePoseEstimator with default standard deviations for the model and vision
measurements.< / div >
2023-04-08 13:14:18 -05:00
< / div >
< div class = "col-constructor-name odd-row-color" > < code > < a href = "#%3Cinit%3E(edu.wpi.first.math.kinematics.SwerveDriveKinematics,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition%5B%5D,edu.wpi.first.math.geometry.Pose2d,edu.wpi.first.math.Matrix,edu.wpi.first.math.Matrix)" class = "member-name-link" > SwervePoseEstimator2< / a > < wbr > (edu.wpi.first.math.kinematics.SwerveDriveKinematics kinematics,
edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions,
edu.wpi.first.math.geometry.Pose2d initialPoseMeters,
edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> stateStdDevs,
edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)< / code > < / div >
< div class = "col-last odd-row-color" >
< div class = "block" > Constructs a SwerveDrivePoseEstimator.< / div >
< / div >
< / div >
< / section >
< / li >
<!-- ========== METHOD SUMMARY =========== -->
< li >
< section class = "method-summary" id = "method-summary" >
< h2 > Method Summary< / h2 >
< div id = "method-summary-table" >
< div class = "table-tabs" role = "tablist" aria-orientation = "horizontal" > < button id = "method-summary-table-tab0" role = "tab" aria-selected = "true" aria-controls = "method-summary-table.tabpanel" tabindex = "0" onkeydown = "switchTab(event)" onclick = "show('method-summary-table', 'method-summary-table', 3)" class = "active-table-tab" > All Methods< / button > < button id = "method-summary-table-tab2" role = "tab" aria-selected = "false" aria-controls = "method-summary-table.tabpanel" tabindex = "-1" onkeydown = "switchTab(event)" onclick = "show('method-summary-table', 'method-summary-table-tab2', 3)" class = "table-tab" > Instance Methods< / button > < button id = "method-summary-table-tab4" role = "tab" aria-selected = "false" aria-controls = "method-summary-table.tabpanel" tabindex = "-1" onkeydown = "switchTab(event)" onclick = "show('method-summary-table', 'method-summary-table-tab4', 3)" class = "table-tab" > Concrete Methods< / button > < / div >
< div id = "method-summary-table.tabpanel" role = "tabpanel" >
< div class = "summary-table three-column-summary" aria-labelledby = "method-summary-table-tab0" >
< div class = "table-header col-first" > Modifier and Type< / div >
< div class = "table-header col-second" > Method< / div >
< div class = "table-header col-last" > Description< / div >
< div class = "col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > void< / code > < / div >
< div class = "col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double)" class = "member-name-link" > addVisionMeasurement< / a > < wbr > (edu.wpi.first.math.geometry.Pose2d visionRobotPoseMeters,
double timestampSeconds)< / code > < / div >
< div class = "col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Adds a vision measurement to the Kalman Filter.< / div >
< / div >
< div class = "col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > void< / code > < / div >
< div class = "col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double,edu.wpi.first.math.Matrix)" class = "member-name-link" > addVisionMeasurement< / a > < wbr > (edu.wpi.first.math.geometry.Pose2d visionRobotPoseMeters,
double timestampSeconds,
edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)< / code > < / div >
< div class = "col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Adds a vision measurement to the Kalman Filter.< / div >
< / div >
< div class = "col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > edu.wpi.first.math.geometry.Pose2d< / code > < / div >
< div class = "col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#getEstimatedPosition()" class = "member-name-link" > getEstimatedPosition< / a > ()< / code > < / div >
< div class = "col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Gets the estimated robot pose.< / div >
< / div >
< div class = "col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > void< / code > < / div >
< div class = "col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#resetPosition(edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition%5B%5D,edu.wpi.first.math.geometry.Pose2d)" class = "member-name-link" > resetPosition< / a > < wbr > (edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions,
edu.wpi.first.math.geometry.Pose2d poseMeters)< / code > < / div >
< div class = "col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Resets the robot's position on the field.< / div >
< / div >
< div class = "col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > void< / code > < / div >
< div class = "col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#setVisionMeasurementStdDevs(edu.wpi.first.math.Matrix)" class = "member-name-link" > setVisionMeasurementStdDevs< / a > < wbr > (edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)< / code > < / div >
< div class = "col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Sets the pose estimator's trust of global measurements.< / div >
< / div >
< div class = "col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > edu.wpi.first.math.geometry.Pose2d< / code > < / div >
< div class = "col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#update(edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition%5B%5D)" class = "member-name-link" > update< / a > < wbr > (edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.geometry.Rotation2d gyroPitch,
edu.wpi.first.math.geometry.Rotation2d gyroRoll,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions)< / code > < / div >
< div class = "col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Updates the pose estimator with wheel encoder and gyro information.< / div >
< / div >
< div class = "col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > edu.wpi.first.math.geometry.Pose2d< / code > < / div >
< div class = "col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" > < code > < a href = "#updateWithTime(double,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition%5B%5D)" class = "member-name-link" > updateWithTime< / a > < wbr > (double currentTimeSeconds,
edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.geometry.Rotation2d gyroPitch,
edu.wpi.first.math.geometry.Rotation2d gyroRoll,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions)< / code > < / div >
< div class = "col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4" >
< div class = "block" > Updates the pose estimator with wheel encoder and gyro information.< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "inherited-list" >
< h3 id = "methods-inherited-from-class-java.lang.Object" > Methods inherited from class java.lang.< a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title = "class or interface in java.lang" class = "external-link" > Object< / a > < / h3 >
< code > < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title = "class or interface in java.lang" class = "external-link" > clone< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title = "class or interface in java.lang" class = "external-link" > equals< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title = "class or interface in java.lang" class = "external-link" > finalize< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title = "class or interface in java.lang" class = "external-link" > getClass< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title = "class or interface in java.lang" class = "external-link" > hashCode< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title = "class or interface in java.lang" class = "external-link" > notify< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title = "class or interface in java.lang" class = "external-link" > notifyAll< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title = "class or interface in java.lang" class = "external-link" > toString< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title = "class or interface in java.lang" class = "external-link" > wait< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title = "class or interface in java.lang" class = "external-link" > wait< / a > , < a href = "https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title = "class or interface in java.lang" class = "external-link" > wait< / a > < / code > < / div >
< / section >
< / li >
< / ul >
< / section >
< section class = "details" >
< ul class = "details-list" >
<!-- ========= CONSTRUCTOR DETAIL ======== -->
< li >
< section class = "constructor-details" id = "constructor-detail" >
< h2 > Constructor Details< / h2 >
< ul class = "member-list" >
< li >
< section class = "detail" id = "<init>(edu.wpi.first.math.kinematics.SwerveDriveKinematics,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition[],edu.wpi.first.math.geometry.Pose2d)" >
< h3 > SwervePoseEstimator2< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "element-name" > SwervePoseEstimator2< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.kinematics.SwerveDriveKinematics kinematics,
edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions,
edu.wpi.first.math.geometry.Pose2d initialPoseMeters)< / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Constructs a SwerveDrivePoseEstimator with default standard deviations for the model and vision
measurements.
2023-04-08 13:14:18 -05:00
< p > The default standard deviations of the model states are 0.1 meters for x, 0.1 meters for y,
2023-08-09 16:23:30 -05:00
and 0.1 radians for heading. The default standard deviations of the vision measurements are 0.9
meters for x, 0.9 meters for y, and 0.9 radians for heading.< / div >
2023-04-08 13:14:18 -05:00
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > kinematics< / code > - A correctly-configured kinematics object for your drivetrain.< / dd >
< dd > < code > gyroAngle< / code > - The current gyro angle.< / dd >
< dd > < code > modulePositions< / code > - The current distance measurements and rotations of the swerve modules.< / dd >
< dd > < code > initialPoseMeters< / code > - The starting pose estimate.< / dd >
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "<init>(edu.wpi.first.math.kinematics.SwerveDriveKinematics,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition[],edu.wpi.first.math.geometry.Pose2d,edu.wpi.first.math.Matrix,edu.wpi.first.math.Matrix)" >
< h3 > SwervePoseEstimator2< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "element-name" > SwervePoseEstimator2< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.kinematics.SwerveDriveKinematics kinematics,
edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions,
edu.wpi.first.math.geometry.Pose2d initialPoseMeters,
edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> stateStdDevs,
edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)< / span > < / div >
< div class = "block" > Constructs a SwerveDrivePoseEstimator.< / div >
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > kinematics< / code > - A correctly-configured kinematics object for your drivetrain.< / dd >
< dd > < code > gyroAngle< / code > - The current gyro angle.< / dd >
< dd > < code > modulePositions< / code > - The current distance and rotation measurements of the swerve modules.< / dd >
< dd > < code > initialPoseMeters< / code > - The starting pose estimate.< / dd >
2023-08-09 16:23:30 -05:00
< dd > < code > stateStdDevs< / code > - Standard deviations of the pose estimate (x position in meters, y position
in meters, and heading in radians). Increase these numbers to trust your state estimate
less.< / dd >
< dd > < code > visionMeasurementStdDevs< / code > - Standard deviations of the vision pose measurement (x position
in meters, y position in meters, and heading in radians). Increase these numbers to trust
the vision pose measurement less.< / dd >
2023-04-08 13:14:18 -05:00
< / dl >
< / section >
< / li >
< / ul >
< / section >
< / li >
<!-- ============ METHOD DETAIL ========== -->
< li >
< section class = "method-details" id = "method-detail" >
< h2 > Method Details< / h2 >
< ul class = "member-list" >
< li >
< section class = "detail" id = "setVisionMeasurementStdDevs(edu.wpi.first.math.Matrix)" >
< h3 > setVisionMeasurementStdDevs< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > void< / span > < span class = "element-name" > setVisionMeasurementStdDevs< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)< / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Sets the pose estimator's trust of global measurements. This might be used to change trust in
vision measurements after the autonomous period, or to change trust as distance to a vision
target increases.< / div >
2023-04-08 13:14:18 -05:00
< dl class = "notes" >
< dt > Parameters:< / dt >
2023-08-09 16:23:30 -05:00
< dd > < code > visionMeasurementStdDevs< / code > - Standard deviations of the vision measurements. Increase these
numbers to trust global measurements from vision less. This matrix is in the form [x, y,
theta]^T, with units in meters and radians.< / dd >
2023-04-08 13:14:18 -05:00
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "resetPosition(edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition[],edu.wpi.first.math.geometry.Pose2d)" >
< h3 > resetPosition< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > void< / span > < span class = "element-name" > resetPosition< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions,
edu.wpi.first.math.geometry.Pose2d poseMeters)< / span > < / div >
< div class = "block" > Resets the robot's position on the field.
< p > The gyroscope angle does not need to be reset in the user's robot code. The library
automatically takes care of offsetting the gyro angle.< / div >
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > gyroAngle< / code > - The angle reported by the gyroscope.< / dd >
< dd > < code > modulePositions< / code > - The current distance measurements and rotations of the swerve modules.< / dd >
< dd > < code > poseMeters< / code > - The position on the field that your robot is at.< / dd >
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "getEstimatedPosition()" >
< h3 > getEstimatedPosition< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > edu.wpi.first.math.geometry.Pose2d< / span > < span class = "element-name" > getEstimatedPosition< / span > ()< / div >
< div class = "block" > Gets the estimated robot pose.< / div >
< dl class = "notes" >
< dt > Returns:< / dt >
< dd > The estimated robot pose in meters.< / dd >
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double)" >
< h3 > addVisionMeasurement< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > void< / span > < span class = "element-name" > addVisionMeasurement< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.geometry.Pose2d visionRobotPoseMeters,
double timestampSeconds)< / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Adds a vision measurement to the Kalman Filter. This will correct the odometry pose estimate
while still accounting for measurement noise.
2023-04-08 13:14:18 -05:00
< p > This method can be called as infrequently as you want, as long as you are calling < code > SwerveDrivePoseEstimator.update(edu.wpi.first.math.geometry.Rotation2d, edu.wpi.first.math.kinematics.SwerveModulePosition[])< / code > every loop.
< p > To promote stability of the pose estimate and make it robust to bad vision data, we
2023-08-09 16:23:30 -05:00
recommend only adding vision measurements that are already within one meter or so of the
current pose estimate.< / div >
2023-04-08 13:14:18 -05:00
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > visionRobotPoseMeters< / code > - The pose of the robot as measured by the vision camera.< / dd >
2023-08-09 16:23:30 -05:00
< dd > < code > timestampSeconds< / code > - The timestamp of the vision measurement in seconds. Note that if you
don't use your own time source by calling < code > SwerveDrivePoseEstimator.updateWithTime(double, Rotation2d, SwerveModulePosition[])< / code > then
you must use a timestamp with an epoch since FPGA startup (i.e., the epoch of this
timestamp is the same epoch as < code > Timer.getFPGATimestamp()< / code > .)
This means that you should use < code > Timer.getFPGATimestamp()< / code > as
your time source or sync the epochs.< / dd >
2023-04-08 13:14:18 -05:00
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "addVisionMeasurement(edu.wpi.first.math.geometry.Pose2d,double,edu.wpi.first.math.Matrix)" >
< h3 > addVisionMeasurement< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > void< / span > < span class = "element-name" > addVisionMeasurement< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.geometry.Pose2d visionRobotPoseMeters,
double timestampSeconds,
edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> visionMeasurementStdDevs)< / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Adds a vision measurement to the Kalman Filter. This will correct the odometry pose estimate
while still accounting for measurement noise.
2023-04-08 13:14:18 -05:00
< p > This method can be called as infrequently as you want, as long as you are calling < code > SwerveDrivePoseEstimator.update(edu.wpi.first.math.geometry.Rotation2d, edu.wpi.first.math.kinematics.SwerveModulePosition[])< / code > every loop.
< p > To promote stability of the pose estimate and make it robust to bad vision data, we
2023-08-09 16:23:30 -05:00
recommend only adding vision measurements that are already within one meter or so of the
current pose estimate.
2023-04-08 13:14:18 -05:00
< p > Note that the vision measurement standard deviations passed into this method will continue
2023-08-09 16:23:30 -05:00
to apply to future measurements until a subsequent call to < code > PoseEstimator.setVisionMeasurementStdDevs(Matrix)< / code > or this method.< / div >
2023-04-08 13:14:18 -05:00
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > visionRobotPoseMeters< / code > - The pose of the robot as measured by the vision camera.< / dd >
2023-08-09 16:23:30 -05:00
< dd > < code > timestampSeconds< / code > - The timestamp of the vision measurement in seconds. Note that if you
don't use your own time source by calling < code > SwerveDrivePoseEstimator.updateWithTime(double, Rotation2d, SwerveModulePosition[])< / code > , then
you must use a timestamp with an epoch since FPGA startup (i.e., the epoch of this
timestamp is the same epoch as < code > Timer.getFPGATimestamp()< / code > ).
This means that you should use < code > Timer.getFPGATimestamp()< / code > as
your time source in this case.< / dd >
< dd > < code > visionMeasurementStdDevs< / code > - Standard deviations of the vision pose measurement (x position
in meters, y position in meters, and heading in radians). Increase these numbers to trust
the vision pose measurement less.< / dd >
2023-04-08 13:14:18 -05:00
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "update(edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition[])" >
< h3 > update< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > edu.wpi.first.math.geometry.Pose2d< / span > < span class = "element-name" > update< / span > < wbr > < span class = "parameters" > (edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.geometry.Rotation2d gyroPitch,
edu.wpi.first.math.geometry.Rotation2d gyroRoll,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions)< / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Updates the pose estimator with wheel encoder and gyro information. This should be called every
loop.< / div >
2023-04-08 13:14:18 -05:00
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > gyroAngle< / code > - The current gyro angle.< / dd >
< dd > < code > gyroPitch< / code > - The current gyro pitch.< / dd >
< dd > < code > gyroRoll< / code > - The current gyro roll.< / dd >
< dd > < code > modulePositions< / code > - The current distance measurements and rotations of the swerve modules.< / dd >
< dt > Returns:< / dt >
< dd > The estimated pose of the robot in meters.< / dd >
< / dl >
< / section >
< / li >
< li >
< section class = "detail" id = "updateWithTime(double,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.geometry.Rotation2d,edu.wpi.first.math.kinematics.SwerveModulePosition[])" >
< h3 > updateWithTime< / h3 >
< div class = "member-signature" > < span class = "modifiers" > public< / span > < span class = "return-type" > edu.wpi.first.math.geometry.Pose2d< / span > < span class = "element-name" > updateWithTime< / span > < wbr > < span class = "parameters" > (double currentTimeSeconds,
edu.wpi.first.math.geometry.Rotation2d gyroAngle,
edu.wpi.first.math.geometry.Rotation2d gyroPitch,
edu.wpi.first.math.geometry.Rotation2d gyroRoll,
edu.wpi.first.math.kinematics.SwerveModulePosition[] modulePositions)< / span > < / div >
2023-08-09 16:23:30 -05:00
< div class = "block" > Updates the pose estimator with wheel encoder and gyro information. This should be called every
loop.< / div >
2023-04-08 13:14:18 -05:00
< dl class = "notes" >
< dt > Parameters:< / dt >
< dd > < code > currentTimeSeconds< / code > - Time at which this method was called, in seconds.< / dd >
< dd > < code > gyroAngle< / code > - The current gyro angle.< / dd >
< dd > < code > gyroPitch< / code > - The current gyro pitch.< / dd >
< dd > < code > gyroRoll< / code > - The current gyro roll.< / dd >
< dd > < code > modulePositions< / code > - The current distance measurements and rotations of the swerve modules.< / dd >
< dt > Returns:< / dt >
< dd > The estimated pose of the robot in meters.< / dd >
< / dl >
< / section >
< / li >
< / ul >
< / section >
< / li >
< / ul >
< / section >
<!-- ========= END OF CLASS DATA ========= -->
< / main >
< / div >
< / div >
< / body >
< / html >