Телеметрия (часть 2)

slides

Оччень рекомендую в целях сохранения стабильности отношений в форуме не распространяться в “ощущениях” от того, что недоступно другим. Пока. Это немного раздражает. Если тестить, то не одному человеку…

BigDaddy

Тест-драйв проходил на митинском поле. Все присутствовавшие там пилоты могли его наблюдать. А заинтересовавшиеся поучаствовать. О других подобных мероприятиях наверное можо договариваться через личку. Что я собственно и сделал. К тому же помочь Тимофею , старающемуся на общее благо, в облете его новой разработки я посчитал своим долгом. Благо живем рядом.
P.S. Надо не раздражаться, а стремиться и добиваться… Такое мое мнение.

slides

Ну Вы же и договаривались, таким образом мероприятие оказалось закрытым 😃 Поэтому не имея доступа к Вашей личке, узнать об этом возможно только объезжая все поля ? А набиваться в помощники - ну простите воспитание не позволяет.

А помочь Тимофею - дело благое. Судя по всему, что он не выкладывал открыто приглашений, сгобственно особо и не нуждался. В людях, не столь приближенных. Как некоторые. Вот и все. Тест драйв не открыт, его автопилотов ни у кого нет, а слюнями брызгать в экран уже надоело. Чистящее средство кончилось 😃

DIM81
smalltim:

Потому что я не двухжильный. … и далее по тексту

Силу в кулак
Волю в узду
Назвался груздем - не ахай!
Выполнил план - посылай всех в пи…у!
Не выполнил - сам пошел н@$й!

Шутка конешно! (надеюсь здесь всем больше 18!)
И план конечно, считаем выполнен!!!

ГРИНЯ

Я лично хочу вырозить Тимофею спасибо что он создал то что задумал и зделал полезное для общественности.Тимофей действительно отдохни от работы- мне самому так пришлось, поэтому договорённость стобой пока отсрочилась,но ненадолго,выполню как договаривались.Тимофей ты молодец!!!

myname

А каким образом можно купить готовую конструкцию, или возможно что-то типа кита для сборки? К сожалению нету времени рисовать/травить плату, собирать детальки по магазинам и т.п. Можно в личку.

pashteton

Народ, как проверить кварц? Осциллографом по нему прошелся никакой частоты не обнаружил. На ноге таймера меги тоже тишина. Кого менять мегу или кварц?

pashteton

Диод заменил никаких изменений. Без видео сигнала на выходе диода ничего.
С видеосигналом там что-то появляется. На ЛМке на выходе что-то есть. Похоже все с ней впорядке. Есть мысль что на “сервисный” разъем попал плюсовой контакт аккума… Тогда наверное снова менять мегу 😦 Кстати на ее ногах тоже тишь гладь… тока питалово приходит.

solderer
pashteton:

Диод заменил никаких изменений. Без видео сигнала на выходе диода ничего.
С видеосигналом там что-то появляется. На ЛМке на выходе что-то есть. Похоже все с ней впорядке. Есть мысль что на “сервисный” разъем попал плюсовой контакт аккума… Тогда наверное снова менять мегу 😦 Кстати на ее ногах тоже тишь гладь… тока питалово приходит.

Ну очень похоже на мегу. А мега программатором читается? Ее можно проверить не выпаивая. Да, и ток потребляемый мегой не мешало бы померять.

pashteton

Нема у меня программатора 😦
Может она просто стерлась?

solderer

Ну прошивка просто так не стирается сама.

serj
pashteton:

Народ, как проверить кварц? Осциллографом по нему прошелся никакой частоты не обнаружил. На ноге таймера меги тоже тишина. Кого менять мегу или кварц?

Попробуйте мерять с делителем, или через килоом, емкость входа осциллографа может срывать генерацию. (обычно более 10пф уже может быть проблемно)

smalltim

Сделал логгинг.
Каждые 0.2/0.5/1/2/5/10 секунд (настраивается с компука) в память сбрасываются следующие параметры:

typedef struct
{
 U32   samplenumber;
 U32   flightnumber;
 U32   gps_UTC_date;
 float gps_UTC_time;
 U8    gps_numsatellites;
 U8    gps_fixmode;
 float gps_startlat;
 float gps_startlon;
 float gps_startalt;
 float gps_curlat;
 float gps_curlon;
 float gps_curalt;
 float gps_curspeed;
 float gps_curheading;
 float compass_curheading;
 float voltage1;
 float voltage2;
 float voltage3;
 float current;
 float mah;
 float temperature;
 float baro_curspeed;
 float baro_curalt;
 float pyro_curroll;
 float pyro_curpitch;
 float pyro_targetroll;
 float pyro_targetpitch;
 float in_ppm_curwidth[5];
 float out_ppm_curwidth[4];
}  dumpsample_type;

Всего в памяти помещается ~15000 таких дампов, этого хватает на
~ 41 час полета при записи дампа 1 раз в 10 секунд
~ 4 часа полета при записи дампа 1 раз в секунду
~ 50 минут полета при записи дампа 5 раз в секунду

При каждом старте/ресете автопилота количество полетов увеличивается на единицу и сохраняется в отдельном месте внешней памяти.

При записи дампов счетчик дампов, лежащий в отдельном месте внешней памяти, читается, увеличивается на единицу и записывается обратно.

Каждый последующий полет не затирает данные предыдущего, заполнение памяти дампами идет до тех пор, пока есть свободное место. Количество свободного места можно посмотреть с компука, если же оно кончается в полете, логгинг прекращается и автопилот начинает отмигиваться диагностическими светодиодами.

С компука можно принудительно обнулить счетчик полетов.

С компука можно принудительно обнулить счетчик дампов (“быстрое стирание”), тогда новые дампы начнут записываться с начала памяти, постепенно затирая старые дампы, лежащие в памяти с предыдущих полетов.

С компука можно принудительно обнулить память логов, при этом нужно ждать ооооочень долго, до десятков секунд. При этом память затирается нулями и логи предыдущих полетов теряются безвозвратно.

При скачке логов с платы автопилота в компук качается вся память целиком (2.162.688 байт, 4096 страниц по 528 байт), включая и логи, и настройки, и т.д. (это занимает ~20 сек), далее по номеру дампа, номеру полета и UTC времени из общей каши дампов выделяются все, относящиеся к различным полетам, и собираются логи независимых полетов.

При желании размеры каждого дампа можно уменьшить раза в полтора, соответственно увеличится время работы логгера до заполнения памяти.
Но 4 часа полета при средних настройках (лог 1 раз в секунду) - это, по-моему, и так выше крыши. На полетный день хватит, а дальше можно слить логи в компук и обнулить память логов к следующему дню.

Выглядит адекватно?

baychi
Сергей_Вертолетов:

Выглядит шикарно! А данные хранятся в сжатом виде или так как есть?

А Вы когда нибудь сжимали float-ы? Тем более независимые переменные? Обычные алгоритмы (LZW, Хафман) - малоэффективны. Можно конечно брать разности по столбцам и кодировать отклонения, но мороки с этим много. Проще писать как есть.

Сергей_Вертолетов

Просто подумалось что например ГПС координаты меняются не кардинально, есть скажем так фиксированная часть 😃 Хотя времени и так предостаточно, 1 Гц логгинга хватит за глаза.

EXT
smalltim:

Каждый последующий полет не затирает данные предыдущего

тоесть если я просто забыл очистить лог, я остался без них, я так понимаю?
а ведь логи нужны именно последних скажем 2 часов(ну например в случае нештатной ситуации в крайнем полете)а так я должен помнить есть место для записи или нет,
да и зачем мне логи 10 часов назад(тоесть они нужны конечно, но если я их потеряю ничего страшного)а если пропадет последний лог то это очень плохо
а если нельзя сделать перезапись самых старых логов новыми, то логично чтобы при каждом подключении к компу происходила автоматическая архивация и очистка

smalltim
EXT:

тоесть если я просто забыл очистить лог, я остался без них, я так понимаю?
а ведь логи нужны именно последних скажем 2 часов(ну например в случае нештатной ситуации в крайнем полете)а так я должен помнить есть место для записи или нет,
да и зачем мне логи 10 часов назад(тоесть они нужны конечно, но если я их потеряю ничего страшного)а если пропадет последний лог то это очень плохо
а если нельзя сделать перезапись самых старых логов новыми, то логично чтобы при каждом подключении к компу происходила автоматическая архивация и очистка

Автоматическую архивацию и очистку я не хочу, с автопилотом у меня идеология такая: никаких действий без ведома пользователя. Захотел - сам скачай логи и обнули память.
А вот не останавливать запись по достижении конца памяти - запросто. Просто перемещаемся в начало памяти и пишем дальше, поверх того, что там лежало. Этакий кольцевой буфер получается. Просто сейчас это делается с компука, нажатием на кнопочку, а будет делаться автоматом в полете. Если надо - сделаю. Надо?

А Вы когда нибудь сжимали float-ы?

Там, если честно, больше половины float’ов (4 байта каждый) можно заменить на 2-байтовые целочисленные, а некоторые вообще на 1-байтовые. Ну кому с точностью float нужно знать угол там тангажа или крена? Или ширину PPM на входе-выходе? Целых градусов и 16, а то и 8 разрядов хватит.
В итоге не в полтора, а в 2 раза точно можно будет дамп утоптать.

Просто это надо, во-первых, вставить перевод в целые, а я ленивый. Во-вторых, пока идет отладка, я пока в логи попишу именно в том формате, что используется во всей математике.

а так я должен помнить есть место для записи или нет

Не надо помнить, консоль покажет:

SGordon

конечно надо старые стирать, по-моему по такой идеологии работают всякие черные ящики …

smalltim

Сделал автоматическое затирание старых логов, т.е., запись в память “по кругу”.

Cделал сохранение логов не в двоичный формат, а в экселе-совместимый формат с разделителем “;”

Сейчас сяду сервопровода нормальные, а не 5 см длиной, паять. Вдруг удастся завтра таки полетать на автопилоте 😒

Автопилот задержался с выходом еще потому, что в процессе тестов вылезли как косяки в разводке, так и всяческие неудобняки в эксплуатации, появились дополнительные фичи и т.д.
Посему было решено переделать плату автопилота. От совместимости с лазерным утюгом решено было отойти. И дорожки тоньше, и разводка проще, и деталек меньше, и детальки миниатюрнее.

Вот немного фоток старой платы автопилота, новой платы автопилота и новых плат пирометров: