2014-11-03 130 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()中調用它。