rviz中显示Marker标记

Marker标记的使用

本文主要涉及rviz中visualization_msgs/Marker Message,这些话题可以在rviz中可视化以观察自己数据是否符合预期。

1. roswiki上相应msg的定义

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
uint8 MESH_RESOURCE=10
uint8 TRIANGLE_LIST=11
uint8 ADD=0
uint8 MODIFY=0
uint8 DELETE=2
uint8 DELETEALL=3
Header header
string ns
int32 id
int32 type
int32 action
geometry_msgs/Pose pose
geometry_msgs/Vector3 scale
std_msgs/ColorRGBA color
duration lifetime
bool frame_locked
geometry_msgs/Point[] points
std_msgs/ColorRGBA[] colors
string text
string mesh_resource
bool mesh_use_embedded_materials

上述为roswiki上visualiztion_msgs/Marker消息的定义。

2.msg填充

以下在实际操作中对上述数据定义进行设置,首先对发布话题进行定义,确定好话题类型和话题名即可。

landmark = nh.advertise<visualization_msgs::Marker>( “visualization_marker”, 10);

visualization_msgs::Marker marker;

首先定义数据类型及变量名,类型为visualization_msgs::Marker以及visualization_msgs::MarkerArray,然后对msg进行填充

marker.header.frame_id = “map”;
marker.header.stamp = ros::Time::now();

header即是std_msgs/Header,一般需要填充数据为时间戳和与数据关联的参考系,这边设置参考系为map,时间为当前时间。
ns为命名空间,用以区分id相同的marker,id则是同一空间下不同marker的身份信息,

marker.ns = “tag”;
marker.id = 0;

marker.action = visualization_msgs::Marker::ADD

action对应的操作变量有uint8 ADD=0、uint8 MODIFY=0、uint8 DELETE=2、uint8 DELETEALL=3,即为添加、修改、删除、全部删除,type即是对应marker的类型,同样有

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
uint8 MESH_RESOURCE=10
uint8 TRIANGLE_LIST=11

同时其他数据填充与类型相关,按类如下:

2.1 ARROW

类型为箭头,需要使用geometry_msgs/Point[] points来定义箭头的起点和终点,即需要两个geometry_msgs/Point消息,points[0]为起点,points[1]为终点。
同时箭头的尺寸需要通过向量scale进行设置,scale.x是箭头柄的直径,scale.y是箭头末端的直径,scale.z表示的是箭头除柄之外的长度。color为此marker的颜色设置,color.a需要设置为1,与标记透明度相关。

marker.type = visualization_msgs::Marker::ARROW;
marker.scale.x = 0.05;
marker.scale.y = 0.08;
marker.scale.z = 0.1;
// 点为绿色
marker.color.g = 1.0f;
marker.color.a = 1.0;
geometry_msgs::Point p1, p2;
p1.x = 0;
p1.y = 0;
p1.z = 0;
p2.x = 0.1;
p2.y = 0.2;
p2.z = 0.3;
marker.points.push_back(p1) ;
marker.points.push_back(p2) ;
landmark.publish(marker) ;

发布后在rviz中显示如下:

2.2 CUBE

立方体标记需要设置其中心点的位姿,尺寸和颜色。其位姿格式为geometry_msgs/Pose,需要填充其位移和四元数。

marker.type = visualization_msgs::Marker::CUBE;
marker.pose.orientation.w = 1.0;
marker.scale.x = 0.05;
marker.scale.y = 0.08;
marker.scale.z = 0.1;
// 点为绿色
marker.color.g = 1.0f;
marker.color.a = 0.5;
landmark.publish(marker) ;

rviz中显示如下:

2.3 SPHERE、CYLINDER

设置与上述立方体类似, SPHERE标记的scale为各方向上的半径;CYLINDER标记的scale.z为指定高度,x和y为对应方向的半径。

marker.type = visualization_msgs::Marker::CYLINDER;/marker.type = visualization_msgs::Marker::SPHERE;
marker.pose.orientation.w = 1.0;
marker.scale.x = 0.05;
marker.scale.y = 0.08;
marker.scale.z = 0.1;
marker.color.g = 1.0f;
marker.color.a = 0.5;
landmark.publish(marker) ;

2.4 POINTS

使用点类型,其尺寸相关设置:scale.x是点的宽度,scale.y是点的高度。同时对geometry_msgs/Point[] points进行填充,基本类型为geometry_msgs/Point,需要设置点的空间位置。

marker.type = visualization_msgs::Marker::POINTS;
marker.pose.orientation.w = 1.0;
marker.scale.x = 0.05;
marker.scale.y = 0.08;
marker.scale.z = 0.1;
marker.color.g = 1.0f;
marker.color.a = 1;
for (int i = 0; i < 8; i++)
{
geometry_msgs::Point obj;
obj.x = 0.85 * i;
obj.y = 0.35 * i;
obj.z = 0;
marker.points.push_back(obj);
marker.colors.push_back(marker.color);
// Adding a text object here
}
landmark.publish(marker) ;

rviz中显示如下:

2.5 LINE_LIST、LINE_STRIP、CUBE_LIST、SPHERE_LIST、TRIANGLE_LIST

线带LINE_STRIP需要设置消息中的geometry_msgs/Point[] points。它会在每两个连续的点之间进行连线,如点0-1,1-2,2-3…

线列表LINE_LIST设置同上。它会在每对点间画一条线 ,0-1,2-3,4-5,即其线段不是连续的。

同时可以设置scale.x来修改上述线列表或线带的线段宽度。
三角形列表TRIANGLE_LIST和上述线列表类似,只是由每对点转为每三个点,即0-1-2,3-4-5,三个点构成一个三角形,以此作为列表单元进行显示。

同样的,立方体列表CUBE_LIST和球体列表SPHERE_LIST也是通过geometry_msgs/Point[] points进行设置,只是由点显示为立方体或者球体。

2.6 TEXT_VIEW_FACING

此标记可以在rviz中显示文本。这个文本总是随着视角变化。需要设置scale.z,其与显示文字的大小有关。同时文本位置与marker.pose有关,按实际位移和四元数进行填充即可。

marker.type = visualization_msgs::Marker::TEXT_VIEW_FACING;
marker.pose.orientation.w = 1.0;
marker.scale.z = 0.1;
marker.color.g = 1.0f;
marker.color.a = 1;
marker.text = “TEST” ;
landmark.publish(marker) ;

2.7 MESH_RESOURCE

可以通过marker显示外部三维立体模型,通常rviz支持的mesh类型(binary .stl or Ogre .mesh in 1.0, with the addition of COLLADA (.dae) in 1.1)均可以通过MESH_RESOURCE进行设置并显示。

marker.type = visualization_msgs::Marker::MESH_RESOURCE;
marker.pose.orientation.w = 1.0;
marker.scale.x = 1;
marker.scale.y = 1;
marker.scale.z = 1;
marker.color.g = 1.0f;
marker.color.a = 1;
marker.mesh_resource = “package://circleTag/data/base_link.dae”;
landmark.publish(marker) ;

在rviz中的显示如下

以上,其余具体可参考roswiki rviz

  • 13
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值