Skip to content

Commit 455601b

Browse files
committed
Added custom bumper support
1 parent 9a30c98 commit 455601b

File tree

5 files changed

+70
-29
lines changed

5 files changed

+70
-29
lines changed

app/src/main/java/org/team2363/helixnavigator/document/HRobotConfiguration.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
package org.team2363.helixnavigator.document;
22

3+
import org.team2363.helixnavigator.document.obstacle.HObstacle;
4+
import org.team2363.helixnavigator.global.Standards.DefaultRobotConfiguration;
5+
import org.team2363.helixtrajectory.Obstacle;
6+
import org.team2363.helixtrajectory.SwerveDrive;
7+
38
import com.jlbabilino.json.DeserializedJSONConstructor;
49
import com.jlbabilino.json.DeserializedJSONObjectValue;
510
import com.jlbabilino.json.DeserializedJSONTarget;
611
import com.jlbabilino.json.JSONSerializable;
712
import com.jlbabilino.json.SerializedJSONObjectValue;
813

9-
import org.team2363.helixnavigator.global.Standards.DefaultRobotConfiguration;
10-
import org.team2363.helixtrajectory.SwerveDrive;
11-
1214
import javafx.beans.property.DoubleProperty;
1315
import javafx.beans.property.IntegerProperty;
16+
import javafx.beans.property.ObjectProperty;
1417
import javafx.beans.property.SimpleDoubleProperty;
1518
import javafx.beans.property.SimpleIntegerProperty;
19+
import javafx.beans.property.SimpleObjectProperty;
1620

1721
@JSONSerializable
1822
public class HRobotConfiguration {
@@ -27,6 +31,7 @@ public class HRobotConfiguration {
2731
private final DoubleProperty motorMaxAngularSpeed = new SimpleDoubleProperty(this, "motorMaxSpeed", DefaultRobotConfiguration.MOTOR_MAX_ANGULAR_SPEED);
2832
private final DoubleProperty motorMaxTorque = new SimpleDoubleProperty(this, "motorMaxTorque", DefaultRobotConfiguration.MOTOR_MAX_TORQUE);
2933
private final DoubleProperty wheelRadius = new SimpleDoubleProperty(this, "wheelRadius", DefaultRobotConfiguration.WHEEL_RADIUS);
34+
private final ObjectProperty<Obstacle> bumpers = new SimpleObjectProperty<>(this, "bumpers", HObstacle.defaultBumpers());
3035

3136
@DeserializedJSONConstructor
3237
public HRobotConfiguration() {
@@ -172,6 +177,18 @@ public final double getWheelRadius() {
172177
return wheelRadius.get();
173178
}
174179

180+
public final ObjectProperty<Obstacle> bumpersProperty() {
181+
return bumpers;
182+
}
183+
184+
public final void setBumpers(Obstacle value) {
185+
bumpers.set(value);
186+
}
187+
188+
public final Obstacle getBumpers() {
189+
return bumpers.get();
190+
}
191+
175192
/**
176193
* Populates the settings in this {@code HRobotConfiguration} with the settings from
177194
* a given configuration.
@@ -189,11 +206,12 @@ public void importConfiguration(HRobotConfiguration otherConfiguration) {
189206
setMotorMaxAngularSpeed(otherConfiguration.getMotorMaxAngularSpeed());
190207
setMotorMaxTorque(otherConfiguration.getMotorMaxTorque());
191208
setWheelRadius(otherConfiguration.getWheelRadius());
209+
setBumpers(otherConfiguration.getBumpers());
192210
}
193211

194212
public SwerveDrive toDrive() {
195213
return new SwerveDrive(getWheelHorizontalDistance(), getWheelVerticalDistance(),
196-
getBumperLength(), getBumperWidth(), getMass(), getMomentOfInertia(),
197-
getMotorMaxAngularSpeed(), getMotorMaxTorque(), getWheelRadius());
214+
getMass(), getMomentOfInertia(),
215+
getMotorMaxAngularSpeed(), getMotorMaxTorque(), getWheelRadius(), getBumpers());
198216
}
199217
}

app/src/main/java/org/team2363/helixnavigator/document/obstacle/HObstacle.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package org.team2363.helixnavigator.document.obstacle;
22

3+
import org.team2363.helixnavigator.document.HPathElement;
4+
import org.team2363.helixnavigator.global.Standards.DefaultRobotConfiguration;
5+
import org.team2363.helixtrajectory.Obstacle;
6+
import org.team2363.helixtrajectory.ObstaclePoint;
7+
38
import com.jlbabilino.json.DeserializedJSONDeterminer;
49
import com.jlbabilino.json.DeserializedJSONObjectValue;
510
import com.jlbabilino.json.DeserializedJSONTarget;
@@ -9,9 +14,6 @@
914
import com.jlbabilino.json.SerializedJSONObjectValue;
1015
import com.jlbabilino.json.TypeMarker;
1116

12-
import org.team2363.helixnavigator.document.HPathElement;
13-
import org.team2363.helixtrajectory.Obstacle;
14-
1517
import javafx.beans.property.DoubleProperty;
1618
import javafx.beans.property.SimpleDoubleProperty;
1719

@@ -85,4 +87,12 @@ public static final TypeMarker<? extends HObstacle> abstractDeterminer(JSONObjec
8587
throw new JSONDeserializerException("Unrecognized obstacle type string: \"" + typeString + "\"");
8688
}
8789
}
90+
91+
public static Obstacle defaultBumpers() {
92+
ObstaclePoint point1 = new ObstaclePoint(+DefaultRobotConfiguration.BUMPER_LENGTH / 2, +DefaultRobotConfiguration.BUMPER_WIDTH / 2);
93+
ObstaclePoint point2 = new ObstaclePoint(-DefaultRobotConfiguration.BUMPER_LENGTH / 2, +DefaultRobotConfiguration.BUMPER_WIDTH / 2);
94+
ObstaclePoint point3 = new ObstaclePoint(-DefaultRobotConfiguration.BUMPER_LENGTH / 2, -DefaultRobotConfiguration.BUMPER_WIDTH / 2);
95+
ObstaclePoint point4 = new ObstaclePoint(+DefaultRobotConfiguration.BUMPER_LENGTH / 2, -DefaultRobotConfiguration.BUMPER_WIDTH / 2);
96+
return new Obstacle(0, point1, point2, point3, point4);
97+
}
8898
}

app/src/main/java/org/team2363/helixnavigator/document/obstacle/HPolygonObstacle.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ public HPolygonObstacle() {
2424
}
2525
initialPoints[0].setX(0.0);
2626
initialPoints[0].setY(0.0);
27-
initialPoints[1].setX(80.0);
27+
initialPoints[1].setX(2.0);
2828
initialPoints[1].setY(0.0);
29-
initialPoints[2].setX(40.0);
30-
initialPoints[2].setY(80.0);
29+
initialPoints[2].setX(1.0);
30+
initialPoints[2].setY(2.0);
3131
points.addAll(initialPoints[0], initialPoints[1], initialPoints[2]);
3232
}
3333

app/src/main/java/org/team2363/helixnavigator/ui/document/ObstacleListCell.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@
33
import java.util.Arrays;
44
import java.util.List;
55

6-
import com.jlbabilino.json.JSONDeserializer;
7-
import com.jlbabilino.json.JSONDeserializerException;
8-
import com.jlbabilino.json.JSONEntry;
9-
import com.jlbabilino.json.JSONParser;
10-
import com.jlbabilino.json.JSONParserException;
11-
import com.jlbabilino.json.JSONSerializer;
12-
import com.jlbabilino.json.TypeMarker;
13-
6+
import org.team2363.helixnavigator.document.DocumentManager;
147
import org.team2363.helixnavigator.document.obstacle.HCircleObstacle;
158
import org.team2363.helixnavigator.document.obstacle.HObstacle;
169
import org.team2363.helixnavigator.document.obstacle.HObstacle.ObstacleType;
1710
import org.team2363.helixnavigator.document.obstacle.HPolygonObstacle;
1811
import org.team2363.helixnavigator.document.obstacle.HRectangleObstacle;
1912
import org.team2363.helixnavigator.global.Standards;
2013
import org.team2363.helixnavigator.ui.prompts.obstacle.ObstacleEditDialog;
14+
import org.team2363.helixtrajectory.Obstacle;
2115
import org.team2363.lib.ui.OrderableListCell;
2216
import org.team2363.lib.ui.validation.FilteredTextField;
2317

18+
import com.jlbabilino.json.JSONDeserializer;
19+
import com.jlbabilino.json.JSONDeserializerException;
20+
import com.jlbabilino.json.JSONEntry;
21+
import com.jlbabilino.json.JSONParser;
22+
import com.jlbabilino.json.JSONParserException;
23+
import com.jlbabilino.json.JSONSerializer;
24+
import com.jlbabilino.json.TypeMarker;
25+
2426
import javafx.collections.ObservableList;
2527
import javafx.event.ActionEvent;
2628
import javafx.scene.control.ContentDisplay;
@@ -42,20 +44,23 @@ public class ObstacleListCell extends OrderableListCell<HObstacle> {
4244
private static final Image POLYGON;
4345
private static final Image RECTANGLE;
4446

45-
public static final Callback<ListView<HObstacle>, ListCell<HObstacle>> obstacleCellFactory =
46-
new Callback<ListView<HObstacle>, ListCell<HObstacle>>() {
47-
@Override
48-
public ListCell<HObstacle> call(ListView<HObstacle> listView) {
49-
return new ObstacleListCell();
50-
}
51-
};
47+
public static final Callback<ListView<HObstacle>, ListCell<HObstacle>> obstacleCellFactory(DocumentManager documentManager) {
48+
return new Callback<ListView<HObstacle>, ListCell<HObstacle>>() {
49+
@Override
50+
public ListCell<HObstacle> call(ListView<HObstacle> listView) {
51+
return new ObstacleListCell(documentManager);
52+
}
53+
};
54+
}
5255

5356
static {
5457
CIRCLE = null;
5558
POLYGON = null;
5659
RECTANGLE = null;
5760
}
5861

62+
private final DocumentManager documentManager;
63+
5964
private final ImageView circleView = new ImageView(CIRCLE);
6065
private final ImageView polygonView = new ImageView(POLYGON);
6166
private final ImageView rectangleView = new ImageView(RECTANGLE);
@@ -78,11 +83,14 @@ public ListCell<HObstacle> call(ListView<HObstacle> listView) {
7883
private final MenuItem insertNewRectangleObstacleAfterMenuItem = new MenuItem("Insert new rectangle obstacle after");
7984
private final MenuItem renameMenuItem = new MenuItem("Rename");
8085
private final MenuItem deleteSingleMenuItem = new MenuItem("Delete");
86+
private final MenuItem setAsBumpersMenuItem = new MenuItem("Set As Bumpers");
8187

8288
private final ContextMenu multipleSelectedContextMenu = new ContextMenu();
8389
private final MenuItem deleteMultipleMenuItem = new MenuItem("Delete");
8490

85-
public ObstacleListCell() {
91+
public ObstacleListCell(DocumentManager documentManager) {
92+
this.documentManager = documentManager;
93+
8694
circleView.setPreserveRatio(true);
8795
circleView.setFitHeight(20);
8896
polygonView.setPreserveRatio(true);
@@ -116,14 +124,15 @@ public ObstacleListCell() {
116124
insertNewRectangleObstacleAfterMenuItem.setOnAction(this::insertNewRectangleObstacleAfter);
117125
renameMenuItem.setOnAction(this::renameObstacle);
118126
deleteSingleMenuItem.setOnAction(this::deleteSelectedObstacles);
127+
setAsBumpersMenuItem.setOnAction(this::setAsBumpers);
119128
deleteMultipleMenuItem.setOnAction(this::deleteSelectedObstacles);
120129

121130
insertMenu.getItems().addAll(insertNewCircleObstacleBeforeMenuItem, insertNewPolygonObstacleBeforeMenuItem,
122131
insertNewRectangleObstacleBeforeMenuItem, insertNewCircleObstacleAfterMenuItem,
123132
insertNewPolygonObstacleAfterMenuItem, insertNewRectangleObstacleAfterMenuItem);
124133

125134
noneSelectedContextMenu.getItems().addAll(newCircleObstacleMenuItem, newPolygonObstacleMenuItem, newRectangleObstacleMenuItem);
126-
singleSelectedContextMenu.getItems().addAll(editMenuItem, insertMenu, renameMenuItem, deleteSingleMenuItem);
135+
singleSelectedContextMenu.getItems().addAll(editMenuItem, insertMenu, renameMenuItem, deleteSingleMenuItem, setAsBumpersMenuItem);
127136
multipleSelectedContextMenu.getItems().addAll(deleteMultipleMenuItem);
128137

129138
noneSelectedContextMenu.setAutoHide(true);
@@ -291,4 +300,8 @@ private void deleteSelectedObstacles(ActionEvent event) {
291300
getListView().getItems().remove(index.intValue()); // have to use intValue() to remove ambiguity
292301
}
293302
}
303+
private void setAsBumpers(ActionEvent event) {
304+
Obstacle bumpers = getItem().toObstacle();
305+
documentManager.getDocument().getRobotConfiguration().setBumpers(bumpers);
306+
}
294307
}

app/src/main/java/org/team2363/helixnavigator/ui/document/ObstacleListView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public ObstacleListView(DocumentManager documentManager) {
5050
setContextMenu(null);
5151
getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
5252
getSelectionModel().getSelectedIndices().addListener(onListViewSelectedIndicesChanged);
53-
setCellFactory(ObstacleListCell.obstacleCellFactory);
53+
setCellFactory(ObstacleListCell.obstacleCellFactory(this.documentManager));
5454
noneSelectedContextMenu.getItems().addAll(newCircleObstacleMenuItem, newPolygonObstacleMenuItem, newRectangleObstacleMenuItem);
5555
newCircleObstacleMenuItem.setOnAction(this::newCircleObstacle);
5656
newPolygonObstacleMenuItem.setOnAction(this::newPolygonObstacle);

0 commit comments

Comments
 (0)