Создание собственной системы стабилизации
Вот видите, идея сделать полетнег на Линуксе - не такая уж и провальная.
Да нет конечно! Если движки помощнее поставить можно нормальный системник возить!
а то я тут с помощью rual какие-то полушаманские и антинаучные переделки переделываю
Ничего подобного! Всё вполне научно! См. почту.
Просто макросы не работают как мы хотим, и не известно работают ли они как хотят разрабы, это не первый и не последний их косяк-фича. Работают только те ветки макросов, которые они сами используют. Остальное либо тупо скопировано, либо переписано левой ногой.
Либо это сделано намерено, против тупого хакинга.
в 20 или 42 HZ. Теперь Delay - если фильтра нету, то Delay = 0, если фильтр включить, то MPU надо собрать несколько отсчетов, что бы подсчитать частоту сигнала и отфильтровать его (если надо), поэтому появляется задержка между реальным измененим и когда MPU выдает их на выходных регистрах.
Как раз тут и загвоздка… Сомнения очень большие что MPU “собирает” данные а потом “фильтрует”, это просто пропуск тактов или просто понижение частоты выборок (как хотите).
Я все это к тому клоню - что если поставить настройку, как вы говорите, 20-42 Hz то и опрашивать из программы микросхему чаще этой частоты не имеет смысла, и тогда получается, что данная встроенная приблуда: DLPF, может быть заменена настройкой частоты опроса датчика в самой программе…
Как раз тут и загвоздка… Сомнения очень большие что MPU “собирает” данные а потом “фильтрует”, это просто пропуск тактов или просто понижение частоты выборок (как хотите). Я все это к тому клоню - что если поставить настройку, как вы говорите, 20-42 Hz то и опрашивать из программы микросхему чаще этой частоты не имеет смысла, и тогда получается, что данная встроенная приблуда: DLPF, может быть заменена настройкой частоты опроса датчика в самой программе…
LPF никакого отношения не имеет к частоте с которой выдет данные MPU! Вы неправильно понимаете что это такое.
Представьте, что работающий мотор на одном из лучей коптера, передает вибрацию на MPU с частотой 100Гц (для примера). Это помеха, от которой надо избавится. Если поставить LPF на 50Гц, то любая вибрация с большей частотой, будет отфильтрована (в данном примере мы отфильтруем помеху от двигателя). Но при всем при этом, MPU может выдавать вам данные со скоростью 200Гц. Грубо говоря, он 200 раз в секунду, раскладывает сигнал на частоты и отсеивает все что больше LPF.
Близнецы:)
тестю третий…
Третий пошел сразу 😃 если избавите от возможности запаять штырьки и приятно провести время обжимая разъёмы - могу завтра отослать… если успею на почту, а нет так пошлю в понедельник - заодно откалибрую и надо ещё ppm добить но сегодня уже неее…
Ничего подобного! Всё вполне научно! См. почту.
ну я обычно на кофейной гуще гадаю - где бяка 😃 мне привычней тестером…
rual добил PPM на нужный канал, теперь всё красиво подключается обычным трёхконтактным шнурком 😃!!!
Даёшь видеодемострацию полёта!!!
Шо? Опять я?😃
хм… А ведь да можно летать 😃 и чё это я? только это, удержание позиции пока не покажу - gps мой вечно жалуется на жисть плохую 😦 блин и спутники даже на кухне находит, а позиционирование никакое 😦 может метров на 40 прыгнуть…
gps мой вечно жалуется на жисть плохую
Который Навис? Странно, у мну никогда не жаловался, принимаем на обрывок провода.
Без удержания не интересно, это и кук может.
Который Навис?
Не MTK 3329, Навис я так и не доделал 😦 надо антенну купить, а как-то всё нет аказии… я ещё невзначай brd удалил надо переразвести, а времени последнее время как-то небыло…
народ… вопрос на засыпку…
- спи у вас на прерывании или тупо отослал/принял? лично мне первый вариантом не совсем нравится (может и зависнуть…)
- вчера ковырялся с ст-шными датчиками (lsm303l и l3gd20)… регистр читается, вроде как пишется… а вот 6 подряд (в посылаемом байте 7-й бит - RD, 6-й - автоинкремент) - творится чот непонятное… вот думаю подключит их для начала по и2с и проверить на корректность, но вдруг?
Там читается хитрО не как в остальных датчиках там к адресу первого(с которого прочитать надо) регистра чёт прибавить надо - блин уже и не помню 😦
Если читать несколько регистров подряд то в адресе нужно определенный битик поднять.
во как в 330-й было
LSM330_OUT_X_L_G +0x80, 6, buf// к адресу регистра цыфирка прибавляеццо
6-й - автоинкремен
Там читается хитрО не как в остальных датчиках там к адресу первого(с которого прочитать надо) регистра чёт прибавить надо
то в адресе нужно определенный битик поднять.
я про это ж и написал…
кароч придется вначале проверить через и2с а потом уже дальше экспериментировать
ну или попробовать каждый регистр отдельно почитать…
Вот как я с MPU делал…
static void mpu6000AccRead(int16_t *accData)
{
uint8_t buf[6];
uint8_t i;
MPU_ON;// прижал
spi_writeByte(MPU_RA_ACCEL_XOUT_H | 0x80);
for (i = 0; i < 6; i++)
buf[i] = spi_readByte();
MPU_OFF;//отпустил
accData[0] = (int16_t)((buf[0] << 8) | buf[1]) / 8;
accData[1] = (int16_t)((buf[2] << 8) | buf[3]) / 8;
accData[2] = (int16_t)((buf[4] << 8) | buf[5]) / 8;
}
///////////////////////////////////////////////////////////////////////////
uint8_t spi_writeByte(uint8_t Data)
{
/* Wait until the transmit buffer is empty */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, Data);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
return SPI_I2S_ReceiveData(SPI1);
}
uint8_t spi_readByte(void)
{
volatile uint8_t data = 0;
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,0xFF); // Dummy Byte
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
data = SPI_I2S_ReceiveData(SPI1);
/* Return the shifted data */
return data;
}
спи у вас на прерывании или тупо отослал/принял? лично мне первый вариантом не совсем нравится (может и зависнуть…)
У меня с прерываниями, в ПХ4 без. Зависнуть может, но для этого должен быть серьёзный сбой проца и датчика, что врятли они после этого будут правильно работать.
Грубо говоря, он 200 раз в секунду, раскладывает сигнал на частоты и отсеивает все что больше
Как это он “сигнал раскладывает” ??
Он просто может делать выборки АЦП не каждый такт, а через такт, через два и т.д…
(в зависимости от настройки DLPF, этож железка…), выдавать он будет со своей частотой опроса, но фактически пойдут повторы данных ниже частоты среза…
А про какой то встроенный алгоритм фильтрации по “раскладыванию” я так ничего в документах и не нашел, Вы где то читали (?) поделитесь плиз…
блин и спутники даже на кухне находит, а позиционирование никакое может метров на 40 прыгнуть…
А математика какая по расчету позиции/расстояния ?? или это “черный ящик” ?
Я себе сделал на гаверсинусах… вроде похоже на правду выдает, но окончательно сказать пока трудно, надо погулять с железом по улице (пока только дома смотрю).
Может внутри какой-нибудь БИХ фильтр, т.к. от частоты среза меняется задержка.
Кстати, какие в PX4 для USB VID и PID, определяется в системе как HID устройство или как-то подругому?
хмм… ошибку как бы нашел, читаются все 6 регистров последовательно нормально… но мало помогло:
если читать редко - то все ок. (с выводом на уарт через 50-200мс),
как запускаешь код вия - херня всякая вместо данных.
пробовал даже считывать и проверять регистр статуса на наличие новых данных - все равно такая же канитель…
Как это он “сигнал раскладывает” ??
Например FFT(БПФ) - это не суть важно, да и не знаю, какие алгоритмы зашиты в MPU. Кстати, MPU - это не тупой аналоговый датчик с АЦП преобразователем. Там стоит процессор, который обрабатывает поступающие сигналы и выдает отфильтрованные. И он даже умеет делать Sensor Fusion (и на выходе уже выдавать углы Эйлера).
Но что бы вы разобрались, вот картинка данных, полученных с гироскопа:
Синий график - это данные с самого сенсора, как видите, в нем присутствуют высокочастотные шумы. Что бы от них избавится, MPU использует цифровой фильтр (DLPF) который пропускает только низкочастотный сигнал (синусоида на графике). Что бы MPU понять, с какой частотой изменяется сигнал, ему надо записать в память несколько сэмплов сигнала и подсчитать частоту - именно поэтому появляется задержка сигнала на выходе (показано красным графиком). В зависимости от того, какую частоту надо отфильтровать, меняется и задержка.
какие в PX4 для USB VID и PID, определяется в системе как HID устройство или как-то подругому?
определяется как com-порт id не помню - в виндовом драйвере посмотреть можно, они в самом низу драйвера прописаны…