123
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: nightmare, Huntswarrior, Aleks_Crow 
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » Алгоритмы для лайнтейсера
Алгоритмы для лайнтейсера
Отправлено 07.06.2010 - 21:511
Начальная группа
1798 сообщений
Мужчина
Давайте здесь обсуждать разные алгоритмы для лайнтрейсеров. Предлагайте свои идеи!
Вот моя идея:
Code

while(1)
{       
if(SENSOR1 && SENSOR2)
{
        forward();       
        LEFT_SPEED=MAX;
        RIGHT_SPEED=MAX;
}

if(!SENSOR1)
{             
while(!SENSOR1)
       {        
         if(SPEED_RIGHT!=0)
       {
       SPEED_RIGHT--;
       }         
delay_us(X);
         }
}        

if(!SENSOR2)
{             
while(!SENSOR2)
       {        
       if(SPEED_LEFT!=0)
       {
        SPEED_LEFT-- ;
        }
       delay_us(X);
        }           
}       

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


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 08.06.2010 - 11:522
Начальная группа
1798 сообщений
Мужчина
Только что опробовал немного другой алгоритм:

Code

-------------------------------------------
расположение датчиков:
             8 7 6 5 4 3 2 1
!SENSORX - датчик НЕ освещен.
PWML - скорость левого двигателя
PWMR - скорость правого двигателя
MAX - максимальная скорость
-------------------------------------------
#define N 100

if(!SENSOR4 && !SENSOR5)
{
     forward();    
     PWML=MAX;
     PWMR=MAX;
}         

if(SENSOR4)
{          
while(SENSOR4)  {     
      if(PWML!=0) {
    PWML--;
    }      
    delay_us(N);
    }
}     

if(SENSOR5)
{          
while(SENSOR5) {     
    if(PWML!=0) {
     PWMR--;
     }
    delay_us(N);
     }        
}    



Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 08.06.2010 - 13:403
БЛОГГЕР
310 сообщений
Мужчина


Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 08.06.2010 - 18:074
Администраторы
3320 сообщений
Мужчина
tiMer,
-ерунда. Такая скорость достигается путем уменьшения расстояния между обоими траками, и, собственно, площадью их соприкосновения с полом. Чем меньше, тем маневренный wink

Добавлено (08.06.2010, 18:07)
---------------------------------------------
nightmare,
Неплохо. wink Только на будущее, .hex файты тоже желательно прикреплять.
Зы Наконец-то увидел твоего робота surprised



Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 08.06.2010 - 20:235
Начальная группа
1798 сообщений
Мужчина
Хекс пока что нафиг не нужен, зачем кому-то прошивка моего робота, в которой дофига всего, что очень мало вероятно будут повторять, получается лишний код.
А здесь наглядно виден алгоритм по которому робот бегает.
Тема то для этого и создана, чтобы алгоритмами делиться smile
В ближайшем будущем выложу исходники, при помощи которых будет довольно просто программировать робота, т.е. без заморочек с настройкой всяких таймеров, портов и пр.. Достаточно сделать так:
Code

#include<mega16.h>
#include<delay.h>

#include<robot.c>

void main (void)
{
config();
//код программы
while(1)
{
LEFT(255);
SLEEP(10);
RIGHT(155);
SLEEP(10);

if(SENSOR1)
{
STOP
LED_ON
}
else
{
LED_OFF
}

if(DISTANCE>50)
{
LED_PULSE
}

}
}

В таком духе, все интуитивно понятно smile
Я вот думаю, может вот такие двигатели заказать
http://robotshop.su/e-store/catalog/198/696/
И бегать со скоростью 53 м/мин crazy


Профиль Личное сообщение Дом. страница icq Skype
37
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » Алгоритмы для лайнтейсера
Страница 1 из 11
Поиск: