Вопросы по iNav
Я все-таки оставлю высоту в покое а сбрасывать при арме буду целевую высоту, если АльтХолд включен.
не совсем понял идеи… что значит сбросить целевую высоту?
армлю квадрик в режиме HORIZON, стик газа внизу до упора, квадрик стоит на столе, переключаю режим в NAV ALTHOLD и ПК тут же даёт моторам 50% газа
На данный момент - это нормальная логика работы: арм есть, квадрик “летит” по мнению ПК, после включения удержания высоты происходит переход в режим “висение”, в качестве базового газа используется nav_mc_hover_th (1500 по умолчанию). Поскольку стик газа на минимуме - коптер пытается лететь вниз, и уменьшает скорость моторов.
Так в принципе это решается диапазоном работы пид регуля в альтхолде, т.е. если середина это висение и стик газа в верхнем/нижнем положениях соот-т макс. скоростям с разными знаками, то на макс. отриц. скорости пид регуль должен давать примерно мин_газ + делта (и это без И-части пид регуля), где дельта (=50-100) для стабильности на спусках для маневров по ролл питч. Т.е. при активитованном альтхолде и стике газа в нижнем положении газ будет всего на 50-100 единиц выше минимального разрешенного.
В режиме удержания высоты стик газа контролирует не газ, а вертикальную скорость (с висением на 50% газа). В планах доработка режима для комфортного взлета в режиме удержания высоты.
тут два момента: мин. газ (как писал выше) и детектор воздушной подушки, где без него будет дергаться (на медленном) взлете и посадке, т.к. пропы надувают давление около земли в эквивалент -(3-5) метров и чем ближе пропы к земле, тем сильнее еффект. У меня коптеры обычно без ног, потому эффект по макс. идет…
Но фича удобная. Я без альтхолд уже и не летаю, т.е. и взлет и посадка, все в этом режиме…
Идентификация полета это вообще беда - нет однозначного критерия по которому можно сказать - “оно летит”. Приходится предполагать что “оно летит” всегда
Я перебрал кучу вариантов и остановился на этом:
// depends on range of I part. varioErrorIPart reach this if we landed (see applyPIDControl() for details).
// Here -10 value to ignore vibro fluctuations.
#define VARIO_ERROR_I_PART_LAND_BOUND (VARIO_ERROR_I_PART_MAX - 15)
#define TIME_TO_CATCH_RAW_GROUND_ALT 100 // in ms
#define TIME_TO_BE_SHURE_DRONE_LANDED 3000 // in ms
bool groundRawAltSet = false;
uint32_t landDetectorStartTime;
uint32_t timeOnLand;
void runLandDetector() {
// detect whether we have landed by watching for low climb rate and VARIO_ERROR_I_PART_LAND_BOUND
bool landDetected = (abs(alt.estVario) <= 15) && (varioErrorIPart < -VARIO_ERROR_I_PART_LAND_BOUND)
&& (alt.estAlt < SAFE_NAV_ALTITUDE);
if (landDetected) {
timeOnLand = millis() - landDetectorStartTime;
} else if (!takeOffInProgress) { // don't reset until takeoff in progress
// we've detected movement up or down so reset land detector
landDetectorStartTime = millis();
timeOnLand = 0;
groundRawAltSet = false;
}
// protect to update groundRawAlt to keep 1st registration of ground altitude after 100ms, until reset, i.e. landDetected=false
if (!groundRawAltSet && (timeOnLand >= TIME_TO_CATCH_RAW_GROUND_ALT)) {
groundRawAltSet = true;
alt.groundRawAlt = alt.rawAlt;
}
}
// true if groundRawAlt is set and ground detected for at least TIME_TO_CATCH_RAW_GROUND_ALT
bool isGroundDetected() {
return groundRawAltSet;
}
bool isLanded() {
return groundRawAltSet && (timeOnLand >= TIME_TO_BE_SHURE_DRONE_LANDED);
}
т.е. основной критерий детектора это скорость у нуля и что бы И-часть пид регуля сползла в предельный низ, где диапазон И-части +/-250… + доп. условие что мы ниже опред-й высоты, но это для подстраховки и расчитано на равнинный ландшафт… ну и далее запускаем таймер, где каждая проверка в итерации должна говорить, да это земля, иначе сброс таймера… для не критических обработчиков (на основе этого детектора), достаточно 100-300мс (быстро-детектор), для критических (типа дизарм 3-5 сек)…
п.с. быстро-детектор используется для определения момента взлета + в ИНС что бы не наглотаться ложной высоты, т.е. корректор не будет брать высоту ниже “пойманной” высоты земли alt.groundRawAlt…
void correctZStateWithBaro(float* dt) {
// calculate error in position/vario from baro with our estimate
// reduce effect of air-cushion, i.e. influence of alt.rawAlt on take off and landing,
// because baro altitude value is dropped for 3-5m near the ground, i.e. it's not correct
bool isAirCushionEffectDetected = isGroundDetected() && (alt.rawAlt < alt.groundRawAlt);
float posError = (isAirCushionEffectDetected ? alt.groundRawAlt : alt.rawAlt)
- histZPosition[histZCount];
float varioError = ((isAirCushionEffectDetected && (alt.rawVario < 0)) ? 0.0f : alt.rawVario)
- histVario[histZCount];
/* !!! history z-position/vario and raw alt/vario baro values should be at the same phase
* i.e. looks the same on chart and depends on HIST_Z_POINTS !!! */
//debug[0] = histZPosition[histZCount];
//debug[1] = alt.rawAlt;
//debug[2] = histVario[histZCount];
//debug[3] = alt.rawVario;
ins.velocityEF[ALT] += varioError * (INS_Z_VEL_FACTOR * *dt);
ins.positionEF[ALT] += posError * (INS_Z_POS_FACTOR * *dt);
}
Александр, благодарю! У меня детектор посадки примерно также сделан, но кое-что лучше сделано в MahoWii, попробую прикрутить к INAV 😁
на здоровье! 😃
на здоровье!
Опробовал сегодня идею с детектором воздушной подушки. Блеск! Наконец-то взлетать в АльтХолде стало легко и приятно без подпрыгиваний. Реализовано немного по-другому: использую сонар, если он есть; момент взлета определяется как вертикальная скорость больше 15см/с в течение более чем 0,25 сек.
Есть еще что подшлифовать в коде, но даже сейчас стало намного лучше, спасибо еще раз за идею!
использую сонар, если он есть; момент взлета определяется как вертикальная скорость больше 15см/с в течение более чем 0,25 сек.
млин с нетерпением жду релиза. как раз под мой коптеренок как будто точите. я к нему и сонар уже прикрутил. только пока дома подлетывал. на улице каша - грохнется что-нибудь сгорит. как подсохнет тогда полетаю.
mephisto-nvart, у меня такойже GPS-модуль. Скажите вы свой прошивали или просто подключили после покупки и всё?
прошивали или просто подключили после покупки и всё?
подключил и все. на софтсериал.
зы тормозной малость модуль - фикс ловил на балконе минут пять. на апм он же поймал его меньше чем за минуту.
использую сонар, если он есть
Я отказался от поддержки сонаров, т.к. вещица капризная. Снег не любит, траву тоже + самое хреновое, что иногда дает пакеты с ошибками, когда высота выше его диапазона. Т.е. может сказать 3м, а там уже 10 😃
я про копеечние сонары типа HC-SR04, DYP-ME007
Ну и главное что с баро ms5611 сонар уже и не нужен…
Я отказался от поддержки сонаров, т.к. вещица капризная. Снег не любит, траву тоже + самое хреновое, что иногда дает пакеты с ошибками, когда высота выше его диапазона. Т.е. может сказать 3м, а там уже 10
я про копеечние сонары типа HC-SR04, DYP-ME007Ну и главное что с баро ms5611 сонар уже и не нужен…
Я сонару доверяю только до высоты 50см. Удержание пока не работает, но сонар (если он есть) используется для определения земли при взлете-посадке.
Пре-релиз 1.1-RC1
github.com/iNavFlight/inav/releases/tag/1.1-RC1
Из самого значимого:
- Новый ПИД-контроллер (вместо Rewrite и Lux)
- LED_STRIP вернулся
- GPS теперь не показывать детальную информацию о спутниках
ВНИМАНИЕ
Требуется тюнинг ПИДов заново. Старые работать НЕ БУДУТ!
Требуется тюнинг ПИДов заново.
Дефолтные на 250-ом летабелно или сильно тюнить надо?
Дефолтные на 250-ом летабелно или сильно тюнить надо?
Летабельно, но чтобы летало хорошо - надо тюнить с нуля.
сорри за оффтопик, а как барометр\пгс на софтсериал перевесить?😃
пысы: ткните ссылкой если не турдно)
Сегодня облетал 1.1. PosHold и AltHold отлично! С PIDми пришлось долго повозиться, есчо не отлично но ужэ близко к хорошо. Раз десять пробывал RTH, один раз повернулся к дому но не полетел. Два раза прилетел но дo конца не приземлился, просто завис в 4х метран и всё. Стал меньше унитазить! В общем не плохо!
Всем привет!
Пре-релиз 1.1-RC1
А плата revolution в релизе будет?
Да, и есчо, у меня почемуто 3 PID controller а …
сорри за оффтопик, а как барометр\пгс на софтсериал перевесить?
пысы: ткните ссылкой если не турдно)
На софтсериал можно только GPS повесить, но я бы не стал. 19200 мало для стабильной работы, да и не слишком надежен Softserial.
Сегодня облетал 1.1. PosHold и AltHold отлично! С PIDми пришлось долго повозиться, есчо не отлично но ужэ близко к хорошо. Раз десять пробывал RTH, один раз повернулся к дому но не полетел. Два раза прилетел но дo конца не приземлился, просто завис в 4х метран и всё. Стал меньше унитазить! В общем не плохо!
Всем привет!
Спасибо за тесты. Интересно посмотреть логи. Случайно нет записи этих RTH на блэкбокс?
Да, и есчо, у меня почемуто 3 PID controller а …
Их и будет три в конфигураторе. По факту он один, а выбор в конфигураторе игнорируется. Пока у нас нету своего “INAV Configurator” 😃
А плата revolution в релизе будет?
В 1.1 - нет. В 1.2 - будет, если я раздобуду себе REVO чтобы отлаживать код.
К сожалению Black box ом пока не обзавелся. Сегодня глюки с посадкой повторились.
Сначало все было ок, RTH, WP, все как должно. Потом полетал пару быстрых кругов со всеми прибамбасами. Опять WP , вижу , поднялся почти на двойную васоту. Потом опять RTH, прилетел домой, чуть опустился и замер. Хорошо что моторы не выключает… Думаю что Baro глючит
К сожалению Black box ом пока не обзавелся. Сегодня глюки с посадкой повторились.
Сначало все было ок, RTH, WP, все как должно. Потом полетал пару быстрых кругов со всеми прибамбасами. Опять WP , вижу , поднялся почти на двойную васоту. Потом опять RTH, прилетел домой, чуть опустился и замер. Хорошо что моторы не выключает… Думаю что Baro глючит
Возможно баро, возможно аксель. 6-точечная калибровка акселя сделана? Если она не сделана - могут быть трудноуловимые глюки. Эх… Блэкбокс бы сильно упростил отладку.
PS: Как впечатления от нового PID-контроллера?
Калибровку делал, прошла успешно ( смотрел в CLI ). PID контроллером очень доволен, хорошо летает!
Калибровку делал, прошла успешно ( смотрел в CLI ).
Тогда без блэкбокса точно не разберешься. Какое значение параметра inav_w_z_baro_p в CLI? Если старое (1-2), то его нужно снизить до 0.2-0.3, в новом коде убран фильтр барометра и весь шум идет в расчеты.
PID контроллером очень доволен, хорошо летает!
Отлично! Не зря он пару месяцев в разработке был 😁