2014-11-03 132 views
1
#!/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全局变量了。

回答

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 
+0

no.i想要实际访问值..不适合打印..我想在一些其他功能中使用此值。 – 2014-11-03 14:36:31

+0

@RuthvikVaila,如果要在调用回调之前访问变量,请将变量'q2'初始化为表示空值的某个值。我相应地更新了答案。 – falsetru 2014-11-03 14:39:10

0

您从不初始化q2。它不能有价值。尝试在全局范围内定义它 - 在导入之后。然后在函数position()中调用它。