搞点云3D目标检测少不了要将检测结果展示出来秀一把,这时候rviz就可以发挥重要作用了。借助于rviz的Marker,允许通过发送visualization_msgs/Marker或者visualization_msgs/MarkerArray消息以可编程的形式添加各种基本形状在rviz中进行3D展示。说到底,marker它就是一个用来标记的东西。如果我们给定marker一个position和orientation(位置和姿态),rviz就会在画图区域的指定位置生成一个指定方向的marker,这个marker的形状我们可以在程序中自由选择,可以是立方体,箭头等。如何给marker一个orientation和position那自然就是一方发布消息,由marker来接收消息,消息里面包含了marker的位置和姿态等信息。

这篇小文章就演示一下我们常用的一个功能,在rviz上画3D检测框。要求不高,我们也就先画一个孤零零的3D框。 Marker是通过接受消息进而在rviz上展示,这基本上就归纳了我们要做的事情:1).创建消息发布者;2).创建消息;3).发布与接收消息。

#include "ros/ros.h"
#include "visualization_msgs/Marker.h"class MarkerPublisher{
public:MarkerPublisher(ros::NodeHandle& nh){pub_marker_ = nh.advertise<visualization_msgs::Marker>("visualization_marker", 10);//initialize marker publisherset_marker_fixed_property();};void Publish(){while (pub_marker_.getNumSubscribers() < 1) {sleep(1);}marker_.header.stamp = ros::Time();pub_marker_.publish(marker_);};void set_marker_fixed_property(){/*decide from which view we can see the marker*/marker_.header.frame_id = "livox_frame";marker_.ns = "my_namespace";marker_.id = 0;//set marker typemarker_.type = visualization_msgs::Marker::CUBE;//set marker positionmarker_.pose.position.x = 0;marker_.pose.position.y = 0;marker_.pose.position.z = 0;//set marker scalemarker_.scale.x = 2.0; //mmarker_.scale.y = 2.0;marker_.scale.z = 2.0;//decide the color of the markermarker_.color.a = 1.0; // Don't forget to set the alpha!marker_.color.r = 0.0;marker_.color.g = 1.0;marker_.color.b = 0.0;//set marker actionmarker_.action = visualization_msgs::Marker::ADD;marker_.lifetime = ros::Duration(); //(sec,nsec),0 forever};private:ros::Publisher  pub_marker_;visualization_msgs::Marker marker_;
};int main(int argc, char **argv){ros::init(argc, argv, "marker_worker");ros::NodeHandle nh;MarkerPublisher mp(nh);//ros::Rate rate(50);//while (ros::ok()) {mp.Publish();//    rate.sleep();//}ros::spin();return 0;
}

我们首先是创建了一个消息发布者,要发布的消息类型为visualization_msgs::Marker,消息topic为"visualization_marker"。

pub_marker_ = nh.advertise<visualization_msgs::Marker>("visualization_marker", 10);//initialize marker publisher

然后是填充消息各个字段的内容。

marker.header.frame_id = "livox_frame"

用于表示和此数据关联的帧,在坐标系变化中可以理解为数据所在的坐标系名称。

marker.ns = "my_namespace";
marker.id = 0;

id和命名空间关联起来,形成唯一的id,用于将各个标志物区分开来。我这里只显示一个标志物,id为0就可以了。

marker_.type = visualization_msgs::Marker::CUBE;

标志物的形状类型,可供选择的类型有很多,譬如:
uint8 ARROW=0//箭头
uint8 CUBE=1//立方体
uint8 SPHERE=2//球
uint8 CYLINDER=3//圆柱体
uint8 LINE_STRIP=4//线条(点的连线)
uint8 LINE_LIST=5//线条序列
uint8 CUBE_LIST=6//立方体序列
uint8 SPHERE_LIST=7//球序列
uint8 POINTS=8//点集
uint8 TEXT_VIEW_FACING=9//显示3D的文字
uint8 MESH_RESOURCE=10//网格
uint8 TRIANGLE_LIST=11//三角形序列

//set marker position
marker_.pose.position.x = 0;
marker_.pose.position.y = 0;
marker_.pose.position.z = 0;

标志物在坐标系中的位置。

//set marker scale
marker_.scale.x = 2.0; //m
marker_.scale.y = 2.0;
marker_.scale.z = 2.0;

标志物在各个方向上的尺寸,这里以m为单位。

//decide the color of the marker
marker_.color.a = 1.0; // Don't forget to set the alpha!
marker_.color.r = 0.0;
marker_.color.g = 1.0;
marker_.color.b = 0.0;

设置颜色,但是要注意这里还有一个透明度(marker_.color.a)的设置。

//set marker action
marker_.action = visualization_msgs::Marker::ADD;

对标志物的动作,有一下几种:

uint8 ADD=0

uint8 MODIFY=0

uint8 DELETE=2

uint8 DELETEALL=3

marker_.lifetime = ros::Duration(); //(sec,nsec),0 forever

标志物显示持续的时间,roscpp 里有两种时间表示方法:时刻 (ros::Time) 和时长(ros::Duration)。其中Duration可以是负数。

ros::Duration::Duration(uint32_t _sec, uint32_t _nsec)

ros::Duration::Duration(double t)

//_sec是秒,_nsec是纳秒

定义完了消息,我们就可以发布消息了。这里我仅仅发布了一次消息,让标志物永久显示。最后在rviz上看到的标志物就是下面这个样子的。

【参考文献】
https://www.jianshu.com/p/acbe1b8631dc

https://blog.csdn.net/zhanghm1995/article/details/84644984

https://blog.csdn.net/u013834525/article/details/80447931

【可视化】娱乐一下,rviz上画个3D框相关推荐

  1. html中矩形坐标,js怎么根据坐标在图片上画出矩形框?

    如图本地上传的图片,并点击获取到这个图片里每个地方的坐标,根据4个角坐标在图片上画出矩形框,该怎么画?大神支招. 我图片是显示在div里的,是不是应该用canvas显示图片? 代码: Document ...

  2. 【目标检测】在图像上画bounding box框,生成带真实标签gt的图片

    [目标检测]在图像上画bounding box框,生成带真实标签gt的图片 问题/Motivation 数据格式 用到的库 实际代码` 结果展示 问题/Motivation 在制作完数据集后,想看一下 ...

  3. Matlab 在图片上画虚线矩形框

    matlab在图片上rectangle详解 Rectangle 属性 矩形的外观和行为 矩形属性控制矩形对象的外观和行为.通过更改属性值,您可以修改矩形的特定方面.使用圆点表示法查询和设置属性. h ...

  4. Cesium在地球上添加一个3D立方体

    接此: https://blog.csdn.net/bcbobo21cn/article/details/110300047 var redBox = viewer.entities.add({nam ...

  5. label和velodyne数据通过mayavi在点云图上画3D标注框并可视化

    公司的label和velodyne数据参考自kitti数据集格式,算法主要集成自pointpillar+second,但只做雷达数据,没有kitti中各种相机的配合,所以不需要calib文件,这时就需 ...

  6. VR线上智能园区3D可视化电子沙盘工厂大数据平台

    随着"一带一路"的成功建设以及"全球科技化4.0"的到来.使得我国经济快速发展,同时VR线上3D展示与电子沙盘3D可视化技术随着高兴技术产业的不断发展,商迪3D ...

  7. 3D建模可视化公司VR线上全景展厅

    现如今传统的平面房产展示已经难以满足客户的需求了,疫情当下VR线上虚拟展厅无疑是当下最受关注的一项技术,VR全景线上展示是基于虚拟现实3D可视化技术结合3D全景建模去还原真实场景.可在Web端720° ...

  8. matplotlib柱状图上方显示数据_可视化技能之Matplotlib(上)|可视化系列01

         作者:蜇虫适航      来源:蜇虫适航 Matplotlib可以说是Python最声名远扬的可视化库了,也是Python数据分析库的"三驾马车"之一.Matplotli ...

  9. matlab绘制棒棒糖,可视化技能之Matplotlib(上)|可视化系列01

    简介 Matplotlib可以说是Python最声名远扬的可视化库了,也是Python数据分析库的"三驾马车"之一.Matplotlib是基础而非常强大的可视化库,Seaborn等 ...

最新文章

  1. 一张图看懂华为2018年年报
  2. 一个电脑能装几块固态_花了20000块给电脑升级了磁盘阵列,速度达到10G连续读写...
  3. 淘宝用了mysql,您呢?
  4. 树形结构:使用栈实现,快排,先序遍历,归并排序,后序遍历
  5. 判断一个int数组中的元素是否存在重复
  6. 【读书笔记】--- 《码出高效:java开发手册》
  7. 指点聚源码论坛全站源码 WordPress内核
  8. “智享未来 知行合一”,开为科技助力企业开启人工智能新时代
  9. Linux下ip route、ip rule、iptables的关系(转
  10. html中怎么让图片做背景透明背景图片,透明背景图片怎么做?
  11. 3U VPX高性能数据处理板(XC7K325T FMC载板)
  12. 相机存储卡不小心格式化怎么恢复呢?
  13. 街篮中服务器维修什么时候能结束,街头篮球手游1月6日微信iOS维护公告 服务器扩容...
  14. 关键20小时,快速学会任何技能
  15. Win10如何取消开机密码?Win10取消开机密码步骤
  16. strong标签和b标签,dfn标签,abbr和acronym标签,em和i标签完整介绍
  17. IDEA 断点调试,为啥断点没有起作用
  18. 齐岳定制1, 8-萘酰亚胺类荧光化合物,基于萘酰亚胺的fluorogenic荧光探针,双光子、内质网ER靶向双光子荧光探针NI-OPD
  19. 文献《MDA: A Formal Approach to Game Design and Game Research 》笔记整理
  20. Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布

热门文章

  1. 自己动手写一个分库分表中间件(三)数据源路由实现
  2. JAVA中的延时队列DelayQueue
  3. 豆瓣电影api接口数据
  4. 【PyTorch深度学习实践】08_Softmax分类器(多分类)
  5. 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...
  6. 独立开发变现周刊(第39期):在线表情包生成器,月流览量1千2百万
  7. Lichee_RV学习系列---认识Lichee Rv Dock、环境搭建和编译第一个程序
  8. Mythtype公式对齐和分栏分节符后删除空白页
  9. Java调用阿里OCR接口实现印刷文字识别
  10. 内卷时代,华为云引领移动办公新潮流