文章目录[隐藏]
需求
经目标检测算法识别出目标后,需要以目标为中心画一个矩形框,将目标框出,在Rviz中显示。
所用的工具为ROS的marker消息类型。Marker显示允许各种基本形状的可编程添加到3D显示,通过发送visualization_msgs/Marker 来实现可视化。
先看效果
头文件包含
ros::Publisher marker_pub = nh.advertise<visualization_msgs::Marker>("/visualization_marker", 10);
填充数据
//publish target box with marker
visualization_msgs::Marker line_strip;
line_strip.header.frame_id = "camera_init";
line_strip.header.stamp = ros::Time::now();
line_strip.ns = "target_box";//namespace
line_strip.action = visualization_msgs::Marker::ADD;
line_strip.pose.orientation.w = 1.0;
line_strip.id = 0; //unique id, useful when multiple markers exist.
line_strip.type = visualization_msgs::Marker::LINE_STRIP; //marker type
line_strip.scale.x = 0.1; //width of the line
line_strip.color.r = 1.0; line_strip.color.g = 1.0; line_strip.color.b = 1.0;//color of the line: white.
line_strip.color.a = 1.0; //不透明度,设0则全透明
geometry_msgs:: Point p[8];
//inten_position是目标物的坐标
p[0].x = inten_position(0); p[0].y = inten_position(1)+0.2; p[0].z = inten_position(2)+0.5;
p[1].x = inten_position(0); p[1].y = inten_position(1)-0.2; p[1].z = inten_position(2)+0.5;
p[2].x = inten_position(0); p[2].y = inten_position(1)-0.2; p[2].z = inten_position(2)-1;
p[3].x = inten_position(0); p[3].y = inten_position(1)+0.2; p[3].z = inten_position(2)-1;
p[4].x = inten_position(0)+0.4; p[4].y = inten_position(1)+0.2; p[4].z = inten_position(2)-1;
p[5].x = inten_position(0)+0.4; p[5].y = inten_position(1)-0.2; p[5].z = inten_position(2)-1;
p[6].x = inten_position(0)+0.4; p[6].y = inten_position(1)-0.2; p[6].z = inten_position(2)+0.5;
p[7].x = inten_position(0)+0.4; p[7].y = inten_position(1)+0.2; p[7].z = inten_position(2)+0.5;
//LINE_STRIP类型仅仅将line_strip.points中相邻的两个点相连,如0和1,1和2,2和3
for (int i = 0; i < 8; i++){
line_strip.points.push_back(p[i]);
}
//为了保证矩形框的八条边都存在:
line_strip.points.push_back(p[0]);
line_strip.points.push_back(p[3]);
line_strip.points.push_back(p[2]);
line_strip.points.push_back(p[5]);
line_strip.points.push_back(p[6]);
line_strip.points.push_back(p[1]);
line_strip.points.push_back(p[0]);
line_strip.points.push_back(p[7]);
line_strip.points.push_back(p[4]);
marker_pub.publish(line_strip);
我的顶点index定义如下
版权声明:本文为CSDN博主「Fang_cheng_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Fang_cheng_/article/details/116454690
暂无评论