diff --git a/launch/tier4_localization_launch/launch/pose_twist_estimator/ar_tag_based_localizer.launch.xml b/launch/tier4_localization_launch/launch/pose_twist_estimator/ar_tag_based_localizer.launch.xml
index 181f470a00800..ac7589ea2273b 100644
--- a/launch/tier4_localization_launch/launch/pose_twist_estimator/ar_tag_based_localizer.launch.xml
+++ b/launch/tier4_localization_launch/launch/pose_twist_estimator/ar_tag_based_localizer.launch.xml
@@ -1,17 +1,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/localization/landmark_based_localizer/ar_tag_based_localizer/launch/ar_tag_based_localizer.launch.xml b/localization/landmark_based_localizer/ar_tag_based_localizer/launch/ar_tag_based_localizer.launch.xml
index 6437455875cc2..272338905c3f0 100644
--- a/localization/landmark_based_localizer/ar_tag_based_localizer/launch/ar_tag_based_localizer.launch.xml
+++ b/localization/landmark_based_localizer/ar_tag_based_localizer/launch/ar_tag_based_localizer.launch.xml
@@ -8,18 +8,24 @@
-
+
+
+
+
-
+
+
+
+
diff --git a/localization/landmark_based_localizer/ar_tag_based_localizer/package.xml b/localization/landmark_based_localizer/ar_tag_based_localizer/package.xml
index 7e83220dadf2a..857ec4f16f051 100644
--- a/localization/landmark_based_localizer/ar_tag_based_localizer/package.xml
+++ b/localization/landmark_based_localizer/ar_tag_based_localizer/package.xml
@@ -17,7 +17,6 @@
aruco
cv_bridge
diagnostic_msgs
- image_transport
landmark_manager
lanelet2_extension
localization_util
diff --git a/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.cpp b/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.cpp
index e569a71bbb5b0..a1e2f3ec31dd3 100644
--- a/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.cpp
+++ b/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.cpp
@@ -66,10 +66,6 @@
ArTagBasedLocalizer::ArTagBasedLocalizer(const rclcpp::NodeOptions & options)
: Node("ar_tag_based_localizer", options), cam_info_received_(false)
-{
-}
-
-bool ArTagBasedLocalizer::setup()
{
/*
Declare node parameters
@@ -92,7 +88,7 @@ bool ArTagBasedLocalizer::setup()
} else {
// Error
RCLCPP_ERROR_STREAM(this->get_logger(), "Invalid detection_mode: " << detection_mode);
- return false;
+ return;
}
ekf_pose_buffer_ = std::make_unique(
this->get_logger(), ekf_time_tolerance_, ekf_position_tolerance_);
@@ -111,59 +107,50 @@ bool ArTagBasedLocalizer::setup()
tf_buffer_ = std::make_unique(this->get_clock());
tf_listener_ = std::make_unique(*tf_buffer_);
- /*
- Initialize image transport
- */
- it_ = std::make_unique(shared_from_this());
-
/*
Subscribers
*/
+ using std::placeholders::_1;
map_bin_sub_ = this->create_subscription(
"~/input/lanelet2_map", rclcpp::QoS(10).durability(rclcpp::DurabilityPolicy::TransientLocal),
- std::bind(&ArTagBasedLocalizer::map_bin_callback, this, std::placeholders::_1));
+ std::bind(&ArTagBasedLocalizer::map_bin_callback, this, _1));
rclcpp::QoS qos_sub(rclcpp::QoSInitialization::from_rmw(rmw_qos_profile_default));
qos_sub.best_effort();
- pose_array_pub_ = this->create_publisher("~/debug/detected_landmarks", qos_sub);
image_sub_ = this->create_subscription(
- "~/input/image", qos_sub,
- std::bind(&ArTagBasedLocalizer::image_callback, this, std::placeholders::_1));
+ "~/input/image", qos_sub, std::bind(&ArTagBasedLocalizer::image_callback, this, _1));
cam_info_sub_ = this->create_subscription(
- "~/input/camera_info", qos_sub,
- std::bind(&ArTagBasedLocalizer::cam_info_callback, this, std::placeholders::_1));
+ "~/input/camera_info", qos_sub, std::bind(&ArTagBasedLocalizer::cam_info_callback, this, _1));
ekf_pose_sub_ = this->create_subscription(
- "~/input/ekf_pose", qos_sub,
- std::bind(&ArTagBasedLocalizer::ekf_pose_callback, this, std::placeholders::_1));
+ "~/input/ekf_pose", qos_sub, std::bind(&ArTagBasedLocalizer::ekf_pose_callback, this, _1));
/*
Publishers
*/
- rclcpp::QoS qos_marker = rclcpp::QoS(rclcpp::KeepLast(10));
- qos_marker.transient_local();
- qos_marker.reliable();
- marker_pub_ = this->create_publisher("~/debug/marker", qos_marker);
- rclcpp::QoS qos_pub(rclcpp::QoSInitialization::from_rmw(rmw_qos_profile_default));
- image_pub_ = it_->advertise("~/debug/result", 1);
- pose_pub_ =
- this->create_publisher("~/output/pose_with_covariance", qos_pub);
- diag_pub_ = this->create_publisher("/diagnostics", qos_pub);
+ const rclcpp::QoS qos_pub_once = rclcpp::QoS(rclcpp::KeepLast(10)).transient_local().reliable();
+ const rclcpp::QoS qos_pub_periodic(rclcpp::QoSInitialization::from_rmw(rmw_qos_profile_default));
+ pose_pub_ = this->create_publisher(
+ "~/output/pose_with_covariance", qos_pub_periodic);
+ image_pub_ = this->create_publisher("~/debug/image", qos_pub_periodic);
+ mapped_tag_pose_pub_ = this->create_publisher("~/debug/mapped_tag", qos_pub_once);
+ detected_tag_pose_pub_ =
+ this->create_publisher("~/debug/detected_tag", qos_pub_periodic);
+ diag_pub_ = this->create_publisher("/diagnostics", qos_pub_periodic);
RCLCPP_INFO(this->get_logger(), "Setup of ar_tag_based_localizer node is successful!");
- return true;
}
void ArTagBasedLocalizer::map_bin_callback(const HADMapBin::ConstSharedPtr & msg)
{
landmark_manager_.parse_landmarks(msg, "apriltag_16h5", this->get_logger());
const MarkerArray marker_msg = landmark_manager_.get_landmarks_as_marker_array_msg();
- marker_pub_->publish(marker_msg);
+ mapped_tag_pose_pub_->publish(marker_msg);
}
void ArTagBasedLocalizer::image_callback(const Image::ConstSharedPtr & msg)
{
// check subscribers
- if ((image_pub_.getNumSubscribers() == 0) && (pose_pub_->get_subscription_count() == 0)) {
+ if ((image_pub_->get_subscription_count() == 0) && (pose_pub_->get_subscription_count() == 0)) {
RCLCPP_DEBUG(this->get_logger(), "No subscribers, not looking for ArUco markers");
return;
}
@@ -192,7 +179,7 @@ void ArTagBasedLocalizer::image_callback(const Image::ConstSharedPtr & msg)
}
// for debug
- if (pose_array_pub_->get_subscription_count() > 0) {
+ if (detected_tag_pose_pub_->get_subscription_count() > 0) {
PoseArray pose_array_msg;
pose_array_msg.header.stamp = sensor_stamp;
pose_array_msg.header.frame_id = "map";
@@ -201,7 +188,7 @@ void ArTagBasedLocalizer::image_callback(const Image::ConstSharedPtr & msg)
tier4_autoware_utils::transformPose(landmark.pose, self_pose);
pose_array_msg.poses.push_back(detected_marker_on_map);
}
- pose_array_pub_->publish(pose_array_msg);
+ detected_tag_pose_pub_->publish(pose_array_msg);
}
// calc new_self_pose
@@ -267,24 +254,12 @@ void ArTagBasedLocalizer::cam_info_callback(const CameraInfo::ConstSharedPtr & m
return;
}
- cv::Mat camera_matrix(3, 4, CV_64FC1, 0.0);
- camera_matrix.at(0, 0) = msg->p[0];
- camera_matrix.at(0, 1) = msg->p[1];
- camera_matrix.at(0, 2) = msg->p[2];
- camera_matrix.at(0, 3) = msg->p[3];
- camera_matrix.at(1, 0) = msg->p[4];
- camera_matrix.at(1, 1) = msg->p[5];
- camera_matrix.at(1, 2) = msg->p[6];
- camera_matrix.at(1, 3) = msg->p[7];
- camera_matrix.at(2, 0) = msg->p[8];
- camera_matrix.at(2, 1) = msg->p[9];
- camera_matrix.at(2, 2) = msg->p[10];
- camera_matrix.at(2, 3) = msg->p[11];
-
- cv::Mat distortion_coeff(4, 1, CV_64FC1);
- for (int i = 0; i < 4; ++i) {
- distortion_coeff.at(i, 0) = 0;
- }
+ // copy camera matrix
+ cv::Mat camera_matrix(3, 4, CV_64FC1);
+ std::copy(msg->p.begin(), msg->p.end(), camera_matrix.begin());
+
+ // all 0
+ cv::Mat distortion_coeff(4, 1, CV_64FC1, 0.0);
const cv::Size size(static_cast(msg->width), static_cast(msg->height));
@@ -361,12 +336,12 @@ std::vector ArTagBasedLocalizer::detect_landmarks(
}
// for debug
- if (image_pub_.getNumSubscribers() > 0) {
+ if (image_pub_->get_subscription_count() > 0) {
cv_bridge::CvImage out_msg;
out_msg.header.stamp = sensor_stamp;
out_msg.encoding = sensor_msgs::image_encodings::RGB8;
out_msg.image = in_image;
- image_pub_.publish(out_msg.toImageMsg());
+ image_pub_->publish(*out_msg.toImageMsg());
}
return landmarks;
diff --git a/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.hpp b/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.hpp
index b7dfb45a26ce3..eb7406f8c77f8 100644
--- a/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.hpp
+++ b/localization/landmark_based_localizer/ar_tag_based_localizer/src/ar_tag_based_localizer.hpp
@@ -48,11 +48,12 @@
#include "landmark_manager/landmark_manager.hpp"
#include "localization_util/smart_pose_buffer.hpp"
-#include
#include
#include
#include
+#include
+#include
#include
#include
@@ -82,7 +83,6 @@ class ArTagBasedLocalizer : public rclcpp::Node
public:
explicit ArTagBasedLocalizer(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
- bool setup();
private:
void map_bin_callback(const HADMapBin::ConstSharedPtr & msg);
@@ -104,9 +104,6 @@ class ArTagBasedLocalizer : public rclcpp::Node
std::unique_ptr tf_buffer_;
std::unique_ptr tf_listener_;
- // image transport
- std::unique_ptr it_;
-
// Subscribers
rclcpp::Subscription::SharedPtr map_bin_sub_;
rclcpp::Subscription::SharedPtr image_sub_;
@@ -114,10 +111,10 @@ class ArTagBasedLocalizer : public rclcpp::Node
rclcpp::Subscription::SharedPtr ekf_pose_sub_;
// Publishers
- rclcpp::Publisher::SharedPtr marker_pub_;
- rclcpp::Publisher::SharedPtr pose_array_pub_;
- image_transport::Publisher image_pub_;
rclcpp::Publisher::SharedPtr pose_pub_;
+ rclcpp::Publisher::SharedPtr image_pub_;
+ rclcpp::Publisher::SharedPtr detected_tag_pose_pub_;
+ rclcpp::Publisher::SharedPtr mapped_tag_pose_pub_;
rclcpp::Publisher::SharedPtr diag_pub_;
// Others
diff --git a/localization/landmark_based_localizer/ar_tag_based_localizer/src/main.cpp b/localization/landmark_based_localizer/ar_tag_based_localizer/src/main.cpp
index cbcd57b4b222a..8ef1dd6195580 100644
--- a/localization/landmark_based_localizer/ar_tag_based_localizer/src/main.cpp
+++ b/localization/landmark_based_localizer/ar_tag_based_localizer/src/main.cpp
@@ -48,7 +48,6 @@ int main(int argc, char ** argv)
{
rclcpp::init(argc, argv);
std::shared_ptr ptr = std::make_shared();
- ptr->setup();
rclcpp::spin(ptr);
rclcpp::shutdown();
}
diff --git a/localization/landmark_based_localizer/ar_tag_based_localizer/test/test.cpp b/localization/landmark_based_localizer/ar_tag_based_localizer/test/test.cpp
index 1b44327fd9e8b..5d05dd7e3755a 100644
--- a/localization/landmark_based_localizer/ar_tag_based_localizer/test/test.cpp
+++ b/localization/landmark_based_localizer/ar_tag_based_localizer/test/test.cpp
@@ -55,7 +55,8 @@ class TestArTagBasedLocalizer : public ::testing::Test
TEST_F(TestArTagBasedLocalizer, test_setup) // NOLINT
{
- EXPECT_TRUE(node_->setup());
+ // Check if the constructor finishes successfully
+ EXPECT_TRUE(true);
}
int main(int argc, char ** argv)