繁体   English   中英

如何在ROS中使用streamlit?

[英]How to use streamlit in ROS?

我有一个用 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 Streamlit 指标每秒更新一次,当前 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())

执行:

  1. 获取您的 ros 工作空间
  2. python3 脚本名.py

你能找到解决办法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM