You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Dronekit获取Mission Planner中的伺服输出及第二电池数据?

解决Dronekit-Python的两个功能缺失问题

一、获取实时伺服输出位置

Dronekit默认没有封装Mavlink的SERVO_OUTPUT_RAW消息(对应Mission Planner里的实时伺服输出位置),需要手动订阅该消息来获取实时PWM值:

  1. 注册消息监听器,监听SERVO_OUTPUT_RAW消息:
from dronekit import Vehicle

def servo_output_callback(attr_name, value):
    # value是SERVO_OUTPUT_RAW消息对象,通道1-8对应servo1_raw到servo8_raw字段
    servo1_pwm = value.servo1_raw
    servo2_pwm = value.servo2_raw
    print(f"Servo 1 PWM: {servo1_pwm}, Servo 2 PWM: {servo2_pwm}")

# 绑定监听器
vehicle.add_attribute_listener('servo_output_raw', servo_output_callback)
  1. 转换为实际位置(可选):
    结合之前获取的伺服参数(如SERVO1_MIN、SERVO1_MAX),可将PWM值转换为百分比位置:
def pwm_to_position(pwm, min_pwm, max_pwm):
    return ((pwm - min_pwm) / (max_pwm - min_pwm)) * 100 if max_pwm > min_pwm else 0

注意:需确保飞控开启SERVO_OUTPUT_RAW消息发送,部分型号需调整参数(如SRV1_RAW设置发送频率)。

二、获取第二块电池数据(battery_voltage2、battery_remaining2)

Dronekit的vehicle.battery仅封装第一块电池数据,第二块电池数据需通过监听BATTERY_STATUS消息获取:

  1. 先配置飞控双电池参数:
    设置BATT2_MONITOR为对应监测类型(如3代表电压监测),并配置BATT2_VOLT_PIN等参数,飞控才会输出第二块电池数据。

  2. 注册BATTERY_STATUS消息监听器:

def battery_status_callback(attr_name, value):
    # value是BATTERY_STATUS消息对象,数组索引1对应第二块电池(索引0为第一块)
    battery2_voltage = value.voltages[1] / 1000.0  # 原始值为mV,转换为V
    battery2_remaining = value.remaining_capacity[1]
    print(f"Battery 2 Voltage: {battery2_voltage}V, Remaining: {battery2_remaining}%")

# 绑定监听器
vehicle.add_attribute_listener('battery_status', battery_status_callback)

注意:部分固件版本中remaining_capacity字段可能未填充,若仅需电压,直接读取voltages[1]即可。

内容的提问来源于stack exchange,提问作者Krishnan Shankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:01:45