#include <ros/ros.h>
#include <geometry_msgs/PointStamped.h>
#include <visualization_msgs/Marker.h>
#include <visualization_msgs/MarkerArray.h>
ros::Publisher marker_pub; // 全局发布者
int marker_id = 0; // 使用自增ID确保唯一性
void pts_callback(const geometry_msgs::PointStamped::ConstPtr& msg)
{
ROS_INFO("Received point: (%f, %f)", msg->point.x, msg->point.y);
visualization_msgs::Marker marker;
marker.header.frame_id = "map";
marker.header.stamp = ros::Time::now();
marker.ns = "multiple_arrows";
marker.id = marker_id++; // 使用自增ID
marker.type = visualization_msgs::Marker::ARROW;
marker.action = visualization_msgs::Marker::ADD;
// 设置箭头位置
marker.pose.position.x = msg->point.x;
marker.pose.position.y = msg->point.y;
marker.pose.position.z = 0.0;
// 设置方向(保持默认朝X轴方向)
marker.pose.orientation.w = 1.0;
// 设置尺寸(箭头总长1m,杆径0.1m)
marker.scale.x = 1.0; // 箭头总长度
marker.scale.y = 0.1; // 箭头杆径
marker.scale.z = 0.1; // 箭头头径
// 设置颜色(红色不透明)
marker.color.r = 1.0;
marker.color.a = 1.0;
// 创建MarkerArray并发布
visualization_msgs::MarkerArray marker_array;
marker_array.markers.push_back(marker);
marker_pub.publish(marker_array);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "sub_pts");
ros::NodeHandle nh;
// 初始化全局发布者
marker_pub = nh.advertise<visualization_msgs::MarkerArray>("visualization_marker_array", 10);
ros::Subscriber pts_sub = nh.subscribe("/clicked_point", 1000, pts_callback);
ros::spin();
return 0;
}