roboforum.ru

Технический форум по робототехнике.

управления мобильным роботом

управления мобильным роботом

atew » 17 май 2012, 11:21

Добрый день.
Помогите написать программу на C++ или C для управления мобильным роботом Rover 5 с 2-мя энкодерами (pololu).
С помощью программы мы должны контролировать скорость и пройденный путь.

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

никогда не занимался серьезно программированием на с++ тем более контроллеров
Последний раз редактировалось atew 17 май 2012, 14:26, всего редактировалось 2 раз(а).

Re: управления мобильным роботом

dccharacter » 17 май 2012, 12:12

жесть
купи себе этого робота, кока-колы и печенья, позови на вечеринку друзей-одноклассников, подключи к энкодеру осциллограф, и перед вами выйдет график с импульсами такого вида без всяких С/С++

Re: управления мобильным роботом

atew » 17 май 2012, 12:47

dccharacter писал(а):жесть
купи себе этого робота, кока-колы и печенья, позови на вечеринку друзей-одноклассников, подключи к энкодеру осциллограф, и перед вами выйдет график с импульсами такого вида без всяких С/С++

нигде не могу его найти, а программу нужна как можно быстрее написать.

нашел готовую прогу на сайте http://forum.pololu.com/viewtopic.php?t=484
Код: Выделить всёРазвернуть
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>

//global variables: encoder position and direction of rotation
unsigned int enc_pos;
unsigned char enc_dir;

/*
PORTC Pin change interrupt service routine. Decodes the encoder.
For algorithm, see Scott Edwards article from Nuts&Volts V1 Oct. 1995
(righthand bit of old A,B) xor (lefthand bit of new A,B) => dir.
Increment or decrement encoder position accordingly
*/

ISR (PCINT1_vect) {
static unsigned char enc_last=0,enc_now;
enc_now = (PINC & (3<<4))>>4; //read the port pins and shift result to bottom bits
enc_dir = (enc_last & 1)^((enc_now & 2) >> 1);   //determine direction of rotation
if(enc_dir==0) enc_pos++; else enc_pos--;    //update encoder position
enc_last=enc_now;    //remember last state
}

#include "lcd.c"

int main(void)
{
unsigned char buf[8];

enc_pos=0;    //Initialize encoder position

LCDInit();    //Initialize LCD display

DDRC &=~(3<<4); //Port C pins 4 and 5 as input
PCMSK1 |= (3<<PCINT12);    //enable interrupt on pin change, bits 4&5 PORTC
PCICR |= 1<<PCIE1;    //enable interrupt on pin change, PORTC
sei();    //enable global interrupts

while (1){
LCDSendCommand(LCD_Line1);    //display current direction of rotation on line 1
itoa(enc_dir,buf,10);
LCDPrintString(buf);
LCDSendCommand(LCD_Line2);    //display current encoder position on line 2
itoa(enc_pos,buf,10);
LCDPrintString(buf);
}
}


но её нужно прошить в робот, как я понял робот будет определять пройденный пусть и двигаться с заданной скоростью?!

Re: управления мобильным роботом

RootAdmin » 17 май 2012, 17:50

Скорее всего просто выводить на экран состояние энкодеров. И все.

Re: управления мобильным роботом

atew » 18 май 2012, 10:59

RootAdmin писал(а):Скорее всего просто выводить на экран состояние энкодеров. И все.


да, а но как, если нету энкодера под рукой, нужно эмулятор сделать что ли...

Re: управления мобильным роботом

RootAdmin » 18 май 2012, 16:59

Лучший эмулятор - это ROS.
http://robocraft.ru/blog/technology/449.html

Re: управления мобильным роботом

NeON79 » 20 май 2012, 02:29

Сессии пошли ,что ли? ТС, объясните, как проводить отладку на железе, не имея оного? Симуляторы не в счёт.


Rambler\'s Top100 Mail.ru counter