Я делал один онлайн-курс, где на странице был специальный фрейм для запуска скрипта python. Моя задача в этом упражнении состояла в том, чтобы вычислить одометрию, даны скорости.Newbie python script, odometry
Этот скрипт на странице выглядит: http://snag.gy/NTJGz.jpg
Теперь я хотел бы сделать то же самое с помощью РОС: есть почти то же самое упражнение, но в 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.
Теперь я получил сообщение:
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
Это класс, который вы пишете (я думаю, это так)? Если да, тогда поместите весь свой код в раздел 'def myclass:'. – ha9u63ar
@hagubear вы имеете в виду 'класс MyClass:', правильно? – jonrsharpe
@jonrsharpe да я! Спасибо что подметил это. извините, пытаясь переключить мой мозг с одного языка на другой. – ha9u63ar