7#include <frc/filter/LinearFilter.h>
8#include <frc/geometry/Pose3d.h>
9#include <frc/geometry/Transform3d.h>
10#include <frc2/command/SubsystemBase.h>
11#include <units/angle.h>
12#include <units/angular_velocity.h>
13#include <units/length.h>
14#include <wpi/DataLog.h>
26#include "networktables/NetworkTable.h"
27#include "networktables/NetworkTableEntry.h"
28#include "networktables/NetworkTableInstance.h"
29#include "networktables/NetworkTableValue.h"
60 :
m_txFilter{frc::LinearFilter<
units::degree_t>::SinglePoleIIR(0.01, 0.02_s)}
61 ,
m_tyFilter{frc::LinearFilter<
units::degree_t>::SinglePoleIIR(0.01, 0.02_s)}
62 ,
m_zFilter{frc::LinearFilter<
units::meter_t>::SinglePoleIIR(0.01, 0.02_s)}
132 std::chrono::time_point<std::chrono::steady_clock>
sampleTime{};
177 std::optional<LimelightTarget::tValues>
GetSeeingCamera(
bool resample =
false);
178 std::optional<ActiveVisionTarget>
getWhichCamera(
bool resample =
true);
238 void UpdateYaw(std::stop_token stopToken);
Provides methods for interacting with the camera on a high level.
Definition vision_subsystem.h:107
void SetDriverMode(bool mode)
Turns the camera's driver mode on and off.
std::optional< LimelightTarget > GetClosestTarget()
Get the closest target the camera can see CAN RETURN NONE.
void RequestTargetFilterReset()
Definition vision_subsytem.cpp:25
LimelightTarget m_target
object that holds the current target seen by the camera
Definition vision_subsystem.h:111
Definition vision_subsystem.h:40
bool HasTarget()
Does the camera see a target?
Definition vision_subsytem.cpp:496
units::degree_t m_pitch
Pitch of target relative to camera -24.85 to 24.85 degrees.
Definition vision_subsystem.h:47
units::millisecond_t m_totalLatency
Total latency.
Definition vision_subsystem.h:50
double m_area
Area of the target in percentage of total pixels.
Definition vision_subsystem.h:49
LimelightTarget()
Definition vision_subsystem.h:59
bool m_resetFilterFlag
Definition vision_subsystem.h:54
double m_tid
Tag ID.
Definition vision_subsystem.h:55
frc::Pose3d m_targetPoseRobotSpace
3d pose of Target relative to camera (Z - Up, Y - left, X - Forward)
Definition vision_subsystem.h:45
void ResetFilters(std::string cameraName)
Definition vision_subsytem.cpp:504
frc::Pose3d m_targetPoseCamSpace
3d pose of Target relative to camera (Z - Forward, X - right, Y - down)
Definition vision_subsystem.h:44
frc::Pose3d m_robotPose
3d pose of robot relative to field center
Definition vision_subsystem.h:42
frc::LinearFilter< units::meter_t > m_zFilter
Definition vision_subsystem.h:53
frc::LinearFilter< units::degree_t > m_tyFilter
Definition vision_subsystem.h:52
units::degree_t m_yaw
Yaw of target relative to camera -31.65 to 31.65 degrees.
Definition vision_subsystem.h:48
bool m_hasTargets
True if the camera has a target it can read.
Definition vision_subsystem.h:46
tValues GetTarget(bool filter, std::string cameraName)
Get the values of the camera's current target.
Definition vision_subsytem.cpp:412
frc::LinearFilter< units::degree_t > m_txFilter
Definition vision_subsystem.h:51
void ResetOnNextTarget()
Definition vision_subsytem.cpp:500
frc::Pose3d m_robotPoseWPI
3d pose of robot relative to WPI reference for active alliance
Definition vision_subsystem.h:43
int m_hb
heartbeat
Definition vision_subsystem.h:56
Subsystem for controlling the swerve drivetrain of the robot.
Definition swerve_drive_subsystem.h:75
Definition vision_subsystem.h:136
void SetEnableStaticRotation(bool val)
Definition vision_subsytem.cpp:144
bool RightAlignmentRequested()
Definition vision_subsytem.cpp:315
std::optional< units::degree_t > GetOrientationCorrection(bool resample=false)
Definition vision_subsytem.cpp:270
LimelightTarget::tValues m_oldTargetValues
The old robot poses and latencies.
Definition vision_subsystem.h:212
std::shared_ptr< nt::NetworkTable > m_leftCameraTable
Cached NetworkTable pointer for left camera.
Definition vision_subsystem.h:206
LimelightTarget::tValues GetLeftCameraTargetValues()
Get the robot poses and latencies from left camera.
Definition vision_subsytem.cpp:160
bool isL1Active()
Definition vision_subsytem.cpp:327
bool m_usePolynomial
specifies whether to use the polynomial to obtain shooter angle
Definition vision_subsystem.h:213
bool IsOdometryAimingActive()
Definition vision_subsytem.cpp:128
ActiveVisionTarget m_activeVisionTarget
Definition vision_subsystem.h:226
void SetRightAlign(bool val)
Definition vision_subsytem.cpp:294
bool IsAimWhileMoveActive()
Definition vision_subsytem.cpp:124
std::optional< ActiveVisionTarget > getWhichCamera(bool resample=true)
Definition vision_subsytem.cpp:348
argos_lib::NTSubscriber m_rightCameraFrameUpdateSubscriber
Subscriber to manage all updates from right camera.
Definition vision_subsystem.h:232
void SetOdometryAiming(bool val)
Definition vision_subsytem.cpp:132
void Disable()
it disables (duh)
Definition vision_subsytem.cpp:168
bool m_isRotationGoodEnough
true if robot rotation is good per alignment
Definition vision_subsystem.h:223
SwerveDriveSubsystem * m_pDriveSubsystem
Pointer to drivetrain for reading some odometry.
Definition vision_subsystem.h:211
VisionSubsystem(const argos_lib::RobotInstance instance, SwerveDriveSubsystem *pDriveSubsystem)
Definition vision_subsytem.cpp:29
InterpolationMode
Definition vision_subsystem.h:140
std::jthread m_yawUpdateThread
Definition vision_subsystem.h:233
std::optional< frc::Pose2d > GetClosestReefTagPoseInCamSpace(bool resample=false)
Definition vision_subsytem.cpp:189
wpi::log::StructLogEntry< frc::Pose2d > m_rightCameraMegaTag2PoseLogger
Definition vision_subsystem.h:236
int m_latestRightHeartbeat
Definition vision_subsystem.h:225
int m_latestLeftHeartbeat
Definition vision_subsystem.h:224
bool m_useTrigonometry
specifies whether to use the trigonometry to obtain shooter angle
Definition vision_subsystem.h:214
bool m_isAimWhileMoveActive
true if aiming trigger is pressed and locked
Definition vision_subsystem.h:215
std::optional< frc::Translation2d > GetFieldCentricReefAlignmentError(bool resample=false)
Definition vision_subsytem.cpp:255
bool m_isAlgaeModeActive
true if algae mode is active
Definition vision_subsystem.h:222
void RequestFilterReset()
Definition vision_subsytem.cpp:156
std::optional< frc::Translation2d > GetRobotSpaceReefAlignmentError(bool resample=false)
Definition vision_subsytem.cpp:208
void SetAlgaeAlign(bool val)
Definition vision_subsytem.cpp:303
void Periodic() override
Definition vision_subsytem.cpp:108
bool m_isRightAlignActive
true if right alignment is requested
Definition vision_subsystem.h:219
void SetAimWhileMove(bool val)
Definition vision_subsytem.cpp:136
void SetL1Active(bool val)
Definition vision_subsytem.cpp:323
std::optional< whichCamera > m_latestReefSide
Side of robot that most recently saw the reef.
Definition vision_subsystem.h:229
bool m_isLeftAlignActive
true if left alignment is requested
Definition vision_subsystem.h:218
bool LeftAlignmentRequested()
Definition vision_subsytem.cpp:311
std::optional< whichCamera > getLatestReefSide()
Definition vision_subsytem.cpp:402
CameraInterface m_cameraInterface
Interface to limelight camera.
Definition vision_subsystem.h:205
argos_lib::Debouncer m_rightFresh
Definition vision_subsystem.h:228
argos_lib::RobotInstance m_instance
Contains either the competition bot or practice bot. Differentiates between the two.
Definition vision_subsystem.h:210
std::optional< LimelightTarget::tValues > GetSeeingCamera(bool resample=false)
Definition vision_subsytem.cpp:339
std::shared_ptr< nt::NetworkTable > m_rightCameraTable
Cached NetworkTable pointer for right camera.
Definition vision_subsystem.h:207
std::optional< unitlessChassisSpeeds > getVisionAlignmentSpeeds(double scalingFactor=1.0)
Definition vision_subsytem.cpp:529
bool m_isAlgaeAlignActive
true if algae alignment is requested
Definition vision_subsystem.h:220
std::chrono::steady_clock::time_point m_latestReefSpotTime
Time when reef was last seen by a camera.
Definition vision_subsystem.h:230
const std::string rightCameraTableName
Definition vision_subsystem.h:201
void SetAlgaeModeActive(bool val)
Definition vision_subsytem.cpp:331
void UpdateYaw(std::stop_token stopToken)
Definition vision_subsytem.cpp:176
bool m_isL1Active
true if L1 is active
Definition vision_subsystem.h:221
const std::string leftCameraTableName
Definition vision_subsystem.h:200
argos_lib::NTSubscriber m_leftCameraFrameUpdateSubscriber
Subscriber to manage all updates from left camera.
Definition vision_subsystem.h:231
bool m_isOdometryAimingActive
true if we want to aim without vision
Definition vision_subsystem.h:217
bool isAlgaeModeActive()
Definition vision_subsytem.cpp:335
argos_lib::Debouncer m_leftFresh
Definition vision_subsystem.h:227
LimelightTarget::tValues GetRightCameraTargetValues()
Get the robot poses and latencies from right camera.
Definition vision_subsytem.cpp:164
void SetPipeline(uint16_t tag)
Definition vision_subsytem.cpp:148
wpi::log::StructLogEntry< frc::Pose2d > m_leftCameraMegaTag2PoseLogger
Definition vision_subsystem.h:235
void SetLeftAlign(bool val)
Definition vision_subsytem.cpp:285
bool m_enableStaticRotation
true if you want to rotate in the absence of translation input
Definition vision_subsystem.h:216
bool robotAligned(bool resample=true)
Definition vision_subsytem.cpp:520
bool AlgaeAlignmentRequested()
Definition vision_subsytem.cpp:319
bool IsStaticRotationEnabled()
Definition vision_subsytem.cpp:140
Definition debouncer.h:14
Subscribes to Network Tables entry updates and calls a specified callback to use the new value.
Definition nt_subscriber.h:17
RobotInstance
Differentiates between practice robot and competition robot.
Definition config_types.h:13
Definition custom_units.h:11
Definition vision_subsystem.h:130
std::chrono::time_point< std::chrono::steady_clock > sampleTime
Definition vision_subsystem.h:132
whichCamera cameraID
Definition vision_subsystem.h:131
LimelightTarget::tValues target
Definition vision_subsystem.h:133
Wraps members of LimelightTarget for use elsewhere.
Definition vision_subsystem.h:69
frc::Pose3d robotPoseWPI
3d pose of robot relative to WPI reference for active alliance
Definition vision_subsystem.h:71
units::degree_t m_yaw
Yaw of target relative to camera -31.65 to 31.65 degrees.
Definition vision_subsystem.h:76
bool hasTargets
True if the camera has a target it can read.
Definition vision_subsystem.h:74
frc::Pose3d tagPoseCamSpace
Definition vision_subsystem.h:72
units::degree_t m_pitch
Pitch of target relative to camera -24.85 to 24.85 degrees.
Definition vision_subsystem.h:75
int hb
heartbeat
Definition vision_subsystem.h:80
double tagID
Tag ID.
Definition vision_subsystem.h:78
frc::Pose3d tagPoseRobotSpace
Definition vision_subsystem.h:73
frc::Pose3d robotPose
3d pose of robot relative to field center
Definition vision_subsystem.h:70
units::millisecond_t totalLatency
Total latency.
Definition vision_subsystem.h:79
double m_area
Area of the target in percentage of total pixels.
Definition vision_subsystem.h:77
Definition vision_subsystem.h:34
double leftSpeed
Definition vision_subsystem.h:36
double ccwSpeed
Definition vision_subsystem.h:37
double forwardSpeed
Definition vision_subsystem.h:35
whichCamera
Definition vision_subsystem.h:32