[英]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())
执行:
你能找到解决办法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.