Rviz可视化工具Marker示例:目标检测画矩形框

文章目录[隐藏]

需求

经目标检测算法识别出目标后,需要以目标为中心画一个矩形框,将目标框出,在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

Fang_cheng_

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

目标检测修改检测框大小、粗细

修改mmdetection参数 如果你的网络是用mmdetection写的,可视化预测结果时,发现框的线条太细,当输入图片太大时会看不清标注的框。 我们可以通过修改mmdtection中的一些参数

单目3D目标检测调研

单目3D目标检测调研 一、 简介 现有的单目3D目标检测方案主要方案主要分为两类,分别为基于图片的方法和基于伪雷达点云的方法。   基于图片的方法一般通过2D-3D之间的几何约束来学习,包括目标形状信息&#xff0