Skip to content

Commit bdd42d2

Browse files
committed
ros_gz_bridge improvements
Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
1 parent 78957e5 commit bdd42d2

File tree

8 files changed

+32
-35
lines changed

8 files changed

+32
-35
lines changed

ros_gz_bridge/include/ros_gz_bridge/ros_gz_bridge.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ class RosGzBridge : public rclcpp::Node
4242
void add_bridge(const BridgeConfig & config);
4343

4444
/// \brief Create a new ROS-GZ bridge for a service
45-
/// \param[in] ros_type_name Name of the ROS service (eg ros_bz_interfaces/srv/ControlWorld)
45+
/// \param[in] ros_type_name Name of the ROS service (eg ros_gz_interfaces/srv/ControlWorld)
4646
/// \param[in] gz_req_type_name Gazebo service request type
47-
/// \param[in] gz_req_type_name Gazebo service response type
47+
/// \param[in] gz_rep_type_name Gazebo service response type
4848
/// \param[in] service_name Address of the service to be bridged
4949
void add_service_bridge(
5050
const std::string & ros_type_name,

ros_gz_bridge/src/bridge_handle_gz_to_ros_parameters.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2026 Open Source Robotics Foundation, Inc.
1+
// Copyright 2022 Open Source Robotics Foundation, Inc.
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.

ros_gz_bridge/src/convert/geometry_msgs.cpp

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,9 @@ convert_gz_to_ros(
161161
{
162162
convert_gz_to_ros(gz_msg.pose().position(), ros_msg.pose.position);
163163
convert_gz_to_ros(gz_msg.pose().orientation(), ros_msg.pose.orientation);
164-
int data_size = gz_msg.covariance().data_size();
165-
if (data_size == 36) {
166-
for (int i = 0; i < data_size; i++) {
167-
auto data = gz_msg.covariance().data()[i];
168-
ros_msg.covariance[i] = data;
169-
}
164+
if (gz_msg.covariance().data_size() == 36) {
165+
const auto & cov = gz_msg.covariance().data();
166+
std::copy(cov.begin(), cov.end(), ros_msg.covariance.begin());
170167
}
171168
}
172169

@@ -323,12 +320,9 @@ convert_gz_to_ros(
323320
{
324321
convert_gz_to_ros(gz_msg.twist().linear(), ros_msg.twist.linear);
325322
convert_gz_to_ros(gz_msg.twist().angular(), ros_msg.twist.angular);
326-
int data_size = gz_msg.covariance().data_size();
327-
if (data_size == 36) {
328-
for (int i = 0; i < data_size; i++) {
329-
auto data = gz_msg.covariance().data()[i];
330-
ros_msg.covariance[i] = data;
331-
}
323+
if (gz_msg.covariance().data_size() == 36) {
324+
const auto & cov = gz_msg.covariance().data();
325+
std::copy(cov.begin(), cov.end(), ros_msg.covariance.begin());
332326
}
333327
}
334328

ros_gz_bridge/src/convert/ros_gz_interfaces.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ convert_ros_to_gz(
232232
gz::msgs::Contact & gz_msg)
233233
{
234234
convert_ros_to_gz(ros_msg.collision1, (*gz_msg.mutable_collision1()));
235-
convert_ros_to_gz(ros_msg.collision1, (*gz_msg.mutable_collision2()));
235+
convert_ros_to_gz(ros_msg.collision2, (*gz_msg.mutable_collision2()));
236236
gz_msg.clear_position();
237237
for (auto const & ros_position : ros_msg.positions) {
238238
auto gz_position = gz_msg.add_position();
@@ -261,19 +261,23 @@ convert_gz_to_ros(
261261
{
262262
convert_gz_to_ros(gz_msg.collision1(), ros_msg.collision1);
263263
convert_gz_to_ros(gz_msg.collision2(), ros_msg.collision2);
264+
ros_msg.positions.reserve(gz_msg.position_size());
264265
for (auto i = 0; i < gz_msg.position_size(); ++i) {
265266
geometry_msgs::msg::Vector3 ros_position;
266267
convert_gz_to_ros(gz_msg.position(i), ros_position);
267268
ros_msg.positions.push_back(ros_position);
268269
}
270+
ros_msg.normals.reserve(gz_msg.normal_size());
269271
for (auto i = 0; i < gz_msg.normal_size(); ++i) {
270272
geometry_msgs::msg::Vector3 ros_normal;
271273
convert_gz_to_ros(gz_msg.normal(i), ros_normal);
272274
ros_msg.normals.push_back(ros_normal);
273275
}
276+
ros_msg.depths.reserve(gz_msg.depth_size());
274277
for (auto i = 0; i < gz_msg.depth_size(); ++i) {
275278
ros_msg.depths.push_back(gz_msg.depth(i));
276279
}
280+
ros_msg.wrenches.reserve(gz_msg.wrench_size());
277281
for (auto i = 0; i < gz_msg.wrench_size(); ++i) {
278282
ros_gz_interfaces::msg::JointWrench ros_joint_wrench;
279283
convert_gz_to_ros(gz_msg.wrench(i), ros_joint_wrench);
@@ -302,6 +306,7 @@ convert_gz_to_ros(
302306
ros_gz_interfaces::msg::Contacts & ros_msg)
303307
{
304308
convert_gz_to_ros(gz_msg.header(), ros_msg.header);
309+
ros_msg.contacts.reserve(gz_msg.contact_size());
305310
for (auto i = 0; i < gz_msg.contact_size(); ++i) {
306311
ros_gz_interfaces::msg::Contact ros_contact;
307312
convert_gz_to_ros(gz_msg.contact(i), ros_contact);

ros_gz_bridge/src/convert/sensor_msgs.cpp

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -336,26 +336,20 @@ convert_gz_to_ros(
336336
convert_gz_to_ros(gz_msg.linear_acceleration(), ros_msg.linear_acceleration);
337337

338338
#ifdef GZ_MSGS_IMU_HAS_COVARIANCE
339-
int data_size = gz_msg.linear_acceleration_covariance().data_size();
340-
if (data_size == 9) {
341-
for (int i = 0; i < data_size; ++i) {
342-
auto data = gz_msg.linear_acceleration_covariance().data()[i];
343-
ros_msg.linear_acceleration_covariance[i] = data;
344-
}
339+
if (gz_msg.linear_acceleration_covariance().data_size() == 9) {
340+
const auto & accel_cov = gz_msg.linear_acceleration_covariance().data();
341+
std::copy(accel_cov.begin(), accel_cov.end(),
342+
ros_msg.linear_acceleration_covariance.begin());
345343
}
346-
data_size = gz_msg.angular_velocity_covariance().data_size();
347-
if (data_size == 9) {
348-
for (int i = 0; i < data_size; ++i) {
349-
auto data = gz_msg.angular_velocity_covariance().data()[i];
350-
ros_msg.angular_velocity_covariance[i] = data;
351-
}
344+
if (gz_msg.angular_velocity_covariance().data_size() == 9) {
345+
const auto & gyro_cov = gz_msg.angular_velocity_covariance().data();
346+
std::copy(gyro_cov.begin(), gyro_cov.end(),
347+
ros_msg.angular_velocity_covariance.begin());
352348
}
353-
data_size = gz_msg.orientation_covariance().data_size();
354-
if (data_size == 9) {
355-
for (int i = 0; i < data_size; ++i) {
356-
auto data = gz_msg.orientation_covariance().data()[i];
357-
ros_msg.orientation_covariance[i] = data;
358-
}
349+
if (gz_msg.orientation_covariance().data_size() == 9) {
350+
const auto & orient_cov = gz_msg.orientation_covariance().data();
351+
std::copy(orient_cov.begin(), orient_cov.end(),
352+
ros_msg.orientation_covariance.begin());
359353
}
360354
#endif
361355
}
@@ -418,10 +412,12 @@ convert_gz_to_ros(
418412
{
419413
convert_gz_to_ros(gz_msg.header(), ros_msg.header);
420414

415+
ros_msg.axes.reserve(gz_msg.axes_size());
421416
for (auto i = 0; i < gz_msg.axes_size(); ++i) {
422417
ros_msg.axes.push_back(gz_msg.axes(i));
423418
}
424419

420+
ros_msg.buttons.reserve(gz_msg.buttons_size());
425421
for (auto i = 0; i < gz_msg.buttons_size(); ++i) {
426422
ros_msg.buttons.push_back(gz_msg.buttons(i));
427423
}

ros_gz_bridge/src/convert/utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ std::string replace_delimiter(
3232

3333
while (last_pos < input.size()) {
3434
std::size_t pos = input.find(old_delim, last_pos);
35-
output += input.substr(last_pos, pos - last_pos);
35+
output.append(input, last_pos, pos - last_pos);
3636
if (pos != std::string::npos) {
3737
output += new_delim;
3838
pos += old_delim.size();

ros_gz_bridge/src/factory.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ class Factory : public FactoryInterface
217217
const GZ_T & gz_msg,
218218
ROS_T & ros_msg);
219219

220+
private:
220221
std::string ros_type_name_;
221222
std::string gz_type_name_;
222223
};

ros_gz_bridge/src/service_factory.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class ServiceFactory : public ServiceFactoryInterface
7373
if (send_response_on_error(ros_res)) {
7474
srv_handle->send_response(*reqid, ros_res);
7575
}
76+
return;
7677
}
7778
convert_gz_to_ros(reply, ros_res);
7879
srv_handle->send_response(*reqid, ros_res);

0 commit comments

Comments
 (0)