目前我在python中编写一个机器人操作系统(ros)节点。我想创建一个while循环,它一方面接受用户输入,但如果没有用户输入可以继续。
以下片段的概念是,这个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();
答案 0 :(得分:1)
如果您没有找到直接在Python中执行此操作的方法,一个简单的解决方案是将用户输入移动到另一个节点:
input
的值发布到主题/user_input
。/user_input
。这样,开始/停止节点总是根据用户输入发布,而不等待新输入,而用户总是可以通过用户输入节点发送新值来更改标志。
此解决方案易于实施,但在您的设置中还有一个额外节点的缺点。