4848#include < string>
4949#include < vector>
5050#include < memory>
51+ #include < utility>
5152
5253using std::placeholders::_1;
5354using 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
639640bool 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