Robot Project By Alan Cheng The Goal of This Project The goal of this project is to create a physical robot that can move physically in the environment, grab items and show emotions. The robot would need to have sensors and vision. It would be able to speak and to create sounds (pre-recorded). Also, the effects of a
Darwinian vs Lamarckian Genetic Algorithm would be tested on this robot. The Road Map
The robot base The ESRA III robot OpenCV and object detection OpenCV and the ERSA III Bluetooth and the robot Future Improvements and Additions Todays Demo
Top-Leveled Diagram for Robot Software Diagram for Robot The Robot Base The Standard Base A standard base normally contains two motors for the back wheels and two nonmotor controlled wheels in the front.
http://www.hitechnic.com/blog/wpcontent/uploads/TrikeBase.png http://farm1.static.flickr.com/ 53/128493978_031324a051.jpg The Standard Base(2) Used in 2 wheel drive cars. Pros (+s) Easy to build and flexible on wheel placement. Easy to program
Fast Cons (-s) Turning is slower Braking requires a good amount of friction Omnidirectional Drive Three types of wheels that can be used: Mecanum wheels Omni wheels
Standard wheels A base with mecanum wheels requires a standard placement of the wheels (like a car). However, this base can move left and right along with forward and back from the same position. Omnidirectional Drive(2) By moving the each pair (side-by-side position wheels) in opposite directions, it is able to
move left and right. http://en.wikipedia.org/ wiki/ File:MG_6646.resize.jpg http://www.designnews.com/ photo/58/58077DNx040719N539B_C.jpg Omnidirectional Drive(3)
Pros: Can move in all 8 cardinal directions from the same position (omnidirectional) Cons: Wheels are harder to find Harder to program Examples of Usage Einstein robot base
Airtrax Inc. Omnidirectional Drive(4) An omnidirectional drive using omni wheels has each wheel angled at 45 degrees on each corner. http://shop.pitsco.com/ store/detail.aspx? CategoryID=62&by=9&ID=
Omnidirectional Drive(10) Pros: Omni-directional in 8-directions Fast Spinning is fast Cons: Hard to build Hard to program
Why Use an Omnidirectional Drive? The main reason I used it is because it can move in eight directions from the same position. It can make the robot move fast in an theatre environment when speed is important. The base was hardest part of building but was still manageable. Programming is harder but not very hard.
Materials Used So Far Tetrix base set: ($399.00 from Pitsco) 2 omni wheels 2 DC drive motors 2 motor mounts 2 motor shaft hubs 2 motor power cable 1 Hitechnic DC motor controller RobotC 2.01
Lego Nxt 2.0 base set ($279.99 from Lego.com) Materials Used So Far(2)
4 omni wheels ($39.95 for set of 2, Pitsco) 4 DC drive motors ($29.95 each, Pitsco) 4 DC motor mounts ($19.95 each, Pitsco) 4 motor shaft hubs ($7.95 each, Pitsco) 4 motor power lead ($1.95 each, Pitsco) 2 Hitechnic DC motor controller ($79.95 each, Lego Education) ~ I borrowed from PSU RobotC 2.01 RobotC 2.01 was used for programming the
robot. Additional programming languages maybe used later. RobotC 2.02 and IS out. Color sensor support is not added. RobotC 2.01 has fixed bugs from 1.40, enhanced motor and sensor support, and many more Setting the Tetrix in RobotC Download RobotC firmware by going to Robot -> download firmware
Go to robot -> platform type -> Nxt & Tetrix Go to robot -> motors and sensor setup Setting the Tetrix in RobotC(2) S (number) refers to the port the Hitechnic motor control is attached to. Go to the sensor tab and define your sensors there. Then click ok. A couple of lines referring to the motor and sensor setup should be at the top of the
program. The ESRA III By Robodyssey Robodysseys ESRA III Robot kit used for displaying emotions. 3 Hitec servos and 4 Blue Bird servos (in version with eyebrows and ears) Mini SSC controller is required to control the motors. Visual Show Automation (VSA) is the program that
programs the SSC controller. Time it took to build the ESRA: 5 hours. You may need to drill in extra holes. Some extra small components (e.g. screws) may be needed. Base is flimsy. Parts Used Robodysseys ESRA III with ears and eyebrows - $233.99 Mini SSC II Controller - $44.00
Visual Show Automation - $69.95 Mini SSC II Controller www.robodyssey.net Visual Show Automation www.robodyssey.net ESRA III www.robodyssey.net
Using Visual Show Automation Connect to ESRA to the computer Go to Edit -> Settings (or F3) This should appear: The track corresponds to the port that to. Change the port to COM (insert number) You change the name or color here.
Programming in Visual Show Automation In order to make an event (in other words make a motor move), click and drag the desirable length of the event in the corresponding track -> Editing the Event After creating an event, double click on it. The following window should appear.
Editing the Event (2) You can drag the virtual servo display and when released, the motor should move to that state. Remember to click on starting/stopping position and click capture or else the event wont do anything. Adding Sound (speech) to the Program Click or press F2
Input the correct file If audio needs to be edited, I suggest Audacity. Its free and can export in different extensions. The motors will be partially synchronized. Edited the events to fit the audio. Running the Program Press on the sidebar or press enter. If the ESRA is connected to the computer, it should move.
My Opinions on the ESRA Easy to assemble, however the instruction manual sometimes is unclear and not specific enough. Visual Show Automation is very self explanatory. Only audio synchronization is harder because you cant drag the audio (the wave) at all. Overall, I think that the ESRA III and VSA is a
great beginning to beginners. OpenCV OpenCV OpenCv stands for Open Source Computer Vision It is open source and free Newest version is 2.1. OpenCv was developed by Intel and is
continued by Willow Garage Uses C/C++ OpenCv is a library for C/C++ For Windows and Linux Setting Up OpenCV in C/C++ First set up the OpenCV 2.10 library. In order to set up OpenCV with Microsoft Visual Studio, first go to the projects property -> configuration properties -> Linker -> Input.
Click on additional dependencies and input highgui210.lib cxcore210.lib ml210.lib cv210.lib Some General Use Functions OpenCv already has some general use functions. Many general purpose functions are built into a library. This allows easier programming. We can load images and display them, make a trackbar, or even detect the
border of object. All of the functions can be found in the OpenCV help file. Some Simple Functions(2) Well start with a simple program. One thats loads and displays an image, then ends when a button is pressed. The image chosen is airplane.jpg from the sample OpenCV pictures.
The Airplane Image Some Simple Functions(3) The Program: IplImage In order to load an image into an 2D array, we have to create the storage place for the image. IplImage creates a pointer to the 2D array. It is written as below:
IplImage* (name); cvLoadImage The next step is to load the image file. In the program, creating the empty image and storing the picture in there is combined together into one line. The layout for loading the image is as below: cvLoadImage( Location of the file );
cvNamedWindow Then we create a window. This is where the image will be displayed. cvNamedWindow( name of window ); cvShowImage The image is then displayed. The pointer where the image is stored and the name of the window is required. cvShowImage( name of the window , (name
of pointer); cvWaitKey The program then waits until a key is pressed. We can use any ASCII number for any key instead of the default value 0. 0 means any key. cvWaitKey( ASCII Number ) cvReleaseImage
This deallocates the memory allocated for creating the image. Without deallocating anything, it is more likely that the program will have a memory error and crash cvReleaseImage( name of pointer ) cvDestroyWindow This function destroys the window of the named name. cvDestroyWindow( window name )
Object Detection Contours is used in my program for object detection. Image has to be converted into one-channel image (binary image). Can find all noises though. The border is counted as a contour. Filter is necessary.
Goal of the Object Detecting Program The goal of the object detecting program is to find the blue cup, and only the blue cup. Thus we can find the centroid of the cup and make a robot find and pick up the cup. Flowchart of the Program Read Text file for filter
Filter contours Threshold the hue and saturation images Capture the frame Draw contours
and centroid No Find contours Is space pressed? Convert to HSV
Separate to HSV 3 graylevel image Calculate the shape features END Yes
HSV Hue, Saturation, Value In order to detect the images color, we convert the RGB image to HSV. The hue value is the pure color. Saturation is the colors strength (pure color to gray). Value is the brightness of the color. Thus, we can separate the image to get the grayscale of pure color, strength, and brightness. The HSV color cone. Source:
http://ilab.usc.edu/wiki/index.php/HSV_And_H2 SV_Color_Space cvCvtColor The function cvCvtColor is used to convert the color to HSV. However, the H, S, and V is not split yet. We use cvSplit for this. cvCvtColor( source, destination, type of conversion );
cvSplit After the image is converted into HSV, we have to split the new image into three different parts. The hue, saturation, and lightness. We do this as: cvSplit( source, destination1, destination2, destination3 ); Conversion from RGB to HSV Original
Saturation Hue Value Thresholding Thresholding is a way of converting grayscale image into binary image (black and white).
The image is segmented such that the object will be in black and the background is set to white. We do this by a loop in the hue and saturation image which checks each pixel and sets those pixels with an unsatisfying hue and saturation value are set to white. Thus, the object could be found. cvFindContours This function is used to find contours in an
image. It records the contours using chain codes. In chain codes, each direction has a different value. A contour is made up of those values. The source has to be one-channel (binary). cvFindContours( source image, storage place, pointer to first contour (border), size of sequence head, finding(retrieving) method , chain code); Chain codes Chain codes are used in finding contours. It
keeps the data on the shape of each contour. Each direction has its own value. Freemans Chain code is used in the program. There are 8 directions, each with its own encoding. However, the encoding varies from sources.
2 3 1 4 5 Start
0 6 7 A chain code would be: 6,1,0,7,2,3,4,5 The order may vary due to the starting point
cvDrawContours After finding the contours it is easier to see, debug, and to apply a filter if you could see the outlines of the contours. cvDrawContours does this for us. It draws the outline of all the contours. We use the function as following: cvDrawContours( image to draw on, pointer to first contour, color of the external contours, color of the internal contours, thickness of the line, type of line );
Contour Finding Pictures The contours drawn in the picture match those black spots in the binary image The Filter Since cvFindContours detects and finds all contours, there will be much noise. Therefore, it is necessary to have a filter to reduce the number of contours so that only the important contours are drawn. Here are some techniques:
Filter by the size Filter by the aspect ratio of the object (length/width or vice versa) Filter by extent (object area/bounding box area) The Filter(2) Filter by the circularity. Because of the filter, the cup is detected and neither of the sharks are.
Finding the Centroid We find the centroid using something called moments. Moments is the following equation: We can substitute values ij to get the right order of the moments. We find the center by first substituting i=1, j=0, and dividing it by the area (i=0, j=0) to get the x coordinate. This gets us the center of the x axis. Then we
substitute i=0, j=1, to get the y coordinate. This gets us the center of the y axis. Calculating the Object Area There is a function for calculating the area named cvContourArea. It works in the format: cvContourArea( contour sequence, starting and ending points of the area ); The Aspect Ratio
We find the aspect ratio by finding the length and width and dividing them to get the ratio. We first declare a 2d box around the contour. This variable we declare contains the measurements for the length and width of the box. Length Width
Percentage of Coverage (Extent) We can calculate this using the same 2d box. This time we multiply height and width and then divide this by the cvContourArea. This is also called the extent. The equation is: (Object area)/(Bounding box area) Circularity Circularity is calculated by the formula P2/4A A where P is the perimeter and A is the area.
Circularity is the ratio of the area of the shape and the area of the circle with the same perimeter. The less circular the shape, the higher the value. Compactness: 1.0 Compactness: > 2.0 Using Shape Features as Filters
No Filter Filter with Area, Extent, and Compactness OpenCV With ESRA III Using OpenCV with the ESRA III As an example for using OpenCV with the ESRA III, a simple goal for a program was
made. The goal was to have the ESRA III track a blue cup with its eyes. It required usage of serial port communication with the Mini SSC II and OpenCV OpenCV Blue Cup Finding The same blue cup detection program was used. Only the centroid is used The x y coordinates determine the
movement of the eyes. Fuzzy-Logic is used Communicating with the ESRA III We could communicate directly using C++ but that is more difficult. Visual Basic is used to communicate with the Mini SSC II using serial ports. Winsock is used to communicate with C++ and Visual Basic
Microsoft Socket Communication This communication type can communicate with many other software. Works as a server/client. The server starts up the winsock server. The client(s) send data to the server or other clients. The server can use this data. A server must be out to use winsock.
Microsoft Socket Communication(2) Code from Visual Basic (The server): Microsoft Socket Communication(3) The Form_Load function is called when the program opens. The Form_Unload function is called when the program closes. The program gets data as:
Microsoft Socket Communication(5) C++ function to open the client: Microsoft Socket Communication(6) Information is sent to the client by: Sprintf stores the double values into the string strCentroid. m_server.SendEx sends this string.
Communicating Via Serial Port After receiving the data from the C++ program, the MiniSSC II then receives the commands through the com port. We use Visual Basics MSComm for this. MSComm Code Setting up the connection: Sending data:
Needing for a Better Algorithm When the program was tested, the robot motion was a lot unsmooth, therefore it was necessity to have a better algorithm. Fuzzy Logic was chosen for the algorithm to be used. Bluetooth Control With the Robot Bluetooth
Wireless communication NXT has bluetooth support Visual Basic can use bluetooth via the serial port Visual Basics Serial Port Visual Basic serial port commands can be used to communicate with the Lego NXT. Each communication with bluetooth has a com port number (i.e. com 7). The com port
number is always higher than those of the USB/serial port. Code for Serial Port Communication Code for connecting with the NXT via Serial Port: Sending Data through NXT The data sent through bluetooth is a 1 or 4 letter message stating which direction to
move: Receiving the Data The RobotC software is used for this. The program is based off of the sample bluetooth receive program. However, lots were omitted out and the robot moves according to the command. This is done through a switch case statement.
Receiving the Data RobotC Code Receiving the data: Switch Case Excerpt Switch Case Excerpt (2) In this main routine, the program only exit upon the command of stop from the button in the Visual Basic Program
Genetic Algorithm: Darwinian vs Lamarckian Genetic Algorithm Genetic algorithm is an evolutionary algorithm which models a form of evolution. These could be: Darwinian Evolution Lamarckian Evolution
Genetic Algorithm Process Each genetic algorithm have the following steps in a similar way: Initialize Population With child chromosomes Calculate Fitness Selection Using Fitness Genetic Operatorss Repeat Unless Condition is Satisfied
End Fitness Value A fitness value represents how much an organism is suited to the environment. Genetic Operators Genetic operators are used to create the offspring from two parents. Some of these operators are:
Crossover Mutation Crossover Operator A crossover is done by taking a random point and swapping the left (or right) side of the parent chromosomes. This creates the chromosomes of the children. Crossover point
10101 01011 11001 11001 11001 01011 Parents Children Mutation Operator A mutation operator is done when a random
position in a chromosome is selected and the value is inversed. Mutation Point 10110001011 10110000011 Darwinian GA: The Theory Darwins theory of natural selection is the evolution theory that is believed to be correct. It
still holds for today. This theory generally states that an animal species evolves by breeding ones with the most successful traits. In a population of animals, the unsuccessful ones will die leaving the better ones left. This then produces more suitable children for the environment. Darwinian GA: An Example In detail, lets say that there is a group of
animals. The animals least suitable to the environment would most likely be least fit and have a lower fitness value. Ones that are more suitable would have a higher fitness value. When predators come, the ones that are least fit are most likely killed (some might survive), leaving only better ones to reproduce. Therefore, the successful traits are passed to their offspring.
Darwinian GA: The Process The Process: Initialize Population Calculate Fitness Select Chromosomes Apply Operators With newly generated offspring No
Is the problem satisfied? Yes END Lamarckian GA: The Theory Lamarcks theory of evolution was false according to the scientists at his time. In simple words, Lamarcks theory stated that an organism can pass on characteristics that it
acquired during its lifetime to its offspring. Lamarckian GA: Some Examples An example of this evolution is that, for example, there are a group of giraffes which eat from trees. When the trees get taller, the giraffes will grow longer necks and have offspring with slightly longer necks. A counterexample would be that if someones arm was cut off, his/her child would not be born
with only one arm. Lamarckian GA: The Process The process: Initialize Population Calculate Fitness With newly generated offspring
Repair Chromosomes Recalculate Fitness Select Best Chromosomes Apply Operators No Is the problem satisfied? Yes END
Lamarckian GA: A Comeback This falsely proven Lamarckian theory seems to have no hope, but fortunately, scientists have discovered that this theory occurs in nature. In 2009, scientists working at Tufts University tested mice which were genetically modified to have bad memory. These mice were then given an enriched environment (toys, exercise, interaction). They improved in memory and then had offspring with better memory, but only lasted for 6 months and eventually went away.
Lamarckian GA: 1-Celled Organisms In 1988, a group of scientists took E-coli and placed it in a different environment. This E-coli was not able to consume sugar lactose, and when the E-coli was placed in a room with only sugar lactose as food, the E-coli altered its genes. Although it was similar to Lamarckism, it was called adaptive mutation. Another group of researchers used yeast. Yeast is able to gain new genetic materials, and when the yeast cells with
a specific prion protein Sup 35 were mated with cells that did not have Sup 35, some of the offspring were born with the prion Sup35. A Comparison of Both Theories Similarities: Both goes through a process of: Having a population Calculating Fitness Selecting the Best Chromosomes
Apply Genetic Operators Both can be used for a genetic algorithm A Comparison of Both Theories (2) Differences: Darwinian: Chromosomes are not altered until offspring are born. It is not smart in a way that an outside force only helps calculate the fitness.
Lamarckian: Outside forces helps repair the chromosomes. Chromosomes are altered before offspring Fitness is calculated twice in a generation for each chromosome. Darwin GA: Maze Program Example Lets start out with another example. This time, it is for a program.
In this program, the goal is to create a simulated robot which will evolve each generation to solve a maze. Eventually, the robot would get to the end, unless the maze was impossible to solve Darwin GA: Maze Program Example ~The Maze Darwin GA: Maze Program Example
~The Maze (2) In the maze, a red square represents the starting point. A green square represents the goal. A black square represents a wall. A empty square represents a movable square. The numbers represent the Manhattan distance from the goal. Darwin GA: Maze Program Example
~The Chromosome Coding For the chromosomes, it is necessary to have a coding for each of the directions: Forward = 1 Left = 2 Right = 3 Backwards = 4 Turning is not required since an omnidirectional drive is used.
Darwin GA: Maze Program Example ~Initializing the Population Now we finally get to the beginning of the program. The first step is to initialize a population. Another thing we do in the initialization is to create to maze and place it into a 8 by 8 maze. We do this by creating a for loop filling in numerical values into the array. The coding is as below: 7 is the start
8 is the goal 9 is a wall Darwin GA: Maze Program Example ~Initializing the Population (2) Numeric coding of the maze 9 = wall 7 = starting point 8 = goal
Darwin GA: Maze Program Example ~Initializing the Population (3) The code for initializing the shape of the maze: Darwin GA: Maze Program Example ~Initializing the Population (4) The code for initializing the chromosome placement array:
Darwin GA: Maze Program Example ~Initializing the Population (5) We also create 2 other copies of the array, one for keeping track of the order the place the chromosome values, and one for calculating distance traveled. After the array was created, the chromosomes were made. This is done by creating a for-loop which assigns random movement values (1-4) into a integer array of 21 (the number of unused space in the maze). Each chromosome is part of a vector with 1000
chromosomes (the population). Darwin GA: Maze Program Example ~Initializing the Population (6) The code for generating the chromosomes: Darwin GA: Maze Program Example ~Calculating the Fitness The next major function of the genetic algorithm is to calculate the fitness of each chromosome. This is done
by simulating the maze. The maze is initialized by first reset setting the state of all arrays. Then, we fill in the maze with the chromosome values (see next page) using one of our defined maze arrays as a guide. We have a variable for the robot which is initialized at the starting position. We move according to the number (1-4) of the cell. Darwin GA: Maze Program Example ~Calculating the Fitness (2)
The number represents the order that the chromosome values are placed into the array. The values of the chromosome is placed from left to right Darwin GA: Maze Program Example ~Calculating the Fitness (3)
The code for finding the start and end of the maze: Darwin GA: Maze Program Example ~Calculating the Fitness (4) The code for filling in the maze: Darwin GA: Maze Program Example ~Calculating the Fitness (5) If the robot crashes a wall, the process is terminated.
The process is also terminated if the robot detects that it is in an endless loop, or if the robot gets to the goal. and the fitness is calculated by e n where e is the number of empty cells and n is the number of cells traveled. It is never possible to get a fitness of zero since there is two unused spaces being the dead end. The process is looped until all chromosomes are tested. Darwin GA: Maze Program Example
~Calculating the Fitness (6) The function for checking the movement of the robot: Darwin GA: Maze Program Example ~Calculating the Fitness (7) The function for checking the movement of the robot(2): Darwin GA: Maze Program Example
~Selecting the Best Chromosomes The next main function is the selection of the best chromosomes. This is simply done by sorting the vector until the lowest fitness values (20, 21, etc) at the bottom and the highest fitness values (2, 3, etc) at the top. Therefore, we select the top half or third to get the best chromosomes. Darwin GA: Maze Program Example
~Selecting the Best Chromosomes (2) The code for sorting the chromosomes Sort() is a function in an included standard library We select the in the genetic operator function. Darwin GA: Maze Program Example ~Mating and Looping
After we select the chromosomes, we them randomly mate them. Thus, we then apply the crossover and mutation operators. We create the next generation from this. As the final step in the process, it will loop until the condition is solved, being getting to the end. In simple words, the fitness value has to equal 2. Darwin GA: Maze Program Example
~Mating and Looping (2) The code for the mating function The variable mutation was defined before. Darwin GA: Maze Program Example ~Mating and Looping (3) The code for the mutation function: Darwin GA: Maze Program Example
~The Running of a Generation Lets simulate this process. Well use this chromosome. 333112111242244444434 Note that the goal sequence is: 333112111222244444434 We first fill in the maze. Darwin GA: Maze Program Example ~The Running of a Generation (2)
We now Chromosome Original fill in the maze with: 33311211124224 444 44 34 333112111242244444434 Darwin GA: Maze Program Example ~The Running of a Generation (3) The next step is to see how
far the robot (blue square) goes. Now we calculate the fitness by first seeing how far it went: 10 21-10 = 11 which is the fitness value Darwin GA: Maze Program Example ~The Running of a Generation (4)
Afterwards we now calculate the other fitness values and select the best chromosomes. Then we apply the genetic operators (shown before). Maze Program Example ~Lamarckian GA We can also use Lamarckian GA for this purpose. Everything will be kept the same, besides that there would be two more functions. One repair the
function, and another recalculating the fitness (can be copied from the first fitness calculation). We repair the chromosomes by seeing where the robot crashed and randomly giving it another value. This can help a lot as in the previous example, where if we had generated a 2, then the robot would get to the end. But can also be worse when it calculates a 3 and make an endless loop, creating a fitness of 21. Maze Program Example
~Lamarckian GA (2) For example, going back to the previous maze where I had a chromosome sequence of: 333112111242244444434 If the 4 happened to randomly generate a 2 for replacement, then the fitness would be a 2, which means that the robot reached its goal. However, if we generate a number 3, then the chromosome would be ruined, having a fitness of 21.
Darwinian vs Lamarckian: Genetic Algorithm Maze Data When comparing the genetic algorithms, I took the same maze as described previously. I took the same initialization of population, fitness calculation, sorting, and genetic operators. However, I added a normal repair chromosome function. Three trials were done for both algorithms
Darwinian vs Lamarckian: Genetic Algorithm Maze Data (2) Number of Generations When we look at the graph (below), we see a definite difference between the two algorithms. The Darwinian GA took almost three times more generations than Lamarckian GA, with 33 generations as to
Lamarckian GAs 12 generations. Lamarckian vs Darwinian 35 30 25 20 15 10 5
0 Lamarckian GA Darwinian GA Darwinian vs Lamarckian: Genetic Algorithm Maze Data (3) When looking at the three trials, we notice that Lamarckian GA is more of a downhill rather than Darwinians bumpy spikes.
Darwinian Genetic Algorithm 18 18 16 16
14 14 12 12 Test 1 Test 2 Test 3
10 8 6 4 Fitness Value Fitness Value
Lamarckian Genetic Algorithm 10 Test 1 Test 2 Test 3 8 6
4 2 2 0 0 1
2 3 4 5 6
7 8 9 Number of Generations 1
4 7 10 13 16
19 22 25 Number of Generations Darwinian vs Lamarckian: Genetic Algorithm Maze Data (4)
In conclusion, Lamarckians algorithm, although it might not be biologically correct, out performs Darwinians algorithm by almost up to three times less the number of generations for a simple purpose. It clearly does better then Darwinians algorithm in everyway, with no draw backs. This makes Lamarckians genetic algorithm better than the traditional Darwinians genetic algorithm in programming.
Later Additions and Improvements Most Important: Include and add genetic algorithm to the robot for movement, emotions, etc. Just as Important: Have more examples for comparing Lamarckian and Darwinian GA Include Lamarckian genetic algorithm to the robot. Attach a camera on the robot Add speech and emotion to the program
Benefits from British & French engineering Analogies with today's new social experiment in communications Total worldwide network demand "Wireless access to the web will be the catalyst for a revolution of the Internet which is as profound as the impact...
Prnp0/0 designates an extract from the brain of a Prnp0/0 mouse. (Upper) ELISA titration of OvPrP samples. (Lower) Competition ELISA of the Fab and the antibody. The lower signal for PrPSc in both the titration and the competition tests reflects...
Your employees use the Cross-Application Time Sheet (CATS) to record information on their working times. You can use the recorded data for further business processes in Human Resources, Logistics, and Controlling.
Over 45 and Working in Aged Care Results of a pilot study. Siobhan Austen: International Association for Feminist Economics Annual Conference Reorienting Economic Theory, Policies, and Institutions: Feminist Perspectives in the Aftermath of the Global Economic Crisis, Hangzhou, China, 24-26...
Chivalric and Courtly love. In medieval Europe, in both secular and religious life, love was elevated into a cult. Worshipping from afar. Gives a sacred character to courtly love . In reality, much seduction and infidelity. Both pure and impure...
Benefits for learning Community teacher's understanding enriches 'grandparents' theme for school Children exploring their roots and who they are Building attachment to grandparents Developing language to communicate with elders The Rag Trade A partnership project Smithy Street Primary School &...
Remove the skin and muscle from the head and carefully expose the skull. With a pair of scissors, poke a small hole to the anterior portion of the skull directly behind the pinnae (ears). Then continue cutting around the skull...
Enterocoelous plan Schizocoelous plan 9-* Figure 9.4 Acoelomate, pseudocoelomate, and eucoelomate body plans are shown as cross sections of representative animals. 9-* Developmental Origins in Triploblasts Body Plans Triploblastic animals follow one of several major developmental pathways Most common pathways...
Ready to download the document? Go ahead and hit continue!