Skip to content

Commit b1fa4d5

Browse files
authored
[ROS2] Change publishers to publish unique pointers (#565)
* Change publishers to publish unique ptrs * Change function signatures to use raw pointers * Minor fixes
1 parent 2cc63f7 commit b1fa4d5

File tree

4 files changed

+100
-99
lines changed

4 files changed

+100
-99
lines changed

include/robot_localization/navsat_transform.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,13 @@ class NavSatTransform : public rclcpp::Node
139139
* @brief Converts the odometry data back to GPS and broadcasts it
140140
* @param[out] filtered_gps The NavSatFix message to prepare
141141
*/
142-
bool prepareFilteredGps(sensor_msgs::msg::NavSatFix & filtered_gps);
142+
bool prepareFilteredGps(sensor_msgs::msg::NavSatFix * filtered_gps);
143143

144144
/**
145145
* @brief Prepares the GPS odometry message before sending
146146
* @param[out] gps_odom The odometry message to prepare
147147
*/
148-
bool prepareGpsOdometry(nav_msgs::msg::Odometry & gps_odom);
148+
bool prepareGpsOdometry(nav_msgs::msg::Odometry * gps_odom);
149149

150150
/**
151151
* @brief Used for setting the GPS data that will be used to compute the

include/robot_localization/ros_filter.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,14 @@ class RosFilter : public rclcpp::Node
199199
//! @param[out] message - The standard ROS odometry message to be filled
200200
//! @return true if the filter is initialized, false otherwise
201201
//!
202-
bool getFilteredOdometryMessage(nav_msgs::msg::Odometry & message);
202+
bool getFilteredOdometryMessage(nav_msgs::msg::Odometry * message);
203203

204204
//! @brief Retrieves the EKF's acceleration output for broadcasting
205205
//! @param[out] message - The standard ROS acceleration message to be filled
206206
//! @return true if the filter is initialized, false otherwise
207207
//!
208208
bool getFilteredAccelMessage(
209-
geometry_msgs::msg::AccelWithCovarianceStamped & message);
209+
geometry_msgs::msg::AccelWithCovarianceStamped * message);
210210

211211
//! @brief Callback method for receiving all IMU messages
212212
//! @param[in] msg - The ROS IMU message to take in.
@@ -319,7 +319,7 @@ class RosFilter : public rclcpp::Node
319319
//! @param[out] message - The standard ROS odometry message to be validated
320320
//! @return true if the filter output is valid, false otherwise
321321
//!
322-
bool validateFilterOutput(const nav_msgs::msg::Odometry & message);
322+
bool validateFilterOutput(nav_msgs::msg::Odometry * message);
323323

324324
protected:
325325
//! @brief Finds the latest filter state before the given timestamp and makes

src/navsat_transform.cpp

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include <string>
4949
#include <vector>
5050
#include <memory>
51+
#include <utility>
5152

5253
using std::placeholders::_1;
5354
using std::placeholders::_2;
@@ -178,15 +179,15 @@ void NavSatTransform::transformCallback()
178179
imu_sub_.reset();
179180
}
180181
} else {
181-
nav_msgs::msg::Odometry gps_odom;
182-
if (prepareGpsOdometry(gps_odom)) {
183-
gps_odom_pub_->publish(gps_odom);
182+
auto gps_odom = std::make_unique<nav_msgs::msg::Odometry>();
183+
if (prepareGpsOdometry(gps_odom.get())) {
184+
gps_odom_pub_->publish(std::move(gps_odom));
184185
}
185186

186187
if (publish_gps_) {
187-
sensor_msgs::msg::NavSatFix odom_gps;
188-
if (prepareFilteredGps(odom_gps)) {
189-
filtered_gps_pub_->publish(odom_gps);
188+
auto odom_gps = std::make_unique<sensor_msgs::msg::NavSatFix>();
189+
if (prepareFilteredGps(odom_gps.get())) {
190+
filtered_gps_pub_->publish(std::move(odom_gps));
190191
}
191192
}
192193
}
@@ -637,13 +638,13 @@ void NavSatTransform::odomCallback(
637638
}
638639

639640
bool NavSatTransform::prepareFilteredGps(
640-
sensor_msgs::msg::NavSatFix & filtered_gps)
641+
sensor_msgs::msg::NavSatFix * filtered_gps)
641642
{
642643
bool new_data = false;
643644

644645
if (transform_good_ && odom_updated_) {
645-
mapToLL(latest_world_pose_.getOrigin(), filtered_gps.latitude,
646-
filtered_gps.longitude, filtered_gps.altitude);
646+
mapToLL(latest_world_pose_.getOrigin(), filtered_gps->latitude,
647+
filtered_gps->longitude, filtered_gps->altitude);
647648

648649
// Rotate the covariance as well
649650
tf2::Matrix3x3 rot(utm_world_trans_inverse_.getRotation());
@@ -666,17 +667,17 @@ bool NavSatTransform::prepareFilteredGps(
666667
// Copy the measurement's covariance matrix back
667668
for (size_t i = 0; i < POSITION_SIZE; i++) {
668669
for (size_t j = 0; j < POSITION_SIZE; j++) {
669-
filtered_gps.position_covariance[POSITION_SIZE * i + j] =
670+
filtered_gps->position_covariance[POSITION_SIZE * i + j] =
670671
latest_odom_covariance_(i, j);
671672
}
672673
}
673674

674-
filtered_gps.position_covariance_type =
675+
filtered_gps->position_covariance_type =
675676
sensor_msgs::msg::NavSatFix::COVARIANCE_TYPE_KNOWN;
676-
filtered_gps.status.status =
677+
filtered_gps->status.status =
677678
sensor_msgs::msg::NavSatStatus::STATUS_GBAS_FIX;
678-
filtered_gps.header.frame_id = base_link_frame_id_;
679-
filtered_gps.header.stamp = odom_update_time_;
679+
filtered_gps->header.frame_id = base_link_frame_id_;
680+
filtered_gps->header.stamp = odom_update_time_;
680681

681682
// Mark this GPS as used
682683
odom_updated_ = false;
@@ -686,20 +687,20 @@ bool NavSatTransform::prepareFilteredGps(
686687
return new_data;
687688
}
688689

689-
bool NavSatTransform::prepareGpsOdometry(nav_msgs::msg::Odometry & gps_odom)
690+
bool NavSatTransform::prepareGpsOdometry(nav_msgs::msg::Odometry * gps_odom)
690691
{
691692
bool new_data = false;
692693

693694
if (transform_good_ && gps_updated_ && odom_updated_) {
694-
gps_odom = utmToMap(latest_utm_pose_);
695+
*gps_odom = utmToMap(latest_utm_pose_);
695696

696697
tf2::Transform transformed_utm_gps;
697-
tf2::fromMsg(gps_odom.pose.pose, transformed_utm_gps);
698+
tf2::fromMsg(gps_odom->pose.pose, transformed_utm_gps);
698699

699700
// Want the pose of the vehicle origin, not the GPS
700701
tf2::Transform transformed_utm_robot;
701-
rclcpp::Time time(static_cast<double>(gps_odom.header.stamp.sec) +
702-
static_cast<double>(gps_odom.header.stamp.nanosec) /
702+
rclcpp::Time time(static_cast<double>(gps_odom->header.stamp.sec) +
703+
static_cast<double>(gps_odom->header.stamp.nanosec) /
703704
1000000000.0);
704705
getRobotOriginWorldPose(transformed_utm_gps, transformed_utm_robot, time);
705706

@@ -722,14 +723,14 @@ bool NavSatTransform::prepareGpsOdometry(nav_msgs::msg::Odometry & gps_odom)
722723
rot_6d * latest_utm_covariance_.eval() * rot_6d.transpose();
723724

724725
// Now fill out the message. Set the orientation to the identity.
725-
tf2::toMsg(transformed_utm_robot, gps_odom.pose.pose);
726-
gps_odom.pose.pose.position.z =
727-
(zero_altitude_ ? 0.0 : gps_odom.pose.pose.position.z);
726+
tf2::toMsg(transformed_utm_robot, gps_odom->pose.pose);
727+
gps_odom->pose.pose.position.z =
728+
(zero_altitude_ ? 0.0 : gps_odom->pose.pose.position.z);
728729

729730
// Copy the measurement's covariance matrix so that we can rotate it later
730731
for (size_t i = 0; i < POSE_SIZE; i++) {
731732
for (size_t j = 0; j < POSE_SIZE; j++) {
732-
gps_odom.pose.covariance[POSE_SIZE * i + j] =
733+
gps_odom->pose.covariance[POSE_SIZE * i + j] =
733734
latest_utm_covariance_(i, j);
734735
}
735736
}

0 commit comments

Comments
 (0)