当前位置:   article > 正文

Tello无人机py库函数解析_djitellopy

djitellopy

本文我们针对 djitellopy中的一些和函数进行详细学习

1) 与任务标识板有关的函数

任务标识板(Mission Pad) 是一种用于在机器人和无人机领域进行位置感知和导航的视觉标识工具。任务标识板通常由特定的图案、形状或编码组成,可以被机器人或无人机的视觉系统识别和跟踪。

在 Tello EDU(教育版)无人机中,任务标识板用于支持特定的教育和编程应用。通过启用任务标识板功能,Tello EDU 可以使用内置的视觉传感器来识别和定位特定的标识板。这样,用户可以设计编码的任务,通过控制无人机在不同的任务标识板之间进行移动、执行动作或响应特定的场景。

任务标识板在教育、编程和研究领域有广泛的应用。它们可以用于教授机器人编程、计算机视觉、自主导航等概念,同时也可以用于开发各种有趣的应用和项目,如无人机比赛、自主控制任务和交互式编程学习等。

任务标识板通常由厂商提供,并配套提供相应的软件开发工具和文档,以帮助开发者和用户利用标识板进行相关的应用开发和研究。


以下是一些使用任务标识板的示例:

1. 无人机教育和编程: 在教育机构或编程学习中,使用任务标识板可以让学生学习和实践无人机编程和自主导航。例如,学生可以编写程序,让无人机通过识别任务标识板并根据标识板的位置和方向执行特定的动作,如起飞、降落、转向等。

2. 自主导航和定位: 任务标识板可以作为机器人或无人机自主导航和定位系统的一部分。通过在环境中放置任务标识板,机器人可以使用它们来确定自己的位置和方向。这对于室内导航、自主避障和精确定位等应用非常有用。

3. 无人机竞赛: 在无人机竞赛中,任务标识板经常用作比赛场地中的目标点或航点。选手需要通过识别和飞行至任务标识板来完成比赛任务,如穿越障碍、拍摄照片或收集特定的数据。

4. 交互式编程学习: 任务标识板可以用于编程学习的互动实验和项目。学生可以编写代码,让机器人或无人机根据任务标识板的位置和状态执行特定的动作或响应。这样,学生可以通过编程控制任务标识板上的机器人来进行实时互动和反馈。

这些示例只是任务标识板应用的一部分。实际上,任务标识板在机器人和无人机领域有着广泛的应用,包括教育、研究、娱乐等领域。通过任务标识板,可以提供更丰富的编程和交互体验,以及实现各种创新的应用和项目。


def enable_mission_pads(self):
    """启用任务标识板检测
    """
    self.send_control_command("mon")

  • 1
  • 2
  • 3
  • 4
  • 5

enable_mission_pads(self)方法用于启用任务标识板检测。通过调用此方法,你可以让 Tello 开始检测任务标识板。

在方法内部,它通过调用send_control_command方法向 Tello 发送控制命令,命令为 "mon"


def disable_mission_pads(self):
    """禁用任务标识板检测
    """
    self.send_control_command("moff")

  • 1
  • 2
  • 3
  • 4
  • 5

disable_mission_pads(self) 方法用于禁用任务标识板检测。通过调用此方法,你可以让 Tello 停止检测任务标识板。

在方法内部,它通过调用 ·send_control_command ·方法向 Tello 发送控制命令,命令为 "moff"


def get_mission_pad_id(self) -> int:
    """获取当前检测到的任务标识板的任务标识ID。
    仅适用于启用任务标识板的 Tello EDU 版本。
    返回值:
        int: 如果没有检测到任务标识板,则返回 -1,否则返回 1-8。
    """
    return self.get_state_field('mid')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

get_mission_pad_id(self)方法用于获取当前检测到的任务标识板的任务标识ID仅当使用 Tello EDU 版本并调用 enable_mission_pads 方法后,才可用。

如果当前没有检测到任务标识板,则该方法返回 -1。如果检测到任务标识板,则返回值为 1-8,表示任务标识板的标识ID。

该方法通过调用 get_state_field 方法并传入字段名称 ‘mid’,从 Tello 对象的状态中获取任务标识ID。


def get_mission_pad_distance_x(self) -> int:
    """获取到当前任务标识板的 X 轴距离。
    仅适用于启用任务标识板的 Tello EDU 版本。
    返回值:
        int: 距离(单位:厘米)
    """
    return self.get_state_field('x')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

get_mission_pad_distance_x(self) 方法用于获取到当前任务标识板的 X 轴距离。仅当使用 Tello EDU 版本并调用 enable_mission_pads 方法后,才可用。

该方法返回一个整数值,表示距离,单位为厘米。

方法内部通过调用get_state_field方法并传入字段名称 ‘x’,从 Tello 对象的状态中获取到 X 轴距离。


def set_mission_pad_detection_direction(self, x):
    """设置任务标识板检测方向。首先需要调用 enable_mission_pads。
    当同时检测两个方向时,检测频率为10Hz,否则检测频率为20Hz。
    参数:
        x: 0 只向下检测,1 只向前检测,2 同时检测两个方向
    """
    self.send_control_command("mdirection {}".format(x))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

set_mission_pad_detection_direction(self, x) 方法用于设置任务标识板检测的方向。 首先需要调用 enable_mission_pads 方法。当同时检测两个方向时,检测频率为10Hz,否则检测频率为20Hz。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 "mdirection {}".format(x),其中 {} 是检测方向的参数(0 只向下检测,1 只向前检测,2 同时检测两个方向)。
该方法的参数 x 可以设置为以下值:

0:只向下检测。Tello 只会检测位于下方的任务标识板。
1:只向前检测。Tello 只会检测位于前方的任务标识板。
2:同时检测两个方向。Tello 会同时检测位于下方和前方的任务标识板。
通过设置不同的检测方向,可以根据具体的应用场景和需求,控制 Tello 对任务标识板的检测行为。

例如,当需要 Tello 沿着特定路径飞行并识别前方的任务标识板时,可以将检测方向设置为 1,让 Tello 只检测位于前方的任务标识板。这样,Tello 将会根据识别到的标识板执行相应的动作或调整飞行路径。

总之,set_mission_pad_detection_direction 方法可以用于控制 Tello 对任务标识板的检测方向,以实现不同的应用场景和飞行任务。


def go_xyz_speed_mid(self, x: int, y: int, z: int, speed: int, mid: int):
    """相对于带有标识符 mid 的任务标识板飞行到 x y z。
    速度定义了以 cm/s 为单位的飞行速度。
    参数:
        x: -500-500
        y: -500-500
        z: -500-500
        speed: 10-100
        mid: 1-8
    """
    cmd = 'go {} {} {} {} m{}'.format(x, y, z, speed, mid)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这个方法用于使 Tello 相对于带有标识符mid的任务标识板飞行到指定的 x、y、z 坐标。通过调用此方法,你可以控制 Tello 相对于指定的任务标识板飞行到指定的目标位置。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'go {} {} {} {} m{}'.format(x, y, z, speed, mid),其中 {} 分别是 x、y、z 坐标、飞行速度和任务标识板的标识符。


def curve_xyz_speed_mid(self, x1: int, y1: int, z1: int, x2: int, y2: int, z2: int, speed: int, mid: int):
    """在曲线上通过 x2 y2 z2 飞行到 x2 y2 z2。速度定义了以 cm/s 为单位的飞行速度。

    - 两个点相对于带有标识符 mid 的任务标识板。
    - 当前位置和两个点必须形成一个圆弧。
    - 如果圆弧半径不在0.5-10米范围内,将引发异常
    - x1/x2、y1/y2、z1/z2 不能同时在-20-20之间,但可以同时为0。

    参数:
        x1: -500-500
        y1: -500-500
        z1: -500-500
        x2: -500-500
        y2: -500-500
        z2: -500-500
        speed: 10-60
        mid: 1-8
    """
    cmd = 'curve {} {} {} {} {} {} {} m{}'.format(x1, y1, z1, x2, y2, z2, speed, mid)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • curve_xye_speed_mid(x1, y1, z1, x2, y2, z2, speed, mid)方法用于使 Tello 通过曲线路径从带有标识符 mid 的任务标识板飞行到指定的 x2、y2、z2 坐标。通过调用此方法,你可以控制 Tello 沿着曲线路径飞行到指定的目标位置。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'curve {} {} {} {} {} {} {} m{}'.format(x1, y1, z1, x2, y2, z2, speed, mid),其中 {} 分别是起点和终点的 x、y、z 坐标、飞行速度和任务标识板的标识符。

注意,当前位置和两个点必须形成一个圆弧。如果圆弧的半径不在0.5-10米的范围内,将引发异常。此外,x1/x2、y1/y2、z1/z2 不能同时在-20-20之间,但可以同时为0。


def go_xyz_speed_yaw_mid(self, x: int, y: int, z: int, speed: int, yaw: int, mid1: int, mid2: int):
    """相对于 mid1 飞行到 x y z。
    然后在 mid2 上方飞行到 0 0 z,并绕 mid2 的旋转轴旋转到指定的偏航角。
    速度定义了以 cm/s 为单位的飞行速度。
    参数:
        x: -500-500
        y: -500-500
        z: -500-500
        speed: 10-100
        yaw: -360-360
        mid1: 1-8
        mid2: 1-8
    """
    cmd = 'jump {} {} {} {} {} m{} m{}'.format(x, y, z, speed, yaw, mid1, mid2)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • go_xyz_speed_yaw_mid(x,y,z,speed,yaw,mid1,mid2)方法使 Tello 相对于任务标识板 mid1 飞行到指定的 x、y、z 坐标。然后,它在 mid2 上方飞行到 0、0、z,并绕 mid2 的旋转轴旋转到指定的偏航角。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'jump {} {} {} {} {} m{} m{}'.format(x, y, z, speed, yaw, mid1, mid2),其中 {} 分别是 x、y、z 坐标、飞行速度、偏航角和任务标识板的标识符。


2)无人机数据获取函数


def get_roll(self) -> int:
    """获取滚转角度(单位:度)
    返回值:
        int: 滚转角度(单位:度)
    """
    return self.get_state_field('roll')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • get_roll() 方法用于获取当前的滚转角度,即飞行器绕纵轴(X轴)旋转的角度。 滚转角度通常用于描述飞行器的横滚姿态,以及它相对于水平面的倾斜程度。

该方法返回一个整数值,表示滚转角度,单位为度。

方法内部通过调用 get_state_field 方法并传入字段名称 ‘roll’,从飞行器对象的状态中获取滚转角度的值。


def get_yaw(self) -> int:
    """获取偏航角度(单位:度)
    返回值:
        int: 偏航角度(单位:度)
    """
    return self.get_state_field('yaw')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • get_yaw 该方法用于获取当前的偏航角度,即飞行器绕竖直轴(Z轴)旋转的角度。 偏航角度通常用于描述飞行器的航向姿态,以及它相对于参考方向的偏转程度。

该方法返回一个整数值,表示偏航角度,单位为度。

方法内部通过调用 get_state_field 方法并传入字段名称 ‘yaw’,从飞行器对象的状态中获取偏航角度的值。


def get_acceleration_z(self) -> float:
    """获取Z轴加速度
    返回值:
        float: 加速度
    """
    return self.get_state_field('agz')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • get_acceleration_z() 方法用于获取当前的Z轴方向的加速度。 Z轴通常指向垂直于地面的方向,因此Z轴加速度可以用于描述飞行器在垂直方向上的加速或减速情况。

该方法返回一个浮点数值,表示Z轴方向的加速度

方法内部通过调用 get_state_field 方法并传入字段名称 'agz',从飞行器对象的状态中获取Z轴加速度的值。


def get_lowest_temperature(self) -> int:
    """获取最低温度
    返回值:
        int: 最低温度(单位:摄氏度)
    """
    return self.get_state_field('templ')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • get_lowest_temperature() 方法用于获取当前的最低温度。 最低温度可以是环境温度、设备温度或其他特定温度的度量。

该方法返回一个整数值,表示最低温度,单位为摄氏度。

方法内部通过调用 get_state_field 方法并传入字段名称 'templ',从设备对象的状态中获取最低温度的值。


def get_height(self) -> int:
    """获取当前高度(单位:厘米)
    返回值:
        int: 高度(单位:厘米)
    """
    return self.get_state_field('h')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • get_height() 方法用于获取当前的飞行高度,即飞行器相对于起始位置的垂直距离。它返回一个整数值,表示高度,单位为厘米。

在调用这个方法时,它会通过调用get_state_field方法并传入参数 ‘h’ 来获取状态字段中存储的高度值。


TOF (Time of Flight) 传感器 是一种测量物体与传感器之间距离的传感器技术。它通过测量从传感器发射的光脉冲或声波信号到达物体并返回的时间来确定物体与传感器之间的距离。

TOF 传感器通常使用红外光、激光或声波等方式来发射信号。传感器会记录信号发射后经过的时间,然后根据光或声波的速度计算出距离。通过不断发送和接收信号,并测量时间往返的差异,TOF 传感器可以精确测量物体与传感器之间的距离。

TOF 传感器具有许多应用领域,包括但不限于以下方面:

  • 飞行器导航与避障:TOF 传感器可用于飞行器的高度测量、地面识别和避障,帮助飞行器实现精确定位和安全飞行。
  • 人机交互:TOF 传感器可用于人机交互界面,如手势识别、姿势控制和触摸替代技术。
  • 工业自动化:TOF 传感器可用于机器人、自动导航车辆和生产线上的物体检测、定位和避障。
  • 距离测量和检测:TOF 传感器广泛应用于测距仪、安全系统、无人驾驶汽车、虚拟现实设备等领域。

TOF 传感器在测量距离方面具有高精度、快速响应和适应多种环境的优势。它们在许多领域中发挥着重要的作用,为许多应用提供了精确的距离测量和感知能力。


def get_distance_tof(self) -> int:
    """获取来自 TOF(Time of Flight)的当前距离值(单位:厘米)
    返回值:
        int: TOF 距离(单位:厘米)
    """
    return self.get_state_field('tof')


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • get_distance_tof() 方法用于获取当前从 TOF(Time of Flight)传感器获取的距离值。TOF传感器通过测量光或声波的时间往返来确定物体与飞行器之间的距离。该方法返回一个整数值,表示距离,单位为厘米。

在调用这个方法时,它会通过调用 get_state_field 方法并传入参数 'tof'来获取状态字段中存储的 TOF 距离值。

需要注意的是,使用这个方法前需要确保已经连接并与飞行器进行通信,并且飞行器上搭载了 TOF 传感器。同时,根据你的使用环境和需求,你可能还需要进行适当的错误处理和异常处理。


def get_barometer(self) -> int:
    """获取当前的气压计测量值(单位:厘米)
    这类似于绝对高度。
    参考:https://en.wikipedia.org/wiki/Altimeter
    返回值:
        int: 气压计测量值(单位:厘米)
    """
    return self.get_state_field('baro') * 100

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • get_barometer() 方法用于获取当前的气压计测量值,它反映了飞行器的绝对高度。气压计通过测量大气压力变化来推断飞行器相对于参考高度的高度差。该方法返回一个整数值,表示高度,单位为厘米。

在调用这个方法时,它会通过调用 get_state_field 方法并传入参数 'baro' 来获取状态字段中存储的气压计测量值。

需要注意的是,该函数返回的值乘以了100,以将气压计测量值从米转换为厘米。
请注意,实际的高度计测量和解释可能因具体的飞行器和环境而有所不同。因此,在使用这个函数时,请确保已正确配置和校准相关的传感器,并理解高度计的工作原理和限制。


def get_flight_time(self) -> int:
    """获取电机活跃时间,即飞行时间(单位:秒)
    返回值:
        int: 飞行时间(单位:秒)
    """
    return self.get_state_field('time')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • get_flight_time() 方法用于获取电机活跃的时间,即飞行时间。它返回一个整数值,表示电机活跃的时间,单位为秒。

在调用这个方法时,它会通过调用 get_state_field 方法并传入参数 'time' 来获取状态字段中存储的飞行时间值。

飞行时间是指自飞行器电机启动以来的累计时间。它不包括飞行器处于非活跃状态(例如关机或待机)的时间。

请注意,在使用这个函数时,你需要确保已经开始飞行并启动了飞行器的电机。


3)无人机飞行动作控制函数

def connect(self, wait_for_state=True):
    """进入SDK模式。在调用任何控制函数之前调用此函数。
    """
    self.send_control_command("command")

  • 1
  • 2
  • 3
  • 4
  • 5
  • connect() 方法用于将无人机切换到SDK模式。在调用其他控制函数之前,你需要先调用这个函数。

在方法内部,它通过调用 send_control_command 方法发送控制命令 "command" 给无人机。这个命令告诉无人机进入SDK模式,并准备接受后续的控制指令。

需要注意的是,通过调用这个函数,你必须确保与无人机建立了有效的连接。在建立连接后,调用此函数将无人机切换到SDK模式,以便你可以使用库提供的其他控制函数进行飞行和操作。

如果 wait_for_state 参数设置为 True(默认值),则函数会等待无人机进入SDK模式后才返回。如果设置为 False,函数将立即返回,而无人机是否已进入SDK模式将取决于通信和无人机响应的时间。

请注意,在调用此函数之前,你可能需要进行必要的连接和初始化步骤,如确保与无人机建立了通信连接、初始化相关的参数和传感器等。

connect()函数是连接无人机和进入SDK模式的重要一步,确保在调用其他控制函数之前先进行连接。

def initiate_throw_takeoff(self):
    """允许你在此命令后的5秒内通过抛掷无人机来起飞
    """
    self.send_control_command("throwfly")
    self.is_flying = True

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • initiate_throw_takeoff()方法用于允许你通过抛掷无人机来起飞。在调用此方法后的5秒内,你可以通过抛掷无人机来使其起飞。

在方法内部,它通过调用send_control_command方法向无人机发送命令 "throwfly"。这个命令告诉无人机在接收到该命令后的5秒内准备起飞。同时,它将 is_flying 标志设置为 True,表示无人机正在飞。


def takeoff(self):
    """自动起飞。
    """
    # 有时起飞和成功起飞需要很长时间。
    # 所以最好等待。否则,在后续调用时可能会出现错误。
    self.send_control_command("takeoff", timeout=Tello.TAKEOFF_TIMEOUT)
    self.is_flying = True

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • takeoff()方法用于自动起飞。通过调用此方法,你可以让无人机自动进行起飞。

在方法内部,它通过调用 send_control_command 方法向无人机发送命令 "takeoff",并设置一个超时时间。这个命令告诉无人机进行起飞。然后,它将 is_flying 标志设置为 True,表示无人机正在飞行。


def land(self):
    """自动降落。
    """
    self.send_control_command("land")
    self.is_flying = False

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • land()方法用于自动降落。通过调用此方法,你可以让无人机自动进行降落。

在方法内部,它通过调用 send_control_command 方法向无人机发送命令 "land",以指示无人机进行降落操作。然后,它将is_flying标志设置为 False,表示无人机不再处于飞行状态。


def move(self, direction: str, x: int):
    """Tello向上、向下、向左、向右、向前或向后飞行距离x厘米。
    用户通常会调用move_x函数之一。
    参数:
        direction: up、down、left、right、forward或back
        x: 20-500
    """
    self.send_control_command("{} {}".format(direction, x))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • move()方法用于让 Tello 向上、向下、向左、向右、向前或向后飞行一定的距离。通过调用此方法,你可以控制 Tello 在指定的方向上飞行指定的距离。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 "{direction} {x}",其中 {direction} 是飞行的方向("up"、"down"、"left"、"right"、"forward" 或 "back"){x} 是飞行的距离(20-500 厘米)。

这个方法的实际操作是通过发送控制命令来控制 Tello 飞行。你通常会使用提供了具体方向的更具体的函数,而不是直接调用这个通用的 move 方法。
下面是具体方向的函数及其解释:

def move_up(self, x: int):
    """向上飞行 x 厘米。
    参数:
        x: 20-500
    """
    self.move("up", x)

def move_down(self, x: int):
    """向下飞行 x 厘米。
    参数:
        x: 20-500
    """
    self.move("down", x)

def move_left(self, x: int):
    """向左飞行 x 厘米。
    参数:
        x: 20-500
    """
    self.move("left", x)

def move_right(self, x: int):
    """向右飞行 x 厘米。
    参数:
        x: 20-500
    """
    self.move("right", x)

def move_forward(self, x: int):
    """向前飞行 x 厘米。
    参数:
        x: 20-500
    """
    self.move("forward", x)

def move_back(self, x: int):
    """向后飞行 x 厘米。
    参数:
        x: 20-500
    """
    self.move("back", x)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

def rotate_clockwise(self, x: int):
    """顺时针旋转 x 度。
    参数:
        x: 1-360
    """
    self.send_control_command("cw {}".format(x))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • rotate_clockwise(x)方法用于让 Tello 顺时针旋转 指定的角度。通过调用此方法,你可以控制 Tello 在顺时针方向上旋转指定的角度。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 "cw {}",其中 {} 是要旋转的角度(1-360)


def rotate_counter_clockwise(self, x: int):
    """逆时针旋转 x 度。
    参数:
        x: 1-360
    """
    self.send_control_command("ccw {}".format(x))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • rotate_counter_colockwise(x)方法用于让 Tello 逆时针旋转 指定的角度。通过调用此方法,你可以控制 Tello 在逆时针方向上旋转指定的角度。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 "ccw {}",其中 {} 是要旋转的角度(1-360)


def flip(self, direction: str):
    """进行翻转动作。
    用户通常会调用 flip_x 函数之一。
    参数:
        direction: l(左)、r(右)、f(前)或 b(后)
    """
    self.send_control_command("flip {}".format(direction))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • flip(direction)方法用于进行翻转动作。通过调用此方法,你可以让 Tello 进行翻转动作。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 "flip {}",其中 {} 是翻转的方向("l"、"r"、"f" 或 "b")

这个方法的实际操作是通过发送控制命令来控制 Tello 进行翻转动作。你通常会使用提供了具体方向的更具体的函数,而不是直接调用这个通用的 flip 方法。
下面是具体方向的函数及其解释:

def flip_left(self):
    """向左翻转。
    """
    self.flip("l")

def flip_right(self):
    """向右翻转。
    """
    self.flip("r")

def flip_forward(self):
    """向前翻转。
    """
    self.flip("f")

def flip_back(self):
    """向后翻转。
    """
    self.flip("b")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

4)与tello摄像头有关的函数

def streamon(self):
    """打开视频流。之后可以使用 `tello.get_frame_read` 来获取视频帧。
    当计算机连接到 Tello-XXXXXX 的AP模式(即与Tello建立Wi-Fi连接)时,所有Tello都支持视频流。
    目前,Tello EDU在连接到WiFi网络时不支持视频流。

    注意:
        如果响应是 'Unknown command',则需要更新 Tello 固件。可以使用官方的 Tello 应用程序进行更新。
    """
    self.send_control_command("streamon")
    self.stream_on = True

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • streamon()用于打开视频流。通过调用此方法,你可以启动无人机的视频流,并通过tello.get_frame_read()方法获取视频帧。

在方法内部,它通过调用 send_control_command 方法向无人机发送命令 "streamon",以启动视频流。然后,它将stream_on标志设置为 True,表示视频流已经打开。

需要注意的是,视频流功能在无人机处于AP模式(即计算机连接到 Tello-XXXXXX 的Wi-Fi网络)时可用。但是,当前的 Tello EDU 在连接到WiFi网络时不支持视频流。

如果收到响应是 'Unknown command',意味着你需要更新 Tello 的固件。你可以使用官方的 Tello 应用程序来进行固件更新。


def streamoff(self):
    """关闭视频流。
    """
    self.send_control_command("streamoff")
    self.stream_on = False

    if self.background_frame_read is not None:
        self.background_frame_read.stop()
        self.background_frame_read = None

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • streamoff()方法用于关闭视频流。通过调用此方法,你可以停止无人机的视频流。

在方法内部,它通过调用 send_control_command 方法向无人机发送命令 "streamoff",以停止视频流。然后,它将 stream_on 标志设置为 False,表示视频流已关闭。

如果background_frame_read对象不为 None,说明之前已经启动了视频流的处理。在关闭视频流后,它会停止 background_frame_read 对象,并将其设置为 None,以释放相关的资源。


def set_video_bitrate(self, bitrate: int):
    """设置视频流的比特率
    可以使用以下选项作为比特率参数:
        Tello.BITRATE_AUTO
        Tello.BITRATE_1MBPS
        Tello.BITRATE_2MBPS
        Tello.BITRATE_3MBPS
        Tello.BITRATE_4MBPS
        Tello.BITRATE_5MBPS
    """
    cmd = 'setbitrate {}'.format(bitrate)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • set_video_bitrate(bitrate)方法用于设置 Tello 视频流的比特率。通过调用此方法,你可以选择设置视频流的比特率。比特率决定了视频流的质量和带宽占用。通过合理设置该方法的参数可以在一定程度上降低延迟

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为'setbitrate {}'.format(bitrate),其中 {} 是比特率参数


def set_video_resolution(self, resolution: str):
    """设置视频流的分辨率
    可以使用以下选项作为分辨率参数:
        Tello.RESOLUTION_480P
        Tello.RESOLUTION_720P
    """
    cmd = 'setresolution {}'.format(resolution)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • set_video_resolution(resolution)方法用于设置 Tello 视频流的分辨率。通过调用此方法,你可以选择设置视频流的分辨率,即视频的图像大小。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'setresolution {}'.format(resolution),其中 {} 是分辨率参数。


def set_video_fps(self, fps: str):
    """设置视频流的帧率
    可以使用以下选项作为帧率参数:
        Tello.FPS_5
        Tello.FPS_15
        Tello.FPS_30
    """
    cmd = 'setfps {}'.format(fps)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • set_video_fps(fps)方法用于设置 Tello 视频流的帧率。通过调用此方法,你可以选择设置视频流的帧率,即每秒显示的图像数量。通过设定合适的视频流帧率,也可在一定程度上降低延时。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'setfps {}'.format(fps),其中 {} 是帧率参数。


def set_video_direction(self, direction: int):
    """选择视频流的摄像头之一
    前置摄像头是常规的 1080x720 彩色摄像头
    下置摄像头是一个只有 320x240 灰度红外灵敏摄像头
    可以使用以下选项作为方向参数:
        Tello.CAMERA_FORWARD
        Tello.CAMERA_DOWNWARD
    """
    cmd = 'downvision {}'.format(direction)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • set_vedio_direction(direction)方法用于选择 Tello 视频流的摄像头之一。通过调用此方法,你可以选择前置摄像头或下置摄像头来进行视频流的捕捉。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'downvision {}'.format(direction),其中 {} 是方向参数。


def emergency(self):
    """立即停止所有电机。
    """
    self.send_command_without_return("emergency")
    self.is_flying = False

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个方法用于立即停止无人机的所有电机。通过调用此方法,你可以强制停止无人机的飞行动作。

在方法内部,它通过调用send_command_without_return方法向无人机发送命令 "emergency",以立即停止所有电机。然后,它将 is_flying 标志设置为 False,表示无人机不再处于飞行状态。

需要注意的是,这个操作会立即停止无人机的运动,无论当前飞行状态如何。因此,谨慎使用这个命令,以避免意外损坏无人机或造成伤害。


def go_xyz_speed(self, x: int, y: int, z: int, speed: int):
    """相对于当前位置飞行到 x y z。
    速度定义了以 cm/s 为单位的飞行速度。
    参数:
        x: -500-500
        y: -500-500
        z: -500-500
        speed: 10-100
    """
    cmd = 'go {} {} {} {}'.format(x, y, z, speed)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • go_xyz_speed(x,y,z,speed) 方法用于使 Tello 相对于当前位置飞行到指定的 x、y、z 坐标。通过调用此方法,你可以控制 Tello 相对于当前位置飞行到指定的目标位置。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'go {} {} {} {}',其中 {} 分别是 x、y、z 坐标和飞行速度。


def set_speed(self, x: int):
    """设置飞行速度为 x cm/s。
    参数:
        x: 10-100
    """
    self.send_control_command("speed {}".format(x))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • set_speed(self, x: int)方法用于设置 Tello 的飞行速度。通过调用此方法,你可以将 Tello 的飞行速度设置为指定的值(以 cm/s 为单位)。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 "speed {}".format(x),其中 {} 是飞行速度的参数。


def curve_xyz_speed(self, x1: int, y1: int, z1: int, x2: int, y2: int, z2: int, speed: int):
    """在曲线上通过 x2 y2 z2 飞行到 x2 y2 z2。速度定义了以 cm/s 为单位的飞行速度。

    - 两个点相对于当前位置
    - 当前位置和两个点必须形成一个圆弧。
    - 如果圆弧半径不在0.5-10米范围内,将引发异常
    - x1/x2、y1/y2、z1/z2 不能同时在-20-20之间,但可以同时为0。

    参数:
        x1: -500-500
        x2: -500-500
        y1: -500-500
        y2: -500-500
        z1: -500-500
        z2: -500-500
        speed: 10-60
    """
    cmd = 'curve {} {} {} {} {} {} {}'.format(x1, y1, z1, x2, y2, z2, speed)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • curve_xyz_speed(x1,y1,z1,x2,y2,z2,speed)方法用于使 Tello 通过曲线路径从当前位置飞行到指定的 x2、y2、z2 坐标。通过调用此方法,你可以控制 Tello 沿着曲线路径飞行到指定的目标位置。

在方法内部,它通过调用send_control_command方法向 Tello 发送控制命令,命令的格式为 'curve {} {} {} {} {} {} {}',其中 {} 分别是起点和终点的 x、y、z 坐标和飞行速度

注意,当前位置和两个点必须形成一个圆弧。如果圆弧的半径不在0.5-10米的范围内,将引发异常。此外,x1/x2、y1/y2、z1/z2 不能同时在-20-20之间,但可以同时为0。


def send_rc_control(self, left_right_velocity: int, forward_backward_velocity: int, up_down_velocity: int,
                    yaw_velocity: int):
    """通过四个通道发送遥控控制。每隔 self.TIME_BTW_RC_CONTROL_COMMANDS 秒发送一次命令。
    参数:
        left_right_velocity: -100~100 (左/右)
        forward_backward_velocity: -100~100 (前/后)
        up_down_velocity: -100~100 (上/下)
        yaw_velocity: -100~100 (偏航)
    """

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这个方法用于通过四个通道发送遥控控制命令给 Tello。每隔 self.TIME_BTW_RC_CONTROL_COMMANDS 秒发送一次命令。
它接受四个参数,分别是左/右速度、前/后速度、上/下速度和偏航速度。每个参数的取值范围是 -100 到 100,表示不同方向上的速度。
通过调用此方法,你可以模拟遥控器的控制信号,实现对 Tello 的远程遥控操作。发送的控制命令会在一定时间间隔内持续发送,以控制 Tello 的飞行动作和姿态。

send_rc_control 方法可以用于通过键盘上的按键控制 Tello 的飞行。通过适当地映射键盘上的按键到速度参数,你可以使用键盘来控制 Tello 在左右、前后、上下和偏航方向上的速度。

例如,你可以将键盘上的某个按键映射到增加左侧速度,另一个按键映射到减少右侧速度,以此类推。通过按下相应的按键,你可以向 Tello 发送不同的速度参数,从而实现控制它的飞行方向和速度。

要实现这个功能,你需要编写一些代码来监听键盘事件,并在按键按下或释放时调用send_rc_control方法,并传递适当的速度参数。


def send_expansion_command(self, expansion_cmd: str):
    """向连接到 Tello Talent 的 ESP32 扩展板发送命令
    例如,使用 tello.send_expansion_command("led 255 0 0") 将顶部 LED 设置为红色。
    """
    cmd = 'EXT {}'.format(expansion_cmd)
    self.send_control_command(cmd)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这个方法用于向连接到 Tello Talent 的 ESP32 扩展板发送命令。通过调用此方法,你可以发送自定义的命令给 ESP32 扩展板,以控制扩展板上的功能或执行特定的操作。

在方法内部,它通过调用 send_control_command 方法向 Tello 发送控制命令,命令的格式为 'EXT {}'.format(expansion_cmd),其中 {} 是扩展命令参数。你可以将自定义的扩展命令作为字符串传递给 send_expansion_command 方法来控制 ESP32 扩展板的行为。例如,通过传递 “led 255 0 0” 的命令,你可以将顶部 LED 设置为红色。具体的扩展命令取决于你所连接的 ESP32 扩展板的功能和支持的指令。
send_expansion_command 方法可以用于控制连接到 Tello Talent 的 ESP32 扩展板。通过发送自定义的扩展命令,你可以控制扩展板上的功能或执行特定的操作。你可以根据你所连接的具体扩展板的功能和支持的指令,使用 send_expansion_command 方法发送相应的命令来控制扩展板的行为。例如,通过发送合适的命令,你可以控制扩展板上的 LED 灯、传感器、电机等。请确保你在发送命令之前了解扩展板的功能和支持的指令,以正确地使用 send_expansion_command 方法。

要将 ESP32 扩展板连接到 Tello Talent 无人机,你需要进行以下步骤:

1. 准备所需的硬件:

Tello Talent 无人机
ESP32 开发板(如ESP32-DevKitC等)
连接线(如Micro USB 线)
将 ESP32 开发板与 Tello Talent 无人机进行物理连接:

2. 将一个端口(如Micro USB 端口)插入 Tello Talent 无人机的扩展接口。这是无人机上一个带有“EXT”标记的接口,通常位于无人机背面。
将另一端口(如Micro USB 端口)插入 ESP32 开发板上的相应接口。
3. 配置 ESP32 开发板:

使用适当的开发工具(如Arduino IDE)打开 ESP32 开发板的编程环境。
在编程环境中选择正确的开发板和端口设置,以便与 ESP32 开发板进行通信。
4. 编写控制代码:

使用适当的库和接口,编写控制代码以与 Tello Talent 无人机进行通信和交互。你可以使用 send_expansion_command 方法来发送自定义的命令给 ESP32 扩展板。
根据你的需求和扩展板的功能,编写相应的控制逻辑和命令序列。
5. 上传和运行代码:

将编写好的控制代码上传到 ESP32 开发板。
确保无人机和 ESP32 开发板之间的连接正常,并按照你的代码逻辑执行控制操作。
请注意,以上步骤提供了一个基本的指南来连接和控制 ESP32 扩展板与 Tello Talent 无人机。具体的实现步骤可能会因你使用的开发板、编程环境和库的不同而有所差异。在开始连接和编程之前,请参考相关的文档、示例代码和教程,以确保正确地连接和控制 ESP32 扩展板与 Tello Talent 无人机。

总结

***以上就是djitellopy库中一些函数的说明,是博主学习的一些总结与归纳,希望对大家有所帮助。需要注意的是,其函数日后可能会有所更新,各位大佬也可参考官方文档。

over!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/516757
推荐阅读
相关标签
  

闽ICP备14008679号