From 29406f9e8aff648aa5f5418425cf6e9a52bbcad8 Mon Sep 17 00:00:00 2001 From: Dean Brettle Date: Wed, 17 Jul 2024 20:50:45 -0700 Subject: [PATCH 1/3] Automatically request HALSimWS connection from DeepBlueSim. --- .../org/carlmontrobotics/lib199/Lib199Subsystem.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java b/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java index e9201e4..338ba85 100644 --- a/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java +++ b/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java @@ -3,6 +3,8 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; +import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.networktables.StringPublisher; import edu.wpi.first.wpilibj.RobotBase; import edu.wpi.first.wpilibj2.command.Subsystem; @@ -21,12 +23,21 @@ public class Lib199Subsystem implements Subsystem { } private static boolean registered = false; + private static boolean connectHALSimWSRequestSent = false; private static void ensureRegistered() { if(registered) { return; } registered = true; + registerSimulationPeriodic(() -> { + if (!connectHALSimWSRequestSent) { + NetworkTableInstance.getDefault() + .getStringTopic("/DeepBlueSim/Coordinator/request") + .publish().set("connectHALSimWS"); + connectHALSimWSRequestSent = true; + } + }); INSTANCE.register(); } From 20ec23e13470b554208430a8a75f5f81a676ede1 Mon Sep 17 00:00:00 2001 From: Dean Brettle Date: Wed, 17 Jul 2024 20:51:48 -0700 Subject: [PATCH 2/3] Add comment. --- .../java/org/carlmontrobotics/lib199/Lib199Subsystem.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java b/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java index 338ba85..04389ad 100644 --- a/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java +++ b/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java @@ -31,6 +31,10 @@ private static void ensureRegistered() { } registered = true; registerSimulationPeriodic(() -> { + // To workaround https://github.com/wpilibsuite/allwpilib/issues/6842, we need to + // explicitly request that the DeepBlueSim controller connect to the robot code *after* + // any SimDevices have been created (like those used to support simulation of many of + // the devices in lib199), so we do it once during the robot's first time step. if (!connectHALSimWSRequestSent) { NetworkTableInstance.getDefault() .getStringTopic("/DeepBlueSim/Coordinator/request") From f5cc814efd65ebe2e971eae4ae56439185cb083f Mon Sep 17 00:00:00 2001 From: Dean Brettle Date: Thu, 18 Jul 2024 11:27:23 -0700 Subject: [PATCH 3/3] Regulary request the HALSimWS connection to handle the case of the Webots controller being restarted. --- .../lib199/Lib199Subsystem.java | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java b/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java index 04389ad..3b6ed67 100644 --- a/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java +++ b/src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java @@ -4,8 +4,6 @@ import java.util.function.Consumer; import edu.wpi.first.networktables.NetworkTableInstance; -import edu.wpi.first.networktables.StringPublisher; -import edu.wpi.first.wpilibj.RobotBase; import edu.wpi.first.wpilibj2.command.Subsystem; public class Lib199Subsystem implements Subsystem { @@ -23,25 +21,21 @@ public class Lib199Subsystem implements Subsystem { } private static boolean registered = false; - private static boolean connectHALSimWSRequestSent = false; private static void ensureRegistered() { if(registered) { return; } registered = true; - registerSimulationPeriodic(() -> { - // To workaround https://github.com/wpilibsuite/allwpilib/issues/6842, we need to - // explicitly request that the DeepBlueSim controller connect to the robot code *after* - // any SimDevices have been created (like those used to support simulation of many of - // the devices in lib199), so we do it once during the robot's first time step. - if (!connectHALSimWSRequestSent) { - NetworkTableInstance.getDefault() - .getStringTopic("/DeepBlueSim/Coordinator/request") - .publish().set("connectHALSimWS"); - connectHALSimWSRequestSent = true; - } - }); + + // Regularly request a HALSimWS connection from the DeepBlueSim controller (if/when it is + // listening). To workaround https://github.com/wpilibsuite/allwpilib/issues/6842, this must + // be done *after* any SimDevices have been created (like those used to support simulation + // of many of the devices in lib199). + var reqPublisher = NetworkTableInstance.getDefault() + .getStringTopic("/DeepBlueSim/Coordinator/request").publish(); + registerSimulationPeriodic(() -> reqPublisher.set("connectHALSimWS")); + INSTANCE.register(); }