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

Rusfaner
smalltim:

Схему, разводку и готовые прошивки выложу ессно.

Приветствую, Тимофей!
А когда все это можно будет увидеть, а то слюнями уже весь экран забрызган.

pashteton

Спустя месяц после морковки, и непонятного выхода из строя телеметрии.
Наконец то добрался с паяльником до телеметрии и заменил кварц.
И О чудо все заработало.
Еще раз спасибо за советы.

Хвост_Слона

Тимофей, опять я к тебе в личку не поместился - По передаче данных - от а/пилота пойдут 152 байта бинарных данных на скорости 38400. Длительность пакета - максимум 45 мс Период повторения минимум 200 мс. Я прав? Таким образом, после паузы в данных на входе модема более 10 мс входной буффер обнуляется, последующие 152 байта запишутся в буффер и по заполнению буффера начнется передача пакета. Скорость радиоканала - 9600 бит/сек, объем данных вместе со служебными - 170 байт Время на передачу - 177 мс. На приемной стороне бинарные данные преобразуются в текст, пакет снабжается заголовком (источник,тип,длина) и CRC *04,01,152,ХХ,ХХ,ХХ,—,ХХ#NN и на скорости 38400 отдается получателям. Предполагается, что формат получателям известен. Для начала попробуем радиомодули RFM12BP и RFM12B на 433 мгц (они у меня в наличии), потом можно будет подумать и о 868 мгц. Радиус работы с 20% потеряных пакетов я теоретически оцениваю в 3-4 км (на эшелоне 200 метров)

smalltim

Коллеги, с автопилотом, стало быть, ситуация такая.
Стабилизатор работает, автопилот работает за исключением удержания высоты -летает с набором высоты (багу поправил, но пока не проверил).
Логгинг работает.
Удержание скорости не проверялось, пишем не работает.
Компас с коррекцией по пирометрам на земле проверялся - работает, но в полете не проверялся. Пишем не работает.

Общение с платой телеметрии не доделано на 80%, просмотровщик логов не земле не доделан на 50%, компуковая программа-интерфейс с автопилотом готов на 90%, но, во-первых, на английском, во-вторых, часть окон я хочу перерисовать, чтоб сделать построже защиту от неправильных действий.
Плюс, хочу добавить настройки резкости руления, а то по логам на моем изике по тангажу видна раскачка с периодом в ~1 сек с амплитудой в 10 градусов.

В таком состоянии это нифига не продажный продукт, но бета-тестеры уже могут вовсю поиздеваться над ним, ибо всё-таки работает и летает.
Добивание всех недоделок перед выводом в серию и отполировка математики, интерфейса и прочего по результатам бетатестирования - главный приоритет для меня на ближайшее время.
По срокам - бетатестерам, имеющим свои модули ГПС, смогу отдать уже на следующей неделе, в серию - еще 2 недели минимум, по готовности софта, а у кого нет ГПС модулей - по приходу ГПС модулей. Оплачены, ждем.

3D просмотровщик логов выложу когда хотя бы чуток причешу, а то камера дергается, скорость проигрывания не регулируется, и т.д… Но выглядит очень прикольно. Медитативно этак. По показаниям с пирометров по крену и тангажу классно видно повадки изика. ГПС координаты шумноваты, особенно показания текущего курса. Для автопилота хватает, и с земли незаметно, а в проигрывании логов видны подергивания, когда камера за хвостом самолета в 3 метрах летит.

=Женек=

Тимофей, вроде у Вас личка не переполнена, а Вы не отвечаете…

Dikoy
smalltim:

Несколько мыслей:

  1. Бинарный формат намного экономичнее

А почему бы не использовать модбас? В АСУ популярнейшая вешь.
Формат: адресат, от кого, длина, команда, данные (диной во 2 байте), 2 байта CRC.
У меня это выглядет так:


typedef struct
{
unsigned char Address; // адрес получателя (ПК = 0, пилот = 1, штурман = 2, пироголовка = 3).
unsigned char Sender; // адрес отправителя
unsigned char Length; // длина ТОЛЬКО поля данных
unsigned char Cmd; // соманда
char Data[DATA_LENGTH_MAX]; // поле данных до 120 цифр
unsigned char CRC_H; // контрольная сумма
unsigned char CRC_L;
} Response;



/* Table of CRC values for high–order byte */
__flash unsigned char auchCRCHi[256] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40
};

/* Table of CRC values for low–order byte */
__flash char auchCRCLo[256] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
0x40
};

unsigned int Get_CRC16(unsigned char *puchMsg, unsigned char usDataLen)
{
unsigned char uchCRCHi = 0xFF; /* high byte of CRC initialized */
unsigned char uchCRCLo = 0xFF; /* low byte of CRC initialized */
unsigned char uIndex; /* will index into CRC lookup table */
usDataLen += (HEADER_LENGTH_MAX - 2);

while ( usDataLen-- ) /* pass through message buffer */
{
uIndex = uchCRCHi ^ *puchMsg++; /* calculate the CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];
uchCRCLo = auchCRCLo[uIndex];
}
return ((uchCRCHi << 8) | uchCRCLo);
}

А я вот развёл своего пиромонстра… Вместе с новым автопилотом планирую сдать в резонит к сентябрю. Буду облётывать осенью.

Вопрос к гурам. Патчевая GPS антенна имеет снизу металлическое напыление (равно как и сверху, но с ним всё понятно). Надо ли обеспечивать контакт этого напыления с подложкой?..
То есть антенна ставится тупо на полигон, покрытый лаком и подключается только центр, или надо ещё умудриться подпаять низ?

lodeworx

А че за таблы то? В gnucc есть crc16 в библиотеке… Посмотри на разводку и найди петлю! хе-хе. Да не одну. Потом давай их фильтровать! хо-хо! Matlab по вкусу пришелся- это правильно! А чем TWI не по-вкусу? Давай придумаем совершенно новое круглое колесо! Или “модбас”- это перевод?!

smalltim

Обварил Изику нос в кипятке - и правда, выпрямился. Только появилась шагрень из-за того, что элапоровые шарики повздувались, но это уже не так страшно. Заклею нос скотчем, как было, и в бой 😃

Вот такое вот 3д окошко просмотровщика логов получается, на траекториях - крайние Митинские полеты.
Самик летит по траектории из лога, с реальными из лога креном и тангажом. Позиция и курс самика чуть сглажены - видно, что он чуть рядом с траекторией из лога летит - потому, что данные ГПС немного шумят, и при таком реплее самик начинает чуть дергаться, если пустить его прямо по логу.
Управление просмотровщиком - как медиаплейером. Вперед, назад, стоп, пауза, плей. Смотрим как ролик, только есть возможность переключать виды камеры (спривязана к точке старта, привязана к самику и летит вместе с ним, вид из самика).
Что еще? Шаг сетки на земле 10м, моделька самика взята специально чтоб ни у кого такой не было, чтоб никому обидно не было. Масштаб модельки не совпадает с реальным - около 3м, для правильных пропорций должно быть 1-1.5м.
Прикручу красивое удобное отображение высоты, скорости и ориентации прямо в 3д окне попозже.
Да. для комфортного просмотра лога надо с хорошей частотой лог снимать. 5 раз в секунду - самое то. Если раз в секунду или того реже, то лог в 3д будет малоинформативным.

Потом наверчу там показ высоты, координат и т.д., на землю надеюсь текстурку и рельеф положить.
Параллельно буду рисовать в соседних окошках крен, тангаж, входы-выходы PPM, батарейки и т.д.
Плоские графики всячечских параметров, как думаете, надо, или ексель спасет тех, кому надо?

Brandvik

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

slides

Самолетик-то на Jet (TwinJet?) вроде смахивает…

smalltim

>Самолетик-то на Jet (TwinJet?) вроде смахивает…

Не знаю. Моделька, нарисованная, кстати, нашим соотечественником, взята из каталога бесплатных моделек для 3D. Ничего особенного, даже текстурок нет, парень явно просто тренировался, а мне вот понравилась.

>Я думаю что если не в ущерб основному делу то не помешает, но обязательно шоб с текстурами из места реальных полетов.

В этом деле - в борьбе с картами - мне один наш коллега любезно согласился помочь.

Dikoy
lodeworx:

А че за таблы то? В gnucc есть crc16 в библиотеке…

Табличный?

lodeworx:

Посмотри на разводку и найди петлю! хе-хе. Да не одну. Потом давай их фильтровать!

Во-1 петель там нет. Где Вы их там выловили? Во-2 платы показаны без заливки (что очевидно по виасам), для упрощения понимания предмета.

lodeworx:

Matlab по вкусу пришелся- это правильно! А чем TWI не по-вкусу? Давай придумаем совершенно новое круглое колесо! Или “модбас”- это перевод?!

А этот поток как переводится?..
Если вопрос в том, почему я не использую аппаратный TWI, то причины две:

  1. Мне немного влом настраивать каждому пирометру индивидуальный адрес внешним девайсом или софтом. А на ноль отзываются они все.
  2. При софтварном TWI по таймеру я экономлю время на считывание пусть не в 6, но в 3 раза точно. Плюс выборки идут примерно одновременные со всех пирометров, а не с разрывом.
slides

Круто ! отличный базар. 99% форумчан все поняло и во все въехало !

Brandvik

А причем тут 99% форумчан? Тема крайне узко специализированная, кому надо, тот понял, а для 99% форумчан это разжевывать не надо, ибо всеравно они ничего дельного не скажут.

Frr

Выложил смотрелку для логов smalltim’а
(точнее предварительный макет смотрелки 😃 )
тут d-ogogo.narod.ru/gm2/
(Карта только для лога-2)

Brandvik

Что-то у меня не получилось ничего увидеть, скачал, разархивировал. Запускаю, на экране белый круг ( наверное это шар) Приближается, удаляется, катринки нет, может я чего не туда разархивировал?
В каталоге с прогай должны быть папки gnu, osg, img ? или это все нужно свалить в кучу? Хотя по бат файлу похоже что не надо.

Ага, нашел, когда стартует он пишет что не найден плаг для чтения файлов картинок…

Frr
Brandvik:

В каталоге с прогай должны быть папки gnu, osg, img ? или это все ужно свалить в кучу?

Должно получится так
Из файла prg1 -
…\smtlv\Run.bat, …
…\smtlv\gnu - dll’ки

…\smtlv\osg - dll’ки из lib1

…\smtlv\osg\osgPlugins-2.8.2 - dll’ки из lib2 и lib3

…\smtlv\img - картинки из img1

На круге (это шар) д.б. облака, а земля с треком - внутри.

Brandvik

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

Frr
Brandvik:

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

Т.е. зафиксировать точку наблюдения?
Тогда нельзя будет смотреть сверху или сбоку.
А сейчас можно разглядеть скачки ЖПСа, висящий хвостик трека,
непонятные прямые участки (похоже провалы в ЖПСе).
Под землю - закрою
(пока заглядываю 😉 там из-за ошибок с высотой поверхности появляется часть трека).

Brandvik

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