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

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

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г, окромя лоу баттери писчалки?