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定义如下
在这里插入图片描述

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值