降落命令
方法1:发送以下降落命令
MAV_CMD_NAV_LAND 21
返回消息:COMMAND_ACK
返回值 command 21 执行命令id
返回值 result 0或4 0:执行成功,4:执行失败
方法2:使用切换飞行模式将飞行模式切换至LAND
详见切换飞行模式页
取消降落命令
方法1:使用切换飞行模式将飞行模式切换至POSCTL
详见切换飞行模式页
方法2:发送以下COMMAND_LONG命令
MAV_CMD_DO_REPOSITION 192
command = MAV_CMD_DO_REPOSITION
param4,param5,param6 = NaN
param7 = 0
返回消息:COMMAND_ACK
返回值 command 192 执行命令id
返回值 result 0或4 0:执行成功,4:执行失败
python测试脚本
发送降落命令(方法1)
import time
from pymavlink import mavutil
timestamp = int(time.time() * 1000)
millis = int(time.time() * 1000)
master = mavutil.mavlink_connection('udpin:0.0.0.0:14550')
master.wait_heartbeat()
boot_time = time.time()
def land():
master.mav.command_long_send(
master.target_system,
master.target_component,
mavutil.mavlink.MAV_CMD_NAV_LAND,
0,
0, 0, 0, 0, 0, 0, 0
)
land()发送取消降落命令(方法2)
import time
from pymavlink import mavutil
import math
def get_current_millis():
"""获取当前时间(毫秒级)"""
return int(time.time() * 1000)
# MAVLink 命令常量
MAV_CMD_DO_REPOSITION = 192
DEFAULT_TIMEOUT = 5.0
def send_reposition_command(master, ground_speed, yaw, flags=0):
"""发送重新定位命令到无人机
Args:
master: MAVLink 连接对象
ground_speed: 地速 (单位: m/s)
yaw: 偏航角 (单位: 度, 0-360)
flags: 标志位 (保留, 默认为0)
"""
nan_value = math.nan
send_time = get_current_millis()
print(f"[{send_time}] 发送重新定位命令")
print(f" 地速 = {ground_speed} m/s, 偏航角 = {yaw}°")
master.mav.command_long_send(
master.target_system,
master.target_component,
mavutil.mavlink.MAV_CMD_DO_REPOSITION,
0, # 确认标志
ground_speed, # param1: 地速 (单位: m/s)
yaw, # param2: 偏航角 (单位: 度)
0, # param3: 保留
nan_value, # param4: NaN
nan_value, # param5: NaN
nan_value, # param6: NaN
0 # param7: 0
)
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_DO_REPOSITION)")
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("无人机已连接,开始发送重新定位命令")
# 发送重新定位命令(示例参数,请根据实际情况修改)
ground_speed = 5.0 # 地速 5 m/s
yaw = 90.0 # 偏航角 90° (东向)
send_time = send_reposition_command(master, ground_speed, yaw)
# 等待响应
wait_for_ack(master, send_time)
print("重新定位命令发送完成")
if __name__ == "__main__":
main()
执行降落脚本
结果
作者:孙渝泓 创建时间:2024-09-14 16:05
最后编辑:sfd 更新时间:2026-03-31 18:47
最后编辑:sfd 更新时间:2026-03-31 18:47