【问题标题】:How to use streamlit in ROS?如何在 ROS 中使用 streamlit?
【发布时间】:2021-07-26 15:32:11
【问题描述】:

我有一个用 Python 编写的 ROS 节点,它捕获消息并将它们写入磁盘,但我还需要通过 Web 界面可视化我的数据。我是一位经验丰富的 Streamlit 用户,但我找不到在 ROS 中使用此库的合适方法。在 Streamlit 中运行我们的代码,有命令:“streamlit run FILENAME.py”

但在 ROS 中,为了订阅 ROS 节点,我需要使用 rosrun 或 roslaunch 运行我的 python 文件。

知道如何一起使用这些库吗? 操作系统:Ubuntu 20.04 Python 3.7

【问题讨论】:

    标签: python ubuntu ros streamlit


    【解决方案1】:

    这里有一个非常基本的例子,说明如何结合streamlit使用ROS订阅和发布。在此示例中,当输入文本字段更改时,字符串将发布到 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())
    

    执行:

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

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2022-12-13
      • 1970-01-01
      相关资源
      最近更新 更多