- Akku Tests und Balkonkraftwerk Speicher         
Seite 6 von 11 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 137

Thema: Minimallösung: Kamera für den RP6

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    41
    Beiträge
    211
    Aber für was ließe sich die "minimallösung" einsetzen, wenn ich einen autonomen roboter bauen will?

    mfg carlitoco

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Der RP6 ist einfach zu fett für den engen RN-Kurs:

    Bild hier   Bild hier   Bild hier  
    http://www.youtube.com/watch?v=h7bdUD3mJfg
    http://www.youtube.com/watch?v=sm3WrykPj4M
    http://www.youtube.com/watch?v=3r_m2rGgXLk


    Aber als Test für mein Projekt reicht mir das erstmal. Andere Anwendungen wären z.B. Objekt-, Muster- und Hindernisserkennung, Barcodelesen, Abstandsmessung (mit Laserpointer) und möglicherweise auch Licht-/IR-Kommunikation. Vielleicht fällt mir noch was nettes ein, vorerst bleibe ich mal beim Liniensuchen. Hier noch der Code:

    Code:
    // RP6 folgt einer Linie die mit der Kamera erkannt wird           26.9.2008 mic
    
    #include "RP6RobotBaseLib.h"
    
    #define mitte 1550
    
    // Achtung! Die PWM-Werte werden hier OHNE Rampe verändert!
    void setMotorPWM(uint8_t power_links, uint8_t power_rechts)
    {
    extern uint8_t mleft_ptmp, mright_ptmp;
    
    	if(power_links > 210) power_links = 210;
    	if(power_rechts > 210) power_rechts = 210;
    	mleft_power=mleft_ptmp=power_links;
    	mright_power=mright_ptmp=power_rechts;
    
    	OCR1BL = power_links;
    	OCR1AL = power_rechts;
    
    	if(power_links || power_rechts)
    		TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
    	else
    		TCCR1A = 0;
    }
    
    uint8_t get_line(void)
    {
    	uint8_t i;
    	cli();
    		// auf Bildanfang warten
    	do { i=0; while (ADCH > 30); while (ADCH < 50) i++; } while (i < 40);
    	// die ersten 50 Zeilen überlesen
    	i=50; while (i--) { while (ADCH > 30); while (ADCH < 50); }
    	// warten auf hell-dunkel-Übergang
    	i=0; while (ADCH > 100) i++;
    	sei();
    	return(i);
    }
    
    int main(void)
    {
    	uint8_t linie;
    	uint16_t i, servo=mitte, dummy;
    
    	initRobotBase();
    	extIntOFF(); // schaltet den E_INT1-Port auf Eingang für den ADC
    	//powerON();
    
    // ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
    	ADMUX = (1<<REFS1) | (1<<REFS0)  | (1<<ADLAR) | 4;
    // setze free running triggern
    	SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
    // kein Interupt, Wandler einschalten, prescaller /2
    	ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1)  | (1<<ADPS0);
    // Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen
    	ADCSRA |= (1<<ADATE) | (1<<ADIF);
    // Initialisierung starten
    	ADCSRA |= (1<<ADSC);
    // und noch die wohl eher unnötige Initiallesung
    	while (!(ADCSRA & (1<<ADIF)));
    	ADCSRA |= (1<<ADIF);
    	
    	// SCL (Pin10) auf Ausgang und Low zur Servoansteuerung
    	DDRC |= 1;
    	PORTC &= ~1;
    	setMotorDir(BWD,BWD);
    	//setMotorPWM(100,100);
    
    	while (1)
    	{
    		linie=get_line(); // linke Kante der Linie suchen
    
       	if((linie > 0) && (linie < 70)) // Linie im "Bild"?
       	{
    			if(linie > 36 && servo <mitte+800) servo+=(linie-35)*2; // Servoposition
    			if(linie < 34 && servo >mitte-1000) servo-=(35-linie)*2; // korrigieren
    
    			i=servo; // Servo blockierend auf Position stellen
    			cli();
    			PORTC |= 1;
    			while(i--) dummy ^= i;
    			PORTC &= ~1;
    			sei();
    			i=15000;
    			while(i--) dummy ^= i;
    			
    			if(servo < mitte) setMotorPWM(100, 100-(mitte-servo)/10);
    			if(servo > mitte) setMotorPWM(100-(servo-mitte)/10, 100);
    
    			if(servo < mitte-300)
    			{
    				setMotorDir(BWD,FWD);
    				setMotorPWM(100, (mitte-servo)/10);
    			}
    			else if(servo > mitte+300)
    			{
    				setMotorDir(FWD,BWD);
    				setMotorPWM((servo-mitte)/10, 100);
    			}
    			else setMotorDir(BWD,BWD);
    
    		} // else setMotorPWM(0,0);
    	}
    	return(0);
    }
    Übrigends ist die hier vorgestellte Anwendung bei weitem nicht so zeit- und rechenintensiv wie allgemein angenommen ;)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    32
    Beiträge
    601
    Hi,

    ich hab mich auch man an die (Bascom-) Signalerkennung/verarbeitung "gewagt", und mir ein 15€ - Kameramodul vom C zugelegt. Das Kamerasignal wird auch schon recht brav ausgewertet, der schwarze Strich recht zuverlässig erkannt: http://www.youtube.com/watch?v=3WcBV3fSolg

    Vielen Dank an radbruch für die gute Erklärung der Auswertung in C (wie man sieht, funktionierts auch in Bascom recht passabel )!

    In so einer "einfachen" Kamera steckt sicher noch viel Potential, z.B.: ein Laser-Entfernungsmesser,...

    Viele Grüße
    ikarus_177

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Sieht gut aus.

    Wie sieht der Bascomcode aus?

    mfg

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Die Bascom-Variante:

    https://www.roboternetz.de/phpBB2/ze...ag.php?t=47232

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    32
    Beiträge
    601
    Hi,

    mein Code ist vom Prinzip her eigentlich genau gleich wie der von radbruch.

    Wird ein neues Bild erkannt, wird zuerst auf eine bestimmte Zeile gewartet, danach alle Werte der Zeile eingelesen, bis der Strich erkannt wird. Danach wird der Abstand des Striches vom linken Kamerarand am Terminal mit Leerzeichen "simuliert", danach der Strich ausgegeben.

    Mich wunderte es selber, wie einfach eigentlich eine Kamera auszuwerten ist - faszinierend

    Viele Grüße

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Mich wundert vielmehr dass bei inzwischen über 10000 Views so wenig Resonanz auf diesen Thread zu verzeichnen ist. Vielleicht sollte ich ihn etwas mehr puschen... ;)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Vielleicht könnte man das eine oder andere noch in Inline-Asm setzen?

    mfg

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Das ist nicht ungewöhnlich für einen Thread, der 1,5 Jahre als ist. Ich selbst habe ihn aber auch erst gestern gefunden. Und ich finde, wie alle anderen auch, Deine Pionierarbeit fantastisch!

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    hallo leute, bin auch daran interessiert meine hindernisserkennung des RP6 mit hilfe einer kamera zu unterstützen. dazu würde ich gerne die CMOS kamera vom großen C mit der Artikelnummer: 150001 - 62 nehmen.

    jetzt weiß ich nur bislang noch relativ wenig über die auswertung bzw. ansteuerung des kamerasignals.
    irgendwo in diesem thread ist von einem rn wikiartikel über dieses thema zu lesen.
    nur leider konnte ich diesen trotz ausgiebiger Suche bislang nicht finden.

    wer kann mir weiterhelfen bzw. sagen ob eine hindernisserkennung mit diesem kameramodul möglich ist?

    danke schon mal im voraus

Seite 6 von 11 ErsteErste ... 45678 ... LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen