#!/usr/bin/env python
import roslib
import rospy
import time
from nav_msgs.msg import Odometry
def position_callback(data):
global q2
q2=data.pose.pose.position.x
q1=data.pose.pose.position.y
q3=data.pose.pose.position.z
def position():
rospy.init_node('position', anonymous=True) #initialize the node"
rospy.Subscriber("odom", Odometry, position_callback)
if __name__ == '__main__':
try:
position()
print q2
rospy.spin()
except rospy.ROSInterruptException: pass
我得到的错误是这样的:
print q2
NameError: global name 'q2' is not defined
我已将q2
定义为全局变量。
答案 0 :(得分:2)
将q2
声明为全局变量会使全局变量存在。
实际上调用赋值语句q2 = ...
的函数和执行会导致变量的创建。在此之前,代码无法访问变量。
position
函数不会调用position_callback
,而是将其传递给rospy.Subscriber
(可能会注册回调函数,而不是直接调用它)。
如果要在设置变量之前访问变量,请初始化q2
。
q2 = None
def position_callback(data):
global q2
q2 = data.pose.pose.position.x
q1 = data.pose.pose.position.y
q3 = data.pose.pose.position.z
答案 1 :(得分:0)
您永远不会初始化q2
。它没有价值。尝试在全局范围内定义它 - 在导入之后。然后在函数position()
内调用它。