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

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 мс!

AlexSneg
baychi:

2.3 мс

и еще умножить на кол-во каналов и паузу межпакетную.
AFC придется включать на начальном этапе, затем, после синхронизации можно выключить, оно особо не плывет после этого. И если преамбула 1-2 байта всего, то AFC может не хватить.

baychi
AlexSneg:

и еще умножить на кол-во каналов и паузу межпакетную.

Паузу на смену частоты я учел. Ну пусть даже будет 3 мс на канал. При 10 каналов (а обычно и 8 достаточно), получается 30 мс на цикл, почти как в действующем протоколе (31.5 мс).

AlexSneg:

AFC придется включать на начальном этапе,

AFC можно делать программно. Если изначально кварцы синхронизированны, то при близком сигнале захват будет. Тем более девиация предполагается килогерц 10, то есть и без AFC разбежка в 5-7 кГц не страшна. А дальше - самокорректировка.

AlexSneg:

если преамбула 1-2 байта всего, то AFC может не хватить.

Сейчас 2 байта. И AFC нормально работает. Минимальное требование - как раз 2 байта.
1 байт, если обходимся “своими средствами”. 😃

Tahorg

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

LaPart

Если вдруг интересно кому-то, информация.
Пара вылетов за пару выходных - и проверил OrangeLRS с ХК и с обсуждаемой прошивкой.
В штатном исполнении: антенны в виде штатных сосисок черного цвета и оранжевые модули (ТХ 100мВт).
Набор частот не менял, изменен только номер бинда.
Первый день было похолоднее - дальность окончания связи и включения файлсейфа - около 950 метров.
Второй день потеплее немного - дальность файлсейфа 1100-1250м.

F_R
LaPart:

Второй день потеплее немного - дальность файлсейфа 1100-1250м.

Наверное, прохождение было 😁 Оно бывает на УКВ, не так часто .как на КВ (коротких волнах), но тем не менее 😃
Хотя, в вашем случае, скорее всего, зашумленность в месте тестов в теплый день была меньше… А мб что-то то не так в контактах АФУ ваших модулей. А мб все вместе взятое 😃

LaPart
F_R:

Наверное, прохождение было

на таких диких расстояниях прохождение только мешает местной связи:)
интересно, что первый день (связь похуже) летал в чистом широком поле, а во второй - заехал на поселок (порядка 150м высоты). Теоретически над поселком помех побольше должно быть.
А вообще интересно, что можно получить в штатном варианте, без улучшенных антенн и других наворотов.

jolbars

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

baychi
LaPart:

проверил OrangeLRS с ХК и с обсуждаемой прошивкой.

Тестировали по земле?
Статистику связи покажите, если еще не затерли? (Команды sl, ss из меню, на терминалке включить вывод в файл). По этим цифрам можно многое сказать.
А еще есть очень полезный замер уровня шумов - команда N. Рекомендуется делать на модели до и после подачи питания на остальную электронику.

jolbars:

а кто-нибудь уже сравнивал родную экспертовскую и сабжовую прошивки на дальность на одном и том же железе (например на экспертовой же тини)?

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

jolbars:

Потеряю ли я что то из существенного, мигрировав с родной на сабжовую прошивку на передатчике 2г, окромя лоу баттери писчалки?

С предатчиком может не прокатить. У 2G управление мощностью вых. усилителя сделанно через ШИМ меги - и у каждого модуля индивидуальные коэффициенты в регистрах. В моей прошивке такого управления мощностью нет, только программное воздействие на RFMку. Если переделаете управление мощностью бустера на подстроечный резистор, будет работать нормально.
(До сих пор не могу понять, зачем Дмитрий себе такой гемморой с индивидуальной подстройкой придумал? ИМХО, куда проще одним подстроечником вывести все бустеры на нужный режим и менять мощность единообразно RFM-кой, благо в RFM22/23B диапазон регулировки более 20 дБ).

LaPart:

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

Больше всего дальность зависит от шумовой обстановки на модели и вокруг. Если избавиться от лишних помех на модели и летать за городом, на 100 мВт можно рассчитывать на 5-6 км устойчивой связи (я улетал на 9, но с SAW фильтром). В городе 1.5-2 км.
Наибольший эффект я получил только после добавлнеия SAW фильтра. Уровень шума при этом упал на 10-12 дБ, а уровень приема на 2 дБ. Зато теперь над городом 4-5 км на 100 мВт - обычное дело.

LaPart
baychi:

Тестировали по земле?
Статистику связи покажите, если еще не затерли?

Поздновато прочитал, только добрался до инета.
Тестировал “в деле”😃, то есть я с пультом в поле, самолет в небе, высота была 135-145 метров.

Насчет статистики: не затер, но не все так просто. Приемник вклеен в фюз, забыл я насчет статистики и что её можно использовать, каюсь…
Попробую все-таки до него добраться в ближайшее время, самому интересно глянуть, что получилось.
Ну и как вариант, почему не очень дальность - у меня может неудачно место для приемника выбрано. Рядом (в 3-5см) видеорегистратор и плата автопилота на STM 172МГц (а там уж и других гармошек найдется). Возможно картину это немного портит. Дома через N статистику проверял до установки в самолет, но не очень наглядно получается, все дышит и шевелится, оценивать неудобно, т.к. раз от раза отличается. Может какую простейшую ГУИ применить, без расширенных запросов в приемник, а только периодически слать N и графическое отображение результатов в ответ? Я может и сам написал бы, но с тонкостями обмена в конкретном случае не очень знаком.
Когда точно залезу не скажу, постараюсь побыстрее и до следующих полетов конечно.

baychi
LaPart:

вот кусок статистики,

Шум в 50-60 тугриков при уровне сигнала а 90-100, это типичный порог связи для RFMки.
Основная проблемма, это шум 50-60. На хорошей, не шумящей модели, должно быть 30-40 тугриков, что примерно на 10 дБ лучше по помехам или раза в 3 по дальности. К шуму в 30-40 единиц и нужно стремиться при включенном борте.

smalltim

Вставлю свои 2 копейки: благодаря помощи Александра baychi, поддержка стандартого протокола SBUS и расширенного протокола Александра (определяется автоматически) добавлена в SwiftAI NG.

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

Вставлю свои 2 копейки: благодаря помощи Александра baychi, поддержка стандартого протокола SBUS и расширенного протокола Александра (определяется автоматически) добавлена в SwiftAI NG.

Александру- громадное спасибо за исходники!
На основе их на скорую руку для наших пацанов- кружковцев из того что было - дистанционные “таймеры”.
Спасать планер если он “уходит” и маяк для поиска.

baychi

Тимофею и Сергею спасибо.

Выложил новую версию прошивок передатчика и приемника. Мануалы тоже обновил.
github.com/baychi/OpenExpertTX
github.com/baychi/OpenTinyRX

Изменений немного.

  1. Ввел еще один режим кодировки данных (включается 2-й в 5 ом регистре). В исходной версии от Эксперта, длительности импульсов передаются в диапазоне от 988 до 2012 мкс (нейтраль 1500 мкс). Futaba и в том числе sbus используют диапазон 880-2160 мкс. При использовании sbus на обоих концах двойная перекодировка снижала точность представления, да и сам диапазон 988-2012 мкс иногда оказывался недостаточен. Кроме этого в режиме 2 данные каналов пакуются в пакет строго последовательно (это важно для передачи на лету) и контрольным кодом защищаются все байты. Плата за режим 2 - несовместимость с режимами 0,1 и экспертовскими прошивками (параметры передачи не затронуты, на дальность это не повлияет, но кодировка данных в режиме 2 несовместима), поэтому при выборе режима 2 его надо указывать на приемнике и передатчке, иначе связи не будет. Rebind автоматически распознает режим передатчика.
  2. Добавил в пакет sbus выдаваемый приемником: RSSI (15-й канал) и уровень шума (14-й канал), для отображения на OSD. Это поддерживают АП SmallTim: как новый (о чем пишет Тимофей), так и старый (прошивку сделал, допроверю и выложу в ближайшее время).
    Что-бы АП знал, что в пакете sbus есть эта информация в 16-й канал кладется признак- код 0x600.
  3. Исправил несколько ошибок режима автопривязки приемника (rebind), приводящих к зацикливанию, при ошибках в поиске каналов. Заодно выяснилось, что очень большой сигнал (мощный передатчик, рядом с приемником), сильно затрудняет rebind: RFMка ловит тени каналов, принимая пакеты на близких, но других частотах. Избавится от этого не получается, поэтому рекомендуется выполнять rebind на минимальной мощности передатчика, или отнеся его подальше (нескольких метрой обычно достаточно).
  4. Изменил отладочный вывод длин импульсов у передатчика. Теперь они выводятся либо в микросекундах (R6=1 или 3), либо в шестнадцетиричных кодах (R6=5 или 7) от 0 до 7FF.

Ну и всякие мелкие улучшения и исправления.