Перейти к содержанию
    

Балансирующий робот

Делаю балансирующего робота(типа игрушка,для души, вроде этого должно получится http://www.geology.smu.edu/~dpa-www/robo/nbot/), встал вопрос о том как его удерживать на двух колесах. Посмотрел в интеренете, обычно делают с помощью гироскопа(большая погрешность со временем,быстрая скорость) + акселлерометр(маленькая скорость,маленькая погрешность).Типа гироскопом меряют угол отклонения,а потом его акселлерометром калибруют. Посмотрел у AD,adxl202eb(2000 руб) + adxrs300eb(3000 руб).Цены совсем не радуют((( может кто подскажет как еще можно подешевле решить проблему? хатит ли одного акселлерометра для стабилизации положения??

Изменено пользователем Dars

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Акселерометры явно "не те", и явно "не там" искали. Посмотрите двух- трехосевые приборы от ST Microelectronics, думаю, они получше во всех смыслах.

Да и с ценой на гироскопы что-то у Вас не так. В Москве их реально за 45-50 уёв купить...

Ваши же замечания по поводу стабилизации объекта с помощью гироскопов и акселерометров вызывают улыбку. Когда начнёте разбираться с этим плотно, поймёте, в чём дело...

Только не подумайте, что задача очень уж сложна. Вовсе нет...

 

ЗЫ. Прошу прощения, я не заметил, что "eb". На них цена действительно побольше. Только вот нафиг они нужны? Открою секрет: на ADXRS150EB мною найдены ошибки - все кондёры там перепутаны, причём "eb" были из разных серий. Плата теоретически работает, но со значительным несоответствием параметров: в частности, частотная полоса пропускания её меньше 10 Гц против 40 Гц заявленных.

Изменено пользователем Stanislav

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваши же замечания по поводу стабилизации объекта с помощью гироскопов и акселерометров вызывают улыбку. Когда начнёте разбираться с этим плотно, поймёте, в чём дело...

Только не подумайте, что задача очень уж сложна. Вовсе нет...

 

 

А можно по подробней?что для этого достаточно?и где про это все можно почитать?

 

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

 

Там бга корпус,мне его нечем и некуда паять)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно по подробней?что для этого достаточно?и где про это все можно почитать?
Для измерения отклонения платформы от вертикали теоретически достаточно только трёхосевого акселерометра. Если объект имеет вращательные степени свободы, акселерометры следует располагать как можно ближе к центру вращения, для уменьшения влияния центростремительных ускорений. А вот для полной компенсации этих ускорений гироскопы-то и нужны. Для измерения же углов ADXRS не годятся - слишком велики шумы, при интегрировании набегает ошибка в градусы за каждые несколько секунд времени.

Но это всё "на пальцах", приводить всю теорию рамки форума (да и время) не позволяют. Становитесь "своим", в родных закромах есть немало литературы по интересующему Вас вопросу.

Там бга корпус,мне его нечем и некуда паять)
Посмотрите в разделе форума "Пайка, монтаж, отладка". Там можно найти исчерпывающую инфу по данному вопросу. Если всё-таки приобретёте "eb", могу подсказать, как её довести до ума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но это всё "на пальцах", приводить всю теорию рамки форума (да и время) не позволяют. Становитесь "своим", в родных закромах есть немало литературы по интересующему Вас вопросу.

 

А конкретно какие книги освещают данную проблему? С учетом того что существует море книг по ТАУ и ТАР, но где есть примеры работы в связке акселерометров с датчиками угловой скорости?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А конкретно какие книги освещают данную проблему? С учетом того что существует море книг по ТАУ и ТАР, но где есть примеры работы в связке акселерометров с датчиками угловой скорости?

[\QUOTE]

 

Книг по этой теме тоже море. Но другое. Есть даже пересечение этих морей, в области гиростабилизации. Т.к. у вас нет поворотной гироплатформы, то связка ДУС и акселерометров (ещё их называют ДЛУ) делается вычислительно. Т.е. система получается бесплатформенная.

 

Из отечественных, того, что сразу на ум приходит

 

Бранец, Шмыглевский Теория бесплатформенных инерциальных навигационный систем.

Введение в теорию инерциальных навигационных систем. (Только название, автора не помню)

Стабилизация ЛА бесплатформенной инерциальной навигационной системой.(Только название, автора не помню)

 

В гугле разнокалиберных статей по этой теме - море ещё более немеряное. Если искать по ключевым словам strapdown INS, strapdown IMU, GPS-INS integration. GPS вам конечно не нужно, но в таких статьях как правило выводятся алгоритмы совместного обсчёта показаний ДУС и ДЛУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Да, еще нужно, чтобы акселлерометр имел встроенный усилитель сигнала, преобразующуй его в цифровой формат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потыкался в интернете по ключевому слову «акселлерометр» - вроде ничего особенно нет.

И не будет. Попробуйте потыкаться по слову "акселерометр".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Но это всё "на пальцах", приводить всю теорию рамки форума (да и время) не позволяют. Становитесь "своим", в родных закромах есть немало литературы по интересующему Вас вопросу.

 

Станислав, ну зачем же столь категорично? :) на промежутках в 10-20с ADXRS150 очень даже годятся - просто корректировать вовремя надо :)

В одной плоскости (коей является балансирующий робот) без великих математических ухищрений и полосе 10гц можно получить уход 6-8 градусов в минуту, это вполне приемлемо, если есть акселерометр - по нему идет коррекция... у меня где-то была статья про этого робота...

 

У нас при старте с катапульты первые 5с вообще никакой коррекции нету ;) - стартовые ускорения 4g- за пределами ацп - даже при боковом ветре визуально никуда свалить не успевает :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

код переложен для ADUC7020 с армовым ядром.

это я для баловства писал. но вроде трэкинг работает нормально.

 

p.s. Когда робота сделаете, я бы детям купил за не очень дорого!!!

 

 

#include "ioADuC7020.h"

#include "LibUrt702x.h"

#include "LibDac702x.h"

#include <stdlib.h>

#include <math.h>

 

static const float dt = 4178.0 / 41780000.0;

static float P[2][2] = {

{ 1, 0 },

{ 0, 1 },

};

float angle;

float q_bias;

float rate;

static const float R_angle = 0.3;

static const float Q_angle = 0.001;

static const float Q_gyro = 0.003;

void state_update(

const float q_m

)

{

const float q = q_m - q_bias;

 

const float Pdot[2 * 2] = {

Q_angle - P[0][1] - P[1][0], /* 0,0 */

- P[1][1], /* 0,1 */

- P[1][1], /* 1,0 */

Q_gyro /* 1,1 */

};

rate = q;

angle += q * dt;

P[0][0] += Pdot[0] * dt;

P[0][1] += Pdot[1] * dt;

P[1][0] += Pdot[2] * dt;

P[1][1] += Pdot[3] * dt;

}

void kalman_update(

const float ax_m,

const float az_m

)

{

const float angle_m = atan2( -az_m, ax_m );

const float angle_err = angle_m - angle;

const float C_0 = 1;

const float PCt_0 = C_0 * P[0][0];

const float PCt_1 = C_0 * P[1][0];

const float E =R_angle+ C_0 * PCt_0;

const float K_0 = PCt_0 / E;

const float K_1 = PCt_1 / E;

const float t_0 = PCt_0;

const float t_1 = C_0 * P[0][1];

P[0][0] -= K_0 * t_0;

P[0][1] -= K_0 * t_1;

P[1][0] -= K_1 * t_0;

P[1][1] -= K_1 * t_1;

angle += K_0 * angle_err;

q_bias += K_1 * angle_err;

}

int send_string_uart(int file, char *ptr, int len)

{

int j;

for (j = 0; j < len; j++) putchar(*ptr++);

return len;

}

 

void send_decimal_uart(short Bute)

{

unsigned short temp;

if (Bute<0)

{

Bute=abs(Bute);

putchar('-');

temp=Bute%1000;

putchar(temp/100+0x30);

temp=temp%100;

putchar(temp/10+0x30);

putchar(temp%10+0x30);

}

else

{

putchar(Bute/1000+0x30);

temp=Bute%1000;

putchar(temp/100+0x30);

temp=temp%100;

putchar(temp/10+0x30);

putchar(temp%10+0x30);

}

}

 

void delay(int length)

{

while (length >=0)

length-- ;

}

void ADCpoweron(int time)

{

ADCCON = 0x20;

while (time >=0)

time--;

}

void ADCinit(void)

{

ADCpoweron(2000);

ADCCP = 0x10;

REFCON = 0x01;

ADCCON = 0xE4;

}

unsigned short ADCconversion (int samples)

{

unsigned short result=0;

unsigned int i;

for (i=0; i<samples; i++)

{

while (!ADCSTA){};

result = result+(ADCDAT >> 16);

}

result=result/samples;

return result;

}

int rnd( int max )

{

return (rand() % max) + 1;

}

__irq __arm void irq_handler()

{

if ((IRQSTA & GP_TIMER_BIT) == 0x8)

{

T1CLRI = 0;

GP4DAT ^= 0x00040000;

}

if ((IRQSTA & RTOS_TIMER_BIT) == 0x4)

{

T0CLRI = 0;

state_update(ADCconversion(1));

}

}

void InitFreq(void) {

POWKEY1 = 0x01;

POWCON = 0x00;

POWKEY2 = 0xF4;

}

int main(void)

{

float a = 0;

short b;

int j=0;

InitFreq();

ADCinit();

UrtCfg(0, 4352, 7);

GP0CON = 0x00;

GP4DAT = 0x04000000;

T0LD = 4178;

T0CON = 0xC0;

IRQEN = RTOS_TIMER_BIT;

T1LD = 0x20000;

T1CON = 0xC4;

IRQEN = GP_TIMER_BIT;

while (1)

{

kalman_update(0.034,0.11);

send_decimal_uart(angle); putchar(' ');

send_decimal_uart(q_bias); putchar(' ');

send_decimal_uart(rate); putchar (' ');

b=ADCconversion(1);

a = 0x525 - b;

a /= 1.3;

b = floor(a);

}

}

 

 

 

Кстати комбинация adxl202eb + adxrs300eb самая лучшая из всех

на сегодняшний день по критерию цена/качество.

 

а можно вообще без гироскопа обойтись и все сделать на акселерометрах.

есть такой вариант ИНС на 6-и акселерометрах. только математика там не высшая

а академическая уже нужна....

 

посмотрите в гугле Gyro-Free INS. очень интересное решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Но это всё "на пальцах", приводить всю теорию рамки форума (да и время) не позволяют. Становитесь "своим", в родных закромах есть немало литературы по интересующему Вас вопросу.

 

Станислав, ну зачем же столь категорично? :) на промежутках в 10-20с ADXRS150 очень даже годятся - просто корректировать вовремя надо :)

Это каким же макаром "корректировать", да ещё "вовремя"?

 

...В одной плоскости (коей является балансирующий робот) без великих математических ухищрений и полосе 10гц можно получить уход 6-8 градусов в минуту, это вполне приемлемо, если есть акселерометр - по нему идет коррекция... у меня где-то была статья про этого робота...
При чём здесь полоса и почему в одной плоскости? :blink: Боюсь, Вы недостаточно хорошо изучили предмет. Робот имеет три оси вращения (креном, правда, можно пренебречь).

Мы говорим об ошибке угла, после интергирования угловой скорости, обусловленной НЧ-шумом гироскопа и дрейфом его "нуля". Ежли Вы сообщите способ, как с помощью ADXRS150 получить уход 6-8 градусов в минуту без термостата, я готов поставить целую кеглю хорошего пива. :)

 

ЗЫ. А вот Калман - это правильное решение. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Станислав,

 

Вы немножко не поняли, т.к. Dars не совсем правильно Вам объяснил.

 

Балансирующий робот - это платформа на двух колесах (одна ось).

по двум остальным осям он стоит на плоскости.

 

другое дело робот-ШАР, который катиться, там нужно "пасти" 3 оси.

 

И еще, я Вас как у гуру хотел спросить, Вы не сталкивались с безгироскопной схемой инерциалки?

во всей литературе, которую смотрел очень туманно как-то об этом говорится...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно вообще без гироскопа обойтись и все сделать на акселерометрах.

есть такой вариант ИНС на 6-и акселерометрах. только математика там не высшая

а академическая уже нужна....

 

посмотрите в гугле Gyro-Free INS. очень интересное решение.

Математика в обоих случаях (с наличием гироскопов или без него) одинаковая. Если Вы считаете иначе, это означает что вы педопоняли принцип работы обычной ИНС. Для облегчения понимания рекомендую скачать книжку. Там есть раздел, посвященный безгироскопическим ИНС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Станислав,

 

Вы немножко не поняли, т.к. Dars не совсем правильно Вам объяснил.

 

Балансирующий робот - это платформа на двух колесах (одна ось).

по двум остальным осям он стоит на плоскости.

А я подумал, что он должен уметь также и поворачивать, и двигаться по наклонной плоскости, а-ля Segway. :cranky:

 

...И еще, я Вас как у гуру хотел спросить, Вы не сталкивались с безгироскопной схемой инерциалки?

во всей литературе, которую смотрел очень туманно как-то об этом говорится...

Практически не делал, и не сталкивался.

В принципе, если есть ограничения (например, движение по горизонтальной плоскости), углы наклона платформы к вертикали можно получить, имея только трёхгранник акселерометров. Правда, акселерометры должны быть расположены в центре вращения объекта, для уменьшения ошибок. Математика там очень проста, и сводится к "отделению" линейных ускорений от ускорения силы тяжести.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В принципе, если есть ограничения (например, движение по горизонтальной плоскости), углы наклона платформы к вертикали можно получить, имея только трёхгранник акселерометров.

Для получения углов наклона в движении показания акселерометров придется сильно фильтровать, чтобы исключить из их показаний возмущения, связанные с ускоренным движением робота. Эти возмущения, большей частью, будут высокочастотными из-за работы системы стабилизации платформы робота относительно горизонта. Во время поворотов будут появляться кратковременные возмущения, по длительности сравнимые (т.е. по частотному спектру) с изменением наклона платформы робота во время маневра.

 

Если задаться целью просто определить ориентацию платформы во время движения, то наверное такой метод может работать, но не знаю с какой точностью. Если же акселерометры являются датчиками наклона, включенными в замкнутый контур стабилизации платформы относительно горизонта, то этот способ скорее всего неприемлем. Т.к. сильная НЧ-фильтрация сигналов с датчиков существенно ослабит обратную связь в области быстрых измерений наклона и эти возмущения останутся нескомпенсированными. Запаздывание, вносимое НЧ-фильтром высокого порядка с малой частотой среза тоже скажется на работе контура пространственной стабилизации робота, ухудшив его запас устойчивости и (возможно) увеличив колебательность.

 

Правда, акселерометры должны быть расположены в центре вращения объекта, для уменьшения ошибок. Математика там очень проста, и сводится к "отделению" линейных ускорений от ускорения силы тяжести.

Если определять ориентацию через интегрирование угловой скорости, то для получения этой скорости в системе построенной только на акселерометрах их надо располагать как можно дальше друг от друга(насколько позволяет конструкция системы), и желательно по разные стороны от центра масс стабилизируемой платформы.

 

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

Точность такой системы будет хуже, чем у обычной БИНС. Основаная причина - для получения углов показания гироскопов надо проинтегрировать один раз внутри системы нелинейных дифф. уравнений. Источники ошибок сдесь - шумы трех гироскопов и перекос осей чувствительности трех датчиков.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...