FRC Paradigm Shift #1259
Documentation for the 2021 Robot
VisionSubsystem.cpp
Go to the documentation of this file.
1 
3 
4 
6  : m_dashboard (nt::NetworkTableInstance::GetDefault().GetTable("SmartDashboard"))
7  , m_networktable(nt::NetworkTableInstance::GetDefault().GetTable("limelight"))
8  , m_led(true)
9  , m_tx(0)
10  , m_ty(0)
11  , m_validTarget(false)
12 {
13  SetLED(true);
14  m_averageDistance.reserve(3);
15  m_averageAngle.reserve(3);
16 }
17 
19 {
20  m_validTarget = m_networktable->GetNumber("tv", 0);
21 
22  if (!m_led)
23  m_validTarget = false;
24 
25  m_tx = m_networktable->GetNumber("tx", 0.0);
26  m_ty = m_networktable->GetNumber("ty", 0.0);
27 
28  double verticalAngle = kMountingAngle + m_ty;
29  double horizontalAngle = m_tx; // in degrees
30 
31  double distance = (kTargetHeight - kMountingHeight) / tanf(Util::DegreesToRadians(verticalAngle));
32 
33  if ((distance < kMinTargetDistance) || (distance > kMaxTargetDistance))
34  m_validTarget = false;
35 
36  if (!m_validTarget)
37  {
38  m_averageDistance.clear();
39  m_averageAngle.clear();
40  return;
41  }
42 
43  m_averageDistance.push_back(distance);
44  m_averageAngle.push_back(horizontalAngle);
45 
46  if (m_averageDistance.size() > 3)
47  m_averageDistance.erase(m_averageDistance.begin());
48 
49  if (m_averageAngle.size() > 3)
50  m_averageAngle.erase(m_averageAngle.begin());
51 
52  SmartDashboard::PutNumber("D_V_Active", m_validTarget);
53  SmartDashboard::PutNumber("D_V_Distance", distance);
54  // SmartDashboard::PutNumber("D_V_Angle", m_horizontalangle);
55  SmartDashboard::PutNumber("D_V_Average Distance", GetDistance());
56  SmartDashboard::PutNumber("D_V_Average Angle", GetAngle());
57 }
58 
60 {
61  return m_validTarget;
62 }
63 
65 {
67 }
68 
69 
71 {
73 }
74 
76 {
77  m_led = on;
78  if (m_led)
79  {
81  m_networktable->PutNumber("ledMode", 3);
82  }
83  else
84  {
86  m_networktable->PutNumber("ledMode", 1);
87  }
88 }
double GetDistance()
Retrieves the distance calculation from the target via the limelight.
constexpr double kMinTargetDistance
Definition: Constants.h:208
constexpr double kMountingAngle
Definition: Constants.h:200
vector< double > m_averageAngle
constexpr double kMaxTargetDistance
Definition: Constants.h:209
void SetLED(bool on)
shared_ptr< NetworkTable > m_networktable
static double DegreesToRadians(double theta)
Convert any angle theta in degrees to radians.
Definition: Util.cpp:4
constexpr double kTargetHeight
Definition: Constants.h:206
void Periodic() override
Will be called periodically whenever the CommandScheduler runs.
static double GetAverage(vector< double > numbers)
Definition: Util.cpp:46
constexpr double kMountingHeight
Definition: Constants.h:203
vector< double > m_averageDistance