MAV_CMD_SET_CAMERA_ZOOM 531

Param (:Label)
Description
Values
param1: Zoom Type
缩放类型
0 聚焦变小 1 聚焦变大
param2: Zoom Value
缩放倍数
2~50



python测试脚本

import time
from pymavlink import mavutil


def get_current_millis():
    """获取当前时间(毫秒级)"""
    return int(time.time() * 1000)


MAV_CMD_SET_CAMERA_ZOOM = 531
ZOOM_TYPE_CONTINUOUS = 1
DEFAULT_ZOOM_VALUE = 20
DEFAULT_TIMEOUT = 5.0


def send_camera_zoom_command(master, zoom_type=ZOOM_TYPE_CONTINUOUS, zoom_value=DEFAULT_ZOOM_VALUE):
    """发送相机变焦命令到无人机"""
    send_time = get_current_millis()
    print(f"[{send_time}] 发送相机变焦命令: type = {zoom_type}, value = {zoom_value}")

    master.mav.command_long_send(
        master.target_system,
        master.target_component,
        mavutil.mavlink.MAV_CMD_SET_CAMERA_ZOOM,
        0,  # 确认标志
        zoom_type,   # param1: 变焦类型
        zoom_value,  # param2: 变焦值
        0,  # param3
        0,  # param4
        0,  # param5
        0,  # param6
        0   # param7
    )

    return send_time


def wait_for_ack(master, send_time, timeout=DEFAULT_TIMEOUT):
    """等待命令确认响应"""
    print("等待相机变焦命令响应...")

    ack = master.recv_match(
        type='COMMAND_ACK',
        blocking=True,
        timeout=timeout
    )

    if ack:
        ack_time = get_current_millis()
        delay = ack_time - send_time
        print(f"[{ack_time}] 收到命令应答 (MAV_CMD_SET_CAMERA_ZOOM)")
        print(f" 命令ID: {ack.command}, 结果: {ack.result}, 延迟: {delay}ms")
    else:
        print(f"[{get_current_millis()}] 超时:未收到相机变焦命令应答")


def main():
    """主函数:连接无人机并发送相机变焦命令"""
    # 连接无人机(UDP端口14550)
    master = mavutil.mavlink_connection('udpin:0.0.0.0:14550')
    print("等待无人机心跳...")
    master.wait_heartbeat()
    print("无人机已连接,开始发送相机变焦命令")

    # 发送相机变焦命令
    send_time = send_camera_zoom_command(master)

    # 等待响应
    wait_for_ack(master, send_time)

    print("相机变焦命令发送完成")


if __name__ == "__main__":
    main()

执行脚本

结果

作者:admin  创建时间:2024-09-14 15:47
最后编辑:sfd  更新时间:2026-03-31 18:40
返回消息:COMMAND_ACK返回值 command 531 执行命令id返回值 result 0或4 0:执行成功,4:执行失败