ArduCopter Mega: порт на обычную Arduino (тестим)

Sir_Alex
Serj=:

Глеб сделал эту фишку.

Что то вылетело из головы. 😒

Так может тогда проще сделать так:

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…

SovGVD
Sir_Alex:

В этом случае будет врубаться штатный 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)

Sir_Alex
SovGVD:

upd: а constrain(result,MIN_PULSEWIDTH,MAX_PULSEWIDTH); не зарежут 950?

#define MIN_PULSEWIDTH 900

SovGVD:

угу, НО НАДО на 0 1 3 каналах 1500 ставить - иначе коптер будет эти стики “слушать” и отлетать от нужной точки

Странно, разве на RTL влияют стики?

SovGVD
Sir_Alex:

Странно, разве на RTL влияют стики?

не знаю, но кто-то писал что при отваливании пульта (FS) стики зависают и коптер летит непонятно как, к тому же там не только RTL может быть, а еще LAND

Sir_Alex

У меня всё руки не доходят до просто полетать (уже пол года не взлетал), не говоря уже о авторежимах… так что не знаю, как влияют стики на них 😃

kren-DEL
Serj=:

Влияет, при RTL коптером можно управлять

мдя, а я то думаю, отчего при подаче полного газа на приёмыш и отключении пульта моторы не сбрасывают обороты… жесть конечно, получается если на полной скорости залететь за препятствие то коптер автоматом переключится на РТЛ и на той-же скорости будет “пилить” домой?
Короче, надо провести будет полевые испытания…

DVE

Ну так полную 3D-модель местности в квадрик загружать пока не научились - в случае потери сигнала возвращаться квадрик будет по прямой.

Если есть опасение что влетит куда-нибудь - можно настроить высоту, на которой будет осуществляться RTH, поставить например 50м.

DVE

Да, дерево 50м еще поискать надо, а секвойи у нас не растут 😃

kren-DEL
DVE:

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

просто я хотел сделать акцент на

kren-DEL:

той-же скорости будет “пилить” домой

, т.е. если во время снижения пропадает связь - неуправляемая встреча с планетой обеспечена?

DVE

Да, думаю что после начала потери пакетов должен быть некий таймаут на восстановление связи (например 1с), при котором приемник будет выдавать последний принятый сигнал, а если сигнал так и не восстановился, тогда приемник переключится в failsafe.

Но ситуация потери связи именно в момент быстрого снижения имхо довольно маловероятна.

SovGVD
DVE:

Да, думаю что после начала потери пакетов должен быть некий таймаут на восстановление связи (например 1с), при котором приемник будет выдавать последний принятый сигнал, а если сигнал так и не восстановился, тогда приемник переключится в failsafe.

сейчас так и есть, если 20 раз не удалось получить сигнал, то срабатывает FS

kren-DEL
SovGVD:

сейчас так и есть, если 20 раз не удалось получить сигнал, то срабатывает FS

хм… если сделали связь с приёмником по rx/tx можно ли оттуда взять цровень сигнала качества связи для срабатываения FS?

SovGVD

по rx/tx никто не делал связей, просто смотрится есть сигнал на 3 канале или нет, можно в общем то привязать и качество связи, например если за 10 периодов 3 раза не было сигнала, то 70% качество, но нужно ли?
алгоритм обнаружение сигнала

  1. есть прерывание - счетчик на ноль
  2. счетчик всегда плюсуется
  3. нет прерывания - счетчик плюсуется
  4. дошел счетчик до 20 - ставим его всегда 20 (чтобы переполнения не было) и делает какой то из вариантов FS
Sir_Alex

Такс, подкрутил я немного библиотеку входных сигналов от аппы.

  1. Статус рабочего приемника не отдается, пока не получим первый правильный пакет данных от приемника. Раньше всегда отдавался “работаем”. Это пришлось подправить, что бы не активировался FAILSAFE при запуске контроллера с отключенной аппой или приемником.
  2. FAILSAFE алгоритм детектирует пропажу сигнала по каналу THROTTLE. Если в течении 0.2сек нет сигнала, включается наш механизм FAILSAFE и выставляются значения 950,1500,1500,1500 (THROTTLE, PITCH, ROLL, YAW), Остальные каналы выдают то, что было последним валидным значением.
  3. В случае сработки нашего FS - вступает в работу штатный алгоритм FS? если он конечно включен и настроен через Mission Planner. Пороговое значение PWM можно оставить по умолчанию = 975
  4. В режиме PPM_SUM, так же отрабатывается FS.
  5. Добавил маленькие проверки на ширину импульса в случае PPM_SUM.
  6. Отключить наш FS можно в файле APM_RC_Pirates.cpp, в начале файла закоментить дефайн.

Ну и собственно сам файлик прикладываю, он от версии MPNG 2.8R3. Так же обновления залиты в SVN.

P.S. Основа взята из алгоритма Глеба (SovGVD) но я более красиво оформил его и доработал 😃

APM_RC.rar

Serj=
Sir_Alex:

он от версии MPNG 2.8R3

А в 2.7R4 будет работать?

Sir_Alex
Serj=:

А в 2.7R4 будет работать?

Возможно что и заработает, если скомпилится…

Serj=

Не компилится 😦
ArduCopter.cpp: In function ‘void throttle_failsafe()’:
radio:176: error: ‘class APM_RC_PIRATES’ has no member named ‘GetFailSafeState’
Придется на 2.8 переползать.

Serj=
Serj=:

Завел себе такую табличку для тестирования

Еще два плюсика в мою табличку SuperSimple и Circle.
И подтвердил для себя еще раз, где заармился там и дом.

SovGVD
Serj=:

Еще два плюсика в мою табличку SuperSimple и Circle.

еще FPV