2023-04-08 13:14:18 -05:00
<!DOCTYPE HTML>
< html lang = "en" >
< head >
2023-08-29 19:59:07 -05:00
<!-- Generated by javadoc (17) on Tue Aug 29 19:54:45 CDT 2023 -->
< title > SwervePoseEstimator2< / 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" >
2023-08-29 19:59:07 -05:00
< meta name = "dc.created" content = "2023-08-29" >
2023-04-08 13:14:18 -05:00
< 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-29 19:59:07 -05:00
< script type = "text/javascript" src = "../../script-dir/jquery-3.5.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-29 19:59:07 -05:00
< li > < a href = "../../index-files/index-1.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-29 19:59:07 -05:00
< li > < a href = "#nested-class-summary" > Nested< / a > | < / li >
< li > < a href = "#field-summary" > Field< / a > | < / 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-29 19:59:07 -05:00
< li > < a href = "#field-detail" > Field< / a > | < / 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-29 19:59:07 -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" >
2023-08-29 19:59:07 -05:00
<!-- ======== NESTED CLASS SUMMARY ======== -->
< li >
< section class = "nested-class-summary" id = "nested-class-summary" >
< h2 > Nested Class Summary< / h2 >
< div class = "caption" > < span > Nested Classes< / span > < / div >
< div class = "summary-table three-column-summary" >
< div class = "table-header col-first" > Modifier and Type< / div >
< div class = "table-header col-second" > Class< / div >
< div class = "table-header col-last" > Description< / div >
< div class = "col-first even-row-color" > < code > private class < / code > < / div >
< div class = "col-second even-row-color" > < code > < a href = "SwervePoseEstimator2.InterpolationRecord.html" class = "type-name-link" title = "class in swervelib.math" > SwervePoseEstimator2.InterpolationRecord< / a > < / code > < / div >
< div class = "col-last even-row-color" >
< div class = "block" > Represents an odometry record.< / div >
< / div >
< / div >
< / section >
< / li >
<!-- =========== FIELD SUMMARY =========== -->
< li >
< section class = "field-summary" id = "field-summary" >
< h2 > Field Summary< / h2 >
< div class = "caption" > < span > Fields< / span > < / div >
< div class = "summary-table three-column-summary" >
< div class = "table-header col-first" > Modifier and Type< / div >
< div class = "table-header col-second" > Field< / div >
< div class = "table-header col-last" > Description< / div >
< div class = "col-first even-row-color" > < code > private final edu.wpi.first.math.kinematics.SwerveDriveKinematics< / code > < / div >
< div class = "col-second even-row-color" > < code > < a href = "#m_kinematics" class = "member-name-link" > m_kinematics< / a > < / code > < / div >
< div class = "col-last even-row-color" >
< div class = "block" > Swerve drive kinematics.< / div >
< / div >
< div class = "col-first odd-row-color" > < code > private final int< / code > < / div >
< div class = "col-second odd-row-color" > < code > < a href = "#m_numModules" class = "member-name-link" > m_numModules< / a > < / code > < / div >
< div class = "col-last odd-row-color" >
< div class = "block" > Number of swerve modules.< / div >
< / div >
< div class = "col-first even-row-color" > < code > private final < a href = "SwerveDriveOdometry2.html" title = "class in swervelib.math" > SwerveDriveOdometry2< / a > < / code > < / div >
< div class = "col-second even-row-color" > < code > < a href = "#m_odometry" class = "member-name-link" > m_odometry< / a > < / code > < / div >
< div class = "col-last even-row-color" >
< div class = "block" > Enhanced swerve drive odometry.< / div >
< / div >
< div class = "col-first odd-row-color" > < code > private final edu.wpi.first.math.interpolation.TimeInterpolatableBuffer< < a href = "SwervePoseEstimator2.InterpolationRecord.html" title = "class in swervelib.math" > SwervePoseEstimator2.InterpolationRecord< / a > > < / code > < / div >
< div class = "col-second odd-row-color" > < code > < a href = "#m_poseBuffer" class = "member-name-link" > m_poseBuffer< / a > < / code > < / div >
< div class = "col-last odd-row-color" >
< div class = "block" > Interpolation buffer.< / div >
< / div >
< div class = "col-first even-row-color" > < code > private final edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> < / code > < / div >
< div class = "col-second even-row-color" > < code > < a href = "#m_q" class = "member-name-link" > m_q< / a > < / code > < / div >
< div class = "col-last even-row-color" >
< div class = "block" > Matrix quotient.< / div >
< / div >
< div class = "col-first odd-row-color" > < code > private final edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N3> < / code > < / div >
< div class = "col-second odd-row-color" > < code > < a href = "#m_visionK" class = "member-name-link" > m_visionK< / a > < / code > < / div >
< div class = "col-last odd-row-color" >
< div class = "block" > Vision standard deviations.< / div >
< / div >
< / div >
< / section >
< / li >
2023-04-08 13:14:18 -05:00
<!-- ======== 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-29 19:59:07 -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" >
2023-08-29 19:59:07 -05:00
<!-- ============ FIELD DETAIL =========== -->
< li >
< section class = "field-details" id = "field-detail" >
< h2 > Field Details< / h2 >
< ul class = "member-list" >
< li >
< section class = "detail" id = "m_kinematics" >
< h3 > m_kinematics< / h3 >
< div class = "member-signature" > < span class = "modifiers" > private final< / span > < span class = "return-type" > edu.wpi.first.math.kinematics.SwerveDriveKinematics< / span > < span class = "element-name" > m_kinematics< / span > < / div >
< div class = "block" > Swerve drive kinematics.< / div >
< / section >
< / li >
< li >
< section class = "detail" id = "m_odometry" >
< h3 > m_odometry< / h3 >
< div class = "member-signature" > < span class = "modifiers" > private final< / span > < span class = "return-type" > < a href = "SwerveDriveOdometry2.html" title = "class in swervelib.math" > SwerveDriveOdometry2< / a > < / span > < span class = "element-name" > m_odometry< / span > < / div >
< div class = "block" > Enhanced swerve drive odometry.< / div >
< / section >
< / li >
< li >
< section class = "detail" id = "m_q" >
< h3 > m_q< / h3 >
< div class = "member-signature" > < span class = "modifiers" > private final< / span > < span class = "return-type" > edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N1> < / span > < span class = "element-name" > m_q< / span > < / div >
< div class = "block" > Matrix quotient.< / div >
< / section >
< / li >
< li >
< section class = "detail" id = "m_numModules" >
< h3 > m_numModules< / h3 >
< div class = "member-signature" > < span class = "modifiers" > private final< / span > < span class = "return-type" > int< / span > < span class = "element-name" > m_numModules< / span > < / div >
< div class = "block" > Number of swerve modules.< / div >
< / section >
< / li >
< li >
< section class = "detail" id = "m_poseBuffer" >
< h3 > m_poseBuffer< / h3 >
< div class = "member-signature" > < span class = "modifiers" > private final< / span > < span class = "return-type" > edu.wpi.first.math.interpolation.TimeInterpolatableBuffer< < a href = "SwervePoseEstimator2.InterpolationRecord.html" title = "class in swervelib.math" > SwervePoseEstimator2.InterpolationRecord< / a > > < / span > < span class = "element-name" > m_poseBuffer< / span > < / div >
< div class = "block" > Interpolation buffer.< / div >
< / section >
< / li >
< li >
< section class = "detail" id = "m_visionK" >
< h3 > m_visionK< / h3 >
< div class = "member-signature" > < span class = "modifiers" > private final< / span > < span class = "return-type" > edu.wpi.first.math.Matrix< edu.wpi.first.math.numbers.N3,< wbr > edu.wpi.first.math.numbers.N3> < / span > < span class = "element-name" > m_visionK< / span > < / div >
< div class = "block" > Vision standard deviations.< / div >
< / section >
< / li >
< / ul >
< / section >
< / li >
2023-04-08 13:14:18 -05:00
<!-- ========= 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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -05:00
to apply to future measurements until a subsequent call to
< code > SwerveDrivePoseEstimator.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-29 19:59:07 -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-29 19:59:07 -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-29 19:59:07 -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 >