Files
2025RidgeScape/src/main/java/frc4388/robot/subsystems/Lidar.java
T

93 lines
2.6 KiB
Java
Raw Normal View History

2025-01-18 15:08:23 -07:00
package frc4388.robot.subsystems;
import edu.wpi.first.networktables.GenericEntry;
import edu.wpi.first.wpilibj.PWM;
import edu.wpi.first.wpilibj.Counter;
import edu.wpi.first.wpilibj.shuffleboard.BuiltInLayouts;
import edu.wpi.first.wpilibj.shuffleboard.BuiltInWidgets;
import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard;
import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardLayout;
2025-02-28 11:46:48 -07:00
import frc4388.robot.Constants.LiDARConstants;
2025-01-18 15:08:23 -07:00
import frc4388.utility.Status;
import frc4388.utility.Subsystem;
import frc4388.utility.Status.ReportLevel;
// https://girlsofsteeldocs.readthedocs.io/en/latest/technical-resources/sensors/LIDAR-Lite-Distance-Sensor.html#minimal-roborio-interface
public class Lidar extends Subsystem {
2025-03-06 19:55:26 -07:00
private Counter LidarPWM;
private String name = "Lidar";
2025-01-18 15:08:23 -07:00
2025-03-06 19:55:26 -07:00
private double distance = -1;
public Lidar(int port, String name) {
this.name = name;
LidarPWM = new Counter(port);
2025-01-18 15:08:23 -07:00
LidarPWM.setMaxPeriod(1.00); //set the max period that can be measured
LidarPWM.setSemiPeriodMode(true); //Set the counter to period measurement
LidarPWM.reset();
2025-03-06 19:55:26 -07:00
subsystemLayout = Shuffleboard.getTab("Subsystems")
.getLayout(getSubsystemName(), BuiltInLayouts.kList)
.withSize(2, 2);
sbDistance = subsystemLayout
.add("Distance", 0)
.withWidget(BuiltInWidgets.kGraph)
.getEntry();
sbWithinDistance = subsystemLayout
. add("Within Distance", 0)
.withWidget(BuiltInWidgets.kBooleanBox)
.getEntry();
2025-01-18 15:08:23 -07:00
}
@Override
public void periodic() {
if(LidarPWM.get() < 1)
distance = -1;
else
2025-02-28 11:46:48 -07:00
distance = (LidarPWM.getPeriod() * LiDARConstants.SECONDS_TO_MICROS) / LiDARConstants.LIDAR_MICROS_TO_CM;
2025-01-18 15:08:23 -07:00
}
public double getDistance(){
return distance;
}
public boolean withinDistance(){
if(distance == -1) return false;
2025-02-28 11:46:48 -07:00
return distance < LiDARConstants.LIDAR_DETECT_DISTANCE;
2025-01-18 15:08:23 -07:00
}
2025-03-06 19:55:26 -07:00
ShuffleboardLayout subsystemLayout;
GenericEntry sbDistance;
GenericEntry sbWithinDistance;
2025-01-18 15:08:23 -07:00
@Override
public String getSubsystemName() {
2025-03-06 19:55:26 -07:00
return "Lidar " + name;
2025-01-18 15:08:23 -07:00
}
@Override
public void queryStatus() {
sbDistance.setDouble(distance);
sbWithinDistance.setBoolean(withinDistance());
}
@Override
public Status diagnosticStatus() {
Status s = new Status();
2025-01-18 15:08:23 -07:00
if(distance == -1){
s.addReport(ReportLevel.ERROR, "LiDAR DISCONNECTED");
2025-01-18 15:08:23 -07:00
}else{
s.addReport(ReportLevel.INFO, "LiDAR Connected");
2025-01-18 15:08:23 -07:00
}
s.addReport(ReportLevel.INFO, "LiDAR Distance: " + distance);
2025-01-18 15:08:23 -07:00
return s;
}
}