在运行时接受可选输入
Accept optional input at runtime
目前我正在 python 中编写一个机器人操作系统 (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();
如果您在 Python 中找不到直接执行此操作的方法,一个简单的解决方案是将用户输入移动到另一个节点:
- 第一个节点(我们称它为"user input node")基本上看起来像您发布的代码,但是直接将
input
的值发布到主题/user_input
.
- 第二个节点("start/stop node")循环发布"Start"/"Stop",具体取决于标志。此标志由监听
/user_input
. 的回调设置
这样,start/stop 节点始终根据用户输入进行发布,无需等待新输入,而用户始终可以通过用户输入节点发送新值来更改标志。
此解决方案很容易实施,但缺点是需要在您的设置中增加一个节点。
目前我正在 python 中编写一个机器人操作系统 (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();
如果您在 Python 中找不到直接执行此操作的方法,一个简单的解决方案是将用户输入移动到另一个节点:
- 第一个节点(我们称它为"user input node")基本上看起来像您发布的代码,但是直接将
input
的值发布到主题/user_input
. - 第二个节点("start/stop node")循环发布"Start"/"Stop",具体取决于标志。此标志由监听
/user_input
. 的回调设置
这样,start/stop 节点始终根据用户输入进行发布,无需等待新输入,而用户始终可以通过用户输入节点发送新值来更改标志。
此解决方案很容易实施,但缺点是需要在您的设置中增加一个节点。