gpt4 book ai didi

python - 如何在 ROS 中使用 streamlit?

转载 作者:行者123 更新时间:2023-12-04 18:39:01 30 4
gpt4 key购买 nike

我有一个用 Python 编写的 ROS 节点,它捕获消息并将它们写入磁盘,但我还需要通过 Web 界面可视化我的数据。我是一位经验丰富的 Streamlit 用户,但我找不到在 ROS 中使用此库的合适方法。在 Streamlit 中运行我们的代码,有命令:“streamlit run FILENAME.py”
但是在 ROS 中,为了从 ROS 节点订阅,我需要使用 rosrun 或 roslaunch 运行我的 python 文件。
知道如何一起使用这些库吗?
操作系统:Ubuntu 20.04
python 3.7

最佳答案

这是一个非常基本的示例,说明如何结合使用 ROS 订阅和发布与 streamlit。在这个例子中,一个字符串被发布到 rostopic /mystring当输入文本字段更改时。流光指标每秒更新一次,当前 Int32 值发布到 rostopic /mynumber python 代码:

from streamlit import cli as stcli
import streamlit as st
import rospy
from std_msgs.msg import String, Int32
import sys
import time

mynum=0
mydelta=0

def callback(data):
global mydelta, mynum
mydelta=mynum-data.data
mynum=data.data
#rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

def getData():
return mynum, mydelta

rospy.init_node('my_streamlit_ros_node')
pub = rospy.Publisher('/mystring', String, queue_size=10)
rospy.Subscriber("mynumber", Int32 , callback)


def main():
st.title('Streamlit APP:')
st.subheader('Commuicating with ROS')
mytext = st.text_input('Send String to ROS', 'Life of Brian')
pub.publish(mytext)
metrics = st.empty()
while True:
mynum, mydelta=getData()
with metrics:
st.metric(label="Get Int32 Number from ROS", value=mynum, delta=mydelta, delta_color="inverse")
time.sleep(1)

if __name__ == '__main__':
if st._is_running_with_streamlit:
main()
else:
sys.argv = ["streamlit", "run", sys.argv[0]]
sys.exit(stcli.main())
执行:
  • 获取你的 ros 工作空间
  • python3 scriptname.py
  • 关于python - 如何在 ROS 中使用 streamlit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67382181/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com