Skip to content

Commit 62034d9

Browse files
update function structure
Signed-off-by: meliketanrikulu <melike@leodrive.ai>
1 parent 4cf7dde commit 62034d9

File tree

2 files changed

+35
-51
lines changed

2 files changed

+35
-51
lines changed

localization/autoware_pose_covariance_modifier_node/src/autoware_pose_covariance_modifier_node.cpp

+32-45
Original file line numberDiff line numberDiff line change
@@ -49,49 +49,23 @@ AutowarePoseCovarianceModifierNode::AutowarePoseCovarianceModifierNode()
4949
}
5050

5151
}
52-
bool AutowarePoseCovarianceModifierNode::checkTrustedPoseTimeout()
52+
void AutowarePoseCovarianceModifierNode::checkTrustedPoseTimeout()
5353
{
5454
auto timeDiff = this->now() - trustedPoseCallbackTime;
5555
if (timeDiff.seconds() > 1.0) {
56-
return true;
57-
}
58-
return false;
59-
}
60-
void AutowarePoseCovarianceModifierNode::publishPoseSource()
61-
{
62-
std_msgs::msg::String selected_pose_type;
63-
switch (pose_source_) {
64-
case static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::GNSS):
65-
selected_pose_type.data = "GNSS";
66-
break;
67-
case static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::GNSS_NDT):
68-
selected_pose_type.data = "GNSS + NDT";
69-
break;
70-
case static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::NDT):
56+
RCLCPP_WARN(this->get_logger(), "Trusted Pose Timeout");
57+
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::NDT);
58+
std_msgs::msg::String selected_pose_type;
7159
selected_pose_type.data = "NDT";
72-
break;
73-
default:
74-
selected_pose_type.data = "Unknown";
75-
break;
60+
pose_source_pub_->publish(selected_pose_type);
7661
}
77-
pose_source_pub_->publish(selected_pose_type);
7862
}
63+
7964
std::array<double, 36> AutowarePoseCovarianceModifierNode::ndt_covariance_modifier(
8065
std::array<double, 36> & in_ndt_covariance)
8166
{
8267
std::array<double, 36> ndt_covariance = in_ndt_covariance;
8368

84-
if (AutowarePoseCovarianceModifierNode::checkTrustedPoseTimeout()) {
85-
RCLCPP_WARN(this->get_logger(), "Trusted Pose Timeout");
86-
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::NDT);
87-
return ndt_covariance;
88-
}
89-
90-
if (
91-
trustedPose.pose_average_rmse_xy <= gnss_error_reliable_max_ &&
92-
trustedPose.yaw_rmse_in_degrees < yaw_error_deg_threshold_) {
93-
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::GNSS);
94-
} else if (trustedPose.pose_average_rmse_xy <= gnss_error_unreliable_min_) {
9569
/*
9670
* ndt_min_rmse_meters = in_ndt_rmse
9771
* ndt_max_rmse_meters = in_ndt_rmse * 2
@@ -119,21 +93,15 @@ std::array<double, 36> AutowarePoseCovarianceModifierNode::ndt_covariance_modifi
11993
ndt_covariance[7] = std::max(ndt_covariance[7], in_ndt_covariance[7]);
12094
ndt_covariance[14] = std::max(ndt_covariance[14], in_ndt_covariance[14]);
12195

122-
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::GNSS_NDT);
123-
} else {
124-
RCLCPP_INFO(this->get_logger(), "NDT input covariance values will be used ");
125-
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::NDT);
126-
}
127-
128-
publishPoseSource();
129-
13096
return ndt_covariance;
13197
}
13298
void AutowarePoseCovarianceModifierNode::ndt_pose_with_cov_callback(
13399
const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr & msg)
134100
{
101+
AutowarePoseCovarianceModifierNode::checkTrustedPoseTimeout();
102+
135103
std::array<double, 36> ndt_covariance_in_ = msg->pose.covariance;
136-
std::array<double, 36> out_ndt_covariance_ = ndt_covariance_modifier(ndt_covariance_in_);
104+
std::array<double, 36> out_ndt_covariance_ = pose_source_ == 1 ? ndt_covariance_modifier(ndt_covariance_in_) : ndt_covariance_in_ ;
137105

138106
geometry_msgs::msg::PoseWithCovarianceStamped ndt_pose_with_covariance = *msg;
139107
ndt_pose_with_covariance.pose.covariance = out_ndt_covariance_;
@@ -152,23 +120,42 @@ void AutowarePoseCovarianceModifierNode::trusted_pose_with_cov_callback(
152120
trustedPoseCallbackTime = this->now();
153121
trusted_source_pose_with_cov = *msg;
154122

155-
trustedPose.pose_average_rmse_xy = (std::sqrt(trusted_source_pose_with_cov.pose.covariance[0]) +
123+
double trusted_pose_average_rmse_xy;
124+
double trusted_pose_yaw_rmse_in_degrees;
125+
trusted_pose_average_rmse_xy= (std::sqrt(trusted_source_pose_with_cov.pose.covariance[0]) +
156126
std::sqrt(trusted_source_pose_with_cov.pose.covariance[7])) /
157127
2;
158128

159-
trustedPose.yaw_rmse_in_degrees =
129+
trusted_pose_yaw_rmse_in_degrees =
160130
std::sqrt(trusted_source_pose_with_cov.pose.covariance[35]) * 180 / M_PI;
161131

132+
selectPositionSource(trusted_pose_average_rmse_xy, trusted_pose_yaw_rmse_in_degrees);
133+
162134
if (pose_source_ != 2) {
163135
new_pose_estimator_pub_->publish(trusted_source_pose_with_cov);
164136
if(debug_){
165137
std_msgs::msg::Float32 out_gnss_rmse;
166-
out_gnss_rmse.data = trustedPose.pose_average_rmse_xy;
138+
out_gnss_rmse.data = trusted_pose_average_rmse_xy;
167139
out_gnss_position_rmse_pub_->publish(out_gnss_rmse);
168140
}
169-
170141
}
171142
}
143+
144+
void AutowarePoseCovarianceModifierNode::selectPositionSource(double trusted_pose_average_rmse_xy ,double trusted_pose_yaw_rmse_in_degrees){
145+
std_msgs::msg::String selected_pose_type;
146+
if (trusted_pose_average_rmse_xy <= gnss_error_reliable_max_ &&
147+
trusted_pose_yaw_rmse_in_degrees < yaw_error_deg_threshold_) {
148+
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::GNSS);
149+
selected_pose_type.data = "GNSS";
150+
} else if (trusted_pose_average_rmse_xy <= gnss_error_unreliable_min_) {
151+
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::GNSS_NDT);
152+
selected_pose_type.data = "GNSS + NDT";
153+
} else {
154+
pose_source_ = static_cast<int>(AutowarePoseCovarianceModifierNode::PoseSource::NDT);
155+
selected_pose_type.data = "NDT";
156+
}
157+
pose_source_pub_->publish(selected_pose_type);
158+
}
172159
int main(int argc, char * argv[])
173160
{
174161
rclcpp::init(argc, argv);

localization/autoware_pose_covariance_modifier_node/src/include/autoware_pose_covariance_modifier_node.hpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,11 @@ class AutowarePoseCovarianceModifierNode : public rclcpp::Node
4343
std::array<double, 36> ndt_covariance_modifier(std::array<double, 36> & in_ndt_covariance);
4444
geometry_msgs::msg::PoseWithCovarianceStamped trusted_source_pose_with_cov;
4545

46-
bool checkTrustedPoseTimeout();
46+
void checkTrustedPoseTimeout();
4747

4848
private:
49-
struct trusted_pose_
50-
{
51-
double pose_average_rmse_xy = 0.0;
52-
double yaw_rmse_in_degrees = 0.0;
53-
} trustedPose;
49+
50+
void selectPositionSource(double trusted_pose_average_rmse_xy ,double trusted_pose_yaw_rmse_in_degrees);
5451

5552
enum class PoseSource {
5653
GNSS = 0,

0 commit comments

Comments
 (0)