I am trying to make a underwater robot which an movement by learning from sensors, I have no idea about methods to be used in robot evolution, and is there some codes for reference. Thank you.
Thank you for reply about my quesiton,Lehtihet , Spitz . I have a review of the passive navigation paper of Frédéric Boyer, but it is not associated with evolution of robot, it is a new kind of awesome navigation method for underwater vehicle really.
As for the research of Hod Lipson, does the motion learn from the body of robot? What I really want to do is to create a robot can learn from sensors and actuators to generate a self-learning movement.
Hod Lipson works on evolutionary robotics. He co-develops robots and their controllers. For example, if you evolve a robot for swimming, the algorithm may find a snake-like robot + a controller that causes it to undulate (like a CPG).
If you already have a particular robot with a given set of sensors and actuators, then you can evolve the controller alone or use reinforcement learning to learn a controller. With the first option, you create many controllers that convert a certain sensory input into an actuation output, then you test every controller to see how it performs. The best controllers are selected to create the next generation. With reinforcement learning, you create a policy that decides which actions to take based on the system's state (e.g. sensory input). You can reward the controller for good behavior and/or penalize it for bad behavior. Then the policy is updated based on the reward/penalty.
I hope that helps you decide which approach to use.
Thank you for listing two options for evlolving robot, I have read some literatures about q-learning, and it shows the low efficiency of evolution in an example of bicycle control. The robot I created before is attached, which is an ROV with four thrusters(two vertical along z axis and two horizontal thrusters along x axis). Besides, I get knowledge of NEAT algorithm, but I donot understand how to express controllers in genetic algorithm, could you tell me more clearly or recommand some papers about how to use genetic algorithm to evolve controllers or neural networks?
@Joachim Pimiskern
Thank you for your suggesions about how to express controllers in genetic algorithm, I have got the thoughts you transfer but I still have no idea about how to implement the expression of grammar rules.
In my case, I used a genetic algorithm to optimize the parameters of a controller that I designed, instead of tuning it by hand. My controller uses a single phase oscillator to coordinate the activation of 3 torque pulses (2 applied at the hip and 1 at the ankle). My genome encoded the frequency of the oscillator and the strength, timing and duration of each pulse.
I've also used a similar genetic algorithm to tune PID parameters.
As long as you think of a good way to encode your controller parameters and a good way to measure the fitness of your controller, a genetic algorithm is the easiest way to go, IMHO.
Thank you for your suggestions, Jonathan Spitz. The evolution of robotic control problem is converted into the tuning of controller parameters, which mainly includes two critical parts, the first is how to encode the parameters of controller selceted for robot; Would you recommand some more books on encoding problem for me? ; The second is to set fitness function according to the performance of robot, for example, if the robot is trained to evolve a controller to track a line trajectory, the fitness function is is set on the basis of controller error or distance the robot has travelled?
Any periodic type movement can be easily generated using Central Pattern Generators "CPGs". This use nonlinear oscillators. The simplest among these is Mastouka Oscillator.
Hi, Thanks very much for describing the thoughts in details. It seems that it is a GP based method, using which the actions are defined using lowercase letters, such as acututor 1 (on -->a; off -->b), acututor 2 (on -->c; off -->d).....etc. I once used genectic programming technique to model dynamic of robot, where symbols represents function model like + - * / sin cos.... It seems that the technique used are same. However, I can not get your meaning for Uppercase letters clearly. Why no terminals are required in generating a sequence? Because the sequence is always composed with lowercase letters in the end. Should the Non Terminal be used or it serves the role of function model? Besides, fitness function used seems able to optimize the evolution of sequence.
@Maki Habib
Hello.Thank you for your suggestions for my question. In my case, the body of vehicle is considered to be rigid body with four thrusters. CPG methods is more suitable for robots like snake, fish, or spiders. Thank you.
Let's say for example that you have a simple line follower robot with a light sensor in the front and a motor on each side. The robot must follow a line on the floor from point A to point B. Instead of using a single black line on white floor let's use a gradient line, i.e. a line composed of several gray-scale lines (from white to black).
This system has a single analog input (0 - black to 1 - white) and two outputs (motor left, motor right). Let's use a PWM output that goes from 0 (no speed) to 1 (full motor speed). A simple controller could have 4 parameters:
Out_right = k1*(input - i0_1)
Out_left = k2*(input - i0_2)
where k1, k2 are linear gains and i0_1, i0_2 are desired input values. Then you can encode a simple genome g = [k1, i0_1, k2, i0_2]. You can make a more complex controller if you look at the difference between the current reading and the one before (like PD controller), then you get 6 genes: g=[k1, i0_1, k2, i0_2, k3, k4].
The encoding in this case is quite easy. Each gene is a floating point number with a given range, e.g. -100 to 100 or 0 to 1.
The choice of fitness function depends on what you want to achieve with the controller. You could integrate the distance of the robot to the line over a certain period of time (or until it reaches point B). You could use the time it took to reach B as another fitness, or how much control effort it used.
When you have several fitness functions you can use a weighted sum of all the functions to sort your population or you can use a pareto front approach, like I used in my latest publication. This method gives you a range of optimized solutions rather than a single one, .e.g some will be very fast, some very efficient.