导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    如何删除rviz上单个marker

    技术交流
    2
    2
    1303
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • yolic
      yolic 最后由 编辑

      尝试了marker::DELETE,还有lifetime,都没有用,有dalao有解决方案吗?

      小助理 1 条回复 最后回复 回复 引用 0
      • 小助理
        小助理 @yolic 最后由 编辑

        在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 条回复 最后回复 回复 引用 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2015-2023 BlueWhale community