roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 06:33

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 132 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
 Заголовок сообщения: Гусеничный робот noname
СообщениеДобавлено: 12 ноя 2011, 17:02 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Здравствуйте!
Представляю вам гусеничного робота!
Механика здесь.http://roboforum.ru/forum44/topic10490.html
Электроника:bluetooth-адаптер or-btm111-9.6 контроллер or-m128-ds драйвер двигателей or-md2-10a-12v-x.
Радар: Sharp GP2Y0A21YK0F 10-80см + серво towerpro sg90.
Робот управляется с пк по блютусу.
Пока что робот слоняется бесполезно по комнате и отварачивает от препятствий!
В дальнейшем планирую:
-установить акселерометр и компас.
-видеокамеру.
-модульную систему т.е.(менять верхнею крышку робота, одна с манипулятором, другая например с танковой башней :))

Поездка в автоматическом режиме...

Управляю в ручном режиме...

Автоматический режим в конце пропала связь с пк...

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Последний раз редактировалось Korbofos 12 ноя 2011, 19:25, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный noname
СообщениеДобавлено: 12 ноя 2011, 17:31 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Нормально гоняет, а какие габариты, вес? Какие движки?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный noname
СообщениеДобавлено: 12 ноя 2011, 17:44 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Длинна - 52см.
Ширина - 27см.
Двигателя от стеклоподъемников ваз 2110.
Вес общий - 9 кг.
Масса аккумуляторов 3 кг.
В дальнейшем планирую использовать более лёгкие аккумуляторы.
дальномер можно было не ставить , препятствия он прекрасно отодвигает :)

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 23 ноя 2011, 20:07 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Проверка тяги так сказать)

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 23 ноя 2011, 20:23 
Не в сети

Зарегистрирован: 30 сен 2011, 20:33
Сообщения: 127
Откуда: Мурманск
ФИО: Никита
Мощный однако


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный noname
СообщениеДобавлено: 23 ноя 2011, 20:52 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Korbofos писал(а):
дальномер можно было не ставить , препятствия он прекрасно отодвигает

Понравилось. :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 27 ноя 2011, 14:29 
Не в сети

Зарегистрирован: 16 июл 2010, 16:25
Сообщения: 219
Откуда: Беларусь , Минск
Хорошая конструкция , в 2008 году тоже делал гусеничного побольше правда . Но такой тяги конечно не получилось :wink: Ему бы плуг приделать и на даче пусть землю вскапывает :)

_________________
Любая высокоразвитая технология похожа на волшебство


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 27 ноя 2011, 19:26 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Gelios писал(а):
Хорошая конструкция , в 2008 году тоже делал гусеничного побольше правда.

Есть фото вашего гусеничного робота на робофоруме? Интересно стало. :)

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 27 ноя 2011, 20:16 
Не в сети
Аватара пользователя

Зарегистрирован: 12 май 2010, 13:30
Сообщения: 278
Откуда: Уральск-Самара
Skype: sky-jap
прог. языки: Bascom AVR Basic
ФИО: Полулях Сергей Валерьевич
Я так понимаю на аватаре Gelios'а и есть этот гусеничный робот!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 27 ноя 2011, 20:27 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Я тоже это понял, но 128х128 пикселей тяжело рассмотреть детали.

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 29 ноя 2011, 11:04 
Не в сети
Аватара пользователя

Зарегистрирован: 03 дек 2008, 23:24
Сообщения: 268
Откуда: Тамбов
Skype: anubis_kesh
прог. языки: Delphi, С++, PHP, HTML
ФИО: Гребенников Роман
Крепкая конструкция :)

_________________
Блин, никак не могу придумать подпись!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 29 ноя 2011, 19:31 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Anubis писал(а):
Крепкая конструкция :)

Спс. Создавал под впечатлением советского танкостроения :pardon:

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 29 ноя 2011, 19:33 
Не в сети

Зарегистрирован: 13 сен 2008, 17:53
Сообщения: 157
Откуда: Иваново
прог. языки: Pascal, С
А не пробовали его на лестнице?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 30 ноя 2011, 10:04 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Gre4in писал(а):
А не пробовали его на лестнице?

Без грунтозацепов не может забраться :(

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 14 дек 2011, 09:51 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Не могу заставить нормально работать компас на LSM303DLH: взял пример отсюда http://www.pololu.com/file/0J436/LSM303DLH-orangutan-example-code.zip

Код в мк
Код:
void lsm303dlh_funct(void)
{
static bool start_lsm=1;
if(start_lsm)
  {
  start_lsm=0;
  i2c_initialization();
  start_lsm303dlh();
  }
read_data();
}


void start_lsm303dlh(void) 
{   
//enable accelerometer
    i2c_on();
    i2c_write_byte(0x30); // write acc
    i2c_write_byte(0x20); // CTRL_REG1_A
    i2c_write_byte(0x27); // normal power mode, 50 Hz data rate, all axes enabled
    i2c_off();

    //enable magnetometer
    i2c_on();
    i2c_write_byte(0x3C); // write mag
    i2c_write_byte(0x02); // MR_REG_M
    i2c_write_byte(0x00); // continuous conversion mode
   i2c_off();
   
}


void read_data(void)
{
    // read accelerometer values
    tx_write(6);  //compass funct
    i2c_on();
    i2c_write_byte(0x30); // write acc
    i2c_write_byte(0xA8); //i2c_write_byte(0xA8); OUT_X_L_A, MSB set to enable auto-increment
    i2c_on();          // repeated start
    i2c_write_byte(0x31); // read acc
    tx_write(i2c_read_byte());
    tx_write(i2c_read_byte());
    tx_write(i2c_read_byte());
    tx_write(i2c_read_byte());
    tx_write(i2c_read_byte());
    tx_write(i2c_read_last_byte());
    i2c_off();

    // read magnetometer values
    i2c_on();
    i2c_write_byte(0x3C); // write mag
    i2c_write_byte(0x03); // OUTXH_M
   i2c_on();        // repeated start
   i2c_write_byte(0x3D); // read mag
   tx_write(i2c_read_byte());
   tx_write(i2c_read_byte());
   tx_write(i2c_read_byte());
   tx_write(i2c_read_byte());
   tx_write(i2c_read_byte());
   tx_write(i2c_read_last_byte());
   i2c_off();
}

//Функции i2c



void i2c_initialization(void)
{
TWSR=0x00; 
TWBR=0x07; //TWBR=0x1D;
TWCR=0x04;
}

void i2c_on(void)

TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); // send start condition 
while (!(TWCR & (1 << TWINT))); 

 
void i2c_write_byte(signed char byte)

TWDR = byte;             
TWCR = (1 << TWINT) | (1 << TWEN); // start address transmission 
while (!(TWCR & (1 << TWINT))); 

 
signed char i2c_read_byte(void)

TWCR = (1 << TWINT) | (1 << TWEA) | (1 << TWEN); // start data reception, transmit ACK 
while (!(TWCR & (1 << TWINT))); 
return TWDR; 


signed char i2c_read_last_byte(void)

TWCR = (1 << TWINT) | (1 << TWEN); // start data reception
while (!(TWCR & (1 << TWINT))); 
return TWDR; 

 
void i2c_off(void)

TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN); // send stop condition 



Обработка принятых данных на стороне PC
Код:
//---------------------------------------------------------------------------
void show_deg(void)
{
static char count=0;
read_data(&a,&m);
lsm303dlh_ack=1;
if(!count){
a_avg.x = 0;
a_avg.y = 0;
a_avg.z  = 0;
m_avg.x  = 0;
m_avg.y  = 0;
m_avg.z  = 0;}

a_avg.x += a.x;
a_avg.y += a.y;
a_avg.z += a.z;
m_avg.x += m.x;
m_avg.y += m.y;
m_avg.z += m.z;
count++;

if(count>4){
   a_avg.x /= 5;
   a_avg.y /= 5;
   a_avg.z /= 5;
   m_avg.x /= 5;
   m_avg.y /= 5;
   m_avg.z /= 5;

int heading = get_heading(&a_avg, &m_avg, &p);
int degr=atan2(m.y,m.x);
Form1->StatusBar1->Panels->Items[0]->Text= IntToStr(heading);}//+IntToStr(degr);
}
//---------------------------------------------------------------------------
void read_data_raw(vector *a, vector *m)
{

   unsigned char axl = read_rx();
        unsigned char axh = read_rx();
   unsigned char ayl = read_rx();
        unsigned char ayh = read_rx();
   unsigned char azl = read_rx();
   unsigned char azh = read_rx();

        unsigned char mxh = read_rx();
   unsigned char mxl = read_rx();
   unsigned char myh = read_rx();
   unsigned char myl = read_rx();
   unsigned char mzh = read_rx();
   unsigned char mzl = read_rx();


   int ax = (int)(axh << 8) + axl;
   int ay = (int)(ayh << 8) + ayl;
   int az = (int)(azh << 8) + azl;
   int mx = (int)(mxh << 8) + mxl;
   int my = (int)(myh << 8) + myl;
   int mz = (int)(mzh << 8) + mzl;

        a->x = ax;
   a->y = ay;
   a->z = az;
   m->x = mx;
   m->y = my;
   m->z = mz;



}
//---------------------------------------------------------------------------
void read_data(vector *a, vector *m)
{
read_data_raw(a, m);
// shift and scale
m->x = (m->x - m_min.x) / (m_max.x - m_min.x) * 2 - 1.0;
m->y = (m->y - m_min.y) / (m_max.y - m_min.y) * 2 - 1.0;
m->z = (m->z - m_min.z) / (m_max.z - m_min.z) * 2 - 1.0;
}
//---------------------------------------------------------------------------
int get_heading(const vector *a, const vector *m, const vector *p)
{
   vector E;
   vector N;

   // cross magnetic vector (magnetic north + inclination) with "down" (acceleration vector) to produce "east"
   vector_cross(m, a, &E);
   vector_normalize(&E);

   // cross "down" with "east" to produce "north" (parallel to the ground)
   vector_cross(a, &E, &N);
   vector_normalize(&N);

   // compute heading
   int heading = atan2(vector_dot(&E, p), vector_dot(&N, p) * 180 / M_PI);
   if (heading < 0) heading += 360;
   return heading;
}
//---------------------------------------------------------------------------
void vector_cross(const vector *a, const vector *b, vector *out)
{
   out->x = a->y * b->z - a->z * b->y;
   out->y = a->z * b->x - a->x * b->z;
   out->z = a->x * b->y - a->y * b->x;
}

float vector_dot(const vector *a, const vector *b)
{
  return a->x * b->x + a->y * b->y + a->z * b->z;
}

void vector_normalize(vector *a)
{
   float mag = sqrt(vector_dot(a, a));
   a->x /= mag;
   a->y /= mag;
   a->z /= mag;
}


Проблема в том что функция get_heading возвращает значения только: 357, 3 либо 0. Других значений не дождёшься как не крути...
Данные калибровки:
vector m_max = {654502,65495 , 65391}; // maximum magnetometer values, used for calibration
vector m_min = {13,11 , 65000}; // minimum magnetometer values, used for calibration

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 132 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO