2014-11-10 10 views
-1

페이지에서 파이썬 스크립트를 실행하기위한 특별한 프레임이었던 온라인 코스를 하나하고있었습니다. 이 연습의 내 과제는 주행 거리계를 계산하는 것이고 속도는 주어졌습니다.초보자 python 스크립트, odometry

페이지에서이 스크립트는 외모 : 나는 ROS 사용하여 동일한 작업을 수행하고자하는 http://snag.gy/NTJGz.jpg 이제

:

명확한 코드는 같습니다 : https://github.com/tum-vision/autonavx_ardrone/blob/master/ardrone_python/src/example1_odometry.py

거의 같은 운동을하지만 ROS에있다 이 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() 

는 제발 올바른, 난 완전히 파이썬에 초보자입니다. 때문에 라인에서

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 

은 다음과 같습니다 :

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

+0

당신이 쓰고있는 수업입니까 (제 생각 엔)? 그렇다면, 모든 코드를'def myclass :'섹션에 넣으십시오. – ha9u63ar

+1

@hagubear 당신은'class MyClass :'를 의미합니까? – jonrsharpe

+0

@jonrsharpe 예 그래요! 그 점을 지적 해 주셔서 감사합니다. 내 언어를 한 언어에서 다른 언어로 전환하는 것을 유감스럽게 생각합니다. – ha9u63ar

답변

0

당신이 게시 한 직접적인 오류 :

지금 내가 메시지를 가지고

rospy.Subscriber("/ardrone/navdata", Navdata, callback(self, t, dt, navdata)) 

self가 정의되어 있지 않습니다. rospy을 의미할까요?

+0

위의 함수에서 self.position ... – Misiek777

+0

위의 * 정의되지 않은 이유를 이해하지 못한다.'self'가 매개 변수로 전달됩니다. – pjz

+0

예, 삭제해야합니까? 나는 이것을 콜백에 사용한다. 내 낮은 파이썬 기술에 대한 미안 해요. :( – Misiek777

1

그냥 "자기"인수가 없으므로 필요하지 않습니다. 다음 줄을 시도해보십시오

rospy.Subscriber("/ardrone/navdata", Navdata, callback(t, dt, navdata)) 

자기 (자바 또는 C++에서이 포인터와 유사) 클래스 멤버 필드이기 때문에 당신이있어 오류이며, 따라서 귀하의 주요 기능에 그것을 해결하기 위해 이해되지 않는다.

관련 문제