|
Балансирующий робот, и датчики к нему |
|
|
|
Mar 18 2006, 20:23
|
Местный
  
Группа: Свой
Сообщений: 238
Регистрация: 11-08-05
Пользователь №: 7 557

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

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Акселерометры явно "не те", и явно "не там" искали. Посмотрите двух- трехосевые приборы от ST Microelectronics, думаю, они получше во всех смыслах. Да и с ценой на гироскопы что-то у Вас не так. В Москве их реально за 45-50 уёв купить... Ваши же замечания по поводу стабилизации объекта с помощью гироскопов и акселерометров вызывают улыбку. Когда начнёте разбираться с этим плотно, поймёте, в чём дело... Только не подумайте, что задача очень уж сложна. Вовсе нет...
ЗЫ. Прошу прощения, я не заметил, что "eb". На них цена действительно побольше. Только вот нафиг они нужны? Открою секрет: на ADXRS150EB мною найдены ошибки - все кондёры там перепутаны, причём "eb" были из разных серий. Плата теоретически работает, но со значительным несоответствием параметров: в частности, частотная полоса пропускания её меньше 10 Гц против 40 Гц заявленных.
Сообщение отредактировал Stanislav - Mar 19 2006, 00:22
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Mar 19 2006, 06:42
|
Местный
  
Группа: Свой
Сообщений: 238
Регистрация: 11-08-05
Пользователь №: 7 557

|
Цитата(Stanislav @ Mar 19 2006, 00:05)  Ваши же замечания по поводу стабилизации объекта с помощью гироскопов и акселерометров вызывают улыбку. Когда начнёте разбираться с этим плотно, поймёте, в чём дело... Только не подумайте, что задача очень уж сложна. Вовсе нет... А можно по подробней?что для этого достаточно?и где про это все можно почитать? Цитата Прошу прощения, я не заметил, что "eb". На них цена действительно побольше. Только вот нафиг они нужны? Там бга корпус,мне его нечем и некуда паять)
|
|
|
|
|
Mar 24 2006, 20:14
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(Dars @ Mar 19 2006, 09:42)  А можно по подробней?что для этого достаточно?и где про это все можно почитать? Для измерения отклонения платформы от вертикали теоретически достаточно только трёхосевого акселерометра. Если объект имеет вращательные степени свободы, акселерометры следует располагать как можно ближе к центру вращения, для уменьшения влияния центростремительных ускорений. А вот для полной компенсации этих ускорений гироскопы-то и нужны. Для измерения же углов ADXRS не годятся - слишком велики шумы, при интегрировании набегает ошибка в градусы за каждые несколько секунд времени. Но это всё "на пальцах", приводить всю теорию рамки форума (да и время) не позволяют. Становитесь "своим", в родных закромах есть немало литературы по интересующему Вас вопросу. Цитата(Dars @ Mar 19 2006, 09:42)  Там бга корпус,мне его нечем и некуда паять) Посмотрите в разделе форума "Пайка, монтаж, отладка". Там можно найти исчерпывающую инфу по данному вопросу. Если всё-таки приобретёте "eb", могу подсказать, как её довести до ума.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Feb 2 2007, 13:39
|
Знающий
   
Группа: Banned
Сообщений: 520
Регистрация: 6-02-06
Пользователь №: 14 040

|
Я думаю Вам поможет этот кусок кода для калмановской обработки данных с гироскопа и акселерометра. в принципе это скомпенированная ось... ессно одна. код переложен для 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. очень интересное решение.
|
|
|
|
|
Feb 2 2007, 17:37
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593

|
Цитата(alexQ @ Feb 2 2007, 13:39)  а можно вообще без гироскопа обойтись и все сделать на акселерометрах. есть такой вариант ИНС на 6-и акселерометрах. только математика там не высшая а академическая уже нужна....
посмотрите в гугле Gyro-Free INS. очень интересное решение. Математика в обоих случаях (с наличием гироскопов или без него) одинаковая. Если Вы считаете иначе, это означает что вы педопоняли принцип работы обычной ИНС. Для облегчения понимания рекомендую скачать книжку. Там есть раздел, посвященный безгироскопическим ИНС.
|
|
|
|
Сообщений в этой теме
Dars Балансирующий робот Mar 18 2006, 20:23    Stanislav Цитата(Serj78 @ Jan 12 2007, 11:43) Цитат... Feb 2 2007, 14:24     alexQ Станислав,
Вы немножко не поняли, т.к. Dars не со... Feb 2 2007, 17:24      Stanislav Цитата(alexQ @ Feb 2 2007, 17:24) Станисл... Feb 2 2007, 17:59       NickNich Цитата(Stanislav @ Feb 2 2007, 17:59) В п... Feb 3 2007, 22:23        Stanislav Цитата(NickNich @ Feb 3 2007, 22:23) Цита... Feb 4 2007, 22:25         NickNich Цитата(Stanislav @ Feb 4 2007, 22:25) Про... Feb 5 2007, 00:46          alexQ Действительно интересная идея. спасибо.
но если я... Feb 5 2007, 12:27           Herz Цитата(alexQ @ Feb 5 2007, 11:27) Действи... Feb 5 2007, 15:23            NickNich Цитата(Herz @ Feb 5 2007, 15:23) Кроме то... Feb 5 2007, 16:45          Stanislav Цитата(NickNich @ Feb 5 2007, 00:46) Подо... Feb 5 2007, 16:20        Dars Здраствуйте. Подошел вплотную к созданию печатной ... Apr 9 2007, 22:24         Dars ок.если никто отвечать не собираеться, то хоть нап... Apr 11 2007, 17:04     Serj78 [/quote]
Станислав, ну зачем же столь категорично... Feb 4 2007, 20:57      Stanislav Цитата(Serj78 @ Feb 4 2007, 20:57) Мы исп... Feb 4 2007, 22:38       Serj78 Цитата(Stanislav @ Feb 4 2007, 22:38) Чес... Feb 6 2007, 09:29        NickNich Цитата(Serj78 @ Feb 6 2007, 09:29) по пов... Feb 6 2007, 10:08        Stanislav Цитата(Serj78 @ Feb 6 2007, 09:29) Цитата... Feb 7 2007, 03:33 Alhen ЦитатаНо это всё "на пальцах", приводить... Mar 30 2006, 03:52 NickNich [QUOTE]
А конкретно какие книги освещают данную пр... Mar 30 2006, 08:00 Mirabella Цитата(NickNich @ Mar 30 2006, 08:00) [
К... Feb 12 2007, 21:48  NickNich Цитата(Mirabella @ Feb 12 2007, 21:48) Пр... Feb 13 2007, 12:10   Mirabella Цитата(NickNich @ Feb 13 2007, 12:10) Цит... Feb 13 2007, 13:02    NickNich Цитата(Mirabella @ Feb 13 2007, 13:02) Во... Feb 13 2007, 13:56 Alexeyy Не подскажет ли кто марки таких акаеллерометров, к... Jan 12 2007, 07:58 NickNich Цитата(Alexeyy @ Jan 12 2007, 07:58) Поты... Jan 12 2007, 10:50 Serj78 Это приспособление весьма тривиально и сделано ну... Feb 6 2007, 22:32 NickNich Цитата(Serj78 @ Feb 6 2007, 22:32) Это пр... Feb 7 2007, 14:41 Serj78 погрешность сборки плат 0.2 градуса- это потому чт... Feb 7 2007, 16:31 Serj78 ну внимательно почитайте даташит! ножки на вну... Apr 11 2007, 19:34 Dars Цитата(Serj78 @ Apr 11 2007, 20:34) ну вн... Apr 11 2007, 20:09  Zazou Очень долго пытаюсь разобраться, но не могу понять... Aug 24 2007, 07:41   pokos Цитата(Zazou @ Aug 24 2007, 10:41) Объясн... Nov 8 2007, 07:47 Different Интересный проект: http://www.parallax.com/html_pa... Oct 25 2007, 17:12 alexQ DARS,
какой DSP будете использовать для матричных... Oct 31 2007, 10:02  Dars Цитата(alexQ @ Oct 31 2007, 13:02) DARS, ... Nov 7 2007, 13:28   Dars Описался. TMS320F2812 - 150Mhz. Будет считать три ... Nov 7 2007, 21:33 InvisibleFed Заинтересовался вопросом. Извиняюсь за оффтоп, ник... Jan 30 2008, 10:41 xapc Задумываюсь над постройкой такой штуки. Пока кратк... Nov 2 2010, 21:49 KP1446XK1 Кому-нибудь удалось доделать?
Вот интересная реали... Mar 7 2011, 02:57  KP1446XK1 В продолжение данной темы http://electronix.ru/for... Jun 9 2011, 12:02 Microwatt Ну, и? что дальше? Jun 9 2011, 12:44 KP1446XK1 А дальше то, что если кому-то понадобится помощь в... Jun 9 2011, 15:01 Microwatt Угу. космические корабли строить- так, забава.
Кс... Jun 9 2011, 15:27 Mike18 "Для нескольких поколений советских людей это... Jun 9 2011, 17:57 AndyBR Здравствуйте, друзья.
Передо мной стоит задача соб... Jun 23 2011, 12:46 Alexashka Цитата(AndyBR @ Jun 23 2011, 16:46) Здрав... Jun 30 2011, 18:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|