Аппаратура Radiolink AT 9 2,4 ГГц
летал в поле над деревьями высоко. упал, т.к потеря связи!!! ничего не погорело. нашёл - опять полетел =)
возле мкада
Штоп не упал есть фейлсейф.
у меня жпс не стоит! это гоночный квадрик 210 размера! вопрос в другом. почему так рано связь отвалилась? на ютубе смотрел обзоры - в стоке чуть ли не 2 км! а у меня 700 метров всего! у кого сколько по расстоянию?
вопрос в другом. почему так рано связь отвалилась?
Такое слово как “радиопомехи” вам известно? Они бывают, например, промышленные от близлежащего “свечного заводика” или от вышеупомянутых “кустов” БС-ок, а ещё от пригоршни вайфаев в близлежащем коттеджном посёлке. Обратили бы внимание ГДЕ (то есть в каких “глухих лугах”) тестят аппу на дальность. А так, конечно, “все врут - адназначна!” 😁
для меня лес густой… Я больше по железкам…
Попробую растолковать для “не специалиста”. Из всего текста скетча вас должна интересовать функция
// The function converts length of the pulse
// to USB joystick control value.
void setChannel(int ch, int pulse)
(легко догадаться, там даже комментарий надписан - что она, мол конвертирует длительность импульса PPM соответствующего канала в какое-то телодвижение USB-джойстика). “Тело” этой функции идёт от открывающейся фигурной скобки под её названием до соответствующей закрывающейся фигурной скобки (вы при цитировании угробили табуляции, посмотрите в исходном сообщении - там всё выровнено “ступенечками” и потому наглядно). Сначала идёт перевод длительности импульса (от 800 до 2200 мкс) в более удобный диапазон от 0 до 1, значение запоминается в переменной с плавающей (float) точкой value
// Processing pulses with length 800 - 2200 mks.
float value = (pulse - 800) / 1400.0;
Дальше отрабатывается случай, если по факту значения были меньше 800 или больше 2200 - и значение value окажется меньше 0 или больше 1
if (value < 0)
value = 0;
else
if (value > 1.0)
value = 1.0;
Ну и после всего этого осталось перевести значение value в положения стиков джойстика (они должны быть в пределах от -127 до 127)
Joystick.setXAxis(value*255 - 127);
крутилок джойстика (от 0 до 360 “градусов”)
Joystick.setXAxisRotation(value*360);
или имитации нажатий кнопок джойстика (первый параметр - номер кнопки, второй - значение, которое должно быть 0 = “отжата” или 1 = “нажата”)
Joystick.setButton(1, (int)(value+0.5));
в последнем случае маленькая “программная хитрость” - когда число с “плавающей точкой” переводится в целое (int), то дробная часть просто отбрасывается, а поскольку (value+0.5) будет принимать значения от 0.5 до 1.5, то после отбрасывания дробной части как раз и получится 0 или 1 с границей переключения на 1500 мкс (если не забыли, у нас value = 0 соответствует 800 мкс, а value = 1 соответствует 2200 мкс, соответственно, value = 0.5 будет соответствовать 1500 мкс).
Все возможные “крутилки-переключалки” описаны на странице проекта - можете “переопределить” обработчики каналов на свой вкус (то, о чём я писал выше). Обратите внимание, ссылка отличается от той, что вы находили выше по теме. Дело в том, что проект Arduino Joystick Library развился уже до версии 2.0, где можно менять количество кнопок и задавать диапазоны “крутилок” - но вам это лишние сложности, так что берите версию 1.0.1 по моей ссылке - там всё проще. 😃
Вот, кстати, описание ещё одного проекта, заточенного под адаптер PPM-to-USB. Я делал именно по нему — «летается» замечательно.
А вот еще вариант, присланный мне Семёном Кашпо (Patter), за что ему большое спасибо!
А вот еще вариант
Проктологически-костыльный способ 😁 Хотя, конечно, работать будет - с потерей половины каналов.
Я “летаю” в симах ровно на том же профиле, что и на реальном дроне. И дпже по возможности переключения полётных режимов и т.п. в симе настраиваю на те же тумблеры, что и в реале.
Ух ты, вот это костыли )))
Не, проще и правильнее скетч под себя и аппаратуру скорректировать.
Товарищи, сегодня получил приемыш R9DS, версии 1.3, валяется один старый, версии 1.2, кто знает в чем разница? Визуально только заметил пока отличие в оформлении обозначений и антенна к плате не припаяна, как на 1.2 версии, а посажена на коннектор.
…кто знает в чем разница…
— Тимур, так у Вас обе версии на руках. Снимите корпуса и посмотрите, заодно нам расскажите. А если сфотографируете, так вообще здорово будет. 😉
у меня жпс не стоит! это гоночный квадрик 210 размера! вопрос в другом. почему так рано связь отвалилась? на ютубе смотрел обзоры - в стоке чуть ли не 2 км! а у меня 700 метров всего! у кого сколько по расстоянию?
Пробовал с проверкой на сервах. Высота приемника - 8 этаж, я на земле. Потеря связи на двух км. На последних 300м катеджная застройка без прямойвидимостм. Все штатное. На квадрике, если поднять на высоту 100м , я думаю все 3км пробъет. Учтите, что в тесте нет видеопередатчика.
Учтите, что в тесте нет видеопередатчика.
Это очень важный момент.
Попробую растолковать для “не специалиста”
Большое вам спасибо за разъяснения! Теперь стало понятнее что к чему. Заказал Леонардо, пока идет хотел бы прояснить некоторые пробелы в понимании процесса.
1. Вот в вашем коде есть параметр case от 1 до 10. Как я понял, это номера каналов управления.
В первых трех идет обработчик с просчетом положения стика (value*255 - 127)
Joystick.setXAxis(value*255 - 127);
а в четвертом уже другой, как я понял из вашего предыдущего разъяснения, это обработчик для крутилок, так как у него положение расчитывается на 360 градусов (value*360)
Joystick.setXAxisRotation(value*360)
То есть первые три канала - это стики, а четвертый - это крутилка?
2. Речь идет о двухпозиционных переключателях, верно?
имитации нажатий кнопок джойстика (первый параметр - номер кнопки, второй - значение, которое должно быть 0 = “отжата” или 1 = “нажата”)
Joystick.setButton(1, (int)(value+0.5));
А для 3-х позиционных используют эту же функцию? Если да, то “программная хитрость” там другая для просчета должна быть, не поделитесь?
3. Еще момент: конкретно в FPV Freerider на калибровке можно использовать и откалибровать только положения стиков управления, то есть только 4 канала. Остальные каналы аппы хоть и есть, то есть видны внизу, но использовать их нельзя. А что в других коптерных симуляторах можно привязать больше 4-х каналов?
То есть первые три канала - это стики, а четвертый - это крутилка?
Посмотрите список функций библиотеки джойстика - мы можем использовать только их. Там 3 функции “осей”, 3 функции “крутилок”, газ, руль и кнопки. Симулятору пофигу - “ось” или “крутилка”, он её интерпретирует просто как “канал”, от минимального до максимального его положения. В принципе, вы можете использовать “газ” и “руль”, но, по моему опыту, некоторые симуляторы их “не видят”. А вот “оси”, “крутилки” и “кнопки” - видят все, потому скрипт использует именно эти функции.
А для 3-х позиционных используют эту же функцию? Если да, то “программная хитрость” там другая для просчета должна быть, не поделитесь?
Функции без разницы - чем вы там на аппе установили то или иное значение канала (по проводу или с выхода приёмника). Указанная функция делает “кнопку” нажатой если уровень в канале больше середины и отжатой - если меньше. Для 3-позиционного переключателя вы можете сделать что хотите:
- изменить конечными точками границы изменения данного канала так, чтобы среднее положение попадало в “выше середины” или “ниже середины”, то есть сделать из 3-позиционного переключателя 2-позиционный
- написать чуть более хитрый обработчик, который понимал бы “нижнее”, “среднее” и “верхнее” состояния канала и, к примеру, включал бы 2 разные “кнопки”. Там же простая “арифметика” типа
if(value > 0.333)
{
if(value > 0.666)
{
Joystick.setButton(1, 1);
Joystick.setButton(2, 0);
}
else
{
Joystick.setButton(1, 0);
Joystick.setButton(2, 1);
}
}
else
{
Joystick.setButton(1, 0);
Joystick.setButton(2, 0);
}
- разобраться как работает библиотечная функция setHatSwitch (я с ней не разбирался, но это имитация “грибка под палец” - типа “примитивного джойстика” на 9 положений: в стороны, по диагонали и центральное) и, соответственно, попытаться изобразить 3-позиционник этим инструментом. Другой вопрос - поймёт ли эту экзотику симулятор. 😃
А что в других коптерных симуляторах можно привязать больше 4-х каналов?
Да, в LiftOff, например, можно ещё кнопки использовать - для переключения полётного режима, “сброса” после крэша и т.п. А ещё в каком-то (то ли в HotProps то ли в DRL) угол наклона камеры можно менять только через “канал-крутилку” - я там слайдер аппы для такой экзотики использовал.
Есть ли другие характерные отличия АТ9 и АТ9S, кроме надписи?
Присоединяюсь к вопросу, в чем их разница?
у кого сколько по расстоянию?
RadioLink AT9 + R9DS.
Антенны везде родные (стоковые).
Антенна приёмника болтается градусов под 45 вниз.
Антенна на аппе примерно перпендикулярно земле.
Проверял по земле в частном секторе (заборы, крыши из металла в основном) - около 150 метров.
Поковырялся в приёмнике (разъём антенный почистил хотя, всё вот только-только из Шанхая), при тех же условиях стало порядка 550 - 600 метров.
Если дистанцию увеличивать, то приёмник сигнал от аппы ловит и управляемо всё, а вот аппа сигнал приёмника теряет, т.е. пропадает телеметрия.
На аппаратуре питание в тот момент было 10,1 В., на приёмнике 5 В. с БП для полётника F4BY.
Но это всё вечером по земле частного сектора с заборами, крышами и стенами из чёрти чего.
По земле с припятствиями не плохой результат. Но учтите что нетпомех от работающих моторов, видеопередатчика и т.п.
нетпомех от видеопередатчика
а можно уточнить, какой частоты желательно брать видеопередатчик с этой аппой, или разницы нет?
Я в этом пока новичек. Лучше подскажут старожилы. Самое распространненное для видео - 5.8Ггц. А вообще чем меньше частота тем лучше огибаются препятствия и соотв. больше дальность при той же мощьности.
…какой частоты желательно брать видеопередатчик с этой аппой…
— аппаратура Radiolink ни чем не отличается от любой другой аппаратуры на ISM-диапазон 2.4GHz. Если просто, доступно и «как у всех» — берите на 5,8GHz, мощность по требованиям к дальности, но с учетом того, что чем больше мощность, тем «хуже» любым приёмникам на борту. Если же изначально целью стоит летать далеко, то… я бы сразу брал LRS на 433MHz и видео на 1.2GHz. Ну а переход на LRS кинул бы через R6DS, чтобы не быть «привязанным» проводом.