#!/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定义为全局变量。
发布于 2014-11-03 14:30:49
将q2声明为全局变量确实会使全局变量存在。
实际上,调用赋值语句q2 = ...的函数和执行会导致变量的创建。在此之前,代码不能访问变量。
position函数不调用position_callback,而是将其传递给rospy.Subscriber (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发布于 2014-11-03 14:34:01
您从不初始化q2。它不可能有价值。在导入之后,尝试在全局范围内定义它。然后将其称为position()函数。
https://stackoverflow.com/questions/26716133
复制相似问题