From c72b1513497a2434934f2ccf49fac87ea76cd89a Mon Sep 17 00:00:00 2001 From: Duncan Calvert Date: Thu, 30 Aug 2018 12:58:34 -0500 Subject: [PATCH 1/6] Extract default queue size into constant. --- .../src/main/java/us/ihmc/ros2/RealtimeRos2Node.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ihmc-ros2-library/src/main/java/us/ihmc/ros2/RealtimeRos2Node.java b/ihmc-ros2-library/src/main/java/us/ihmc/ros2/RealtimeRos2Node.java index b02c3421..77aa90ee 100644 --- a/ihmc-ros2-library/src/main/java/us/ihmc/ros2/RealtimeRos2Node.java +++ b/ihmc-ros2-library/src/main/java/us/ihmc/ros2/RealtimeRos2Node.java @@ -36,6 +36,7 @@ public class RealtimeRos2Node { public static int THREAD_PERIOD_MICROSECONDS = 1000; + public static final int DEFAULT_QUEUE_SIZE = 10; private final Ros2NodeBasics node; @@ -136,7 +137,7 @@ public RealtimeRos2Node(Ros2Node ros2Node, PeriodicThreadSchedulerFactory thread */ public RealtimeRos2Publisher createPublisher(TopicDataType topicDataType, String topicName) throws IOException { - return createPublisher(topicDataType, topicName, Ros2QosProfile.DEFAULT(), 10); + return createPublisher(topicDataType, topicName, Ros2QosProfile.DEFAULT(), DEFAULT_QUEUE_SIZE); } /** @@ -186,7 +187,7 @@ public RealtimeRos2Publisher createPublisher(TopicDataType topicDataTy */ public RealtimeRos2Subscription createQueuedSubscription(TopicDataType topicDataType, String topicName) throws IOException { - return createQueuedSubscription(topicDataType, topicName, Ros2QosProfile.DEFAULT(), 10); + return createQueuedSubscription(topicDataType, topicName, Ros2QosProfile.DEFAULT(), DEFAULT_QUEUE_SIZE); } /** From 8ca21922c675899a57094dbc3543cdf7fae59365 Mon Sep 17 00:00:00 2001 From: Duncan Calvert Date: Thu, 30 Aug 2018 15:31:37 -0500 Subject: [PATCH 2/6] Load default ROS_DOMAIN_ID from env variable or use 0. Either way, print it out. --- .../java/us/ihmc/ros2/Ros2NodeBasics.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ihmc-ros2-library/src/main/java/us/ihmc/ros2/Ros2NodeBasics.java b/ihmc-ros2-library/src/main/java/us/ihmc/ros2/Ros2NodeBasics.java index 3179c46c..94f8654f 100644 --- a/ihmc-ros2-library/src/main/java/us/ihmc/ros2/Ros2NodeBasics.java +++ b/ihmc-ros2-library/src/main/java/us/ihmc/ros2/Ros2NodeBasics.java @@ -17,6 +17,7 @@ import java.io.IOException; +import us.ihmc.commons.PrintTools; import us.ihmc.pubsub.Domain; import us.ihmc.pubsub.DomainFactory; import us.ihmc.pubsub.DomainFactory.PubSubImplementation; @@ -41,7 +42,7 @@ */ class Ros2NodeBasics { - public static final int ROS_DEFAULT_DOMAIN_ID = 0; + public static final int ROS_DEFAULT_DOMAIN_ID = domainFromEnvironment(); private final Ros2Distro ros2Distro; @@ -285,4 +286,28 @@ public void destroy() domain = null; participant = null; } + + public static int domainFromEnvironment() + { + String rosDomainId = System.getenv("ROS_DOMAIN_ID"); + + int rosDomainIdAsInteger = 0; // default to 0 + + if (rosDomainId != null) + { + rosDomainId = rosDomainId.trim(); + try + { + rosDomainIdAsInteger = Integer.valueOf(rosDomainId); + } + catch (NumberFormatException e) + { + PrintTools.warn("Environment variable ROS_DOMAIN_ID cannot be parsed as an integer: " + rosDomainId); + } + } + + PrintTools.info(Ros2NodeBasics.class, "Default ROS_DOMAIN_ID: " + rosDomainIdAsInteger); + + return rosDomainIdAsInteger; + } } From 2032846cd80d65f9c91ef8264d62460ab9fa7dbc Mon Sep 17 00:00:00 2001 From: Duncan Calvert Date: Tue, 4 Sep 2018 13:47:55 -0500 Subject: [PATCH 3/6] Improve example and include destroy call. --- README.md | 19 ++++++++++++------- .../RealtimeRos2PublishSubscribeExample.java | 11 ++++++++--- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 760fc287..72882a60 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,10 @@ This library provides a minimal implementation of a Ros2Node in Java. Two versio PeriodicThreadSchedulerFactory threadFactory = SystemUtils.IS_OS_LINUX ? // realtime threads only work on linux new PeriodicRealtimeThreadSchedulerFactory(20) : // see https://github.com/ihmcrobotics/ihmc-realtime new PeriodicNonRealtimeThreadSchedulerFactory(); // to setup realtime threads -RealtimeRos2Node node = new RealtimeRos2Node(PubSubImplementation.FAST_RTPS, threadFactory, "NonRealtimeRos2PublishSubscribeExample", ""); -RealtimeRos2Publisher publisher = node.createPublisher(Int64.getPubSubType().get(), "/example"); -RealtimeRos2Subscription subscription = node.createSubscription(Int64.getPubSubType().get(), "/example"); +RealtimeRos2Node node = new RealtimeRos2Node(PubSubImplementation.FAST_RTPS, threadFactory, "NonRealtimeRos2PublishSubscribeExample", "/us/ihmc"); +RealtimeRos2Publisher publisher = node.createPublisher(new Int64PubSubType(), "/example", Ros2QosProfile.KEEP_HISTORY(3), 10); +RealtimeRos2Subscription subscription = node.createQueuedSubscription(new Int64PubSubType(), "/example", Ros2QosProfile.KEEP_HISTORY(3), 10); + node.spin(); // start the realtime node thread @@ -58,19 +59,20 @@ Int64 message = new Int64(); for (int i = 0; i < 10; i++) { message.setData(i); - publisher.publish(message); // publish + publisher.publish(message); + System.out.println("Sending: " + message); } Int64 incomingMessage = new Int64(); while (!subscription.poll(incomingMessage)) ; // just waiting for the first message -System.out.println(incomingMessage); // first message +System.out.println("Receiving: " + incomingMessage); // first message int i = 1; while (i < 10) { - if (subscription.poll(incomingMessage)) // poll for new messages + if (subscription.poll(incomingMessage)) { - System.out.println(incomingMessage); + System.out.println("Receiving: " + incomingMessage); i++; } else @@ -78,6 +80,9 @@ while (i < 10) // no available messages } } +System.out.println("Received all messages!"); + +node.destroy(); ``` ## Note diff --git a/ihmc-ros2-library/src/test/java/us/ihmc/ros2/example/RealtimeRos2PublishSubscribeExample.java b/ihmc-ros2-library/src/test/java/us/ihmc/ros2/example/RealtimeRos2PublishSubscribeExample.java index 13ca1fb6..43790067 100644 --- a/ihmc-ros2-library/src/test/java/us/ihmc/ros2/example/RealtimeRos2PublishSubscribeExample.java +++ b/ihmc-ros2-library/src/test/java/us/ihmc/ros2/example/RealtimeRos2PublishSubscribeExample.java @@ -22,6 +22,7 @@ import us.ihmc.ros2.RealtimeRos2Node; import us.ihmc.ros2.RealtimeRos2Publisher; import us.ihmc.ros2.RealtimeRos2Subscription; +import us.ihmc.ros2.Ros2QosProfile; import us.ihmc.util.PeriodicNonRealtimeThreadSchedulerFactory; import us.ihmc.util.PeriodicRealtimeThreadSchedulerFactory; import us.ihmc.util.PeriodicThreadSchedulerFactory; @@ -45,9 +46,10 @@ public static void main(String[] args) throws IOException, InterruptedException new PeriodicRealtimeThreadSchedulerFactory(20) : // see https://github.com/ihmcrobotics/ihmc-realtime new PeriodicNonRealtimeThreadSchedulerFactory(); // to setup realtime threads RealtimeRos2Node node = new RealtimeRos2Node(PubSubImplementation.FAST_RTPS, threadFactory, "NonRealtimeRos2PublishSubscribeExample", "/us/ihmc"); - RealtimeRos2Publisher publisher = node.createPublisher(new Int64PubSubType(), "/example"); - RealtimeRos2Subscription subscription = node.createQueuedSubscription(new Int64PubSubType(), "/example"); + RealtimeRos2Publisher publisher = node.createPublisher(new Int64PubSubType(), "/example", Ros2QosProfile.KEEP_HISTORY(3), 10); + RealtimeRos2Subscription subscription = node.createQueuedSubscription(new Int64PubSubType(), "/example", Ros2QosProfile.KEEP_HISTORY(3), 10); + node.spin(); // start the realtime node thread Int64 message = new Int64(); @@ -61,7 +63,7 @@ public static void main(String[] args) throws IOException, InterruptedException Int64 incomingMessage = new Int64(); while (!subscription.poll(incomingMessage)) ; // just waiting for the first message - System.out.println(incomingMessage); // first message + System.out.println("Receiving: " + incomingMessage); // first message int i = 1; while (i < 10) { @@ -75,5 +77,8 @@ public static void main(String[] args) throws IOException, InterruptedException // no available messages } } + System.out.println("Received all messages!"); + + node.destroy(); } } From b5378b33eb7bd2b7812da5da85f60e2e5d60e590 Mon Sep 17 00:00:00 2001 From: Duncan Calvert Date: Fri, 7 Sep 2018 15:39:57 -0500 Subject: [PATCH 4/6] :sparkles: Remove CI annotations. I'm pretty sure they are not used so this should not break anything. --- ihmc-ros2-library/build.gradle | 1 + ros2-msg-to-pubsub-generator/build.gradle | 1 + 2 files changed, 2 insertions(+) diff --git a/ihmc-ros2-library/build.gradle b/ihmc-ros2-library/build.gradle index 4391b368..ff78c61b 100644 --- a/ihmc-ros2-library/build.gradle +++ b/ihmc-ros2-library/build.gradle @@ -28,4 +28,5 @@ mainDependencies { testDependencies { compile group: "us.ihmc", name: "ros2-common-interfaces", version: version compile group: "us.ihmc", name: "ros2-msg-to-pubsub-generator-test", version: version + compile group: "us.ihmc", name: "ihmc-ci-core-api", version: "0.18.0" } diff --git a/ros2-msg-to-pubsub-generator/build.gradle b/ros2-msg-to-pubsub-generator/build.gradle index afdbdb4a..ffaa511c 100644 --- a/ros2-msg-to-pubsub-generator/build.gradle +++ b/ros2-msg-to-pubsub-generator/build.gradle @@ -34,6 +34,7 @@ mainDependencies { testDependencies { compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.8.3" + compile group: "us.ihmc", name: "ihmc-ci-core-api", version: "0.18.0" } task show() { From d7e6868c46c2777f4d0718c7107861fd76fef2d4 Mon Sep 17 00:00:00 2001 From: Duncan Calvert Date: Fri, 7 Sep 2018 16:27:50 -0500 Subject: [PATCH 5/6] :arrow_up: ihmc-build 0.15.1 --- build.gradle | 2 +- ihmc-ros2-library/build.gradle | 2 +- ihmc-ros2-library/settings.gradle | 2 +- ros2-common-interfaces/build.gradle | 2 +- ros2-common-interfaces/settings.gradle | 2 +- ros2-msg-to-idl-generator/build.gradle | 2 +- ros2-msg-to-idl-generator/settings.gradle | 2 +- ros2-msg-to-pubsub-generator/build.gradle | 2 +- ros2-msg-to-pubsub-generator/settings.gradle | 2 +- settings.gradle | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 93b178d3..e058cc85 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } apply plugin: "us.ihmc.ihmc-build" diff --git a/ihmc-ros2-library/build.gradle b/ihmc-ros2-library/build.gradle index ff78c61b..c1111bb6 100644 --- a/ihmc-ros2-library/build.gradle +++ b/ihmc-ros2-library/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } diff --git a/ihmc-ros2-library/settings.gradle b/ihmc-ros2-library/settings.gradle index 3ca47f7e..2a23f9a2 100644 --- a/ihmc-ros2-library/settings.gradle +++ b/ihmc-ros2-library/settings.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } diff --git a/ros2-common-interfaces/build.gradle b/ros2-common-interfaces/build.gradle index a19a89b5..33e4aa4c 100644 --- a/ros2-common-interfaces/build.gradle +++ b/ros2-common-interfaces/build.gradle @@ -8,7 +8,7 @@ buildscript { jcenter() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" classpath "us.ihmc:ros2-msg-to-pubsub-generator:0.7.6-alpha" classpath "org.ajoberstar:grgit:2.1.0" } diff --git a/ros2-common-interfaces/settings.gradle b/ros2-common-interfaces/settings.gradle index f1e62d37..65f7b731 100644 --- a/ros2-common-interfaces/settings.gradle +++ b/ros2-common-interfaces/settings.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } diff --git a/ros2-msg-to-idl-generator/build.gradle b/ros2-msg-to-idl-generator/build.gradle index 78a51649..5b0f873d 100644 --- a/ros2-msg-to-idl-generator/build.gradle +++ b/ros2-msg-to-idl-generator/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } apply plugin: "us.ihmc.ihmc-build" diff --git a/ros2-msg-to-idl-generator/settings.gradle b/ros2-msg-to-idl-generator/settings.gradle index 3ca47f7e..2a23f9a2 100644 --- a/ros2-msg-to-idl-generator/settings.gradle +++ b/ros2-msg-to-idl-generator/settings.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } diff --git a/ros2-msg-to-pubsub-generator/build.gradle b/ros2-msg-to-pubsub-generator/build.gradle index ffaa511c..5c3b3d47 100644 --- a/ros2-msg-to-pubsub-generator/build.gradle +++ b/ros2-msg-to-pubsub-generator/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } apply plugin: "us.ihmc.ihmc-build" diff --git a/ros2-msg-to-pubsub-generator/settings.gradle b/ros2-msg-to-pubsub-generator/settings.gradle index 3ca47f7e..2a23f9a2 100644 --- a/ros2-msg-to-pubsub-generator/settings.gradle +++ b/ros2-msg-to-pubsub-generator/settings.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } diff --git a/settings.gradle b/settings.gradle index d6d79114..60228e05 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,7 +4,7 @@ buildscript { mavenLocal() } dependencies { - classpath "us.ihmc:ihmc-build:0.14.0" + classpath "us.ihmc:ihmc-build:0.15.1" } } From 170d41d9567d486bf1122028dceaddef63405f61 Mon Sep 17 00:00:00 2001 From: Duncan Calvert Date: Tue, 18 Sep 2018 15:56:56 -0500 Subject: [PATCH 6/6] Upgrade to ihmc-pub-sub 0.9.0 and increase size of sequence after it started crashing. --- ihmc-ros2-library/build.gradle | 2 +- ros2-common-interfaces/build.gradle | 2 +- ros2-msg-to-pubsub-generator/build.gradle | 4 ++-- .../src/test/generated-idl/ros_msgs/msg/BigNumSequence_.idl | 2 +- .../test/generated-java/ros_msgs/msg/dds/BigNumSequence.java | 2 +- .../ros_msgs/msg/dds/BigNumSequencePubSubType.java | 4 ++-- .../src/test/ros_msgs/msg/BigNumSequence.msg | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ihmc-ros2-library/build.gradle b/ihmc-ros2-library/build.gradle index c1111bb6..ba4cce28 100644 --- a/ihmc-ros2-library/build.gradle +++ b/ihmc-ros2-library/build.gradle @@ -20,7 +20,7 @@ ihmc { } mainDependencies { - compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.8.3" + compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.9.0" compile group: "us.ihmc", name: "IHMCRealtime", version: "1.1.8" compile group: "us.ihmc", name: "ihmc-commons", version: "0.20.0" } diff --git a/ros2-common-interfaces/build.gradle b/ros2-common-interfaces/build.gradle index 33e4aa4c..15492ec9 100644 --- a/ros2-common-interfaces/build.gradle +++ b/ros2-common-interfaces/build.gradle @@ -40,7 +40,7 @@ ihmc { mainDependencies { compile group: "us.ihmc", name: "euclid-core", version: "0.4.13" compile group: "us.ihmc", name: "euclid", version: "0.7.5" - compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.8.3" + compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.9.0" } generatorDependencies { diff --git a/ros2-msg-to-pubsub-generator/build.gradle b/ros2-msg-to-pubsub-generator/build.gradle index 5c3b3d47..0a2f7e25 100644 --- a/ros2-msg-to-pubsub-generator/build.gradle +++ b/ros2-msg-to-pubsub-generator/build.gradle @@ -28,12 +28,12 @@ dependencies { } mainDependencies { - compile group: "us.ihmc", name: "ihmc-pub-sub-generator", version: "0.8.3" + compile group: "us.ihmc", name: "ihmc-pub-sub-generator", version: "0.9.0" compile group: "us.ihmc", name: "ros2-msg-to-idl-generator", version: version } testDependencies { - compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.8.3" + compile group: "us.ihmc", name: "ihmc-pub-sub", version: "0.9.0" compile group: "us.ihmc", name: "ihmc-ci-core-api", version: "0.18.0" } diff --git a/ros2-msg-to-pubsub-generator/src/test/generated-idl/ros_msgs/msg/BigNumSequence_.idl b/ros2-msg-to-pubsub-generator/src/test/generated-idl/ros_msgs/msg/BigNumSequence_.idl index a77d73dd..6d7f69c8 100644 --- a/ros2-msg-to-pubsub-generator/src/test/generated-idl/ros_msgs/msg/BigNumSequence_.idl +++ b/ros2-msg-to-pubsub-generator/src/test/generated-idl/ros_msgs/msg/BigNumSequence_.idl @@ -12,7 +12,7 @@ module ros_msgs @TypeCode(type="ros_msgs::msg::dds_::BigNumSequence_") struct BigNumSequence { - sequence large_sequence; + sequence large_sequence; }; }; }; diff --git a/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequence.java b/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequence.java index 552cb355..8935c099 100644 --- a/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequence.java +++ b/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequence.java @@ -12,7 +12,7 @@ public class BigNumSequence extends Packet implements Settable (100, new ros_msgs.msg.dds.NumPubSubType()); + large_sequence_ = new us.ihmc.idl.IDLSequence.Object (10000, new ros_msgs.msg.dds.NumPubSubType()); } diff --git a/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequencePubSubType.java b/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequencePubSubType.java index 0f729f70..f98060b7 100644 --- a/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequencePubSubType.java +++ b/ros2-msg-to-pubsub-generator/src/test/generated-java/ros_msgs/msg/dds/BigNumSequencePubSubType.java @@ -40,7 +40,7 @@ public static int getMaxCdrSerializedSize(int current_alignment) { int initial_alignment = current_alignment; - current_alignment += 4 + us.ihmc.idl.CDR.alignment(current_alignment, 4);for(int i0 = 0; i0 < 100; ++i0) + current_alignment += 4 + us.ihmc.idl.CDR.alignment(current_alignment, 4);for(int i0 = 0; i0 < 10000; ++i0) { current_alignment += ros_msgs.msg.dds.NumPubSubType.getMaxCdrSerializedSize(current_alignment);} return current_alignment - initial_alignment; @@ -65,7 +65,7 @@ public final static int getCdrSerializedSize(ros_msgs.msg.dds.BigNumSequence dat public static void write(ros_msgs.msg.dds.BigNumSequence data, us.ihmc.idl.CDR cdr) { - if(data.getLargeSequence().size() <= 100) + if(data.getLargeSequence().size() <= 10000) cdr.write_type_e(data.getLargeSequence());else throw new RuntimeException("large_sequence field exceeds the maximum length"); diff --git a/ros2-msg-to-pubsub-generator/src/test/ros_msgs/msg/BigNumSequence.msg b/ros2-msg-to-pubsub-generator/src/test/ros_msgs/msg/BigNumSequence.msg index f0e2f959..57a864b0 100644 --- a/ros2-msg-to-pubsub-generator/src/test/ros_msgs/msg/BigNumSequence.msg +++ b/ros2-msg-to-pubsub-generator/src/test/ros_msgs/msg/BigNumSequence.msg @@ -1 +1 @@ -Num[<=100] large_sequence +Num[<=10000] large_sequence