Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(aw_pose_covariance_modifier_node): add aw_pose_covariance_modifier for using NDT and GNSS together #6477

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
<!-- When gnss_enabled is false, automatic_pose_initializer will not run, only manual initial position estimation is available. -->
<arg name="gnss_enabled" default="true" description="gnss availability for initial position estimation"/>

<!-- When use_pose_covariance_modifier is true, gnss and NDT poses will be used together in localization-->
<arg name="use_pose_covariance_modifier" default="true" description="parameter for using gnss and NDT together with covariance modifier"/>

<!-- split string with underscores -->
<let name="available_args" value="[\'ndt\',\'yabloc\',\'eagleye\',\'artag\']"/>
<let name="split_function" value="list(set('$(var pose_source)'.split('_')).intersection($(var available_args)))"/>
Expand Down Expand Up @@ -80,6 +83,11 @@
</include>
</group>

<!-- AW Pose Covariance Modifier Node -->
<group if="$(var use_pose_covariance_modifier)">
<include file="$(find-pkg-share aw_pose_covariance_modifier_node)/launch/aw_pose_covariance_modifier_node.launch.xml"/>
</group>

<!-- Util Launch -->
<group>
<push-ros-namespace namespace="util"/>
Expand Down
32 changes: 32 additions & 0 deletions localization/aw_pose_covariance_modifier_node/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
cmake_minimum_required(VERSION 3.14)
project(aw_pose_covariance_modifier_node)

find_package(autoware_cmake REQUIRED)
autoware_package()
find_package(rclcpp REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(rcl_interfaces REQUIRED)
set(NODE_NAME ${PROJECT_NAME})
set(EXEC_NAME ${PROJECT_NAME}_exe)

add_executable(${PROJECT_NAME} src/aw_pose_covariance_modifier_node.cpp)

ament_target_dependencies(${PROJECT_NAME} rclcpp geometry_msgs rcl_interfaces)

install(TARGETS
${PROJECT_NAME}
DESTINATION lib/${PROJECT_NAME}
)
include_directories(src/include/)

#ament_auto_add_library(${NODE_NAME}
# src/include/aw_pose_covariance_modifier_node.hpp
# src/aw_pose_covariance_modifier_node.cpp)

#rclcpp_components_register_node(${NODE_NAME}
# PLUGIN "aw_pose_covariance_modifier_node::AWPoseCovarianceModifierNode"
# EXECUTABLE ${EXEC_NAME})


ament_auto_package(INSTALL_TO_SHARE
launch)
1 change: 1 addition & 0 deletions localization/aw_pose_covariance_modifier_node/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# aw_pose_covariance_modifier
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<arg name="input_trusted_pose_with_cov_topic" default="/sensing/gnss/pose_with_covariance" description="Trusted pose input .. "/>
<arg name="output_pose_with_covariance_topic" default="/localization/pose_estimator/pose_with_covariance" description="Estimated self position with covariance"/>

<node pkg="aw_pose_covariance_modifier_node" exec="aw_pose_covariance_modifier_node" name="aw_pose_covariance_modifier_node" output="screen">
<remap from="input_trusted_pose_with_cov_topic" to="$(var input_trusted_pose_with_cov_topic)"/>
<remap from="output_pose_with_covariance_topic" to="$(var output_pose_with_covariance_topic)"/>
</node>
</launch>
25 changes: 25 additions & 0 deletions localization/aw_pose_covariance_modifier_node/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>aw_pose_covariance_modifier_node</name>
<version>1.0.0</version>
<description>Converts an autoware_msgs message to autoware_auto_msgs version and publishes it.</description>

<maintainer email="melike@leodrive.ai">Melike Tanrikulu</maintainer>

<license>Apache License 2.0</license>

<buildtool_depend>ament_cmake_auto</buildtool_depend>
<buildtool_depend>autoware_cmake</buildtool_depend>

<build_depend>rosidl_default_generators</build_depend>

<depend>geometry_msgs</depend>
<depend>rcl_interfaces</depend>
<depend>rclcpp</depend>
<depend>rclcpp_components</depend>

<export>
<build_type>ament_cmake</build_type>
</export>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
// Copyright 2024 The Autoware Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "include/aw_pose_covariance_modifier_node.hpp"

#include <rclcpp/rclcpp.hpp>

AWPoseCovarianceModifierNode::AWPoseCovarianceModifierNode() : Node("AWPoseCovarianceModifierNode")

Check warning on line 19 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L19

Added line #L19 was not covered by tests
{
trusted_pose_with_cov_sub_ =
this->create_subscription<geometry_msgs::msg::PoseWithCovarianceStamped>(

Check warning on line 22 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L22

Added line #L22 was not covered by tests
"input_trusted_pose_with_cov_topic", 10000,
std::bind(

Check warning on line 24 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L24

Added line #L24 was not covered by tests
&AWPoseCovarianceModifierNode::trusted_pose_with_cov_callback, this,
std::placeholders::_1));

new_pose_estimator_pub_ = this->create_publisher<geometry_msgs::msg::PoseWithCovarianceStamped>(

Check warning on line 28 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L28

Added line #L28 was not covered by tests
"output_pose_with_covariance_topic", 10);

client_ = this->create_client<rcl_interfaces::srv::SetParameters>(

Check warning on line 31 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L31

Added line #L31 was not covered by tests
"/localization/pose_estimator/ndt_scan_matcher/set_parameters");

while (!client_->wait_for_service(std::chrono::seconds(1)) && rclcpp::ok()) {
RCLCPP_INFO(this->get_logger(), "Waiting for aw_pose_covariance_modifier_node service...");

Check warning on line 35 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L34-L35

Added lines #L34 - L35 were not covered by tests
}

activateNDTCovModifier = AWPoseCovarianceModifierNode::callNDTCovarianceModifier();
if (activateNDTCovModifier == 1) {
RCLCPP_INFO(get_logger(), "NDT pose covariance modifier activated ...");

Check warning on line 40 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L38-L40

Added lines #L38 - L40 were not covered by tests
} else {
RCLCPP_WARN(get_logger(), "Failed to enable NDT pose covariance modifier ...");

Check warning on line 42 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L42

Added line #L42 was not covered by tests
}
}

Check warning on line 44 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L44

Added line #L44 was not covered by tests

bool AWPoseCovarianceModifierNode::callNDTCovarianceModifier()

Check warning on line 46 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L46

Added line #L46 was not covered by tests
{
auto request = std::make_shared<rcl_interfaces::srv::SetParameters::Request>();

rcl_interfaces::msg::Parameter parameter;

Check warning on line 50 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L50

Added line #L50 was not covered by tests
parameter.name = "aw_pose_covariance_modifier.enable";
parameter.value.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL;
parameter.value.bool_value = true;

Check warning on line 53 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L52-L53

Added lines #L52 - L53 were not covered by tests

request->parameters.push_back(parameter);

Check warning on line 55 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L55

Added line #L55 was not covered by tests

client_->async_send_request(
request, [this](rclcpp::Client<rcl_interfaces::srv::SetParameters>::SharedFuture result_) {
auto result_status = result_.wait_for(std::chrono::seconds(1));

Check warning on line 59 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L57-L59

Added lines #L57 - L59 were not covered by tests

if (result_status == std::future_status::ready) {

Check warning on line 61 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L61

Added line #L61 was not covered by tests
auto response = result_.get();

if (response && response->results.data()) {
RCLCPP_INFO(

Check warning on line 65 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L64-L65

Added lines #L64 - L65 were not covered by tests
this->get_logger(), "aw_pose_covariance_modifier.enable parameter set successfully.");
return true;

Check warning on line 67 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L67

Added line #L67 was not covered by tests
} else {
RCLCPP_ERROR(

Check warning on line 69 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L69

Added line #L69 was not covered by tests
this->get_logger(),
"An error occurred while setting the aw_pose_covariance_modifier.enable parameter.");
return false;

Check warning on line 72 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L72

Added line #L72 was not covered by tests
}
} else {
RCLCPP_ERROR(

Check warning on line 75 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L75

Added line #L75 was not covered by tests
this->get_logger(), "The request was not completed within the specified time.");
return false;

Check warning on line 77 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L77

Added line #L77 was not covered by tests
}
});
return true;
}

Check warning on line 81 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L80-L81

Added lines #L80 - L81 were not covered by tests

void AWPoseCovarianceModifierNode::trusted_pose_with_cov_callback(

Check warning on line 83 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L83

Added line #L83 was not covered by tests
const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr & msg)
{
geometry_msgs::msg::PoseWithCovarianceStamped pose_estimator_pose = *msg;

Check warning on line 86 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L86

Added line #L86 was not covered by tests

trusted_pose_rmse_ = (std::sqrt(pose_estimator_pose.pose.covariance[0]) +
std::sqrt(pose_estimator_pose.pose.covariance[7])) /

Check warning on line 89 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L88-L89

Added lines #L88 - L89 were not covered by tests
2;
trusted_pose_yaw_rmse_in_degrees_ =
std::sqrt(pose_estimator_pose.pose.covariance[35]) * 180 / M_PI;

Check warning on line 92 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L91-L92

Added lines #L91 - L92 were not covered by tests

if (trusted_pose_rmse_ > 0.25) {
RCLCPP_INFO(

Check warning on line 95 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L94-L95

Added lines #L94 - L95 were not covered by tests
this->get_logger(),
"Trusted Pose RMSE is under the threshold. It will not be used as a pose source.");
} else {
if (trusted_pose_yaw_rmse_in_degrees_ >= 0.3) {
pose_estimator_pose.pose.covariance[35] = 1000000;

Check warning on line 100 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L99-L100

Added lines #L99 - L100 were not covered by tests
}

new_pose_estimator_pub_->publish(pose_estimator_pose);

Check warning on line 103 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L103

Added line #L103 was not covered by tests
}
}
int main(int argc, char * argv[])

Check warning on line 106 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L105-L106

Added lines #L105 - L106 were not covered by tests
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<AWPoseCovarianceModifierNode>());
rclcpp::shutdown();

Check warning on line 110 in localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp

View check run for this annotation

Codecov / codecov/patch

localization/aw_pose_covariance_modifier_node/src/aw_pose_covariance_modifier_node.cpp#L108-L110

Added lines #L108 - L110 were not covered by tests
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Copyright 2024 The Autoware Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef AW_POSE_COVARIANCE_MODIFIER_NODE_HPP_
#define AW_POSE_COVARIANCE_MODIFIER_NODE_HPP_

#include <rcl_interfaces/srv/set_parameters.hpp>
#include <rclcpp/rclcpp.hpp>

#include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>

#include <string>

class AWPoseCovarianceModifierNode : public rclcpp::Node
{
public:
AWPoseCovarianceModifierNode();

rclcpp::Subscription<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr
trusted_pose_with_cov_sub_;
rclcpp::Publisher<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr
new_pose_estimator_pub_;
rclcpp::Client<rcl_interfaces::srv::SetParameters>::SharedPtr client_;

void trusted_pose_with_cov_callback(
const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr & msg);
bool callNDTCovarianceModifier();

private:
double trusted_pose_rmse_;
double trusted_pose_yaw_rmse_in_degrees_;
bool activateNDTCovModifier = 0;
};

#endif // AW_POSE_COVARIANCE_MODIFIER_NODE_HPP_
1 change: 1 addition & 0 deletions localization/ndt_scan_matcher/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.14)
project(ndt_scan_matcher)

find_package(autoware_cmake REQUIRED)
find_package(rcl_interfaces REQUIRED)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
find_package(rcl_interfaces REQUIRED)

autoware_package()

# Compile flags for SIMD instructions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "localization_util/smart_pose_buffer.hpp"
#include "ndt_scan_matcher/hyper_parameters.hpp"
#include "ndt_scan_matcher/map_update_module.hpp"
#include "rcl_interfaces/srv/set_parameters.hpp"

#include <rclcpp/rclcpp.hpp>
#include <tier4_autoware_utils/ros/logger_level_configure.hpp>
Expand Down Expand Up @@ -83,14 +84,18 @@ class NDTScanMatcher : public rclcpp::Node
void service_trigger_node(
const std_srvs::srv::SetBool::Request::SharedPtr req,
std_srvs::srv::SetBool::Response::SharedPtr res);

void setParametersCallback(
const rcl_interfaces::srv::SetParameters::Request::SharedPtr request,
rcl_interfaces::srv::SetParameters::Response::SharedPtr response);
void callback_timer();
void callback_sensor_points(
sensor_msgs::msg::PointCloud2::ConstSharedPtr sensor_points_msg_in_sensor_frame);
void callback_initial_pose(
geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr initial_pose_msg_ptr);
void callback_regularization_pose(
geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr pose_conv_msg_ptr);
void callback_trusted_source_pose(
geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr pose_conv_msg_ptr);

geometry_msgs::msg::PoseWithCovarianceStamped align_pose(
const geometry_msgs::msg::PoseWithCovarianceStamped & initial_pose_with_cov);
Expand Down Expand Up @@ -138,6 +143,8 @@ class NDTScanMatcher : public rclcpp::Node
rclcpp::Subscription<sensor_msgs::msg::PointCloud2>::SharedPtr sensor_points_sub_;
rclcpp::Subscription<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr
regularization_pose_sub_;
rclcpp::Subscription<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr
trusted_source_pose_sub_;

rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr sensor_aligned_pose_pub_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr no_ground_points_aligned_pose_pub_;
Expand Down Expand Up @@ -172,6 +179,7 @@ class NDTScanMatcher : public rclcpp::Node

rclcpp::Service<tier4_localization_msgs::srv::PoseWithCovarianceStamped>::SharedPtr service_;
rclcpp::Service<std_srvs::srv::SetBool>::SharedPtr service_trigger_node_;
rclcpp::Service<rcl_interfaces::srv::SetParameters>::SharedPtr set_parameters_service_;

tf2_ros::TransformBroadcaster tf2_broadcaster_;
tf2_ros::Buffer tf2_buffer_;
Expand All @@ -193,10 +201,27 @@ class NDTScanMatcher : public rclcpp::Node

std::unique_ptr<SmartPoseBuffer> regularization_pose_buffer_;

geometry_msgs::msg::PoseWithCovarianceStamped trusted_source_pose_;
bool activate_pose_covariance_modifier_;
bool close_ndt_pose_source_ = false;
struct trusted_pose_
{
double pose_average_rmse_xy = 0.0;
double yaw_rmse = 0.0;
} trustedPose;

std::atomic<bool> is_activated_;
std::unique_ptr<MapUpdateModule> map_update_module_;
std::unique_ptr<tier4_autoware_utils::LoggerLevelConfigure> logger_configure_;

std::array<double, 36> covariance_modifier(std::array<double, 36> & in_ndt_covariance);

// To be used for AW Pose Covariance Modifier - Trusted Pose timeout control
bool checkTrustedPoseTimeout();
rclcpp::Time trustedPoseCallbackTime;
std::mutex mutex_cov_modifier_;
void createTrustedSourcePoseSubscriber();

HyperParameters param_;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<arg name="input_initial_pose_topic" default="ekf_pose_with_covariance" description="Initial position topic to align"/>
<arg name="input_regularization_pose_topic" default="regularization_pose_with_covariance" description="Regularization pose topic"/>
<arg name="input_service_trigger_node" default="trigger_node" description="Trigger node service name"/>
<arg name="input_covariance_modifier_trusted_pose_topic" default="/sensing/gnss/pose_with_covariance" description="AW Pose cov modifier trusted PoseWithCov topic"/>

<arg name="output_pose_topic" default="ndt_pose" description="Estimated self position"/>
<arg name="output_pose_with_covariance_topic" default="ndt_pose_with_covariance" description="Estimated self position with covariance"/>
Expand All @@ -14,11 +15,12 @@

<arg name="node_name" default="ndt_scan_matcher" description="Use a different name for this node"/>

<node pkg="ndt_scan_matcher" exec="ndt_scan_matcher" name="$(var node_name)" output="log">
<node pkg="ndt_scan_matcher" exec="ndt_scan_matcher" name="$(var node_name)" output="screen">
<remap from="points_raw" to="$(var input_pointcloud)"/>
<remap from="ekf_pose_with_covariance" to="$(var input_initial_pose_topic)"/>
<remap from="regularization_pose_with_covariance" to="$(var input_regularization_pose_topic)"/>
<remap from="trigger_node_srv" to="$(var input_service_trigger_node)"/>
<remap from="input_trusted_pose_topic" to="$(var input_covariance_modifier_trusted_pose_topic)"/>

<remap from="ndt_pose" to="$(var output_pose_topic)"/>
<remap from="ndt_pose_with_covariance" to="$(var output_pose_with_covariance_topic)"/>
Expand Down
1 change: 1 addition & 0 deletions localization/ndt_scan_matcher/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<depend>nav_msgs</depend>
<depend>ndt_omp</depend>
<depend>pcl_conversions</depend>
<depend>rcl_interfaces</depend>
<depend>rclcpp</depend>
<depend>sensor_msgs</depend>
<depend>std_msgs</depend>
Expand Down
Loading
Loading