You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
-- example of logging to a file on the SD card and to data flash |
|
local file_name = "AHRS_DATA.csv" |
|
local file |
|
|
|
-- index for the data and table |
|
local roll = 1 |
|
local pitch = 2 |
|
local yaw = 3 |
|
local interesting_data = {} |
|
|
|
local function write_to_file() |
|
|
|
if not file then |
|
error("Could not open file") |
|
end |
|
|
|
-- write data |
|
-- separate with comas and add a carriage return |
|
file:write(tostring(millis()) .. ", " .. table.concat(interesting_data,", ") .. "\n") |
|
|
|
-- make sure file is upto date |
|
file:flush() |
|
|
|
end |
|
|
|
local function write_to_dataflash() |
|
|
|
-- care must be taken when selecting a name, must be less than four characters and not clash with an existing log type |
|
-- format characters specify the type of variable to be logged, see AP_Logger/README.md |
|
-- https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_Logger |
|
-- not all format types are supported by scripting only: i, L, e, f, n, M, B, I, E, and N |
|
-- lua automatically adds a timestamp in micro seconds |
|
logger.write('SCR1','roll(deg),pitch(deg),yaw(deg)','fff',interesting_data[roll],interesting_data[pitch],interesting_data[yaw]) |
|
|
|
-- it is also possible to give units and multipliers |
|
logger.write('SCR2','roll,pitch,yaw','fff','ddd','---',interesting_data[roll],interesting_data[pitch],interesting_data[yaw]) |
|
|
|
end |
|
|
|
function update() |
|
|
|
-- get some interesting data |
|
interesting_data[roll] = math.deg(ahrs:get_roll()) |
|
interesting_data[pitch] = math.deg(ahrs:get_pitch()) |
|
interesting_data[yaw] = math.deg(ahrs:get_yaw()) |
|
|
|
-- write to then new file the SD card |
|
write_to_file() |
|
|
|
-- write to a new log in the data flash log |
|
write_to_dataflash() |
|
|
|
return update, 1000 -- reschedules the loop |
|
end |
|
|
|
-- make a file |
|
-- note that this appends to the same the file each time, you will end up with a very big file |
|
-- you may want to make a new file each time using a unique name |
|
file = io.open(file_name, "a") |
|
if not file then |
|
error("Could not make file") |
|
end |
|
|
|
-- write the CSV header |
|
file:write('Time Stamp(ms), roll(deg), pitch(deg), yaw(deg)\n') |
|
file:flush() |
|
|
|
return update, 10000
|
|
|