Baychi OpenLRS - дружелюбная ЛРС с широкими возможностями )

baychi

Напрямую цикл передачи PPM 17-20 мс, а в эфир Футаба гонит с циклом 7 мс. И сразу после приема приемник выдает пакет через SBUs за 3 мс. То есть 10 мс выигрыша уже есть.
Я смотрел на осцилле задержку от PPM передатчика и выход с приемника, на РРМ/PWM очень трудно поймать разницу, но я нигде не видел, что бы выход с приемника запаздывал относительно PPM передатчика.
Точность на моем осцилле хорошо видна. Жаль исходные 11 бит Футабы немного теряют я при преобразованию их диапазона работы к экспертовскому и обратно. Позже наверное добавлю несовместимый вариант упаковки пакета, где помимо этого уберу и прочие экспертовские неоптимальности.

Shuricus
nyc73:

Дружелюбный Шурикус скоро прикончит эту тему я чувствую

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

Tahorg

Чисто интересно, в качестве бреда, а может попробовать как мультиплекс - гнать не весь пакет, а раздельно каналы? Есть изменения в канале - гнать его, нет - тоже гнать, но реже. Т.е. собирать пакет из пар номер канала (4 бита) данные (12 бит) и пересылать не все каналы. Шасси, переключатели режимов, закрылки, и еще много чего - зачем их постоянно. Тут можно и задержку уменьшить и точность сохранить. И пакет короче, меньше вероятность повреждения.

Shuricus

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

Но вот, что хотелось бы уточнить - в прошивке присутствует настройка Discrete outputs mask. Это дает какие либо преимущества для качества связи, и собственно это для чего вообще сделано?

baychi
Tahorg:

Чисто интересно, в качестве бреда, а может попробовать как мультиплекс - гнать не весь пакет, а раздельно каналы?

Как раз обдумываю похожую идею. 😃
Гнать каналы независимо, короткими пакетами в 5-6 байт: преамбула 1-2 байта, 1 синхробайт, 2 байта канала (4 бита номер канала, 11 бит значение, 1 бит - признак установки FS) и контрольный байт CRC8 - он же бинд, так как если значение бинда взять в качестве начального значения CRC8, то все чуже и искаженные пакеты автоматически отсеиваются.

Логика передачи, примерно как Вы предлагаете (схема “тройка-семерка-туз”). 😃

  1. Передаем только то количество каналов, которое реально нужно данной модели. С приемником это согласовывать необязательно.
  2. Каналы, которые недавно изменились, передаем втрое чаще остальных (чередуя посылки).
  3. Прыгаем по 7-ми (простое число - важно) частотным каналам по известной обеим сторонам последовательности.
  4. Передачу ведем на бодовой скорости 19200 или 38400 (без манчестера с девиацией 10-20 кГц), что дает интревал передачи пакетов 1.5-3 мс (с учетом паузы на смену частоты в 250-300 мкс).

Но возникает следующий теоретический вопрос, что выгоднее по дальности: пакет в 4 раза меньшей длинны или с 4-е раза меньшей бодовой скоростью?
Сейчас на экспертовском протоколе (22 байта всего, 16 байт данных) при бодовой скорости 7400 и длительности передачи 24 мс, мы получаем связь при минимальном отношении С/ш не менее 15 дБ (20 дБ при 80% вероятности прохождении пакетов). То есть, при заявляемой чувствительности приемника в этом режиме порядка -115 дБм, реальная чувствительность выходит на уровне -95…-100 дБм. ИМХО именно 20 байт и дают эти -20 дБ от предела.
Если на пакете длинной в 5-6 байт, минимальное отношение c/ш будет на уровне 5-6 дБ (10-15 дБ выигрыша), то увеличение бодовой скорости в 4 раза, даст потерю всего 6 дБ и получим суммарный выигрышь в 6-10 дБ, что очень существенно. Но если это не так, то смысла в поканальной передаче мало.

В общем надо эксперементировать. Займусь этим, как только добью SBUS на стороне автопилота… 😃

Shuricus:

Плюс несовместимость с Экспертом?

Когда то надо выбираться из пеленок и лететь дальше. 😃

Панкратов_Сергей
Shuricus:

Но вот, что хотелось бы уточнить - в прошивке присутствует настройка Discrete outputs mask. Это дает какие либо преимущества для качества связи, и собственно это для чего вообще сделано?

  1. «Discrete outputs mask» - маска дискретных каналов. Позволяет изменить режим работы до 8-ми выходов, превратив их из импульсных в дискретные. Дискретный выход перестает выводить PWM импульсы, а меняет свой логический уровень, в зависимости от величины канального импульса с соответствующим номером. Если канальный импульс меньше или равен 1.5 мс, дискретный выход выдает логический 0, если больше - логическую 1-цу.

На выводе приемника будет не PWM , а ноль или 1.
Ракету пустить, фотоаппаратом щелкнуть…

baychi
Shuricus:

Discrete outputs mask. Это дает какие либо преимущества для качества связи, и собственно это для чего вообще сделано?

Это дискретные каналы, вместо PWM. В документации все описано. С качеством связи не связано никак. Если дискретные каналы Вам не нужны (а они мало кому нужны), поставьте маску = 0.

Панкратов_Сергей:

Ракету пустить, фотоаппаратом щелкнуть…

Сегрей, очень интересует Ваше мнение по предлагаемой идее поканального протокола?

Shuricus
Панкратов_Сергей:

На выводе приемника будет не PWM , а ноль или 1.
Ракету пустить, фотоаппаратом щелкнуть…

Сергей, да, спасибо. Это я как раз понимаю, но ведь то-же самое делается и обычным ПВМ каналом. В чем тогда цимус?
Там же должен стоять управляемый RC-switch для выполнения команды в любом случае?

baychi:

Когда то надо выбираться из пеленок и лететь дальше.

Тогда другой разговор! 😃

Тогда фактически половина каналов не задействована - когда рулит автопилот.

baychi:

Займусь этим, как только добью SBUS на стороне автопилота…

А что с ним не так?

baychi
Shuricus:

Там же должен стоять управляемый RC-switch для выполнения команды в любом случае?

Нет. При дискретном выходе нужен не RC-switch, а просто ключ - например полевой транзистор. Что гораздо проще и удобнее.

Shuricus

Вот и ответ! Тогда возможно, и мне пригодится!

baychi
Shuricus:

А что с ним не так?

У меня пока нет АП с SBUS входом. Вот и приделываю SBUS к старому АП от SmallTim (к новому он обещал сам прикрутить).

AlexSneg
baychi:
  1. Передаем только то количество каналов, которое реально нужно данной модели. С приемником это согласовывать необязательно.

Как раз так у меня и работает, передаются только реальное кол-во задействованных каналов. Передача идет префиксным кодированием. Если первый бит =1, значит дальше идут 10бит канала, если первый бит = 0, значит дальше идут 8бит очередного канала. Первый байт - служебный, определяет тип информации, ибо не только каналы надо передавать в эфире. Номера каналов передавать на фиг не нужно, ибо они должны следовать без разрыва. Делайте смело, это реально удобно.

Попытки разделить каналы по пакетам, ИМХО, вызовут кучу вопросов к алгоритмам. Ибо не понятно что делать, если первые 4 канала приняли, а еще 2 потеряли.

baychi:

Но если это не так, то смысла в поканальной передаче мало.

Это как раз так. Я это подтвердил на практике на своей аппаратуре. Пробовал с разной длиной пакетов и разными скоростями. Скорость влияет на с/ш меньше, чем длина пакета.

baychi
AlexSneg:

Передача идет префиксным кодированием. Если первый бит =1, значит дальше идут 10бит канала, если первый бит = 0, значит дальше идут 8бит очередного канала.

Не очень понимаю, в чем смысл? Ведь если кодировать без префиксного бита, то всем каналам просто будет по 10 бит, а так в среднем по 10?

AlexSneg:

Номера каналов передавать на фиг не нужно, ибо они должны следовать без разрыва.

Так сделано сейчас. Идея сделать как раз наоборот, что-бы выиграть в дальности.

AlexSneg:

Ибо не понятно что делать, если первые 4 канала приняли, а еще 2 потеряли.

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

AlexSneg:

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

Есть выводы в цифрах? Или хотябы примеры?

AlexSneg
baychi:

Не очень понимаю, в чем смысл?

В том, что не зачем всем каналам 10бит иметь. У меня каждый канал настраивается по битовой длине. Я не вижу смысла, зачем, например, каналу управления режимами иметь 10бит разрешения. Высокое разрешение имеет смысл только на джойстиках. Соответственно 10бит я ставлю на джойстики, а на остальных только 8 бит. Это укорачивает пакет. И я гоняю только то кол-во каналов, которое реально требуется данной модели, а не все 24 доступных.

baychi:

Идея сделать как раз наоборот, что-бы выиграть в дальности.

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

baychi:

Самое простое ничего не делать, испльзовать то что есть.

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

baychi:

Есть выводы в цифрах? Или хотябы примеры?

Я этим год назад занимался, сейчас уже не найду записей. Менял битрейты, длины пакетов, ходил замерял расстояния уверенного и конечного приема. Вывод был именно тот, что укорочение пакета сказывается на расстоянии приема существеннее, чем увеличение битрейта в 2 раза. По честному, увеличение битрейта с 9600 до 19200 почти никак не сказывалось на дальности. Зато 10 байт и 28байт в пакете давало разницу в дальности приема на четверть. Это конечно не научный подход, но другого у меня в то время не было.

baychi
AlexSneg:

Это укорачивает пакет.

Насколько укорачивает в %-тах?
Изначально протокол Эксперта тоже играет с разрядностью - 9 бит для первых 8 и по 8 бит для еще 4-х каналов.
Я, же помимо совместимого варианта, сделал либо 7 по 10 бит плюс 1х 9 бит плюс 4 по 8 (ну были там лишние 7 бит у Эксперта), либо 10 каналов по 11 бит - что мне нравится больше всего. А смысла выигрывать несколько бит (5-10% от всей длинны), я не вижу.

AlexSneg:

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

Это настраивается на обеих сторонах?
И зачем 24 канала? Вот где избыток раза в 3, ИМХО. 😃

AlexSneg:

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

В суммарной длинне само собой будет большею Смысл в пробивной способности пакета длинной 5-6 байт, по сравнению с 22 байта.

AlexSneg:

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

Алексей, мне кажется Вы не поняли сути предложения! Здесь вся идея в поканальной передаче. Один пакет == одному каналу. Если паковать несколько каналов в кадр, то номер канала само собой не нужен. 😃

AlexSneg:

когда важно иметь именно полностью картину ручек управления и никак нельзя использовать только половину.

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

AlexSneg:

Зато 10 байт и 28байт в пакете давало разницу в дальности приема на четверть.

Это 2 дБ всего. Мало. Если так смысла не будет.
Спасибо за информацию, но я все равно проделаю эксперименты. 😃

AlexSneg
baychi:

Это настраивается на обеих сторонах? И зачем 24 канала? Вот где избыток раза в 3, ИМХО.

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

24 это не избыток, это запас 😃
И они же не все передаются. Радиопакет конструируется на передатчике под каждую модель индивидуально.

baychi:

Один пакет == одному каналу.

ИМХО, это совсем плохо, ибо идут прыжки по частотам. Некоторые частоты могут перманентно не пробивать эфир. И пакет можно совсем не собрать. И нужно городить алгоритм устаревания если часть приняли, а другую часть так и не смогли. А не смогли за какое время? И что делать если 7 из 8 приняли, а восьмой старше принятых на 500мс? Какое время устаревания считать допустимым, а какое считать границей и инфа протухает после нее? Лучше не связывайтесь, слишком много гемора и реально большой уровень допущений на приемной стороне по алгоритмам.

baychi

Если это даст хотя бы 2-х кратный прирост дальности, то смысл есть.
С прыжками можно договориться, если кол-во прыжков и количество каналов неодинаковые простые числа, например 7 и 11. Тогда и FS понятное дело наступает после 7х11 пакетов подряд, где нарушена полнота представления данных.
ИМХО временная несинхронность данных в пределах 150-200 мс, не критична для большинства применений.

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

AlexSneg

Мне кажется не стоит овчинка выделки. Даже если в пределе вам удастся добиться 2 байтов на пакет, у вас еще преамбула syncword и header и CRC.
Чтобы передать 4 джойстика придется потратить 4 пакета и в каждом полный служебный обвес. Но, конечно, если энтузиазм есть это дело попробовать, то почему бы и нет…

baychi
AlexSneg:

Даже если в пределе вам удастся добиться 2 байтов на пакет, у вас еще преамбула syncword и header и CRC.

Я писал 5-6 байт на ВЕСЬ пакет. 1-2 байта преамбулы, 1 синхробайт, 2 байта канал+егономер, 1 байт CRC8. Все итого 5-6 байт (в зависимости от нужности AFC).

AlexSneg:

и в каждом полный служебный обвес.

Никаких встроенных хеадеров, и CRC16 - все это баловство и излишества! 😃 Всего 5 байт на 19200, даже с паузой на переключение частоты это 2.3 мс!