在runtim接受可选输入

2024-10-02 14:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在用python编写robot操作系统(ros)节点。我想创建一个while循环,它一方面接受用户输入,但如果没有可用的用户输入,则可以继续。在

以下代码片段的思想是,这个python脚本始终提供“start”或“stop”。另一个节点正在监听发布的字符串。用户应该能够在运行时键入0或1来切换标志。在

下面是我的python代码:

def main():
    pub = rospy.Publisher('/start_stop', String, queue_size=10)
    rospy.init_node('start_stop', anonymous = True);
    rate=rospy.Rate(10)  # 10hz
    pubStr = "Start"
    while not rospy.is_shutdown():
        try:
            input = raw_input()
            if input == "0":
                pubStr = "Stop"
            elif input == "1":
                pubStr = "Start"
        except:
            rospy.sleep(0.1)
        rospy.loginfo(pubStr)
        pub.publish(pubStr)
        rate.sleep()

if __name__ == '__main__':
    main();

Tags: 代码用户inputif节点ratemainsleep
1条回答
网友
1楼 · 发布于 2024-10-02 14:25:24

如果在Python中找不到直接执行此操作的方法,一个简单的解决方案是将用户输入移动到另一个节点:

  • 第一个节点(我们称之为“用户输入节点”)看起来基本上与您发布的代码相似,但是直接将input的值发布到主题/user_input。在
  • 第二个节点(“start/stop node”)根据标志在循环中发布“start”/“stop”。此标志由侦听/user_input的回调设置。在

这样,开始/停止节点总是根据用户输入进行发布,而无需等待新的输入,而用户始终可以通过用户输入节点发送新值来更改标志。在

这个解决方案很容易实现,但有一个缺点,即在您的设置中增加了一个节点。在

相关问题 更多 >