DroneKit教程(六):继承和自定义Vehicle类
DroneKit的Vehicle类内置了许多基于MAVLink消息的属性数据,但同时也有许多属性数据没有被支持。有时,为了支持我们的需求,我们可以创建一个继承自dronekit.Vehicle
的子类,在保持库代码完整的同时添加其他特性。
编程示例
编程示例将展示如何创建并使用一个自定义的Vehicle类。之后将详细讲解每一部分的功能和用法。
从DroneKit的Vehicle类创建My_Vehicle
文件命名为my_dronekit.py
from dronekit import Vehicle
from pymavlink.dialects.v10 import ardupilotmega
import time
'''
Class name: My_Vehicle
Description: subclass of class dronekit.Vehicle. This class if for Optical Flow +
Range Finder indoor mission drones.
'''
class My_Vehicle(Vehicle):
def __init__(self, *args):
super(My_Vehicle, self).__init__(*args)
self._ekf_predposhorizrel = False
@self.on_message('EKF_STATUS_REPORT')
def listener(self, name, msg):
# boolean: EKF's predicted horizontal position (relative) estimate is good
self._ekf_predposhorizrel = (msg.flags & ardupilotmega.EKF_PRED_POS_HORIZ_REL) > 0
self.notify_attribute_listeners('is_armable', self.is_armable, cache=True)
@self.on_attribute('is_armable')
def listener(self, name, msg):
print '%s is : %s' % (name, msg)
'''
Property name: is_armable
Description: override the is