diff --git a/README.md b/README.md index d2b97ffd4..b0483900b 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Galactic | Edifice | [galactic](https://github.com/gazebosim/ros_gz/tree/galacti Galactic | Fortress | [galactic](https://github.com/gazebosim/ros_gz/tree/galactic) | only from source Humble | Fortress | [humble](https://github.com/gazebosim/ros_gz/tree/humble) | https://packages.ros.org Humble | Garden | [humble](https://github.com/gazebosim/ros_gz/tree/humble) | only from source +Iron | Fortress | [humble](https://github.com/gazebosim/ros_gz/tree/iron) | https://packages.ros.org +Iron | Garden | [humble](https://github.com/gazebosim/ros_gz/tree/iron) | only from source Rolling | Edifice | [ros2](https://github.com/gazebosim/ros_gz/tree/ros2) | only from source Rolling | Fortress | [ros2](https://github.com/gazebosim/ros_gz/tree/ros2) | https://packages.ros.org Rolling | Garden | [ros2](https://github.com/gazebosim/ros_gz/tree/ros2) | only from source @@ -51,11 +53,11 @@ This repository holds packages that provide integration between ## Install -This branch supports ROS Rolling. See above for other ROS versions. +This branch supports ROS Iron. See above for other ROS versions. ### Binaries -Rolling binaries are available for Fortress. +Iron binaries are available for Fortress. They are hosted at https://packages.ros.org. 1. Add https://packages.ros.org @@ -66,14 +68,14 @@ They are hosted at https://packages.ros.org. 1. Install `ros_gz` - sudo apt install ros-rolling-ros-ign + sudo apt install ros-iron-ros-gz ### From source #### ROS Be sure you've installed -[ROS Rolling](https://index.ros.org/doc/ros2/Installation/) +[ROS Iron](https://docs.ros.org/en/iron/Installation.html) (at least ROS-Base). More ROS dependencies will be installed below. #### Gazebo @@ -121,3 +123,10 @@ The following steps are for Linux and OSX. cd ~/ws colcon build ``` + +## ROSCon 2022 + +[![](img/video_img.png)](https://vimeo.com/showcase/9954564/video/767127300) + +## Project Template +[A template project integrating ROS and Gazebo simulator](https://github.com/gazebosim/ros_gz_project_template) diff --git a/ros_gz/CHANGELOG.rst b/ros_gz/CHANGELOG.rst index 60541f530..12875b00f 100644 --- a/ros_gz/CHANGELOG.rst +++ b/ros_gz/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_gz ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_gz/package.xml b/ros_gz/package.xml index 323c8e857..f7c4d786e 100644 --- a/ros_gz/package.xml +++ b/ros_gz/package.xml @@ -4,7 +4,7 @@ ros_gz - 0.245.0 + 0.247.0 Meta-package containing interfaces for using ROS 2 with Gazebo simulation. Louise Poubel Apache 2.0 diff --git a/ros_gz_bridge/CHANGELOG.rst b/ros_gz_bridge/CHANGELOG.rst index 4a086e268..158ce6ce1 100644 --- a/ros_gz_bridge/CHANGELOG.rst +++ b/ros_gz_bridge/CHANGELOG.rst @@ -2,6 +2,21 @@ Changelog for package ros_gz_bridge ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- +* Fix double wait in ros_gz_bridge (`#347 `_) (`#449 `_) + Co-authored-by: ymd-stella <7959916+ymd-stella@users.noreply.github.com> +* [backport iron] SensorNoise msg bridging (`#417 `_) (`#425 `_) + Co-authored-by: Aditya Pande +* Merge pull request `#420 `_ from gazebosim/ahcorde/iron/backport/411 + [backport iron] Update README.md (`#411 `_) +* Merge branch 'iron' into ahcorde/iron/backport/411 +* [backport Iron] Added Altimeter msg bridging (`#413 `_) (`#414 `_) + Co-authored-by: Aditya Pande +* Update README.md (`#411 `_) + The ROS type for gz.msgs.NavSat messages should be **sensor_msgs/msg/NavSatFix** instead of **sensor_msgs/msg/NavSatFixed** +* Contributors: Alejandro Hernández Cordero, Arjun K Haridas + 0.245.0 (2023-05-23) -------------------- * Backport: Add missing rosidl_cmake dep to ros_gz_bridge (`#391 `_) (`#396 `_) diff --git a/ros_gz_bridge/README.md b/ros_gz_bridge/README.md index 08743a66b..11135cdbb 100644 --- a/ros_gz_bridge/README.md +++ b/ros_gz_bridge/README.md @@ -32,19 +32,21 @@ The following message types can be bridged for topics: | geometry_msgs/msg/TwistWithCovariance| ignition::msgs::TwistWithCovariance | | nav_msgs/msg/Odometry | ignition::msgs::Odometry | | nav_msgs/msg/Odometry | ignition::msgs::OdometryWithCovariance | -| rcl_interfaces/msg/ParameterValue | ignition::msgs::Any | +| rcl_interfaces/msg/ParameterValue | ignition::msgs::Any | +| ros_gz_interfaces/msg/Altimeter | ignition::msgs::Altimeter | | ros_gz_interfaces/msg/Contact | ignition::msgs::Contact | | ros_gz_interfaces/msg/Contacts | ignition::msgs::Contacts | -| ros_gz_interfaces/msg/Dataframe | ignition::msgs::Dataframe | +| ros_gz_interfaces/msg/Dataframe | ignition::msgs::Dataframe | | ros_gz_interfaces/msg/Entity | ignition::msgs::Entity | | ros_gz_interfaces/msg/Float32Array | ignition::msgs::Float_V | | ros_gz_interfaces/msg/GuiCamera | ignition::msgs::GUICamera | | ros_gz_interfaces/msg/JointWrench | ignition::msgs::JointWrench | | ros_gz_interfaces/msg/Light | ignition::msgs::Light | +| ros_gz_interfaces/msg/SensorNoise | ignition::msgs::SensorNoise | | ros_gz_interfaces/msg/StringVec | ignition::msgs::StringMsg_V | | ros_gz_interfaces/msg/TrackVisual | ignition::msgs::TrackVisual | -| ros_gz_interfaces/msg/VideoRecord | ignition::msgs::VideoRecord | -| ros_gz_interfaces/msg/WorldControl | ignition::msgs::WorldControl | +| ros_gz_interfaces/msg/VideoRecord | ignition::msgs::VideoRecord | +| ros_gz_interfaces/msg/WorldControl | ignition::msgs::WorldControl | | rosgraph_msgs/msg/Clock | ignition::msgs::Clock | | sensor_msgs/msg/BatteryState | ignition::msgs::BatteryState | | sensor_msgs/msg/CameraInfo | ignition::msgs::CameraInfo | @@ -52,10 +54,10 @@ The following message types can be bridged for topics: | sensor_msgs/msg/Imu | ignition::msgs::IMU | | sensor_msgs/msg/Image | ignition::msgs::Image | | sensor_msgs/msg/JointState | ignition::msgs::Model | -| sensor_msgs/msg/Joy | ignition::msgs::Joy | +| sensor_msgs/msg/Joy | ignition::msgs::Joy | | sensor_msgs/msg/LaserScan | ignition::msgs::LaserScan | | sensor_msgs/msg/MagneticField | ignition::msgs::Magnetometer | -| sensor_msgs/msg/NavSatFixed | ignition::msgs::NavSat | +| sensor_msgs/msg/NavSatFix | ignition::msgs::NavSat | | sensor_msgs/msg/PointCloud2 | ignition::msgs::PointCloudPacked | | tf2_msgs/msg/TFMessage | ignition::msgs::Pose_V | | trajectory_msgs/msg/JointTrajectory | ignition::msgs::JointTrajectory | @@ -64,7 +66,7 @@ And the following for services: | ROS type | Gazebo request | Gazebo response | |--------------------------------------|:--------------------------:| --------------------- | -| ros_gz_interfaces/srv/ControlWorld | ignition.msgs.WorldControl | ignition.msgs.Boolean | +| ros_gz_interfaces/srv/ControlWorld | ignition.msgs.WorldControl | ignition.msgs.Boolean | Run `ros2 run ros_gz_bridge parameter_bridge -h` for instructions. diff --git a/ros_gz_bridge/include/ros_gz_bridge/convert/ros_gz_interfaces.hpp b/ros_gz_bridge/include/ros_gz_bridge/convert/ros_gz_interfaces.hpp index 9a71beb91..9b0f5c10d 100644 --- a/ros_gz_bridge/include/ros_gz_bridge/convert/ros_gz_interfaces.hpp +++ b/ros_gz_bridge/include/ros_gz_bridge/convert/ros_gz_interfaces.hpp @@ -16,6 +16,7 @@ #define ROS_GZ_BRIDGE__CONVERT__ROS_GZ_INTERFACES_HPP_ // Gazebo Msgs +#include #include #include #include @@ -25,12 +26,14 @@ #include #include #include +#include #include #include #include #include // ROS 2 messages +#include #include #include #include @@ -39,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +73,18 @@ convert_gz_to_ros( const ignition::msgs::JointWrench & gz_msg, ros_gz_interfaces::msg::JointWrench & ros_msg); +template<> +void +convert_ros_to_gz( + const ros_gz_interfaces::msg::Altimeter & ros_msg, + ignition::msgs::Altimeter & gz_msg); + +template<> +void +convert_gz_to_ros( + const ignition::msgs::Altimeter & gz_msg, + ros_gz_interfaces::msg::Altimeter & ros_msg); + template<> void convert_ros_to_gz( @@ -143,6 +159,18 @@ convert_gz_to_ros( const ignition::msgs::Light & gz_msg, ros_gz_interfaces::msg::Light & ros_msg); +template<> +void +convert_ros_to_gz( + const ros_gz_interfaces::msg::SensorNoise & ros_msg, + ignition::msgs::SensorNoise & gz_msg); + +template<> +void +convert_gz_to_ros( + const ignition::msgs::SensorNoise & gz_msg, + ros_gz_interfaces::msg::SensorNoise & ros_msg); + template<> void convert_ros_to_gz( diff --git a/ros_gz_bridge/package.xml b/ros_gz_bridge/package.xml index d0692d43b..681a4cc7f 100644 --- a/ros_gz_bridge/package.xml +++ b/ros_gz_bridge/package.xml @@ -2,7 +2,7 @@ ros_gz_bridge - 0.245.0 + 0.247.0 Bridge communication between ROS and Gazebo Transport Louise Poubel diff --git a/ros_gz_bridge/ros_gz_bridge/mappings.py b/ros_gz_bridge/ros_gz_bridge/mappings.py index 3968ed6e1..2a6a60bca 100644 --- a/ros_gz_bridge/ros_gz_bridge/mappings.py +++ b/ros_gz_bridge/ros_gz_bridge/mappings.py @@ -53,6 +53,7 @@ Mapping('ParameterValue', 'Any'), ], 'ros_gz_interfaces': [ + Mapping('Altimeter', 'Altimeter'), Mapping('Contact', 'Contact'), Mapping('Contacts', 'Contacts'), Mapping('Entity', 'Entity'), @@ -62,6 +63,7 @@ Mapping('Light', 'Light'), Mapping('ParamVec', 'Param'), Mapping('ParamVec', 'Param_V'), + Mapping('SensorNoise', 'SensorNoise'), Mapping('StringVec', 'StringMsg_V'), Mapping('TrackVisual', 'TrackVisual'), Mapping('VideoRecord', 'VideoRecord'), diff --git a/ros_gz_bridge/src/convert/ros_gz_interfaces.cpp b/ros_gz_bridge/src/convert/ros_gz_interfaces.cpp index 6081f68b1..844c9c376 100644 --- a/ros_gz_bridge/src/convert/ros_gz_interfaces.cpp +++ b/ros_gz_bridge/src/convert/ros_gz_interfaces.cpp @@ -47,6 +47,30 @@ convert_gz_to_ros( convert_gz_to_ros(gz_msg.body_2_wrench(), ros_msg.body_2_wrench); } +template<> +void +convert_ros_to_gz( + const ros_gz_interfaces::msg::Altimeter & ros_msg, + ignition::msgs::Altimeter & gz_msg) +{ + convert_ros_to_gz(ros_msg.header, (*gz_msg.mutable_header())); + gz_msg.set_vertical_position(ros_msg.vertical_position); + gz_msg.set_vertical_velocity(ros_msg.vertical_velocity); + gz_msg.set_vertical_reference(ros_msg.vertical_reference); +} + +template<> +void +convert_gz_to_ros( + const ignition::msgs::Altimeter & gz_msg, + ros_gz_interfaces::msg::Altimeter & ros_msg) +{ + convert_gz_to_ros(gz_msg.header(), ros_msg.header); + ros_msg.vertical_position = gz_msg.vertical_position(); + ros_msg.vertical_velocity = gz_msg.vertical_velocity(); + ros_msg.vertical_reference = gz_msg.vertical_reference(); +} + template<> void convert_ros_to_gz( @@ -356,6 +380,55 @@ convert_gz_to_ros( ros_msg.intensity = gz_msg.intensity(); } +template<> +void +convert_ros_to_gz( + const ros_gz_interfaces::msg::SensorNoise & ros_msg, + ignition::msgs::SensorNoise & gz_msg) +{ + convert_ros_to_gz(ros_msg.header, *gz_msg.mutable_header()); + if (ros_msg.type == 0) { + gz_msg.set_type(ignition::msgs::SensorNoise_Type::SensorNoise_Type_NONE); + } else if (ros_msg.type == 2) { + gz_msg.set_type(ignition::msgs::SensorNoise_Type::SensorNoise_Type_GAUSSIAN); + } else if (ros_msg.type == 3) { + gz_msg.set_type(ignition::msgs::SensorNoise_Type::SensorNoise_Type_GAUSSIAN_QUANTIZED); + } + + gz_msg.set_mean(ros_msg.mean); + gz_msg.set_stddev(ros_msg.stddev); + gz_msg.set_bias_mean(ros_msg.bias_mean); + gz_msg.set_bias_stddev(ros_msg.bias_stddev); + gz_msg.set_precision(ros_msg.precision); + gz_msg.set_dynamic_bias_stddev(ros_msg.dynamic_bias_stddev); +} + +template<> +void +convert_gz_to_ros( + const ignition::msgs::SensorNoise & gz_msg, + ros_gz_interfaces::msg::SensorNoise & ros_msg) +{ + convert_gz_to_ros(gz_msg.header(), ros_msg.header); + + if (gz_msg.type() == ignition::msgs::SensorNoise_Type::SensorNoise_Type_NONE) { + ros_msg.type = 0; + } else if (gz_msg.type() == ignition::msgs::SensorNoise_Type::SensorNoise_Type_GAUSSIAN) { + ros_msg.type = 2; + } else if (gz_msg.type() == // NOLINT + ignition::msgs::SensorNoise_Type::SensorNoise_Type_GAUSSIAN_QUANTIZED) // NOLINT + { // NOLINT + ros_msg.type = 3; + } + + ros_msg.mean = gz_msg.mean(); + ros_msg.stddev = gz_msg.stddev(); + ros_msg.bias_mean = gz_msg.bias_mean(); + ros_msg.bias_stddev = gz_msg.bias_stddev(); + ros_msg.precision = gz_msg.precision(); + ros_msg.dynamic_bias_stddev = gz_msg.dynamic_bias_stddev(); +} + template<> void convert_ros_to_gz( diff --git a/ros_gz_bridge/src/parameter_bridge.cpp b/ros_gz_bridge/src/parameter_bridge.cpp index 49f27e6e1..12aac8ab6 100644 --- a/ros_gz_bridge/src/parameter_bridge.cpp +++ b/ros_gz_bridge/src/parameter_bridge.cpp @@ -172,8 +172,5 @@ int main(int argc, char * argv[]) // ROS 2 spinner rclcpp::spin(bridge_node); - // Wait for gz node shutdown - ignition::transport::waitForShutdown(); - return 0; } diff --git a/ros_gz_bridge/src/static_bridge.cpp b/ros_gz_bridge/src/static_bridge.cpp index bc2ab5d44..bf5cd38d6 100644 --- a/ros_gz_bridge/src/static_bridge.cpp +++ b/ros_gz_bridge/src/static_bridge.cpp @@ -44,8 +44,5 @@ int main(int argc, char * argv[]) rclcpp::spin(bridge_node); - // Wait for gz node shutdown - ignition::transport::waitForShutdown(); - return 0; } diff --git a/ros_gz_bridge/test/utils/gz_test_msg.cpp b/ros_gz_bridge/test/utils/gz_test_msg.cpp index 9ac737cf7..11330bc64 100644 --- a/ros_gz_bridge/test/utils/gz_test_msg.cpp +++ b/ros_gz_bridge/test/utils/gz_test_msg.cpp @@ -247,6 +247,54 @@ void compareTestMsg(const std::shared_ptr & _msg) EXPECT_EQ(expected_msg.z(), _msg->z()); } +void createTestMsg(ignition::msgs::Altimeter & _msg) +{ + createTestMsg(*_msg.mutable_header()); + _msg.set_vertical_position(100); + _msg.set_vertical_velocity(200); + _msg.set_vertical_reference(300); +} + +void compareTestMsg(const std::shared_ptr & _msg) +{ + ignition::msgs::Altimeter expected_msg; + createTestMsg(expected_msg); + + EXPECT_EQ(expected_msg.vertical_position(), _msg->vertical_position()); + EXPECT_EQ(expected_msg.vertical_velocity(), _msg->vertical_velocity()); + EXPECT_EQ(expected_msg.vertical_reference(), _msg->vertical_reference()); + compareTestMsg(std::make_shared(_msg->header())); +} + +void createTestMsg(ignition::msgs::SensorNoise & _msg) +{ + createTestMsg(*_msg.mutable_header()); + _msg.set_type(ignition::msgs::SensorNoise_Type::SensorNoise_Type_GAUSSIAN_QUANTIZED); + _msg.set_mean(100); + _msg.set_stddev(200); + _msg.set_bias_mean(300); + _msg.set_bias_stddev(400); + _msg.set_precision(500); + _msg.set_dynamic_bias_stddev(600); +} + +void compareTestMsg(const std::shared_ptr & _msg) +{ + ignition::msgs::SensorNoise expected_msg; + createTestMsg(expected_msg); + + EXPECT_EQ( + expected_msg.type(), + ignition::msgs::SensorNoise_Type::SensorNoise_Type_GAUSSIAN_QUANTIZED); + EXPECT_EQ(expected_msg.mean(), _msg->mean()); + EXPECT_EQ(expected_msg.stddev(), _msg->stddev()); + EXPECT_EQ(expected_msg.bias_mean(), _msg->bias_mean()); + EXPECT_EQ(expected_msg.bias_stddev(), _msg->bias_stddev()); + EXPECT_EQ(expected_msg.precision(), _msg->precision()); + EXPECT_EQ(expected_msg.dynamic_bias_stddev(), _msg->dynamic_bias_stddev()); + compareTestMsg(std::make_shared(_msg->header())); +} + void createTestMsg(ignition::msgs::Param & _msg) { createTestMsg(*_msg.mutable_header()); diff --git a/ros_gz_bridge/test/utils/gz_test_msg.hpp b/ros_gz_bridge/test/utils/gz_test_msg.hpp index 6ae8b41f8..582954e87 100644 --- a/ros_gz_bridge/test/utils/gz_test_msg.hpp +++ b/ros_gz_bridge/test/utils/gz_test_msg.hpp @@ -16,6 +16,7 @@ #define UTILS__GZ_TEST_MSG_HPP_ #include +#include #include #include #include @@ -53,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -166,6 +168,14 @@ void compareTestMsg(const std::shared_ptr & _msg); /// \param[out] _msg The message populated. void createTestMsg(ignition::msgs::StringMsg & _msg); +/// \brief Create a message used for testing. +/// \param[out] _msg The message populated. +void createTestMsg(ignition::msgs::SensorNoise & _msg); + +/// \brief Compare a message with the populated for testing. +/// \param[in] _msg The message to compare. +void compareTestMsg(const std::shared_ptr & _msg); + /// \brief Compare a message with the populated for testing. /// \param[in] _msg The message to compare. void compareTestMsg(const std::shared_ptr & _msg); @@ -258,6 +268,14 @@ void createTestMsg(ignition::msgs::JointWrench & _msg); /// \param[in] _msg The message to compare. void compareTestMsg(const std::shared_ptr & _msg); +/// \brief Create a message used for testing. +/// \param[out] _msg The message populated. +void createTestMsg(ignition::msgs::Altimeter & _msg); + +/// \brief Compare a message with the populated for testing. +/// \param[in] _msg The message to compare. +void compareTestMsg(const std::shared_ptr & _msg); + /// \brief Create a message used for testing. /// \param[out] _msg The message populated. void createTestMsg(ignition::msgs::Joy & _msg); diff --git a/ros_gz_bridge/test/utils/ros_test_msg.cpp b/ros_gz_bridge/test/utils/ros_test_msg.cpp index 9f2d880a7..0c0c59c8c 100644 --- a/ros_gz_bridge/test/utils/ros_test_msg.cpp +++ b/ros_gz_bridge/test/utils/ros_test_msg.cpp @@ -601,6 +601,33 @@ void compareTestMsg(const std::shared_ptr & _m EXPECT_EQ(expected_msg.params[0].value.string_value, _msg->params[0].value.string_value); } +void createTestMsg(ros_gz_interfaces::msg::SensorNoise & _msg) +{ + createTestMsg(_msg.header); + + _msg.type = 3; + _msg.mean = 100; + _msg.stddev = 200; + _msg.bias_mean = 300; + _msg.bias_stddev = 400; + _msg.precision = 500; + _msg.dynamic_bias_stddev = 600; +} + +void compareTestMsg(const std::shared_ptr & _msg) +{ + ros_gz_interfaces::msg::SensorNoise expected_msg; + createTestMsg(expected_msg); + + compareTestMsg(_msg->header); + EXPECT_EQ(expected_msg.mean, _msg->mean); + EXPECT_EQ(expected_msg.stddev, _msg->stddev); + EXPECT_EQ(expected_msg.bias_mean, _msg->bias_mean); + EXPECT_EQ(expected_msg.bias_stddev, _msg->bias_stddev); + EXPECT_EQ(expected_msg.precision, _msg->precision); + EXPECT_EQ(expected_msg.dynamic_bias_stddev, _msg->dynamic_bias_stddev); +} + void createTestMsg(ros_gz_interfaces::msg::StringVec & _msg) { createTestMsg(_msg.header); @@ -700,6 +727,26 @@ void compareTestMsg(const std::shared_ptr & compareTestMsg(std::make_shared(_msg->body_2_wrench)); } +void createTestMsg(ros_gz_interfaces::msg::Altimeter & _msg) +{ + createTestMsg(_msg.header); + _msg.vertical_position = 100; + _msg.vertical_velocity = 200; + _msg.vertical_reference = 300; +} + +void compareTestMsg(const std::shared_ptr & _msg) +{ + ros_gz_interfaces::msg::Altimeter expected_msg; + createTestMsg(expected_msg); + + EXPECT_EQ(expected_msg.vertical_position, _msg->vertical_position); + EXPECT_EQ(expected_msg.vertical_velocity, _msg->vertical_velocity); + EXPECT_EQ(expected_msg.vertical_reference, _msg->vertical_reference); + + compareTestMsg(_msg->header); +} + void createTestMsg(ros_gz_interfaces::msg::Entity & _msg) { _msg.id = 1; diff --git a/ros_gz_bridge/test/utils/ros_test_msg.hpp b/ros_gz_bridge/test/utils/ros_test_msg.hpp index 5220d916b..f48a61ea0 100644 --- a/ros_gz_bridge/test/utils/ros_test_msg.hpp +++ b/ros_gz_bridge/test/utils/ros_test_msg.hpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,7 @@ #endif // HAVE_DATAFRAME #include #include +#include #include #include #include @@ -348,6 +350,14 @@ void createTestMsg(ros_gz_interfaces::msg::JointWrench & _msg); /// \param[in] _msg The message to compare. void compareTestMsg(const std::shared_ptr & _msg); +/// \brief Create a message used for testing. +/// \param[out] _msg The message populated. +void createTestMsg(ros_gz_interfaces::msg::Altimeter & _msg); + +/// \brief Compare a message with the populated for testing. +/// \param[in] _msg The message to compare. +void compareTestMsg(const std::shared_ptr & _msg); + /// \brief Create a message used for testing. /// \param[out] _msg The message populated. void createTestMsg(ros_gz_interfaces::msg::Light & _msg); @@ -406,6 +416,14 @@ void createTestMsg(ros_gz_interfaces::msg::ParamVec & _msg); /// \param[in] _msg The message to compare. void compareTestMsg(const std::shared_ptr & _msg); +/// \brief Create a message used for testing. +/// \param[out] _msg The message populated. +void createTestMsg(ros_gz_interfaces::msg::SensorNoise & _msg); + +/// \brief Compare a message with the populated for testing. +/// \param[in] _msg The message to compare. +void compareTestMsg(const std::shared_ptr & _msg); + /// \brief Create a message used for testing. /// \param[out] _msg The message populated. void createTestMsg(ros_gz_interfaces::msg::StringVec & _msg); diff --git a/ros_gz_image/CHANGELOG.rst b/ros_gz_image/CHANGELOG.rst index a647f0cfa..1d3a4bcff 100644 --- a/ros_gz_image/CHANGELOG.rst +++ b/ros_gz_image/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog for package ros1_ign_image ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- +* Fix double wait in ros_gz_bridge (`#347 `_) (`#449 `_) + Co-authored-by: ymd-stella <7959916+ymd-stella@users.noreply.github.com> +* Contributors: Alejandro Hernández Cordero + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_gz_image/package.xml b/ros_gz_image/package.xml index f6d48c51a..27051fb46 100644 --- a/ros_gz_image/package.xml +++ b/ros_gz_image/package.xml @@ -1,6 +1,6 @@ ros_gz_image - 0.245.0 + 0.247.0 Image utilities for Gazebo simulation with ROS. Apache 2.0 Louise Poubel diff --git a/ros_gz_image/src/image_bridge.cpp b/ros_gz_image/src/image_bridge.cpp index 6839e295b..c7edf9dcb 100644 --- a/ros_gz_image/src/image_bridge.cpp +++ b/ros_gz_image/src/image_bridge.cpp @@ -97,7 +97,5 @@ int main(int argc, char * argv[]) // Spin ROS and Gz until shutdown rclcpp::spin(node_); - ignition::transport::waitForShutdown(); - return 0; } diff --git a/ros_gz_interfaces/CHANGELOG.rst b/ros_gz_interfaces/CHANGELOG.rst index 8a7dcfb89..f734c4a2c 100644 --- a/ros_gz_interfaces/CHANGELOG.rst +++ b/ros_gz_interfaces/CHANGELOG.rst @@ -2,6 +2,15 @@ Changelog for package ros_gz_interfaces ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- +* [backport iron] SensorNoise msg bridging (`#417 `_) (`#425 `_) + Co-authored-by: Aditya Pande +* Merge branch 'iron' into ahcorde/iron/backport/411 +* [backport Iron] Added Altimeter msg bridging (`#413 `_) (`#414 `_) + Co-authored-by: Aditya Pande +* Contributors: Alejandro Hernández Cordero + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_gz_interfaces/CMakeLists.txt b/ros_gz_interfaces/CMakeLists.txt index 255736cf4..49c49126f 100644 --- a/ros_gz_interfaces/CMakeLists.txt +++ b/ros_gz_interfaces/CMakeLists.txt @@ -17,6 +17,7 @@ find_package(geometry_msgs REQUIRED) find_package(rosidl_default_generators REQUIRED) set(msg_files + "msg/Altimeter.msg" "msg/Contact.msg" "msg/Contacts.msg" "msg/Dataframe.msg" @@ -27,6 +28,7 @@ set(msg_files "msg/JointWrench.msg" "msg/Light.msg" "msg/ParamVec.msg" + "msg/SensorNoise.msg" "msg/StringVec.msg" "msg/TrackVisual.msg" "msg/VideoRecord.msg" diff --git a/ros_gz_interfaces/msg/Altimeter.msg b/ros_gz_interfaces/msg/Altimeter.msg new file mode 100644 index 000000000..5f820c2b8 --- /dev/null +++ b/ros_gz_interfaces/msg/Altimeter.msg @@ -0,0 +1,13 @@ +# A message for Altimeter readings. + +# Optional header data. +std_msgs/Header header + +# Vertical position data, in meters. +float64 vertical_position + +# Vertical velocity data, in meters/second. +float64 vertical_velocity + +# Vertical reference. +float64 vertical_reference diff --git a/ros_gz_interfaces/msg/SensorNoise.msg b/ros_gz_interfaces/msg/SensorNoise.msg new file mode 100644 index 000000000..0b1e5cec4 --- /dev/null +++ b/ros_gz_interfaces/msg/SensorNoise.msg @@ -0,0 +1,43 @@ +# A message for specifying sensor noise. + +# Noise type +uint8 NONE = 0 +uint8 GAUSSIAN = 2 +uint8 GAUSSIAN_QUANTIZED = 3 + +# Optional header data. +std_msgs/Header header + +# The type of noise +uint8 type + +# Noise mean +# Used by GAUSSIAN and GAUSSIAN_QUANTIZED +float64 mean + +# Noise standard deviation +# Used by GAUSSIAN and GAUSSIAN_QUANTIZED +float64 stddev + +# Noise mean bias +# Used by GAUSSIAN and GAUSSIAN_QUANTIZED +float64 bias_mean + +# Noise standard deviation bias +float64 bias_stddev + +# Noise precision +# Used by GAUSSIAN_QUANTIZED +float64 precision + +# For type "gaussian*", the standard deviation of the noise used to +# drive a process to model slow variations in a sensor bias. +float64 dynamic_bias_stddev + +# For type "gaussian*", the correlation time in seconds of the +# noise used to drive a process to model slow variations in a sensor bias. +# A typical value, when used, would be on the order of +# 3600 seconds (1 hour). +float64 dynamic_bias_correlation_time + + diff --git a/ros_gz_interfaces/package.xml b/ros_gz_interfaces/package.xml index 7231709db..81a8e2950 100644 --- a/ros_gz_interfaces/package.xml +++ b/ros_gz_interfaces/package.xml @@ -1,6 +1,6 @@ ros_gz_interfaces - 0.245.0 + 0.247.0 Message and service data structures for interacting with Gazebo from ROS2. Apache 2.0 Louise Poubel diff --git a/ros_gz_sim/CHANGELOG.rst b/ros_gz_sim/CHANGELOG.rst index 5c74d0346..617541be1 100644 --- a/ros_gz_sim/CHANGELOG.rst +++ b/ros_gz_sim/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog for package ros_gz_sim ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- +* set on_exit_shutdown argument for gz-sim ExecuteProcess (`#355 `_) (`#452 `_) + Co-authored-by: andermi +* Contributors: Michael Carroll + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_gz_sim/launch/gz_sim.launch.py.in b/ros_gz_sim/launch/gz_sim.launch.py.in index 659e238c2..7bed5243e 100644 --- a/ros_gz_sim/launch/gz_sim.launch.py.in +++ b/ros_gz_sim/launch/gz_sim.launch.py.in @@ -18,7 +18,7 @@ from os import environ from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, OpaqueFunction -from launch.actions import ExecuteProcess +from launch.actions import ExecuteProcess, Shutdown from launch.substitutions import LaunchConfiguration def launch_gz(context, *args, **kwargs): @@ -34,6 +34,7 @@ def launch_gz(context, *args, **kwargs): ign_args = LaunchConfiguration('ign_args').perform(context) ign_version = LaunchConfiguration('ign_version').perform(context) debugger = LaunchConfiguration('debugger').perform(context) + on_exit_shutdown = LaunchConfiguration('on_exit_shutdown').perform(context) if not len(gz_args) and len(ign_args): print("ign_args is deprecated, migrate to gz_args!") @@ -54,12 +55,18 @@ def launch_gz(context, *args, **kwargs): else: debug_prefix = None + if on_exit_shutdown: + on_exit = Shutdown() + else: + on_exit = None + return [ExecuteProcess( cmd=[exec, exec_args, '--force-version', gz_version], output='screen', additional_env=env, shell=True, - prefix=debug_prefix + prefix=debug_prefix, + on_exit=on_exit )] @@ -84,5 +91,8 @@ def generate_launch_description(): DeclareLaunchArgument( 'debugger', default_value='false', description='Run in Debugger'), + DeclareLaunchArgument( + 'on_exit_shutdown', default_value='false', + description='Shutdown on gz-sim exit'), OpaqueFunction(function = launch_gz), ]) diff --git a/ros_gz_sim/package.xml b/ros_gz_sim/package.xml index acda06c8e..d506d997e 100644 --- a/ros_gz_sim/package.xml +++ b/ros_gz_sim/package.xml @@ -2,7 +2,7 @@ ros_gz_sim - 0.245.0 + 0.247.0 Tools for using Gazebo Sim simulation with ROS. Alejandro Hernandez diff --git a/ros_gz_sim_demos/CHANGELOG.rst b/ros_gz_sim_demos/CHANGELOG.rst index 61bc84ca5..a75390c3a 100644 --- a/ros_gz_sim_demos/CHANGELOG.rst +++ b/ros_gz_sim_demos/CHANGELOG.rst @@ -2,6 +2,14 @@ Changelog for package ros1_gz_sim_demos ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- +* Merge branch 'iron' into ahcorde/iron/backport/411 +* Added more topic to the bridge (`#422 `_) (`#423 `_) +* Fix incorrect subscription on demo (`#405 `_) (`#407 `_) + Co-authored-by: Arjo Chakravarty +* Contributors: Alejandro Hernández Cordero + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_gz_sim_demos/launch/rgbd_camera_bridge.launch.py b/ros_gz_sim_demos/launch/rgbd_camera_bridge.launch.py index 9719c2c91..fbb8e4442 100644 --- a/ros_gz_sim_demos/launch/rgbd_camera_bridge.launch.py +++ b/ros_gz_sim_demos/launch/rgbd_camera_bridge.launch.py @@ -49,16 +49,22 @@ def generate_launch_description(): condition=IfCondition(LaunchConfiguration('rviz')) ) + remappings = [('/camera', '/camera/image'), + ('/camera_info', '/camera/camera_info')] # Bridge bridge = Node( package='ros_gz_bridge', executable='parameter_bridge', arguments=[ + '/camera@sensor_msgs/msg/Image@gz.msgs.Image', + '/camera_info@sensor_msgs/msg/CameraInfo@gz.msgs.CameraInfo', '/rgbd_camera/image@sensor_msgs/msg/Image@gz.msgs.Image', + '/rgbd_camera/camera_info@sensor_msgs/msg/CameraInfo@gz.msgs.CameraInfo', '/rgbd_camera/depth_image@sensor_msgs/msg/Image@gz.msgs.Image', '/rgbd_camera/points@sensor_msgs/msg/PointCloud2@gz.msgs.PointCloudPacked' ], - output='screen' + output='screen', + remappings=remappings, ) return LaunchDescription([ diff --git a/ros_gz_sim_demos/package.xml b/ros_gz_sim_demos/package.xml index 6fb90793e..5b0062e5d 100644 --- a/ros_gz_sim_demos/package.xml +++ b/ros_gz_sim_demos/package.xml @@ -1,6 +1,6 @@ ros_gz_sim_demos - 0.245.0 + 0.247.0 Demos using Gazebo Sim simulation with ROS. Apache 2.0 Louise Poubel diff --git a/ros_gz_sim_demos/rviz/gpu_lidar_bridge.rviz b/ros_gz_sim_demos/rviz/gpu_lidar_bridge.rviz index 42968c2bb..318229b33 100644 --- a/ros_gz_sim_demos/rviz/gpu_lidar_bridge.rviz +++ b/ros_gz_sim_demos/rviz/gpu_lidar_bridge.rviz @@ -98,7 +98,7 @@ Visualization Manager: Size (Pixels): 3 Size (m): 0.009999999776482582 Style: Flat Squares - Topic: /lidar + Topic: /lidar/points Unreliable: false Use Fixed Frame: true Use rainbow: true diff --git a/ros_ign/CHANGELOG.rst b/ros_ign/CHANGELOG.rst index d435630d9..5ee3a4509 100644 --- a/ros_ign/CHANGELOG.rst +++ b/ros_ign/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_ign ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_ign/package.xml b/ros_ign/package.xml index 550b89919..eef8b3f12 100644 --- a/ros_ign/package.xml +++ b/ros_ign/package.xml @@ -2,7 +2,7 @@ ros_ign - 0.245.0 + 0.247.0 Shim meta-package to redirect to ros_gz. Brandon Ong Apache 2.0 diff --git a/ros_ign_bridge/CHANGELOG.rst b/ros_ign_bridge/CHANGELOG.rst index 87e1e6324..1eaa0033d 100644 --- a/ros_ign_bridge/CHANGELOG.rst +++ b/ros_ign_bridge/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_ign_bridge ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_ign_bridge/package.xml b/ros_ign_bridge/package.xml index 83b2ba75c..e16b23ca2 100644 --- a/ros_ign_bridge/package.xml +++ b/ros_ign_bridge/package.xml @@ -2,7 +2,7 @@ ros_ign_bridge - 0.245.0 + 0.247.0 Shim package to redirect to ros_gz_bridge. Brandon Ong diff --git a/ros_ign_gazebo/CHANGELOG.rst b/ros_ign_gazebo/CHANGELOG.rst index 23e70f078..a687fe796 100644 --- a/ros_ign_gazebo/CHANGELOG.rst +++ b/ros_ign_gazebo/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_ign_gazebo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_ign_gazebo/package.xml b/ros_ign_gazebo/package.xml index 82f8425a4..91011f29a 100644 --- a/ros_ign_gazebo/package.xml +++ b/ros_ign_gazebo/package.xml @@ -2,7 +2,7 @@ ros_ign_gazebo - 0.245.0 + 0.247.0 Shim package to redirect to ros_gz_sim. Brandon Ong diff --git a/ros_ign_gazebo_demos/CHANGELOG.rst b/ros_ign_gazebo_demos/CHANGELOG.rst index 940860baf..4c6c2fb86 100644 --- a/ros_ign_gazebo_demos/CHANGELOG.rst +++ b/ros_ign_gazebo_demos/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_ign_gazebo_demos ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_ign_gazebo_demos/package.xml b/ros_ign_gazebo_demos/package.xml index cbe829acb..a69e425fe 100644 --- a/ros_ign_gazebo_demos/package.xml +++ b/ros_ign_gazebo_demos/package.xml @@ -1,6 +1,6 @@ ros_ign_gazebo_demos - 0.245.0 + 0.247.0 Shim package to redirect to ros_gz_sim_demos. Apache 2.0 Brandon Ong diff --git a/ros_ign_image/CHANGELOG.rst b/ros_ign_image/CHANGELOG.rst index 7f6c6fe8f..eb889956b 100644 --- a/ros_ign_image/CHANGELOG.rst +++ b/ros_ign_image/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_ign_image ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_ign_image/package.xml b/ros_ign_image/package.xml index 4b772d4c2..f94db040a 100644 --- a/ros_ign_image/package.xml +++ b/ros_ign_image/package.xml @@ -2,7 +2,7 @@ ros_ign_image - 0.245.0 + 0.247.0 Shim package to redirect to ros_gz_image. Brandon Ong diff --git a/ros_ign_interfaces/CHANGELOG.rst b/ros_ign_interfaces/CHANGELOG.rst index 4de73f5c5..5544f349a 100644 --- a/ros_ign_interfaces/CHANGELOG.rst +++ b/ros_ign_interfaces/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_ign_interfaces ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.247.0 (2023-11-02) +-------------------- + 0.245.0 (2023-05-23) -------------------- diff --git a/ros_ign_interfaces/package.xml b/ros_ign_interfaces/package.xml index 1f939eda7..e8a7b1a93 100644 --- a/ros_ign_interfaces/package.xml +++ b/ros_ign_interfaces/package.xml @@ -1,6 +1,6 @@ ros_ign_interfaces - 0.245.0 + 0.247.0 Shim package to redirect to ros_gz_interfaces. Apache 2.0 Brandon Ong