PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sprachsteuerung für Roby!!!?



Chris
01.02.2004, 20:32
Hallo !
Ich habe an meinem Roby ein Spracherkennungsmodul (VD 364 ) angebaut,
das Programm habe ich von dem Projekt Lallus (WDR Computerclub).
Verbunden habe ich das Spracherkennungsmodul mit Port 9 – 12 über 4 Pull Up
Widerständen mit dem Roby.Mit dem Programm und der Seriellen Schnittstelle
kann ich im Hyper Terminal Worte b.z.w Befehle speichern und erkennen lassen.
Wen das Spracherkennungsmodul Worte die ich vorher gespeichert habe (bis zu 60 Worte)
Erkennt dann gibt er über das Terminal z.b die Kennung 255 3 0 1 4 aus.
Die Kennung setz sich wie folgt zusammen - Synchronbyte 255, Längenbyte 3, 0 = kein Fehler,1 ist die Zeigerposition, Checksum 4.
So jetzt meine Frage an euch wie kann ich die Antwort umsetzten so das ich damit dem Roby steuern kann b.z.w das er auf die Befehle eine Funktion durchführt????

Vielen Dank schon mal im voraus!!!!!

Hier das Programm

define reset port[9]
define shs port[10]
define data port[12]
define mhs port[11]
define wert byte
define anzahl byte
define check byte
define i byte
define j byte
define offset byte
define taste byte
define segment byte
define wort byte
define manda byte
define erkannt bit[192]
define speek bit[191]
define sagen bit[190]
#init
deact shs : reset =off : reset =on
pause 30
#anzeige
print
print "Namen erkennen <A> [B] Pointer lesen"
print "Namen trainieren <C> <D> Kommunikation ??"
print "Get Entry status <E> <F> Version abfragen"
print "Wort sagen <G> <H> Directory lesen"
print "Startbeep ein [I] <J> Startbeep aus"
print "Increment pointer<K> <L> Decrement pointer"
print "Clear current p. <M> <N> Swap curr. pointer"
print "Restore curr. p. <O>

Delete curr. entry"
print "Delete all words <Q> <R> Power down !RESET!"
print "NEAR <S> <T> FAR"
print "QUIET <U> <V> AUTOMOTIVE"
print "Speech (PWM) aus <W> <X> Speech (PWM) ein"
print "Automatik ein <Y> <Z> Automatik aus"
print "Menüanzeige <Leertaste>"
print
#main
taste=0
if not rxd then goto main
get taste
if taste=32 then goto anzeige
if taste <65 then goto main
if taste >96 then taste = taste-32
offset = (taste-65)*5
if offset = 120 then goto automatik
if offset=30 then sagen =on
if sagen=on then goto sprechen else goto ausführen
#sprechen
print "Mandatory prompt list <0> "
print "Optional prompt list <1> "
input manda
if manda>1 then goto sprechen
if manda = 0 then print "Das gewünschte Wort (1 -208) eingeben."
if manda = 1 then print "Das gewünschte Wort (1 -240) eingeben."
input wort
#ausführen
print "Kommando"
looktab command,offset,anzahl
wert=255 : gosub schreiben
wert = anzahl + 1 : gosub schreiben
check = wert
for j = 1 to anzahl
looktab command,j+offset,wert
if sagen=on and j=2 then wert=wort
if sagen=on and j=3 then wert=manda
check = check + wert
gosub schreiben
next j
sagen=off
manda=0
wert=check : gosub schreiben
print
#antwort
print "Antwort"
gosub lesen : gosub lesen
anzahl=wert
for j = 1 to anzahl
gosub lesen
next j
print
goto main
#lesen
wert=0
deact data
for i = 7 to 0 step -1
wait not shs
if data then wert = wert + (1 shl i)
mhs = off : wait shs : mhs = on
next i
print wert;" ";
return
#schreiben
for i = 7 to 0 step - 1
if wert and 1 shl i then data =on else data = off
wait shs
mhs = off
wait not shs
mhs = on
wait shs
next i
print wert; " ";
return
#automatik
offset = 0
if rxd then get taste
if taste=90 or taste=122 then goto anzeige
if taste >96 then taste=taste-32
if taste =91 then goto anzeige
print "Kommando"
looktab command,offset,anzahl
wert=255 : gosub schreiben
wert = anzahl + 1 : gosub schreiben
check = wert
for j = 1 to anzahl
looktab command,j+offset,wert
check = check + wert
gosub schreiben
next j
wert=check : gosub schreiben
print
print "Antwort"
gosub lesen : gosub lesen
anzahl=wert
for j = 1 to anzahl
gosub lesen
if j=1 and wert=0 then erkannt=on
next j
print
if erkannt=on then goto erkannt
goto automatik
#erkannt
erkannt=off
print "Erkennung"
wert=255 : gosub schreiben
wert=2 : gosub schreiben
wert=38 : gosub schreiben
wert=40 : gosub schreiben
print
print "Antwort"
gosub lesen : gosub lesen
anzahl=wert
for j = 1 to anzahl
gosub lesen
if j=2 then segment=wert+1
next j
print
print "Erkennung"
wert=255 : gosub schreiben
wert=5 : gosub schreiben
wert=48 : gosub schreiben
wert=90+segment:gosub schreiben
wert=1 : gosub schreiben
wert=1 : gosub schreiben
wert=5+48+90+segment+1+1: gosub schreiben
print
print "Antwort"
gosub lesen : gosub lesen
anzahl=wert
for j = 1 to anzahl
gosub lesen
next j
print
goto automatik
table command
4 16 121 0 1 ' recognize word
1 38 0 0 0 ' return pointer
4 2 121 0 1 ' train a name
1 0 0 0 0 ' no operation
1 42 0 0 0 ' get entry status
1 1 0 0 0 ' get version
3 48 7 0 0 ' say a prompt
1 43 0 0 0 ' query directory
3 65 8 1 0 ' beep ein
3 65 8 0 0 ' beep aus
1 33 0 0 0 ' increment pointer
1 34 0 0 0 ' decrement pointer
1 32 0 0 0 ' clear current pointer
1 37 0 0 0 ' swap current pointer
1 36 0 0 0 ' restore current pointer
1 39 0 0 0 ' delete current entry
2 40 85 0 0 ' delete all stored words
1 64 0 0 0 ' power down
3 65 0 254 0 ' environment near
3 65 0 255 0 ' environment far
3 65 0 243 0 ' environment quiet
3 65 0 12 0 ' environment automotive
3 65 7 1 0 ' speech pwm aus
3 65 7 2 0 ' speech pwm ein

jörg
03.02.2004, 08:35
Was ist denn das VD364? Wo gibt's das, und was kostet es?

Chris
03.02.2004, 17:15
Hallo,

das Modul gibt es unter anderen bei Conrad Kostet 51 €. Die Bestellnummer ist 189150-14
Hier die Beschreibung von Conrad-

Die Technik des Moduls liefert eine Spracherkennungs-Technologie in einem kostengünstigen, flexiblen Modul-Format. Das Spracherkennungs-Modul kann schnell und einfach in bereits existierende Produkte oder neue Entwicklungen eingebettet werden. Es kann sowohl im Stand-Alone-Modus (pin-konfigurierbar) als auch zur Anbindung an einen Mikroprozessor für die Signalweitergabe betrieben werden. Mit einem Minimum an externer Beschaltung ist es ideal für eine Vielzahl von Konsumerprodukten geeignet (elektrische Schalter, Desktop-Anwendungen, Geräte mit Sprachaktivierung usw.). Die vorher eingelernten Worte werden mit einer Genauigkeit von mehr als 99% erkannt. Weiterhin kann die Sensitivität der Personen-Stimmenerkennung über einen externen Dip-Schalter eingestellt werden. Dadurch ist es möglich, dass ein Befehl sowohl von mehreren Personen oder nur von einer berechtigten Person akzeptiert wird und ein Schaltvorgang ausgelöst wird. Aktiviert wird dieses Modul ohne zusätzliche Synchronisation aus dem Kontext! Die Ansagetexte des Moduls sind in Deutsch gespeichert. Technische Daten: Betriebsspannung 5,0 V · Imax = 20 mA · Betriebstemperatur -20 bis +70 ºC. Im Lieferumfang enthalten ist das Spracherkennungs-Modul, ein Spezialmikrofon, ein Lautsprecher und eine ausführliche, deutsche Anleitung mit Schaltungsbeispielen.

Jetz nochmal meine Frage, kann mir jemand bei dem Programm helfen!!!!!!!!!!!!!!!

mfg Christian

God
03.02.2004, 19:03
Ich kann dir leider nicht helfen,
aber ich hab ma kein Conrad geschaut, da gibt es ein Spracherkennungs-IC für 3,55 ?. Wie man den jetzt ansteuern muss weiß ich net.

JanPeter
03.02.2004, 21:20
Hallo chris!
Was nutzt eine Spracherkennung, die nur in ein Meter Stimmen erkennt?
Und was soll sie auf Robby?
Bei dem Geräuschpegel?
Wie willst Du den da deine Stimme erkennen?

Chris
03.02.2004, 22:13
Hallo JanPeter,
ich bin Neuling auf diesem Gebiet und habe mir Weinachten den Roby gekauft .Habe noch nicht viel erfahrung auf diesem , es macht mir aber sehr viel Spaß !
Das Spracherkennungsmodul habe ich mal vor nen Jahr gekauft- so zum rumspielen wie auch der Roby, nun habe ich mir gedacht wenn das ja so bei mir rumliegt könnte ich es ja mal mit dem Roby verbinden.
Das das Spracherkennungsmodul keine große Reichweite hat u. das man es vergessen kann wenn er fährt- das ist mir schon klar,ich habe an so einfache Dinge gedacht wie das man ihn sagen kann drehe dich oder fahre vorwärts eine bestimmte Strecke u.s.w.
Ich möcht ja nur das mir mal jemand helfen kann bei der Programmierung.
Wie kann ich aus irgend welchen emfangenen Zahlen vom Spracherkennungsmodul auf dem Hyper Terminal den Roby Steuern?????
Es wäre schön wenn mir jemand mir nen bischen helfen könnte!!

bewild
05.02.2004, 20:44
Hallo Chris,
ich versteh dich nicht ganz, du bekommst schon die erkennung eines wortes ueber die rp5 rs232 auf dem hyperterminal angezeit?
dann ist es doch ein leichtes diese kennung auszuwerten, dann brauchst du doch nur noch für 2s die motoren anzusteuern in die richtung des erkannten wortes und das wars. Aber du musst ein anderes Problem haben?!

Bernd

Chris
05.02.2004, 21:23
Hallo,
vielen Dank für deine Antwort,
ich bin Anfänger und blicke irgend wie nicht dahinter wie ich mit den emfangenen Daten den Roby steuern kann.
-was bedeutet segment byte,wort byte manda byte,anzahl byte???
-ich kann mit den emfangenen Zahlen nicht so richtig was anfangen ?
-wie funktioniert das mit dem Hypertiminal das aus Bits 0 u. 1Zahlen werden?
Bitte helft mir?????

bewild
06.02.2004, 13:00
hallo chris,
puh das sind aber viele unklarheiten auf einmal. Wenn du anfangen willst Roboter zu programmieren, solltest du dir erst mal ein buch kaufen um einmal die grundlagen des programmierens zu lernen. Alle Sprachen fangen dann mit dem Thema bit, byte usw an. Letztendlich ist es egal ob du mit basic, c oder sonstnochwas anfaengst.
Dann lern mal schoen,
Bernd

Chris
12.02.2004, 21:42
Hallo,
ich habe mir in der letzten Zeit einige Bücher über Programmieren angeschaut,leider war nicht´s passendes für mich dabei! Kann mir jemand ein gutes Einführungsbuch empfehlen????
Was ist das eigendlich für ne Programmiersprache für Robi cc-Basic???? ,warum findet man keine Bücher darüber????
Im Handel gibt es nur c,c#,c++ Visual Basic u.s.w!!!

recycle
12.02.2004, 23:39
Was ist das eigendlich für ne Programmiersprache für Robi cc-Basic???? ,warum findet man keine Bücher darüber????
Im Handel gibt es nur c,c#,c++ Visual Basic u.s.w!!!

Ich kanns dir zwar nur sehr laienhaft erklären, aber ich versuchs trotzdem mal:
Visual-Basic ist von Microsoft, damit kannst du Programme für Windows schreiben.
Um Programme für Windows zu schreiben, brauchst du massenweise Befehle um Fenster zu zeichnen, Dateien zu öffnen, schreiben und speichern, Sounds abzuspielen usw.
Die ganzen Befehle machen für einen Microcontroler wie er in Robby verbaut ist keinen Sinn, da der ja für ganz andere Aufgaben eingesetzt werden soll als ein Windows-Rechner.

CC-Basic ist vermutlich eine speziell auf den in Robby verwendeten Controller angepasste Basic-Variante, die nur die paar Befehle kennt die für diesen Controller sinnvoll sind.

Gemein ist diesen beiden und vielen anderen Basic-Dialekten nur, dass die Programmstruktur, die Befehle, Syntax usw. relativ ähnlich sind.

In einem Buch zu Visual-Basic wirst du wenig brauchbares für Robby finden. Sämtliche Befehle, Programmstrukturen usw. die du bei der Programmierung mit Robby verwenden kannst stehen aber in der Anleitung auf der CD. (du musst die vollständige Anleitung öffnen, nicht die Kurzanleitung)
Eigentlich steht da schon fast alles drin, was man wissen muss und wie man dass dann umsetzt kannst du dir anhand der Beispielprogramme die bei Robby dabei sind ansehen.

Irgendein Buch zu cc-Basic wirst du sicherlich nicht finden, du kannst aber mal nach Literatur zur C-Control suchen, da dürftest du dann eher finden was du suchst.
Ich würde allerdings nicht gleich ein Buch kaufen, sondern lieber mal im Internet suchen. Da gibts bestimmt ein paar Beispielprogramme oder Tutorien usw.

Wenn es dir gar nicht so sehr um Robby geht, sondern du ganz allgemein eine Programmiersprache lernen willst, würde ich sagen vergiss Basic und lerne lieber gleich irgendwas vernünftiges.

recycle
12.02.2004, 23:57
was bedeutet segment byte,wort byte manda byte,anzahl byte???


ops, habe dein vorheriges posting jetzt erst gesehen. Sieht so aus, als hättest du gar keine Ahnung von Programmierung (ist nicht bös gemeint, besondes viel ahnung habe ich auch nicht)

Da ist es vielleicht schon sinnvoll, wenn du dir erst mal ein bischen die Theorie anliest. Ich habe mal kurz in Google nach "Basic für Anfänger" gesucht und das hier gefunden:

http://www.saibotec.de/

Sieht auf den ersten Blick so aus, als könntest du dir da einen groben Eindruck über Theorie und Programmaufbau von Basic anlesen.

Vielleicht findest du da ja ein paar theoretische Grundlagen, z.B. wie man Variablen, Schleifen, IF-Abfragen usw. definiert.

Geh aber nicht mit der Erwartung dran, dass du da irgendwas findest, dass du direkt für die Programmierung von Robby verwenden kannst, oder dass du die Beispiele die da gegeben werden in Robby nachvollziehen kannst. Es geht echt nur um die Theorie, die Praxis wirst du dir mit den Beispielen und Dokumentationen die bei Robby dabei sind aneignen müssen.

Matthias
14.02.2004, 07:29
Man kann in dem teil wirklich 60 Wörter abspeichern, die es dann über einen 232-Link ausgibt? Wenn ja wäre dass super. Ich dachte nämlich immer das man nur ne "Hand" voll Befehle programmieren kann.

Matthias

14.02.2004, 12:47
Ja,in Verbindung mit einen Microcontroller kann man 60 Wörter programmieren.

Danke für eure Antworten!!!!!!

lulu
06.04.2004, 21:17
Hi Chris,

ich will meinem Roboter auch dieses Sprachmodul verpassen, doch bevor ich das tu, wollt ich mich noch über einiges informieren.

Langt das Mikrofon, welches dabei ist aus, um Wörter zu erkennen, wenn man auch weiter weg ist? Ich hab nämlich gehört, dass man direkt davor sein muss, damit der das Wort versteht.

Bist du zufrieden mit dem Modul oder würdest du nen anderen empfehlen?

Tut mir leid, dass ich deine Frage nicht beantworten kann, aber könntest mir echt weiterhelfen!!!

Vielen Dank und schöne Feiertage

Lulu

Endos
12.08.2004, 01:24
möglicherweise gibt es eine möglichkeit das vorhandene mic. durch ein empfindlicheres auszutauschen?.....

Scrat
16.09.2004, 00:13
ich hab das alles jetzt nicht durchgelesen vl steht das ja auch scho drinnen aber es gibt mikrophon verstärker mit denen die leistung sicher erhöht werden kann ...
dann wäre da noch die möglichkeit das geräusch das der robby bei der fahrt verursacht rauszufiltern bzw so gut wie möglich vom mikrophon zu koppeln.
dann wird der auch auf befehle hören.

nichts ist unmöglich ;)
viel glück beim proggen chris

Dirk
16.09.2004, 20:03
Hallo Chris,

eine kleine Einführung in CCBasic (BA 19 03 33 lang D DIY.pdf) ist ja schon beim Robby dabei. Wenn Du sie durchliest und Dir die Demos ansiehst, müßtest Du schon mal den Anfang gemacht haben. Einzelne Befehle kannst Du in der Entwicklungsumgebung unter "Hilfe-Hilfethemen-CCBASIC-Befehle" jederzeit nachlesen. Später hilft dann ein richtiges BASIC-Buch weiter.

Gruß Dirk