Skip to content
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ repositories {
}

dependencies {
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3'
compile "com.fasterxml.jackson.module:jackson-module-kotlin:2.8.7"
compile 'com.neuronrobotics:nrjavaserial:3.11.0'
compile 'com.pi4j:pi4j-core:1.0'
compile 'commons-cli:commons-cli:1.3.1'
Expand Down
12 changes: 11 additions & 1 deletion src/main/java/com/easternedgerobotics/rov/Topside.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.easternedgerobotics.rov.config.CameraCalibrationConfig;
import com.easternedgerobotics.rov.config.Config;
import com.easternedgerobotics.rov.config.DistanceCalculatorConfig;
import com.easternedgerobotics.rov.config.JoystickConfig;
import com.easternedgerobotics.rov.config.LaunchConfig;
import com.easternedgerobotics.rov.config.SliderConfig;
Expand All @@ -23,6 +24,7 @@
import com.easternedgerobotics.rov.io.arduino.ArduinoPort;
import com.easternedgerobotics.rov.io.joystick.JoystickController;
import com.easternedgerobotics.rov.io.joystick.LogitechExtremeJoystickSource;
import com.easternedgerobotics.rov.math.DistanceCalculator;
import com.easternedgerobotics.rov.value.CameraCalibrationValue;
import com.easternedgerobotics.rov.value.MotionPowerValue;
import com.easternedgerobotics.rov.video.CameraCalibration;
Expand Down Expand Up @@ -115,23 +117,31 @@ public void init() throws SocketException, UnknownHostException {
configSource.getConfig("videoDecoder",
VideoDecoderConfig.class));

final ValueStore<CameraCalibrationValue> cameraCalibrationStore = ValueStore.of(
CameraCalibrationValue.class, config.preferencesHome());

cameraCalibration = new CameraCalibration(
eventPublisher,
configSource.getConfig("cameraCalibration", CameraCalibrationConfig.class),
ValueStore.of(CameraCalibrationValue.class, config.preferencesHome()),
cameraCalibrationStore,
Schedulers.newThread());

fileReceiver = new TcpFileReceiver(
launchConfig.fileReceiverPort(),
launchConfig.fileReceiverSocketBacklog());

final DistanceCalculator distanceCalculator = new DistanceCalculator(
configSource.getConfig("distanceCalculator", DistanceCalculatorConfig.class),
cameraCalibrationStore);

viewLoader = new ViewLoader(MainView.class, "Control Software", new HashMap<Class<?>, Object>() {
{
put(EventPublisher.class, eventPublisher);
put(Config.class, configSource);
put(EmergencyStopController.class, emergencyStopController);
put(VideoDecoder.class, videoDecoder);
put(CameraCalibration.class, cameraCalibration);
put(DistanceCalculator.class, distanceCalculator);
}
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
package com.easternedgerobotics.rov.fx;

import com.easternedgerobotics.rov.fx.distance.AxisNode;
import com.easternedgerobotics.rov.fx.distance.TextNode;

import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;

public final class DistanceCalculatorView implements View {
Expand All @@ -24,18 +32,34 @@ public final class DistanceCalculatorView implements View {

static final double RADIUS = 3;

static final int SELECTION_WIDTH = 300;

final BorderPane galleryBorderPane = new BorderPane();

final BorderPane calculatorBorderPane = new BorderPane();

final HBox mainPanel = new HBox();

final HBox buttonPanel = new HBox();

final VBox mainPanel = new VBox();
final VBox imageSelectionPanel = new VBox();

final BorderPane borderPane = new BorderPane();

final Button captureA = new Button("Capture A");

final Button captureB = new Button("Capture B");

final Button calculateButton = new Button("Calculate");

final ImageView imageView = new ImageView();

final StackPane imageStack = new StackPane();

final AtomicReference<AxisNode> axisNode = new AtomicReference<>(new AxisNode());

final List<TextNode> imagePoints = new ArrayList<>();

@Inject
public DistanceCalculatorView() {
final List<Button> buttons = Arrays.asList(captureA, captureB);
Expand All @@ -44,19 +68,43 @@ public DistanceCalculatorView() {
button.prefWidthProperty().bind(buttonPanel.widthProperty().divide(buttons.size()));
}
buttonPanel.getChildren().addAll(buttons);
calculateButton.setPrefHeight(BUTTON_HEIGHT);
calculateButton.prefWidthProperty().bind(buttonPanel.widthProperty());

galleryBorderPane.setBorder(new Border(new BorderStroke(Color.GRAY,
BorderStrokeStyle.SOLID, new CornerRadii(RADIUS), BorderWidths.DEFAULT)));

galleryBorderPane.prefHeightProperty().bind(mainPanel.heightProperty().subtract(BUTTON_HEIGHT));
galleryBorderPane.prefHeightProperty().bind(imageSelectionPanel.heightProperty().subtract(BUTTON_HEIGHT * 2));

imageSelectionPanel.setPadding(new Insets(PADDING, PADDING, PADDING, PADDING));
imageSelectionPanel.setSpacing(PADDING);
imageSelectionPanel.getChildren().addAll(buttonPanel, calculateButton, galleryBorderPane);
imageSelectionPanel.setMaxWidth(SELECTION_WIDTH);
imageSelectionPanel.setMinWidth(SELECTION_WIDTH);

mainPanel.setPadding(new Insets(PADDING, PADDING, PADDING, PADDING));
mainPanel.setSpacing(PADDING);
mainPanel.getChildren().addAll(buttonPanel, galleryBorderPane);
imageView.setStyle("-fx-background-color: BLACK");
imageView.setPreserveRatio(true);
imageView.setSmooth(true);
imageView.setCache(true);

calculatorBorderPane.setCenter(imageStack);
calculatorBorderPane.setStyle("-fx-background-color: BLACK");
calculatorBorderPane.setBorder(new Border(new BorderStroke(Color.GRAY,
BorderStrokeStyle.SOLID, new CornerRadii(RADIUS), BorderWidths.DEFAULT)));
calculatorBorderPane.prefWidthProperty().bind(mainPanel.widthProperty().subtract(SELECTION_WIDTH));
calculatorBorderPane.prefHeightProperty().bind(mainPanel.heightProperty());

mainPanel.getChildren().addAll(calculatorBorderPane, imageSelectionPanel);

borderPane.setCenter(mainPanel);
}

public void setImage(final Image image) {
imageView.setFitWidth(borderPane.getWidth() - SELECTION_WIDTH);
imageView.setFitHeight(borderPane.getHeight());
imageView.setImage(image);
}

@Override
public Parent getParent() {
return borderPane;
Expand Down
Loading