Start

Förstasidan
Statistik

Social robot

Robotens syn
Modell/simulator
Levande modell


Arduino

Starta upp Arduino
DCcduino UNO
Pro Mini

Raspberry pi

Om Raspberry

Pic32

Om Pic32
Konstruktionen
Praktisk kom-igång
Starta upp UBW32
Installera MPLAB
Rinnande ljus
Stegmotor
Display
RS232 Pic32 - terminal
Luffarschack

Servo

Överblick
Isärmonterat servo
Styrning av servo
Mini Maestro
Bygga ett servo

Elektronik

Open Collector
Kontaktstuds
Drivsteg på utgångarna
Halleffektsensor/switch
MLX90316 (halleffekt)
Pulsbreddsmodulering

Open CV

Om OpenCV

Matematik

Linjär algebra
Olinjär länkmekanism

En liten modell över robothuvudet
Trådmodell av roboten
Robotens mekanik har matats in som vektorer med linjär algebra och funktioner har lagts till för att kunna vrida denna modell där roboten har en led. Så långt ganska enkelt. Det svåra är ögonen.

Fokus oberoende av huvudets leder
Ögonen fokuserar på föremålet oavsett huvudets läge. Problemet här är att räkna ut rätt vinklar för de servon som styr ögonen. Dvs, vinkeln betraktad ur ögonens servomotorers perspektiv (vinkeln visas avrundad under simulatorn), alltså hur mycket de 3 servomotorer som styr ögonen (höger horisont, vänster horisont samt vertikalled) måste vrida sig givet kroppens position och det som skall fokuseras.

Den mekaniska konstruktionen har anpassats till vår biologiska funktion där ögonen rör sig parallellt i höjdled. Dvs, det är bara 1 höjdvinkel medans det fortfarande är 2 horisontella vinklar, en för respektive öga.

Simulator

Vrid modellen medsols eller motsols.
Vrid på de olika lederna: +P1 | -P1 | +P2 | -P2 | +P3 | -P3 | +P4 | -P4 | +P5 | -P5
Nollställ | Slumpa ny fokusvektor


nackleder
Princip
Principen för ovanstående skiss är alltså att nacken har 2 rörliga leder och huvudet roterar i botten. Dvs 5 frihetsgrader. På huvudet sitter också 2 ögon med vardera 2 frihetsgrader. Slumpar man en ny fokusvektor kommer ögonen fokusera enligt den.

Variabler
Jag har döpt lederna i nacken till P2 - P5, huvudets rotation är P1.

Rumsvektorn, R
För att roboten skall kunna minnas objekt i rummet behövs absoluta vektorer som pekar ut dessa objekt. Dvs, vektorer som är oberoende av hur huvudet rör sig. Jag kallar denna vektor för R. vektorer i nacken För enkelhetens skull utgår jag härifrån nackens botten eftersom denna position är fixerad (absolut) i rummet. Genom att bilda vektorn R som utgår härifrån kan man enkelt räkna om (uppdatera) D när huvudet rör på sig. D ligger ju sedan till grund för hur ögonen fokuserar objektet ifråga (F i figuren).

Procedur: Allting börjar med R. Jag flyttar sedan lederna i modellen och hämtar N. Jag räknar sedan ut D enligt:

D = R - N

Samt hämtar vektorerna NOH samt NOV. Därefter kan jag räkna ut C1F samt C2F. När jag har dessa kan jag få fram vinklarna för ögonen, vilka roterar kring en vertikalverktor samt horisontalvektor i ögats origo.

Kalkyl vertikalled
trigonometri Vinkeln B fås genom att räkna skalärprodukt mellan vektorn D och N11. Den vinkel man får fram fungerar sålänge vinkeln P rör sig kring 90 grader. För att komma runt detta måste man räkna lite till. I själva verket är det vinkeln beta vi vill få fram, som är den mer pålitliga vinkeln ögonen ska röra sig med i vertikalled. trigonometri

Betraktar man skissen ovan (och till höger) ser man:

(1)
tan (beta) = r / h

(2)
tan (P) = r / a, dvs r = a * tan (P)

(1+2)
tan (beta) = a * tan (P) / h

(3)
a = |D| * sin (B) * cos (P)

(1+2+3)
tan (beta) = |D| * sin (B) * cos (P) * tan (P) / h
tan (beta) = |D| * sin (B) * cos (P) * sin (P) / (h * cos (P))
tan (beta) = |D| * sin (B) * sin (P) / h

(4)
h = |D| * cos (B)

(1+2+3+4)
tan (beta) = |D| * sin (B) * sin (P) / (|D| * cos (B))
tan (beta) = sin (B) * sin (P) / cos (B)
tan (beta) = tan (B) * sin (P)

Dvs, beta = tan-1 (tan (B) * sin (P))

För att testa svaret kan man sätta t.ex. P = 90, dvs ögonen tittar rakt fram.

sin (90) = 1

vilket ger att tan (beta) = tan (B)
vilket ger att beta = B

Vilket ska stämma. Korrigeringen behövs inte vid fokusering av ett föremål precis framför.

Observera rent matematiskt; om B är 90 eller 270 grader finns inget vettigt värde för tangens (B) och datorn kommer ge ifrån sig ett felmedelande. Men för dessa värden behövs ju inte denna funktion som nyss visat så vi kan testa vinkeln B innan vi kör värdet genom funktionen.

Vinklarna för ögonen med de data som ges överst på denna sida beräknas enligt nedan. När ögonens vertikalvinkel räknas ut används vektorn N11. Vinkeln är sedan samma för båda ögon. Alfa räknas ut med ekvationen för skalärprodukten.





Lite funderingar
Om du exprimenterar med ovanstående modell så ser du att roboten inte riktigt lyckas fokusera från stora horisontalvinklar betraktat ut huvudets/nackens perspektiv, ifall den vrider på huvudet vänster/höger samtidigt. Jag tror det har att göra med att vertikalvinkeln räknas från en tänkt punkt mellan ögonen. Nu spelar detta ingen som helst roll. Människor lyckas inte med detta konststycke heller, i slutändan därför att näsan sitter ivägen. Roboten kommer snabbt vrida huvudet mot det den vill fokusera och då försvinner snabbt detta "fel".






Robot och elektronik -sidan byter namn till electro.st

Senast läst 20:20:11 26/5 2017 Texten uppdaterad 17/9 2014
footer sign