wip-behaviors #3

Merged
Pimpest merged 86 commits from wip-behaviors into main 2026-05-28 06:21:26 +00:00
2 changed files with 30 additions and 11 deletions
Showing only changes of commit 85071f92d5 - Show all commits

View File

@@ -18,6 +18,9 @@
#include "tf2/LinearMath/Transform.hpp" #include "tf2/LinearMath/Transform.hpp"
#include "tf2_geometry_msgs/tf2_geometry_msgs.hpp" #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
#include "tf2_ros/transform_listener.hpp"
#include "tf2_ros/buffer.hpp"
namespace toid namespace toid
{ {
@@ -46,7 +49,6 @@ public:
message_filters::Subscriber<sensor_msgs::msg::CameraInfo> cam_info_sub_; message_filters::Subscriber<sensor_msgs::msg::CameraInfo> cam_info_sub_;
std::shared_ptr<message_filters::Synchronizer<SyncPolicy>> sync_; std::shared_ptr<message_filters::Synchronizer<SyncPolicy>> sync_;
rclcpp::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr pose_pub_; rclcpp::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr pose_pub_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr flip_pub_; rclcpp::Publisher<std_msgs::msg::String>::SharedPtr flip_pub_;
@@ -60,8 +62,10 @@ public:
cv::Ptr<cv::aruco::DetectorParameters> detectorParams_; cv::Ptr<cv::aruco::DetectorParameters> detectorParams_;
cv::Ptr<cv::aruco::Dictionary> dictionary_; cv::Ptr<cv::aruco::Dictionary> dictionary_;
message_filters::Subscriber<sensor_msgs::msg::Image> img_sub_; message_filters::Subscriber<sensor_msgs::msg::Image> img_sub_;
tf2_ros::Buffer::SharedPtr tf_;
std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
}; };
} // namespace toid } // namespace toid

View File

@@ -2,6 +2,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "tf2/utils.hpp"
namespace toid namespace toid
{ {
@@ -12,6 +13,9 @@ NutDetector::NutDetector(const rclcpp::NodeOptions & options)
detectorParams_ = cv::aruco::DetectorParameters::create(); detectorParams_ = cv::aruco::DetectorParameters::create();
dictionary_ = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_100); dictionary_ = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_100);
tf_ = std::make_shared<tf2_ros::Buffer>(this->get_clock());
tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tf_);
bool use_compressed = true; bool use_compressed = true;
this->declare_parameter("use_compressed", rclcpp::ParameterValue(true)); this->declare_parameter("use_compressed", rclcpp::ParameterValue(true));
this->get_parameter("use_compressed", use_compressed); this->get_parameter("use_compressed", use_compressed);
@@ -34,8 +38,7 @@ NutDetector::NutDetector(const rclcpp::NodeOptions & options)
pose_pub_ = pose_pub_ =
this->create_publisher<geometry_msgs::msg::PoseStamped>("/closest_acorn", rclcpp::QoS(1)); this->create_publisher<geometry_msgs::msg::PoseStamped>("/closest_acorn", rclcpp::QoS(1));
flip_pub_ = flip_pub_ = this->create_publisher<std_msgs::msg::String>("/to_flip", rclcpp::QoS(1));
this->create_publisher<std_msgs::msg::String>("/to_flip", rclcpp::QoS(1));
} }
void NutDetector::compressed_topic_callback( void NutDetector::compressed_topic_callback(
@@ -133,6 +136,18 @@ void NutDetector::process_image(
pose.header.frame_id = camera_frame_id_; pose.header.frame_id = camera_frame_id_;
pose.header.stamp = header.stamp; pose.header.stamp = header.stamp;
pose_pub_->publish(pose); pose_pub_->publish(pose);
try {
geometry_msgs::msg::PoseStamped out_pose;
out_pose = tf_->transform(pose, "base_footprint");
RCLCPP_DEBUG_THROTTLE(
this->get_logger(), *this->get_clock(), 2000, "Closest guy is at: %lf %lf %lf",
out_pose.pose.position.x, out_pose.pose.position.y, tf2::getYaw(out_pose.pose.orientation)
);
} catch (const tf2::TransformException & e) {
RCLCPP_ERROR_THROTTLE(
this->get_logger(), *this->get_clock(), 2000, "Failed to transfrom point");
}
} }
void NutDetector::extract_markers(cv::Mat & image) void NutDetector::extract_markers(cv::Mat & image)