Войти

Показать полную графическую версию : Выбор значения многозначной функции


Страниц : [1] 2 3

Tonny_Bennet
10-07-2012, 13:51
Здравствуйте.

Существует ИК дальномер SHARP, который можно подключить к ЦАП и в зависимости от расстояния до объекта будет изменяться напряжение на выходе дальномера. Зависимость напряжения не только нелинейная, но и с "крохотным" изъяном :

http://robocraft.ru/files/sensors/Sharp/GP2Y0A02YK0F/SHARP-GP2Y0A02YK0F-distance-measuring-characteristics.png

Отградуировав свой дальномер я получил похожую зависимость и пока у меня нет предположений как можно грамотно обработать получаемые данные. К примеру получив на выходе 1 Вольт, по графику видно что функция имеет два значения расстояния: 5 см и 65 см. Как вы наверное понимаете препятствие может возникнуть как на 5 так и на 65 сантиметрах. Отслеживать предыдущее значение расстояния по-моему неправильно из-за некоторого количества ошибок самого дальномера.

Посоветуйте пожалуйста оптимальный алгоритм для обработки данных.

Beyound
10-07-2012, 18:50
не, тут нет никакого алгоритма. суть в том что в 0-й момент времени при включении дальномера если он покажет 1 вольт то хоть умри, а одно из 2-х значений не выбрать. аналогично если дальномером "сканируют" и наступает край препятствия - оно непонятно что значит 1 вольт даже если у нас есть безошибочная история значений.
нужен либо дублирующий дальномер с другими хар-ками или скажем чуть отодвинутый вглубь на 20 см. лично я бы просто сказал что дальномер с одним таким датчиком не пригоден мерить дистанции ближе 15 см, лучше поставить второй датчик имеющий более плоскую кривую на малых дистанциях.

lxa85
10-07-2012, 19:18
Tonny_Bennet, никак. По одному единственному значению, в условиях неоднозначности удаление объекта от наблюдателя не определить.
Тебе нужна либо вторая функция, и однозначная функция разности. Это может быть либо второй дальномер, либо несколько замеров дальности.
Т.е. надо измерить окрестность точки, чтобы понять возрастает или убывает функция.
Либо ввести условием измерение дальности от 15-20 сантиметров.
Tonny_Bennet, расскажи, если можно, а в чем состоит глобальная задача? Робот "со зрением"? Манипулятор?

Tonny_Bennet
10-07-2012, 23:04
лучше поставить второй датчик имеющий более плоскую кривую на малых дистанциях. »

В принципе резонно, но пока есть толкьо один датчик. Будем крутиться как получится :)

Это может быть либо второй дальномер, либо несколько замеров дальности.
Т.е. надо измерить окрестность точки, чтобы понять возрастает или убывает функция. »

В этом случае прийдётся изменить положение дальномера что-бы промерить окрестности точки... да и промерив окрестность получу я снова тот самый 1 Вольт и буду дальше думать какое там расстояние ;)

Либо ввести условием измерение дальности от 15-20 сантиметров. »
Правильно ли я понял, что если дальномер засунуть в некоторую трубу длинной 20 см, тем самым физически ограничить приближение объектов к дальномеру можно полностью доверять его показаниям. Костыль достойный верстальщика под IE ;)

в чем состоит глобальная задача? Робот "со зрением"? Манипулятор? »
Хочу собрать платформу на колёсном шасси, с wi-fi модулем, камерой и монитором. В планах управление с Android-устройства.

В принципе вы ответили на мой вопрос и мне будет над чем задуматься. Спасибо.

lxa85
11-07-2012, 00:37
Ответили и хорошо. :) Просто сейчас несколько разовью и закончу мысль.
Раз мы говорим про колесное шасси, значит оно имеет свойство передвигаться. Значит у нас получается некоторый набор функций от дальномера.
Под измерением окрестности точки я подразумевал множественный анализ дальности объекта. При движение взад-вперед +- 2,5 см можно определить, функция растет или убывает. Если с увеличением дальности функция растет, то объект лежит в пределах 15-20 см. Соотв. наоборот.
Правильно ли я понял, что если дальномер засунуть в некоторую трубу длинной 20 см, тем самым физически ограничить приближение объектов к дальномеру можно полностью доверять его показаниям. »
Совершенно верно.
Костыль достойный верстальщика под IE »
Ни, такой гадостью мы не занимались. :) Просто практика создания костылей, без IE. :)
Хочу собрать платформу на колёсном шасси, с wi-fi модулем, камерой и монитором. »
В развитие темы:
в данный момент, как я понимаю шасси достаточно примитивно. Задачи которые обычно предъявляются к таким моделям -- самостоятельный объезд препятствий. Соотв. необходим анализ препятствий. И хорошо бы не просто знать о препятствии, но и знать его геометрическую форму. Т.е. производить сканирование пространства в полярной системе координат, и писать алгоритмы обсчета.
А вот ту-у-ут возникает вопрос установки второго дальномера, также сканирующего пространство в полярной СК. При таком раскладе возникает масса интересных задач с приставкой стерео- и других.

Уф. Мысль закончил! :)

Tonny_Bennet
11-07-2012, 10:30
в данный момент, как я понимаю шасси достаточно примитивно. Задачи которые обычно предъявляются к таким моделям -- самостоятельный объезд препятствий. Соотв. необходим анализ препятствий. И хорошо бы не просто знать о препятствии, но и знать его геометрическую форму. Т.е. производить сканирование пространства в полярной системе координат, и писать алгоритмы обсчета.
А вот ту-у-ут возникает вопрос установки второго дальномера, также сканирующего пространство в полярной СК. При таком раскладе возникает масса интересных задач с приставкой стерео- и других.
Уф. Мысль закончил! »

Спасибо за мысль... это планы на недалёкое будущее. Пока попробую реализовать то что задумал: машинка на радиоуправлении с камерой :) а потом уже начну прописывать алгоритмы для преодоления препятствий и т.д.

pva
12-07-2012, 00:38
Tonny_Bennet, У тебя производная и значение по координате {y, dy/dx} однозначно определяют расстояние. Подбери аналитическую функцию - получишь модель для расчёта. Советую померять зависимость амплитуды шума, который даёт прибор от расстояния. Возможно окажется что на близких расстояниях шум больше - это поможет определиться стоя на месте, но затратив время. А в движении - как правильно сказал lxa85, твой робот должен паниковать, если при движении вперёд вольтаж резко падает.

Tonny_Bennet
12-07-2012, 17:15
Советую померять зависимость амплитуды шума, который даёт прибор от расстояния. »
Что есть "амплитуда шума"?

А в движении - как правильно сказал lxa85, твой робот должен паниковать, если при движении вперёд вольтаж резко падает. »

Эту часть я уже прописал :) Спасибо.

Работая с оптическим дальномером я предполагал, что будет некоторая погрешность в измерениях до объектов разного цвета. Но то, что отличаться показания будут в несколько раз я не ждал. К примеру дальномер отградуированный на белый лист бумаги, с установленным препятствием чёрного цвета на 20 см показывает, что оно удалено на 35 сантиметров.

Подумываю отказаться от этой затеи и воспользоваться ультразвуковым датчиком.

pva
12-07-2012, 21:10
Подумываю отказаться от этой затеи »
Не спеши, отказаться всегда успеешь. При движении можешь поделить изменение расстояния на скорость движения - тогда получишь информацию о цвете. И это только дальномером!
"амплитуда шума"? »
Под амплитудой шума я понимаю среднеквадратичное отклонение показаний, снятых в одном и том же положении. Конечно же имеет практический смысл считать только среднее за определённый период времени:
1. В цикле записываешь N показаний y[i], взятых через одинаковый промежуток времени
2. Считаешь среднее M=sum(y[i], 0<i<N) /*псевдокод*/
3. Считаешь дисперсию D=sum(pow(y[i]-M,2), 0<i<N)
4. Как правило "красивую" форму имеет ср.-кв. отклонение S=sqrt(D)

Сделай несколько замеров с разным интервалом по времени между y[i] и с разными расстояниями, покажи графики, может что подскажем.

lxa85
12-07-2012, 21:14
Работая с оптическим дальномером я предполагал, что будет некоторая погрешность в измерениях до объектов разного цвета. Но то, что отличаться показания будут в несколько раз я не ждал. К примеру дальномер отградуированный на белый лист бумаги, с установленным препятствием чёрного цвета на 20 см показывает, что оно удалено на 35 сантиметров. »
Аааа! :) А я хотел спросить про цветность объектов, но видать оставил вопрос на потом и благополучно забыл.
И прав pva, надо искать некоторую аналитическую функцию т.к. объектов реального мира много. Они деревянные, железные, имеют собственную структуру, цвет, отражающие характеристики и т.д.
Подумываю отказаться от этой затеи и воспользоваться ультразвуковым датчиком. »
Различные коэф. поглощения звука? Ковер, ножка стола(дерево), бетон, различные типы обоев на стене?
Или пытаться анализировать отзвук и возвращаемую функцию. Обширнейшая теория звука в помощь! :)
Tonny_Bennet, Слона едят по кусочкам. Создавай до крайней степени примитивную, но рабочую модель. Пусть она пока будет двигаться в "белом" пространстве. Будут проведены и готовы исследования -- ведешь "цветное" пространство.

Tonny_Bennet
12-07-2012, 22:52
Под амплитудой шума я понимаю среднеквадратичное отклонение показаний, снятых в одном и том же положении. Конечно же имеет практический смысл считать только среднее за определённый период времени:
1. В цикле записываешь N показаний y[i], взятых через одинаковый промежуток времени
2. Считаешь среднее M=sum(y[i], 0<i<N) /*псевдокод*/
3. Считаешь дисперсию D=sum(pow(y[i]-M,2), 0<i<N)
4. Как правило "красивую" форму имеет ср.-кв. отклонение S=sqrt(D)
Сделай несколько замеров с разным интервалом по времени между y[i] и с разными расстояниями, покажи графики, может что подскажем. »

Ясно, я пока остановился на усреднении замеренных показателей в процессе градуирования дальномера. По-возможности сделаю графики и среднеквадратичного отклонения и выложу, раз к этому проявлен интерес :)

Различные коэф. поглощения звука? Ковер, ножка стола(дерево), бетон, различные типы обоев на стене?
Или пытаться анализировать отзвук и возвращаемую функцию. Обширнейшая теория звука в помощь! »

Да, о этих проблемах у ультразвуковых дальномеров я уже успел прочитать. Видимо в идеале нужно создавать непростой программно-аппаратный комплекс.

Слона едят по кусочкам. Создавай до крайней степени примитивную, но рабочую модель. Пусть она пока будет двигаться в "белом" пространстве. Будут проведены и готовы исследования -- ведешь "цветное" пространство. »

Так я в принципе и двигаюсь, просто задавая открытый вопрос сразу получаешь много дельных советов и предложений. Приятно. Но в то же время чтобы всё проверить приходится отдаляться от основной идеи.

lxa85
13-07-2012, 00:38
Но в то же время чтобы всё проверить приходится отдаляться от основной идеи. »
Скажу по секрету - в том и есть "Наука" :crazy: :)

Tonny_Bennet
13-07-2012, 13:03
Контроллер можно настроить на автоматический опрос линии АЦП. Установил частоту опроса на 100 Гц. Устанавливал белое препятствие на расстоянии от 5 до 45 см с интервалом в 1 см. В цикле набирал по 1000 значений измерений. И дальше по алгоритму написал функцию расчёта дисперсии.


double[] compute_disperse(List<int> Y)
{
int[] y = Y.ToArray();

double M = 0;

for (int i=0; i< y.Length;i++)
{
M += y[i];
}

M = M / y.Length;

double D = 0;

for (int i=0; i< y.Length; i++)
{
D += Math.Pow(y[i] - M,2);
}

return new double[] { M, Math.Sqrt(D) };
}


Построил график в программе AdvancedGrapher. Применил сглаживание. Зелёная линия это арифметическое среднее. Красная - дисперсия. По оси абсцисс расстояние. По оси ординат значения в некоторых единицах АЦП (можно однозначно перевести в вольты).
http://s018.radikal.ru/i524/1207/97/358e142f6df6.gif

pva
13-07-2012, 14:46
В формуле дисперсии не хватает "поделить на N-1" (кажется я забыл это написать), поэтому отклонение на графике завышено в Sqrt(999) раз. Для качественного анализа это не смертельно.

1. Сглаживание лучше не делать, а просто отметить точки. На случайных данных сглаживание даёт сбивающие с толку эффекты. Сделай графики без сглаживания и без соединения точек.
2. Странно, что на 1000 точках отклонение так сильно прыгает. Можно посмотреть массивы в точках x=10 и x=15? Возможно там не гауссово распределение (например дальномер "видит" рисунок на припятсвии)
3. Функция отклика отличается от заявленной производителем (а может быть это эффект сглаживания)
4. Создаётся ощущение, что на дальних расстояниях шум выше

Чтобы получить хорошие данные не особо себя затрудняя, можно поедположить, что медленное движение препятствия на дальномер не оказывает больших эффектов на статистику 1000-точечного замера. Тогда можно поставить АЦП на постоянную запись (сливать данные на винт, пусть в 2-мегабайтный файл) и с постоянной небольшой скоростью двигать препятствие на дальномер (с этим хорошо справится шаговый двигатель). Замерив время начала и окончания эксперимента, можно узнать скорость движения. Большой файл порезать на 2-килобайтные кусочки. В итоге всё сделает автоматика, а во время эсперимента можно пить чай.

Tonny_Bennet
13-07-2012, 15:14
В формуле дисперсии не хватает "поделить на N-1" (кажется я забыл это написать), поэтому отклонение на графике завышено в Sqrt(999) раз. Для качественного анализа это не смертельно. »

В своём коде я делил на N.

1. Сглаживание лучше не делать, а просто отметить точки. На случайных данных сглаживание даёт сбивающие с толку эффекты. Сделай графики без сглаживания и без соединения точек. »
http://s018.radikal.ru/i509/1207/b4/6ca1950f0ed0.gif

2. Странно, что на 1000 точках отклонение так сильно прыгает. Можно посмотреть массивы в точках x=10 и x=15? Возможно там не гауссово распределение (например дальномер "видит" рисунок на припятсвии) »

Хм, может я не правильно понял. Просто постараюсь ещё раз описать свои действия:

1. установил препятствие на расстоянии L см
2. запустил сбор статистики измерений пока не наберётся N штук.
3. произвёл усреднение и рассчитал дисперсию по представленным формулам.
4. записал в файл 3 значения: L M D (расстояние до объекта, среднее значение измерений, дисперсия)

Проделав данную процедуру 30 раз я получил набор значений (L M D) который построил в виде графика.

Можно посмотреть массивы в точках x=10 и x=15? Возможно там не гауссово распределение (например дальномер "видит" рисунок на припятсвии) »

Т.е. стоит посмотреть на распределение экспериментальных данных при измерении в одной точке?
Рисунка нет. Белый лист бумаги.

3. Функция отклика отличается от заявленной производителем (а может быть это эффект сглаживания) »

В первом посте я просто взял картинку из даташита другого оптического дальномера. Вид линии совпадает с оригиналом и я не считаю это каким-либо отклонением.

Чтобы получить хорошие данные не особо себя затрудняя, можно поедположить, что медленное движение препятствия на дальномер не оказывает больших эффектов на статистику 1000-точечного замера. Тогда можно поставить АЦП на постоянную запись (сливать данные на винт, пусть в 2-мегабайтный файл) и с постоянной небольшой скоростью двигать препятствие на дальномер (с этим хорошо справится шаговый двигатель). Замерив время начала и окончания эксперимента, можно узнать скорость движения. Большой файл порезать на 2-килобайтные кусочки. В итоге всё сделает автоматика, а во время эсперимента можно пить чай. »

Отличный вариант но вот шагового двигателя у меня нету :(

Tonny_Bennet
13-07-2012, 16:09
Можно посмотреть массивы в точках x=10 и x=15? »

Установил препятствие на 10 см.

Построил диаграмму. По оси абсцисс значения АЦП по оси ординат количество фиксаций данного события.

http://s49.radikal.ru/i125/1207/46/361644863015.jpg

pva
13-07-2012, 20:59
Я имел в виду чтобы ты аттачил записанные файлы (семплы), я бы сам посмотрел нужные срезы :). Судя по гистограмме (подозреваю что это плотность распределения), распределение не нормальное, а лог-нормальное или что-то в этом роде. Похоже что на выходной сигнал дальномера где-то накладывается нелинейное усиление. Попробуй построить гистограмму плотности распределения от логарифма получаемых значений.

Tonny_Bennet
14-07-2012, 13:03
Я имел в виду чтобы ты аттачил записанные файлы (семплы), я бы сам посмотрел нужные срезы »

На каких расстояниях записать?

Судя по гистограмме (подозреваю что это плотность распределения), распределение не нормальное, а лог-нормальное или что-то в этом роде. »

Я не могу сказать как это называется, но могу ещё раз рассказать как я получил эту гистрограмму. Я установил препятствие на 10 см. Запустил опрос датчика и смотрел сколько раз из 1000 будет появляться то или иное значение. Соответственно записывал количество регистраций значения Чем выше палочка тем больше раз выпадало это значение. На данном примере значение 368 регистрировалось 637 раз из тысячи. А значение 369 - 173 раза из тысячи.

Похоже что на выходной сигнал дальномера где-то накладывается нелинейное усиление. »

Откуда такие предположения и чем они мне грозят?

pva
14-07-2012, 21:35
Я не могу сказать как это называется, но могу ещё раз рассказать как я получил эту гистрограмму. Я установил препятствие на 10 см. Запустил опрос датчика и смотрел сколько раз из 1000 будет появляться то или иное значение. »
немного теории чисто чтобы знать как это называется:
Стандартная процедура замеры плотности распределения такая (почти как ты описал):
1. записывается сигнал, дофига независимых отсчётов.
2. вещественная ось делится на равные отрезки (чем длинее отрезок - тем глаже, но меньше точек в гистограмме)
3. вычисляется сколько точек попали в каждый отрезок.
Второй вариант (по смыслу то же самое):
1. дофига точек
2. Строится функция распределения = вероятность попадания числа в отрезок (-inf; x) как функция от x (сколько % точек меньше x).
3. плотность распределения - это производная функции распределения по x

На каких расстояниях записать? »
Мне понравились расстояния 10 и 15 см, потому что там явный скачок и провал ср-кв. отклонения. В идеале было бы хорошо посмотреть "типичный" сингал и "сильное отклонение от нормы", а расстояние любое от 10 до 30 см.

Снимать данные можно с любой частотой в диапазоне 100 - 10000 Гц (верх взял от балды, не принципиально). Нужно просто записать показания в файл (без обработки). Чем больше точек - тем представительней выборка. Советую от 1000 шт.

Откуда такие предположения и чем они мне грозят? »
Гистограмма формой похожа на искаженную гауссиану. Природные шумы (случайные процессы, возникающие за счёт большого числа случайных факторов, имеющих различные распределения) в пределе подчиняются нормальному закону распределения (плотность в виде гауссианы). Т.о. возможно мы видим нелинейно искажённый природный шум. Исказить его можно усилителем.
Предположения не грозят, они могут помочь найти недостающий фактор, помогающий определить расстояние.

Beyound
15-07-2012, 20:38
на мой взгляд вы немного не в ту степь углубились. вообще измерение достаточно важное - оно показывает насколько хорошо работает датчик, но вообще графики странные получились.
вот почему - мат. ожидание соизмеримо с дисперсией. т.е. значение, которое точно соотносится с расстоянием (мат. ожидание), соизмеримо по размерам, если не больше, со средним размером ошибки (дисперсией). это фигово и так быть не должно, скорее всего ты неправильно посчитал дисперсию. вот почему - на рисунке с 10 см такой дисперсии явно нет - это факт.
составь новые графики, возможно есть смысл увеличит на пару порядков замеры, уменьшив интервал между опросом (чтоб время не терять :-) ).
! но все это не поможет в проблемой перейти экстремум на графике вольты-расстояние. в коде программы для датчика эти данные бесполезны ибо поиск мат. ожидания для тебя будет всегда ибо один замер при поиске дистанции - лажа - тебе над делать больше. вот если бы там была некая нелинейность или какие нить особые места.
п.с. с расстояние дисперсия по идеи должна расти. чем больше расстояние - тем больше шума набирает сигнал




© OSzone.net 2001-2012