2. 读取飞行器姿态角并打印
任务说明
编写一个 ArduPilot Lua 脚本,周期性读取飞行器的 roll、pitch、yaw 姿态角(单位:度),并通过 gcs:send_text 发送到地面站显示。脚本需在飞控启动后自动加载运行。
关键 API 与数据流
ahrs:get_roll()/ahrs:get_pitch()/ahrs:get_yaw():返回弧度值,需用math.deg()转成角度。gcs:send_text(severity, text):向地面站发送文本消息,severity 常用 6(INFO)。vehicle:get_mode():可选,用于确认飞控已进入运行状态。- 使用
return update, 1000让调度器每 1000ms 回调一次。
脚本文件
将以下内容保存为 attitude_log.lua,放到飞控 SD 卡的 APM/scripts/ 目录下(ArduPilot 4.0+ 支持)。
-- attitude_log.lua
-- 周期性读取姿态角并发送到地面站
local MAV_SEVERITY_INFO = 6
local UPDATE_MS = 1000
local function update()
local roll = math.deg(ahrs:get_roll())
local pitch = math.deg(ahrs:get_pitch())
local yaw = math.deg(ahrs:get_yaw())
local msg = string.format("ATT R:%.1f P:%.1f Y:%.1f", roll, pitch, yaw)
gcs:send_text(MAV_SEVERITY_INFO, msg)
return update, UPDATE_MS
end
return update, UPDATE_MS
运行与验证
- 将
attitude_log.lua拷贝到 SD 卡APM/scripts/目录,插入飞控并上电。 - 地面站连接后,打开 Messages(消息)面板。
- 预期每约 1 秒出现一条形如
ATT R:0.0 P:0.0 Y:123.4的消息,数值随飞行器姿态变化而更新。 - 若长时间无消息:检查
SCR_ENABLE参数是否为 1,确认脚本文件名与路径正确,并查看 Messages 中是否有 Lua 报错。
常见问题
- 脚本未执行:确认
SCR_ENABLE=1且飞控固件包含 Lua 支持(如 CubeOrange、Pixhawk 系列)。 - 数值异常:
ahrs:get_*返回弧度,务必用math.deg()转换。 - 消息刷屏:可增大
UPDATE_MS,例如改为 2000 或 5000。