新手python脚本,odometry

时间:2014-11-10 15:52:57

标签: python robotics ros

我正在做一个在线课程,其中页面是运行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'未定义

2 个答案:

答案 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