Continued work on loading from configs

This commit is contained in:
Banks Troutman
2019-11-20 17:06:18 -05:00
parent 0ed2697565
commit 35509c0162
6 changed files with 41 additions and 26 deletions

View File

@@ -1,7 +1,9 @@
package com.chameleonvision.classabstraction.camera;
import com.chameleonvision.Main;
import com.chameleonvision.classabstraction.config.CameraConfig;
import com.chameleonvision.settings.Platform;
import com.chameleonvision.vision.camera.USBCamera;
import edu.wpi.cscore.UsbCamera;
import edu.wpi.cscore.UsbCameraInfo;
import edu.wpi.cscore.VideoMode;
@@ -33,23 +35,36 @@ public class CameraProperties {
public final double FOV;
public final List<VideoMode> videoModes;
private final UsbCamera baseCamera;
private String nickname;
public CameraProperties(UsbCamera baseCamera, double fov) {
FOV = fov;
videoModes = filterVideoModes(baseCamera.enumerateVideoModes());
name = baseCamera.getName();
public final boolean hasGain;
UsbCameraInfo baseCamInfo = baseCamera.getInfo();
public CameraProperties(UsbCamera baseCamera, CameraConfig config) {
FOV = config.fov;
name = config.name;
path = config.path;
nickname = config.nickname;
this.baseCamera = baseCamera;
if (Platform.CurrentPlatform.isWindows()) {
path = baseCamInfo.path;
} else {
var truePath = Arrays.stream(baseCamInfo.otherPaths).filter(x -> x.contains("/dev/v4l/by-path")).findFirst();
path = truePath.orElse(baseCamInfo.path);
// wait for camera USB init on Windows, Windows USB is slow...
if (Platform.CurrentPlatform == Platform.WINDOWS_64 && !baseCamera.isConnected()) {
System.out.print("Waiting on camera... ");
long initTimeout = System.nanoTime();
while (!baseCamera.isConnected()) {
if (((System.nanoTime() - initTimeout) / 1e6) >= MAX_INIT_MS) {
break;
}
}
var initTimeMs = (System.nanoTime() - initTimeout) / 1e6;
System.out.printf("USBCameraProcess initialized in %.2fms\n", initTimeMs);
}
nickname = name;
hasGain = false;
var props = baseCamera.enumerateProperties();
videoModes = filterVideoModes(baseCamera.enumerateVideoModes());
}
public void setNickname(String nickname) {

View File

@@ -17,6 +17,7 @@ public class USBCameraProcess implements CameraProcess {
public USBCameraProcess(UsbCamera camera, CameraConfig config) {
baseCamera = camera;
cvSink = CameraServer.getInstance().getVideo(baseCamera);
properties = new CameraProperties(baseCamera, config.fov);

View File

@@ -1,10 +1,10 @@
package com.chameleonvision.classabstraction.config;
public class CameraConfig {
public double fov;
public String path;
public String name;
public String nickname;
public final double fov;
public final String path;
public final String name;
public final String nickname;
public CameraConfig(double FOV,
String path, String name,
@@ -14,5 +14,4 @@ public class CameraConfig {
this.name = name;
this.nickname = nickname;
}
}

View File

@@ -24,6 +24,11 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2dResult, CVPipeline2dSet
@Override
public CVPipeline2dResult runPipeline(Mat inputMat) {
if (cameraProcess == null) {
throw new RuntimeException("Pipeline was not initialized before being run!");
}
long totalProcessTimeNanos = 0;
StringBuilder procTimeStringBuilder = new StringBuilder();

View File

@@ -8,6 +8,8 @@ import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import static com.chameleonvision.settings.Platform.CurrentPlatform;
public class NetworkManager {
private NetworkManager() {}
@@ -20,11 +22,9 @@ public class NetworkManager {
return;
}
Platform platform = Platform.getCurrentPlatform();
if (platform.isLinux()) {
if (CurrentPlatform.isLinux()) {
networking = new LinuxNetworking();
} else if (platform.isWindows()) {
} else if (CurrentPlatform.isWindows()) {
// networking = new WindowsNetworking();
System.out.println("Windows networking is not yet supported. Running unmanaged.");
return;