Логи на MultiWii/MahoWi на Crius AIOP v2

Немного доработал свою библиотеку для записи логов на MultiWii на контроллере Crius AIOP v2 с микросхемой AT45DB161. Предыдущие части тут и тут.

Что нового

• Логи теперь пишутся непрерывно. Новые записи автоматически пишутся поверх самых старых.

• Вывод делается в более удобной форме. Сначала выводится список всех полётов в хронологическом порядке от последнего до самого давнего. Затем по очереди выводятся логи каждого полёта, начиная с последнего.

• В GPS-треках в Google Earth можно смотреть высоту полёта в этой точке. Кроме того, точки в GPS-треке пронумерованы. В текстовом логе можно посмотреть более подробную информацию о том, что происходило с коптером в этом месте.

Установка и использование.

Способ установки такой же, как и раньше:

  1. Положить файл FlashLog.ino в папку с MultiWii.

  2. Добавить строку в файле config.h:

#define FLASH_LOG
  1. Добавить в файле MultiWii.ino в конце функции setup()
Flash_Log_Init();
  1. Добавить в файле MultiWii.ino в конце функции annexCode():
Flash_Log_Write_Values();
  1. В файле Serial.ino в функции evaluateOtherData(uint8_t sr) в конструкцию switch-case добавить:
case 'R': if (!f.ARMED) Flash_Log_Read_Memory(FLASH_LOG_OUTPUT_FORMAT_FULL); break;
case 'r': if (!f.ARMED) Flash_Log_Read_Memory(FLASH_LOG_OUTPUT_FORMAT_SHORT); break;
case 'g': if (!f.ARMED) Flash_Log_Read_Memory(FLASH_LOG_OUTPUT_FORMAT_GPX); break;
case 'e': if (!f.ARMED) Flash_Erase_Memory(); break

Считать лог можно из терминала или Монитора порта в Arduino IDE, отправив соответствующие символы:

R – вывод подробной таблицы (20 записей в секунду).
r – вывод сокращённой таблицы (1 запись в секунду).
g – вывод GPS-трека. Его можно скопировать и сохранить с расширением .gpx.
e – очистка памяти.


Структура памяти

Память в AT45DB161 физически поделена на 4096 страниц по 512 байт каждая. Данные во флеш-память могут записываться только постранично. Моя библиотека записывает примерно одну страницу в секунду. Таким образом, памяти хватает больше, чем на час полётного времени.

На иллюстрации показана постраничная структура памяти. Пустые страницы флеш-памяти всегда полностью заполнены единицами (FF в шестнадцатиричном виде). Страницы с данными в первых двух байтах содержат Record ID – номер записи полёта, который увеличивается на единицу при каждом новом “арме”. По Record ID программа определяет, в каком порядке выводить данные и откуда начинать запись в следующий раз.


a) Показана запись первого полёта, который длился около 8 секунд и занял 8 страниц в памяти.
b) Показана память после двух полётов.
c) При 25-м полёте заполнились все 4096 страниц и запись пошла по второму кругу. Самый ранний полёт частично перезаписан.

На каждой странице данные размещаются следующим образом:
• 32 байта заголовка. В них содержатся данные, которые сохраняются раз в секунду. Это GPS-координаты, количество спутников, расстояние от точки взлёта.
• 20 кадров по 24 байта. Кадры пишутся 20 раз в секунду и содержат часто изменяемые данные: каналы приёмника, показания датчиков, напряжение батареи, метки времени.
Итого 32 + 20 х 24 = 512 байт.
Как только все 20 кадров собраны в буфер, происходит запись буфера в основную флеш-память.

Предупреждение

Напомню, что для записи/стирания AT45DB нужно качественное питание. В моменты записи микросхема очень короткое время потребляет большой ток. При питании от USB через длинный тонкий кабель могут произойти ошибки записи и стирания. Особенно, если одновременно с AIOP запитываются GPS, приёмник и другие устройства.

Для чтения флешки питание не так важно. Логи можно считывать с любым питанием, при котором работает контроллер, то есть достаточно просто подключить его к USB.

Планы

Была идея сделать универсальную библиотеку и для 2.2/MahoWii, и для 2.3/2.4. Но у этих версий слишком большие различия в структуре кода. В 2.2 проект состоит из .ino-файлов, в начиная с 2.3 - из .cpp и .h. Потребуется немало усилий, чтобы одна и та же библиотека подходила и туда, и сюда. Делать два параллельных варианта проблематично, потому что у меня только один контроллер, на котором я летаю.

Сейчас я использую MahoWii, так как с этой прошивкой коптер летает стабильнее всего. Поэтому пока библиотека для записи логов останется в .ino-формате.

В планах – сделать десктопную программу для автоматического копирования логов и треков в файлы.

Библиотека MultiWii-FlashLog находится на Github.

  • 1466
Comments
JURIS

Интересно как по высоте изменялся полет на первом снимке ?

AlexeyStn

Как построить график изменения высоты в Google Earth, я так и не нашёл. Строит только график скорости.
Но нашёл сервис http://GPSVisualizer.com, на который можно загрузить трек. Участки разной высоты выделяются разными цветами: rcopen.com/files/55e7d9f399707300777aae96

mahowik

Нужный проект! У меня плата первой версии, т.е. без флешки + отдельно флешку докупал но так и не дошли руки ее впаять.
А вообще по идее логер можно из арду отковырять. Также важно иметь возможность логировать не только треки, но и аксель, гиру, баро и т.д.

Вот кстати проектец с логированием на SD-ку:
github.com/mahowik/multiwiiDataLogger

Hyperion

эх для арду бы это, чтобы логи писать как у пикса на флешку 😃