我正在做一个在线课程,其中页面是运行python脚本的特殊框架。 我在这个练习中的任务是计算里程表,给出速度。
此页面上的脚本显示为:http://snag.gy/NTJGz.jpg
现在我想使用ROS做同样的事情: 在ROS中有几乎相同的运动:
清晰代码看起来:https://github.com/tum-vision/autonavx_ardrone/blob/master/ardrone_python/src/example1_odometry.py
有些信息我应该从这个online_course版本中添加代码来进行函数回调,我试试,但它不起作用。
我的代码:
#!/usr/bin/env python
#ROS
import rospy
import roslib; roslib.load_manifest('ardrone_python')
from ardrone_autonomy.msg import Navdata
import numpy as np
def __init__(self):
self.position = np.array([[0], [0]])
def rotation_to_world(self, yaw):
from math import cos, sin
return np.array([[cos(yaw), -sin(yaw)], [sin(yaw), cos(yaw)]])
def callback(self, t, dt, navdata):
self.position = self.position + dt * np.dot(self.rotation_to_world(navdata.rotZ), np.array([[navdata.vx], [navdata.vy]]))
print("received odometry message: vx=%f vy=%f z=%f yaw=%f"%(navdata.vx,navdata.vy,navdata.altd,navdata.rotZ))
print(self.position)
if __name__ == '__main__':
rospy.init_node('example_node', anonymous=True)
# subscribe to navdata (receive from quadrotor)
rospy.Subscriber("/ardrone/navdata", Navdata, callback(self, t, dt, navdata))
rospy.spin()
请纠正我,我对python完全是新手。
现在我收到了消息:
回溯(最近一次调用最后一次):文件“./example1_odometry.py”, 第28行,在 rospy.Subscriber(“/ ardrone / navdata”,Navdata,callback(self,t,dt,navdata))NameError:名称'self'未定义
答案 0 :(得分:1)
只需省略" self"论证,不需要。尝试下一行:
rospy.Subscriber("/ardrone/navdata", Navdata, callback(t, dt, navdata))
你得到的错误是因为self是一个类成员字段(类似于java或c ++中的this指针),因此在你的main函数中解决它是没有意义的。
答案 1 :(得分:0)
您发布的直接错误:
Traceback (most recent call last): File "./example1_odometry.py", line 28, in rospy.Subscriber("/ardrone/navdata", Navdata, callback(self, t, dt, navdata)) NameError: name 'self' is not defined
是因为在行中:
rospy.Subscriber("/ardrone/navdata", Navdata, callback(self, t, dt, navdata))
self
未定义。你的意思可能是rospy
?