如何删除rviz上单个marker

原文链接
在RViz中删除单个marker,可以使用以下方法:

  1. 使用marker的ID进行删除:在发布marker消息时,为每个marker设置一个唯一的ID。要删除特定的marker,可以发布一个新的marker消息,将该marker的ID设置为之前发布的marker的ID,并将其颜色设置为透明(alpha=0)。这样,RViz会将该marker视为已删除。

  2. 使用marker数组进行删除:如果你在RViz中使用了marker数组,可以通过发布一个新的marker数组消息,将不需要的marker从数组中删除,并将其颜色设置为透明。RViz会根据新的marker数组消息更新显示。

以下是一个示例代码,演示如何删除RViz中的单个marker:

#include 
#include 

int main(int argc, char** argv)
{
    ros::init(argc, argv, "marker_delete_example");
    ros::NodeHandle nh;
    ros::Publisher marker_pub = nh.advertise("visualization_marker", 1);

    // 创建一个marker消息
    visualization_msgs::Marker marker;
    marker.header.frame_id = "map";
    marker.header.stamp = ros::Time::now();
    marker.ns = "my_namespace";
    marker.id = 0;
    marker.type = visualization_msgs::Marker::SPHERE;
    marker.action = visualization_msgs::Marker::ADD;
    marker.pose.position.x = 1.0;
    marker.pose.position.y = 2.0;
    marker.pose.position.z = 0.0;
    marker.pose.orientation.x = 0.0;
    marker.pose.orientation.y = 0.0;
    marker.pose.orientation.z = 0.0;
    marker.pose.orientation.w = 1.0;
    marker.scale.x = 1.0;
    marker.scale.y = 1.0;
    marker.scale.z = 1.0;
    marker.color.r = 1.0;
    marker.color.g = 0.0;
    marker.color.b = 0.0;
    marker.color.a = 1.0;
    marker.lifetime = ros::Duration(); // 持久显示

    // 发布marker消息
    marker_pub.publish(marker);

    // 删除marker
    marker.action = visualization_msgs::Marker::DELETE;
    marker_pub.publish(marker);

    ros::spinOnce();
    return 0;
}

在上面的示例中,首先发布一个marker消息来显示一个红色的球体。然后,通过将marker的action设置为DELETE,再次发布marker消息来删除该marker。

请注意,删除marker后,RViz中可能仍然会显示一段时间的残留效果,这是由于RViz的渲染机制造成的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值