Robot Eksperimentarium 2006: Øvelser

From ImageWiki

(Difference between revisions)
Jump to: navigation, search
(→Opgaveformulering)
(→Øvelse 4: Lokalisering)
 
(48 intermediate revisions not shown)
Line 1: Line 1:
-
Denne side indeholder et midlertidigt forslag hvilke til Robot Eksperimentarium i 2006.
+
Denne side indeholder de Robot Eksperimentarium 2006]].
-
+
I denne opgave skal lidt rundt.
-
robotten til at
+
at blive bekendt med Hardware-laget i [[ERSP]],
-
** Lige ud.
+
men .  
-
+
-
** Dreje uden at
+
-
+
-
ERSP, men alligevel.
+
-
== Opgaveformulering ==
+
-
med denne opgave er at den studerende bliver bekendt med Hardware-laget i ERSP,
+
med [[ERSP]] installeret.
-
motorkontrollen skal Hardware
+
.
 +
 +
 
 +
skal hardware
  Evolution::ResourceManager *resource_manager;
  Evolution::ResourceManager *resource_manager;
  Evolution::Result result;
  Evolution::Result result;
Line 21: Line 20:
-
====
+
 
-
 
+
''Evolution::IDriveSystem''
  Evolution::IDriveSystem *driver;
  Evolution::IDriveSystem *driver;
  result = resource_container->obtain_interface(Evolution::NO_TICKET, "drive",  
  result = resource_container->obtain_interface(Evolution::NO_TICKET, "drive",  
Line 29: Line 28:
'''Hint 1:'''
'''Hint 1:'''
-
Som standard vil robotten system
+
 +
 
 +
'''Hint 2:'''
 +
Som standard vil robotten systemet
  Evolution::IAvoidance *avoid;
  Evolution::IAvoidance *avoid;
  result = resource_container->obtain_interface(Evolution::NO_TICKET, "avoidance",  
  result = resource_container->obtain_interface(Evolution::NO_TICKET, "avoidance",  
Line 36: Line 38:
  avoid->disable_avoidance(Evolution::NO_TICKET);
  avoid->disable_avoidance(Evolution::NO_TICKET);
-
'''Hint 2:'''
+
'''Hint 3:'''
  const double velocity = 20; // cm/sec
  const double velocity = 20; // cm/sec
Line 43: Line 45:
  const double angular_acceleration = M_PI/2.0; // radians/sec^2
  const double angular_acceleration = M_PI/2.0; // radians/sec^2
-
====
+
'''Hint 4:'''
 +
 +
/opt/evolution_robotics/doc/
 +
 
 +
 
-
=
+
Fuzzy Logic (Avoidance) =
-
der er stor nok er badebolden. at malingen ikke .
+
I denne opgave skal der implementeres et Avoidance System, der benytter Fuzzy Control.
 +
 +
at robotten ikke .
-
== Opgaveformulering ==
+
Der benyttes et Fuzzy Logic bibliotek skrevet i Java kaldet ''jFuzzyLogic'' til at foretage de egentlige udregninger. For at i C++) benyttes en klient-server arkitektur.  
-
et i opgaven er at . Det anbefales at i en farvemodel der beskriver objektet. Eksempelvist kan der benyttes et to-dimensionalt histogram i ''Hue-Saturation'' rummet.
+
-
Det udviklede program skal
+
En server (skrevet i Java) skal
-
+
-
    1) Tag et billede med kameraet.
+
et Fuzzy Logic system og
-
    2) Bestem objektets position i billedet med den udleverede tracker.
+
* sende resultatet af beregningerne til klienten via samme socket.
-
af .
+
-
'''Trin 1:''' For at adgang til at benytte funktionerne ''cvCaptureFromCAM'' og ''cvRetrieveFrame''.
+
En klient (skrevet i C++) skal
 +
 +
* sende disse til serveren via en socket,
 +
 +
* motoren til at .
-
det objekt I tracker
+
 +
* En implementation af serveren. Denne inkluderer dog ikke Fuzzy logic systemet, der skal udvikles som en del af opgaven.
 +
 +
 +
 
 +
 +
 +
 +
 
 +
 +
 
 +
FUNCTION_BLOCK FuzzyAvoidance
 +
 +
// Define input variables
 +
VAR_INPUT
 +
    Front_sensor : REAL;
 +
    Rear_sensor  : REAL;
 +
    Left_sensor  : REAL;
 +
    Right_sensor : REAL;
 +
END_VAR
 +
 +
// Define output variables
 +
VAR_OUTPUT
 +
    Velocity        : REAL;
 +
    Angular_velocity : REAL;
 +
END_VAR
 +
 +
// Fuzzification of input
 +
FUZZIFY Front_sensor
 +
    // Fill this!
 +
END_FUZZIFY
 +
 +
FUZZIFY Rear_sensor
 +
    // Fill this!
 +
END_FUZZIFY
 +
 +
FUZZIFY Left_sensor
 +
    // Fill this!
 +
END_FUZZIFY
 +
 +
FUZZIFY Right_sensor
 +
    // Fill this!
 +
END_FUZZIFY
 +
 +
// Defuzzification
 +
// Velocity is in cm/sec and Angular_velocity is in radians/sec
 +
DEFUZZIFY Velocity
 +
    // Fill this!
 +
END_DEFUZZIFY
 +
 +
DEFUZZIFY Angular_velocity
 +
    // Fill this!
 +
END_DEFUZZIFY
 +
 +
RULEBLOCK myrules
 +
    // Fill this!
 +
END_RULEBLOCK
 +
 +
END_FUNCTION_BLOCK
 +
 
 +
Den udleverede kode kan findes i kursets [[Robot_Eksperimentarium_2006#The_SVN_Repository|SVN]] under ''Exercise2''.
 +
 
 +
 +
 +
 
 +
 +
 
 +
 +
 +
 
 +
 +
 +
# Tag et billede med kameraet.
 +
# Bestem objektets position i billedet med den udleverede tracker.
 +
 +
 
 +
 +
 
 +
en orange kegle
Line 68: Line 156:
-
philips_web_cam|pwc-driveren]].
+
'''Hint 1:'''  
 +
 +
 
 +
'''Hint 2:'''
 +
Philips webcam|pwc-driveren]].
 +
 
 +
'''Hint 3:'''
 +
 +
  probability = round( 255*exp(-0.5*d*d) );
 +
 +
 
 +
 +
 +
 
 +
 +
 
 +
 +
 
 +
 +
 +
 
 +
'''Hint 1:'''
 +
 +
 
 +
'''Hint 2:'''
 +
 +
 
 +
'''Hint 3:'''
 +
 +
 
 +
'''Hint 4:''' (fra Gert)
 +
 +
 
 +
 +
 +
 
 +
 +
 
 +
Den anden del af opgaven er at implementere ''to'' partikelfiltre
 +
 +
.
-
= =
+
== Metode 1 ==
-
+
Robotten starter med at estimere sin egen position ved at i . at en funktion af Mahalanobis' afstand mellem partiklen og robottens estimat af sin egen position. Evt. kan man undlade at estimere kovariansen og blot benytte euklidisk afstand.
-
at at ramme ind i nogle objekter (eks. at en af gulvet i billedlab (eller et andet sted). . For at
+
-
.
+
-
Overvejelse: Er det for tidligt at give de studerende en opgave i : vi har pt. ikke noget Fuzzy Logic bibliotek, men vi kan evt. finde et eller implementere et. Der findes et frit bibliotek i C++ der originalt var lavet til spiludvikling: [http://ffll.sourceforge.net/ ffll]
+
== Metode 2 ==
 +
:
 +
  weight = 0
 +
  for hver partikel p1 i :
 +
      dist = afstand mellem p og p1
 +
      weight += p1.weight * F(dist)
 +
  p.weight = weight
 +
. .
-
= =
+
== Metode 3 ==
-
Vi skal lave et af en eller anden art. er planen at en bold er stafetten. Dvs. at en robot skal kommunikere til den anden at den skal overtage stafetten. Denne .
+
et estimat af . Ideen er kun at benytte en
 +
  weight = 0
 +
  weight_sum = 0
 +
  Gentag N gange:
 +
      p1 =  en
 +
        (p1 skal at
 +
      dist = afstanden mellem p og p1
 +
      weight += p1.weight * F(dist)
 +
      weight_sum += p1.weight
 +
  p.weight = weight/weight_sum
 +
 +
Denne .
-
Overvejelse: Samarbejdselementet er relativt lille. Robotterne skal i virkeligheden blot sende en besked om at en anden skal overtage. at kontrollere.
+
== Udleveret kode ==
 +
skal en en .at .
-
+
at transmitere data over en
-
at identificere kejlerne. Robotten skal nu starte i en ukendt () position og skal nu kalibrere sin odometri i forhold til keglernes koordinatsystem.
+
inline void send_float(TCPSocket *socket, float f)
 +
{
 +
    socket->send((char*)(&(f)), sizeof(float));
 +
}
 +
inline float get_float(TCPSocket *socket)
 +
{
 +
    char buffer[sizeof(float)];
 +
    socket->recv(buffer, sizeof(float));
 +
    return *((float*)buffer);
 +
}
-
For at . en kegle skal den identificere hvilken kegle der er tale om og derefter bestemme sin afstand og vinkel til keglen. Udfra denne oplysning skal robotten opdatere et Kalman- eller partikelfilter.  
+
== Praktiske kommentarer ==
 +
For at . en maskine skal der startes en server, mens den der hedder TCPEchoServer og TCPEchoClient. skal .
-
. dette at .
+
. Hvis dette
 +
 +
# Undlad helt at .

Latest revision as of 12:23, 3 October 2006

Personal tools