【问题标题】:Accept optional input at runtime在运行时接受可选输入
【发布时间】:2016-06-14 10:24:22
【问题描述】:

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

以下 sn-p 的想法是,此 python 脚本始终提供“开始”或“停止”。另一个节点正在监听什么字符串被发布。用户应该能够在运行时输入 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();

【问题讨论】:

标签: python ros


【解决方案1】:

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

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

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

此解决方案很容易实施,但缺点是在您的设置中增加了一个节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2011-10-24
    相关资源
    最近更新 更多