ros调试工具foxglove使用指南三:在3d空间写写画画(Panel->3D ->Scene entity)

目录

前言:

一、安装foxglove消息包(ros1)

[二、Scene entity 介绍](#二、Scene entity 介绍)

三、SceneUpdate介绍

四、实际的应用

五、代码解释

六、实验结果


前言:

如果你想要在3d空间空间里面显示一些东西,比如文字,比如一些形状,而且想控制这些东西的显示时间,那么可以使用本文提到的方法。

一、安装foxglove消息包(ros1)

参考链接:Introduction | Foxglove Docs

复制代码
sudo apt install ros-noetic-foxglove-msgs

二、Scene entity 介绍

参考链接:3D | Foxglove Docs

一组基本形状(立方体、球体、文本、网格、线条等),用于显示从基本边界框到复杂的3D决策树或道路网络的任何内容。

Scene entity必须包装在SceneUpdate消息中。下面文档中Scene entity介绍的具体位置。

三、SceneUpdate介绍

参考连接: SceneUpdate | Foxglove Docs

SceneUpdate的数据结构如下, 里面有两个属性,entities和deletions,其中entities是用来显示物体的,deletions使用来删除物体的。这里重点介绍entities,是一个SceneEntity的列表,代表SceneUpdate可以一下子显示多个物体。

四、实际的应用

参考连接:SceneEntity | Foxglove Docs

TextPrimitive | Foxglove Docs

我想使用ros1在3d空间里面的某一个位置,显示一些文字。Scene entity的数据结构如下,显示一定的时间,我需要利用的是frame_id, life_time,texts。texts的数据结构如下面的第二幅截图。

五、代码解释

python 复制代码
#!/usr/bin/env python
import rospy
from foxglove_msgs.msg import SceneUpdate, SceneEntity
from foxglove_msgs.msg import TextPrimitive  # 导入 TextPrimitive
from rospy import Duration  # 导入 Duration 用于设置生命周期
import time


def publish_text(text, publisher):
    """
    发布包含指定文本的 SceneUpdate 消息
    :param text: 要发布的文本信息
    :param publisher: 消息发布者对象
    """
    msg = SceneUpdate()
    entity = SceneEntity()
    text_primitive = TextPrimitive()
    text_primitive.text = text
    text_primitive.font_size = 1.0  # 设置字体大小
    text_primitive.color.r = 1.0
    text_primitive.color.g = 0.0
    text_primitive.color.b = 0.0
    text_primitive.color.a = 1.0  # 设置透明度
    text_primitive.pose.position.x = 0.0
    text_primitive.pose.position.y = 0.0
    text_primitive.pose.position.z = 2.0  # 文本在 z 轴方向上保持不变
    entity.texts.append(text_primitive)
    entity.id = "text_entity"
    entity.frame_id = "map"
    if text:
        # 设置文本显示 2 秒
        entity.lifetime = Duration(2)
    else:
        # 清空文本时生命周期设为 0
        entity.lifetime = Duration(0)
    msg.entities.append(entity)
    publisher.publish(msg)
    # if text:
    #     rospy.loginfo(f'发布文本信息: {text}')
    # else:
    #     rospy.loginfo('清空文本信息')


def main():
    rospy.init_node('text_scene_update_publisher', anonymous=True)
    # 创建发布者,发布 SceneUpdate 消息到 'text_scene_update_topic' 话题
    publisher = rospy.Publisher('text_scene_update_topic', SceneUpdate, queue_size=10)
    rate = rospy.Rate(0.5)  # 每 2 秒执行一次循环

    text_to_display = "您撞到墙上了!"
    display_duration = 10
    while not rospy.is_shutdown():
        # 发布显示文本的消息
        publish_text(text_to_display, publisher)
        # 等待 2 秒
        time.sleep(display_duration)
        # 发布清空文本的消息
        rate.sleep()


if __name__ == '__main__':
    try:
        main()
    except rospy.ROSInterruptException:
        pass

六、实验结果

​​

相关推荐
亿牛云爬虫专家2 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
九年义务漏网鲨鱼5 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
jz_ddk5 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
蹦蹦跳跳真可爱5896 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij6 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien6 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
爱莉希雅&&&7 小时前
技术面试题,HR面试题
开发语言·学习·面试
敲键盘的小夜猫7 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12207 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
Chef_Chen8 小时前
从0开始学习计算机视觉--Day08--卷积神经网络
学习·计算机视觉·cnn