From d8e07f213c2d776a7cd291eaf77ae0366a6d9a74 Mon Sep 17 00:00:00 2001 From: Shane Loretz Date: Tue, 13 Jun 2023 18:04:20 +0000 Subject: [PATCH 1/4] Workaround ros2/rosidl_typesupport#120 --- bazel_ros2_rules/ros2/rosidl.bzl | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/bazel_ros2_rules/ros2/rosidl.bzl b/bazel_ros2_rules/ros2/rosidl.bzl index c91f9461..f87bc465 100644 --- a/bazel_ros2_rules/ros2/rosidl.bzl +++ b/bazel_ros2_rules/ros2/rosidl.bzl @@ -1316,6 +1316,18 @@ def rosidl_interfaces_group( Additional keyword arguments are those common to all rules. """ + + # Workaround ros2/rosidl_typesupport#120 + # The introspection type supports assume the library name is the same as + # the package name (aka "group" here). If the ROS workspace supports + # multiple typesupports then the introspection type support will fail + # to load. + # Workaround by making the library name the same as the group name, and + # make aliases for those targets. + real_name = name + if group != None: + name = group + rosidl_definitions_filegroup( name = _make_public_name(name, "_defs"), group = group or name, @@ -1344,3 +1356,17 @@ def rosidl_interfaces_group( py_library_rule = py_library_rule, **kwargs ) + + if real_name != name: + native.alias( + name = real_name + "_defs", + actual = name + "_defs", + ) + native.alias( + name = real_name + "_cc", + actual = name + "_cc", + ) + native.alias( + name = real_name + "_py", + actual = name + "_py", + ) From 182bd85244f1867faac5a06459a066d5f9ddfa9f Mon Sep 17 00:00:00 2001 From: Shane Loretz Date: Tue, 13 Jun 2023 21:26:58 +0000 Subject: [PATCH 2/4] XXX Test that rosidl_generate_interfaces() works with group --- drake_ros_examples/WORKSPACE | 19 ++++++++++++++----- .../examples/hydroelastic/BUILD.bazel | 2 ++ .../examples/iiwa_manipulator/BUILD.bazel | 3 +++ .../examples/multirobot/BUILD.bazel | 3 +++ .../examples/rs_flip_flop/BUILD.bazel | 12 ++++++++++++ .../examples/rs_flip_flop/msg/Foobar.msg | 2 ++ .../examples/rs_flip_flop/rs_flip_flop.cpp | 1 + .../examples/rs_flip_flop/rs_flip_flop.py | 1 + 8 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg diff --git a/drake_ros_examples/WORKSPACE b/drake_ros_examples/WORKSPACE index f7c2b61a..c540f66b 100644 --- a/drake_ros_examples/WORKSPACE +++ b/drake_ros_examples/WORKSPACE @@ -19,7 +19,9 @@ load("@bazel_ros2_rules//deps:defs.bzl", "add_bazel_ros2_rules_dependencies") add_bazel_ros2_rules_dependencies() -load("@bazel_ros2_rules//ros2:defs.bzl", "ros2_archive") +#load("@bazel_ros2_rules//ros2:defs.bzl", "ros2_archive") +load("@bazel_ros2_rules//ros2:defs.bzl", "ros2_local_repository") + # N.B. We do *not* name this as `drake_ros` to avoid module shadowing. # See https://github.com/bazelbuild/bazel/issues/17691 @@ -42,6 +44,7 @@ ROS_PACKAGES = DRAKE_ROS_REQUIRED_PACKAGES + [ "geometry_msgs", "rclcpp", "rclpy", + "rosidl_default_generators", "ros2cli_common_extensions", "rviz2", "tf2_ros", @@ -52,12 +55,18 @@ ROS_PACKAGES = DRAKE_ROS_REQUIRED_PACKAGES + [ drake_ros_fail_if_missing_required_packages(ROS_PACKAGES) # Use ROS 2 -ros2_archive( +#ros2_archive( +# name = "ros2", +# include_packages = ROS_PACKAGES, +# sha256_url = "https://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci-CHECKSUM", # noqa +# strip_prefix = "ros2-linux", +# url = "http://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci.tar.bz2", # noqa +#) + +ros2_local_repository( name = "ros2", include_packages = ROS_PACKAGES, - sha256_url = "https://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci-CHECKSUM", # noqa - strip_prefix = "ros2-linux", - url = "http://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci.tar.bz2", # noqa + workspaces = ['/opt/ros/humble'], ) load("@drake_ros_repo//:drake.bzl", "DRAKE_SUGGESTED_VERSION") diff --git a/drake_ros_examples/examples/hydroelastic/BUILD.bazel b/drake_ros_examples/examples/hydroelastic/BUILD.bazel index 3f867318..09a32562 100644 --- a/drake_ros_examples/examples/hydroelastic/BUILD.bazel +++ b/drake_ros_examples/examples/hydroelastic/BUILD.bazel @@ -41,6 +41,7 @@ ros_cc_binary( "@drake_ros_repo//:drake_ros", "@gflags", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) # TODO(sloretz) Add Python example @@ -55,4 +56,5 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel b/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel index 25aa8108..22a0bbb0 100644 --- a/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel +++ b/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel @@ -20,6 +20,7 @@ ros_cc_binary( "@drake_ros_repo//viz", "@gflags", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_binary( @@ -32,6 +33,7 @@ ros_py_binary( "@drake_ros_repo//:drake_ros_py", "@ros2//:rclpy_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_test( @@ -45,4 +47,5 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/multirobot/BUILD.bazel b/drake_ros_examples/examples/multirobot/BUILD.bazel index 434b0dfb..4f4463af 100644 --- a/drake_ros_examples/examples/multirobot/BUILD.bazel +++ b/drake_ros_examples/examples/multirobot/BUILD.bazel @@ -25,6 +25,7 @@ ros_cc_binary( "@drake_ros_repo//viz", "@gflags", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_binary( @@ -40,6 +41,7 @@ ros_py_binary( "@drake_ros_repo//:drake_ros_py", "@ros2//:rclpy_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_test( @@ -53,4 +55,5 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel b/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel index b5fc0b9c..63baa1e7 100644 --- a/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel +++ b/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel @@ -4,12 +4,20 @@ load("@ros2//:ros_cc.bzl", "ros_cc_binary") load("@ros2//:ros_py.bzl", "ros_py_binary") load("@ros2//:ros_py.bzl", "ros_py_test") +load("@ros2//:rosidl.bzl", "rosidl_interfaces_group") + +rosidl_interfaces_group( + name = "label_name", + group = "group_name", + interfaces = glob(["msg/*.msg"]) +) ros_cc_binary( name = "rs_flip_flop", srcs = ["rs_flip_flop.cpp"], visibility = ["//visibility:public"], deps = [ + ":label_name_cc", "@drake//systems/analysis:simulator", "@drake//systems/framework:diagram_builder", "@drake//systems/framework:leaf_system", @@ -17,6 +25,7 @@ ros_cc_binary( "@gflags", "@ros2//:std_msgs_cc", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_binary( @@ -25,11 +34,13 @@ ros_py_binary( main = "rs_flip_flop.py", visibility = ["//visibility:public"], deps = [ + ":label_name_py", "@drake//bindings/pydrake", "@drake_ros_repo//:drake_ros_py", "@ros2//:rclpy_py", "@ros2//:std_msgs_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_test( @@ -43,4 +54,5 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], + rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg b/drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg new file mode 100644 index 00000000..75e9237f --- /dev/null +++ b/drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg @@ -0,0 +1,2 @@ +# A very simple custom message +int32 hello diff --git a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp index a894e4c0..efe650ee 100644 --- a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp +++ b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp @@ -11,6 +11,7 @@ #include #include #include +#include DEFINE_double(simulation_sec, std::numeric_limits::infinity(), "How many seconds to run the simulation"); diff --git a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py index b800b9fe..73435e74 100755 --- a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py +++ b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py @@ -27,6 +27,7 @@ from rclpy.qos import QoSProfile +from group_name.msg import Foobar class NorGate(LeafSystem): From c8e48a32ab4c783571dda692496cdbec943f9aaf Mon Sep 17 00:00:00 2001 From: Shane Loretz Date: Tue, 13 Jun 2023 21:36:46 +0000 Subject: [PATCH 3/4] Revert "XXX Test that rosidl_generate_interfaces() works with group" This reverts commit 182bd85244f1867faac5a06459a066d5f9ddfa9f. --- drake_ros_examples/WORKSPACE | 19 +++++-------------- .../examples/hydroelastic/BUILD.bazel | 2 -- .../examples/iiwa_manipulator/BUILD.bazel | 3 --- .../examples/multirobot/BUILD.bazel | 3 --- .../examples/rs_flip_flop/BUILD.bazel | 12 ------------ .../examples/rs_flip_flop/msg/Foobar.msg | 2 -- .../examples/rs_flip_flop/rs_flip_flop.cpp | 1 - .../examples/rs_flip_flop/rs_flip_flop.py | 1 - 8 files changed, 5 insertions(+), 38 deletions(-) delete mode 100644 drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg diff --git a/drake_ros_examples/WORKSPACE b/drake_ros_examples/WORKSPACE index c540f66b..f7c2b61a 100644 --- a/drake_ros_examples/WORKSPACE +++ b/drake_ros_examples/WORKSPACE @@ -19,9 +19,7 @@ load("@bazel_ros2_rules//deps:defs.bzl", "add_bazel_ros2_rules_dependencies") add_bazel_ros2_rules_dependencies() -#load("@bazel_ros2_rules//ros2:defs.bzl", "ros2_archive") -load("@bazel_ros2_rules//ros2:defs.bzl", "ros2_local_repository") - +load("@bazel_ros2_rules//ros2:defs.bzl", "ros2_archive") # N.B. We do *not* name this as `drake_ros` to avoid module shadowing. # See https://github.com/bazelbuild/bazel/issues/17691 @@ -44,7 +42,6 @@ ROS_PACKAGES = DRAKE_ROS_REQUIRED_PACKAGES + [ "geometry_msgs", "rclcpp", "rclpy", - "rosidl_default_generators", "ros2cli_common_extensions", "rviz2", "tf2_ros", @@ -55,18 +52,12 @@ ROS_PACKAGES = DRAKE_ROS_REQUIRED_PACKAGES + [ drake_ros_fail_if_missing_required_packages(ROS_PACKAGES) # Use ROS 2 -#ros2_archive( -# name = "ros2", -# include_packages = ROS_PACKAGES, -# sha256_url = "https://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci-CHECKSUM", # noqa -# strip_prefix = "ros2-linux", -# url = "http://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci.tar.bz2", # noqa -#) - -ros2_local_repository( +ros2_archive( name = "ros2", include_packages = ROS_PACKAGES, - workspaces = ['/opt/ros/humble'], + sha256_url = "https://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci-CHECKSUM", # noqa + strip_prefix = "ros2-linux", + url = "http://repo.ros2.org/ci_archives/nightly-cyclonedds/ros2-humble-linux-jammy-amd64-ci.tar.bz2", # noqa ) load("@drake_ros_repo//:drake.bzl", "DRAKE_SUGGESTED_VERSION") diff --git a/drake_ros_examples/examples/hydroelastic/BUILD.bazel b/drake_ros_examples/examples/hydroelastic/BUILD.bazel index 09a32562..3f867318 100644 --- a/drake_ros_examples/examples/hydroelastic/BUILD.bazel +++ b/drake_ros_examples/examples/hydroelastic/BUILD.bazel @@ -41,7 +41,6 @@ ros_cc_binary( "@drake_ros_repo//:drake_ros", "@gflags", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) # TODO(sloretz) Add Python example @@ -56,5 +55,4 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel b/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel index 22a0bbb0..25aa8108 100644 --- a/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel +++ b/drake_ros_examples/examples/iiwa_manipulator/BUILD.bazel @@ -20,7 +20,6 @@ ros_cc_binary( "@drake_ros_repo//viz", "@gflags", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_binary( @@ -33,7 +32,6 @@ ros_py_binary( "@drake_ros_repo//:drake_ros_py", "@ros2//:rclpy_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_test( @@ -47,5 +45,4 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/multirobot/BUILD.bazel b/drake_ros_examples/examples/multirobot/BUILD.bazel index 4f4463af..434b0dfb 100644 --- a/drake_ros_examples/examples/multirobot/BUILD.bazel +++ b/drake_ros_examples/examples/multirobot/BUILD.bazel @@ -25,7 +25,6 @@ ros_cc_binary( "@drake_ros_repo//viz", "@gflags", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_binary( @@ -41,7 +40,6 @@ ros_py_binary( "@drake_ros_repo//:drake_ros_py", "@ros2//:rclpy_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_test( @@ -55,5 +53,4 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel b/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel index 63baa1e7..b5fc0b9c 100644 --- a/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel +++ b/drake_ros_examples/examples/rs_flip_flop/BUILD.bazel @@ -4,20 +4,12 @@ load("@ros2//:ros_cc.bzl", "ros_cc_binary") load("@ros2//:ros_py.bzl", "ros_py_binary") load("@ros2//:ros_py.bzl", "ros_py_test") -load("@ros2//:rosidl.bzl", "rosidl_interfaces_group") - -rosidl_interfaces_group( - name = "label_name", - group = "group_name", - interfaces = glob(["msg/*.msg"]) -) ros_cc_binary( name = "rs_flip_flop", srcs = ["rs_flip_flop.cpp"], visibility = ["//visibility:public"], deps = [ - ":label_name_cc", "@drake//systems/analysis:simulator", "@drake//systems/framework:diagram_builder", "@drake//systems/framework:leaf_system", @@ -25,7 +17,6 @@ ros_cc_binary( "@gflags", "@ros2//:std_msgs_cc", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_binary( @@ -34,13 +25,11 @@ ros_py_binary( main = "rs_flip_flop.py", visibility = ["//visibility:public"], deps = [ - ":label_name_py", "@drake//bindings/pydrake", "@drake_ros_repo//:drake_ros_py", "@ros2//:rclpy_py", "@ros2//:std_msgs_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) ros_py_test( @@ -54,5 +43,4 @@ ros_py_test( deps = [ "//:bazel_ros_testing_py", ], - rmw_implementation = "rmw_cyclonedds_cpp", ) diff --git a/drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg b/drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg deleted file mode 100644 index 75e9237f..00000000 --- a/drake_ros_examples/examples/rs_flip_flop/msg/Foobar.msg +++ /dev/null @@ -1,2 +0,0 @@ -# A very simple custom message -int32 hello diff --git a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp index efe650ee..a894e4c0 100644 --- a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp +++ b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.cpp @@ -11,7 +11,6 @@ #include #include #include -#include DEFINE_double(simulation_sec, std::numeric_limits::infinity(), "How many seconds to run the simulation"); diff --git a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py index 73435e74..b800b9fe 100755 --- a/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py +++ b/drake_ros_examples/examples/rs_flip_flop/rs_flip_flop.py @@ -27,7 +27,6 @@ from rclpy.qos import QoSProfile -from group_name.msg import Foobar class NorGate(LeafSystem): From 6573a660c4eca1d3a668eba099d090060476521d Mon Sep 17 00:00:00 2001 From: Shane Loretz Date: Tue, 13 Jun 2023 22:01:30 +0000 Subject: [PATCH 4/4] fixup - pass kwargs to alias targets --- bazel_ros2_rules/ros2/rosidl.bzl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bazel_ros2_rules/ros2/rosidl.bzl b/bazel_ros2_rules/ros2/rosidl.bzl index f87bc465..7360d5f4 100644 --- a/bazel_ros2_rules/ros2/rosidl.bzl +++ b/bazel_ros2_rules/ros2/rosidl.bzl @@ -1361,12 +1361,15 @@ def rosidl_interfaces_group( native.alias( name = real_name + "_defs", actual = name + "_defs", + **kwargs ) native.alias( name = real_name + "_cc", actual = name + "_cc", + **kwargs ) native.alias( name = real_name + "_py", actual = name + "_py", + **kwargs )