ArduCopter Mega: порт на обычную Arduino (тестим)
Глеб сделал эту фишку.
Что то вылетело из головы. 😒
Так может тогда проще сделать так:
uint16_t APM_RC_PIRATES::InputCh(uint8_t ch)
{
uint16_t result;
uint16_t result2;
result=readRawRC(ch);
// Limit values to a valid range
if(failsafeCnt >= 20 && ch==2) {
result=950;
}
result = constrain(result,MIN_PULSEWIDTH,MAX_PULSEWIDTH);
radio_status=1; // Radio channel read
return(result);
}
В этом случае будет врубаться штатный FS, по каналу Throttle…
В этом случае будет врубаться штатный FS, по каналу Throttle…
угу, НО НАДО на 0 1 3 каналах 1500 ставить - иначе коптер будет эти стики “слушать” и отлетать от нужной точки
upd: а constrain(result,MIN_PULSEWIDTH,MAX_PULSEWIDTH); не зарежут 950?
как то вот так
uint16_t APM_RC_PIRATES::InputCh(uint8_t ch)
{
uint16_t result;
uint16_t result2;
result=readRawRC(ch);
result = constrain(result,MIN_PULSEWIDTH,MAX_PULSEWIDTH);
if(failsafeCnt >= 20 && ch!=2 && ch<=3) {
result=1500;
} else if(failsafeCnt >= 20 && ch==2) {
result=950;
}
radio_status=1; // Radio channel read
return(result);
}
тут и резаться ничего не будет и FS штатный будет работать (для turnigy 9x)
upd: а constrain(result,MIN_PULSEWIDTH,MAX_PULSEWIDTH); не зарежут 950?
#define MIN_PULSEWIDTH 900
угу, НО НАДО на 0 1 3 каналах 1500 ставить - иначе коптер будет эти стики “слушать” и отлетать от нужной точки
Странно, разве на RTL влияют стики?
Странно, разве на RTL влияют стики?
не знаю, но кто-то писал что при отваливании пульта (FS) стики зависают и коптер летит непонятно как, к тому же там не только RTL может быть, а еще LAND
У меня всё руки не доходят до просто полетать (уже пол года не взлетал), не говоря уже о авторежимах… так что не знаю, как влияют стики на них 😃
Странно, разве на RTL влияют стики?
Влияет, при RTL коптером можно управлять, на прошлой странице обсуждали.
Влияет, при RTL коптером можно управлять
мдя, а я то думаю, отчего при подаче полного газа на приёмыш и отключении пульта моторы не сбрасывают обороты… жесть конечно, получается если на полной скорости залететь за препятствие то коптер автоматом переключится на РТЛ и на той-же скорости будет “пилить” домой?
Короче, надо провести будет полевые испытания…
Ну так полную 3D-модель местности в квадрик загружать пока не научились - в случае потери сигнала возвращаться квадрик будет по прямой.
Если есть опасение что влетит куда-нибудь - можно настроить высоту, на которой будет осуществляться RTH, поставить например 50м.
Имхо, тридцати за глаза, ты вспомни те вековые деревца 😃
Да, дерево 50м еще поискать надо, а секвойи у нас не растут 😃
в случае потери сигнала возвращаться квадрик будет по прямой
просто я хотел сделать акцент на
той-же скорости будет “пилить” домой
, т.е. если во время снижения пропадает связь - неуправляемая встреча с планетой обеспечена?
Да, думаю что после начала потери пакетов должен быть некий таймаут на восстановление связи (например 1с), при котором приемник будет выдавать последний принятый сигнал, а если сигнал так и не восстановился, тогда приемник переключится в failsafe.
Но ситуация потери связи именно в момент быстрого снижения имхо довольно маловероятна.
Да, думаю что после начала потери пакетов должен быть некий таймаут на восстановление связи (например 1с), при котором приемник будет выдавать последний принятый сигнал, а если сигнал так и не восстановился, тогда приемник переключится в failsafe.
сейчас так и есть, если 20 раз не удалось получить сигнал, то срабатывает FS
сейчас так и есть, если 20 раз не удалось получить сигнал, то срабатывает FS
хм… если сделали связь с приёмником по rx/tx можно ли оттуда взять цровень сигнала качества связи для срабатываения FS?
по rx/tx никто не делал связей, просто смотрится есть сигнал на 3 канале или нет, можно в общем то привязать и качество связи, например если за 10 периодов 3 раза не было сигнала, то 70% качество, но нужно ли?
алгоритм обнаружение сигнала
- есть прерывание - счетчик на ноль
- счетчик всегда плюсуется
- нет прерывания - счетчик плюсуется
- дошел счетчик до 20 - ставим его всегда 20 (чтобы переполнения не было) и делает какой то из вариантов FS
Такс, подкрутил я немного библиотеку входных сигналов от аппы.
- Статус рабочего приемника не отдается, пока не получим первый правильный пакет данных от приемника. Раньше всегда отдавался “работаем”. Это пришлось подправить, что бы не активировался FAILSAFE при запуске контроллера с отключенной аппой или приемником.
- FAILSAFE алгоритм детектирует пропажу сигнала по каналу THROTTLE. Если в течении 0.2сек нет сигнала, включается наш механизм FAILSAFE и выставляются значения 950,1500,1500,1500 (THROTTLE, PITCH, ROLL, YAW), Остальные каналы выдают то, что было последним валидным значением.
- В случае сработки нашего FS - вступает в работу штатный алгоритм FS? если он конечно включен и настроен через Mission Planner. Пороговое значение PWM можно оставить по умолчанию = 975
- В режиме PPM_SUM, так же отрабатывается FS.
- Добавил маленькие проверки на ширину импульса в случае PPM_SUM.
- Отключить наш FS можно в файле APM_RC_Pirates.cpp, в начале файла закоментить дефайн.
Ну и собственно сам файлик прикладываю, он от версии MPNG 2.8R3. Так же обновления залиты в SVN.
P.S. Основа взята из алгоритма Глеба (SovGVD) но я более красиво оформил его и доработал 😃
он от версии MPNG 2.8R3
А в 2.7R4 будет работать?
А в 2.7R4 будет работать?
Возможно что и заработает, если скомпилится…
Не компилится 😦
ArduCopter.cpp: In function ‘void throttle_failsafe()’:
radio:176: error: ‘class APM_RC_PIRATES’ has no member named ‘GetFailSafeState’
Придется на 2.8 переползать.
Завел себе такую табличку для тестирования
Еще два плюсика в мою табличку SuperSimple и Circle.
И подтвердил для себя еще раз, где заармился там и дом.
Еще два плюсика в мою табличку SuperSimple и Circle.
еще FPV