mavlink id 54 SAFETY_SET_ALLOWED_AREA

名称

类型

单位

描述

target_system

uint8_t



系统 ID

target_component

uint8_t



组件 ID

frame

uint8_t

MAV_FRAME

坐标系。可以是全球 GPS坐标系,右手,Z 轴向上,或者本地坐标系右手,Z 轴向下。

p1x

float

m

x 位置 1 / 纬度 1

p1y

float

m

y 位置 1 / 经度 1

p1z

float

m

z 位置 1 / 高度 1

p2x

float

m

x 位置 2 / 纬度 2

p2y

float

m

y 位置 2 / 经度 2

p2z

float

m

z 位置 2 / 高度 2

发送测试消息python脚本

from pymavlink import mavutil

# 1. 连接无人机(根据实际设备修改连接参数)
# 示例:通过 UDP 连接到无人机
connection = mavutil.mavlink_connection('udpin:0.0.0.0:14550')

# --- 定义立方体的两个对角顶点 (p1 和 p2) ---
# 使用 WGS84 坐标 (经纬度, 海拔)
# 顶点 1 (p1): 经纬度和海拔
p1_lat_deg = 39.998  # 纬度 1
p1_lon_deg = 109.998  # 经度 1
p1_alt_msl_m = 0    # 海拔高度 1 (米)

# 顶点 2 (p2): 经纬度和海拔
p2_lat_deg = 40.002  # 纬度 2
p2_lon_deg = 110.002  # 经度 2
p2_alt_msl_m = 50.0   # 海拔高度 2 (米)

# 2. 转换为MAVLink要求的格式
# 经纬度需要乘以 1e7 并转为整数
p1_lat_int = int(p1_lat_deg * 1e7)
p1_lon_int = int(p1_lon_deg * 1e7)
p1_alt_float = float(p1_alt_msl_m)

p2_lat_int = int(p2_lat_deg * 1e7)
p2_lon_int = int(p2_lon_deg * 1e7)
p2_alt_float = float(p2_alt_msl_m)

# 3. 构建 SAFETY_SET_ALLOWED_AREA 消息
# 根据文档,使用 MAV_FRAME_GLOBAL (0) 来表示 WGS84 坐标系
target_system = 1   
target_component = 1
frame = mavutil.mavlink.MAV_FRAME_GLOBAL # 0: Global coordinate frame (WGS84)

msg = connection.mav.safety_set_allowed_area_encode(
    target_system,
    target_component,
    frame,
    p1_lat_int,  # p1x field (第一个角点的纬度)
    p1_lon_int,  # p1y field (第一个角点的经度)
    p1_alt_float, # p1z field (第一个角点的高度)
    p2_lat_int,  # p2x field (第二个角点的纬度)
    p2_lon_int,  # p2y field (第二个角点的经度)
    p2_alt_float  # p2z field (第二个角点的高度)
)
print("等待无人机心跳...")
connection.wait_heartbeat()
print("无人机已连接,开始发送起飞命令")
# 4. 发送消息
connection.mav.send(msg)

print(f"已发送 SAFETY_SET_ALLOWED_AREA 消息:")
print(f"坐标系: MAV_FRAME_GLOBAL (WGS84)")
print(f"顶点 1 (P1): {p1_lat_deg:.7f}, {p1_lon_deg:.7f}, {p1_alt_msl_m}m MSL")
print(f"顶点 2 (P2): {p2_lat_deg:.7f}, {p2_lon_deg:.7f}, {p2_alt_msl_m}m MSL")
作者:sfd  创建时间:2026-03-16 11:53
最后编辑:sfd  更新时间:2026-03-16 13:44
设置一个安全区域(立方体),该区域由立方体的两个角点定义。此消息可用于告知无人机接受和拒绝哪些设定点/航点。安全区域通常由国家或竞赛规则强制执行。