ODE error (edit: fixed by ODE developers since 2016) 

Hi,

When using ODE instead of MechaStick, Framsticks throws an error "Floating point division by zero" after a few seconds of simulation. If I try to start the simulation again, it throws "ODE INTERNAL ERROR 2: invalid operation for locked space (..\..\ode\src\collision_space.cpp:729)" and the program crashes with runtime error.

Also, during the simulation with ODE, Framsticks gives a lot of warning messages like "muscle "@" (neuro#23) disabled on joint#9" and that goes for some 5 muscles in my case, though all muscles are pretty the same, and there's nothing unique in these ones (it's a simple quadruped with 10 muscles). There are no warnings when using MechaStick.

Thanks.

Forums: 
Maciej Komosinski's picture

> When using ODE instead of MechaStick, Framsticks throws an error "Floating point division by zero"...

This is a known problem and has been submitted to the ODE team
http://groups.google.com/group/ode-users/browse_frm/thread/ba9c86c3e57c727d
But nobody fixed this yet. I believe you can avoid this problem by avoiding the "T" receptors in ODE.

> during the simulation with ODE, Framsticks gives a lot of warning messages regarding muscles...

This is because in ODE, there are more limitations regarding placing many muscles in a single location of the body. The genotype is syntactically valid, but warnings are issued when a creature is "grown" from its genotype.

You can use the "Fail on warnings" parameter (in the "Error reporting" section) to avoid simulation of such genotypes, and then they will have less chance to be reproduced. This helps to lessen the number of warnings during evolution and also obviously alters the way evolution progresses.

Thanks a lot!

Well, since I have to use those T-receptors, I guess I'll stick with MechaStick for now. Can I make the creature less springy?

Also, a couple more questions:
1. Can I use two orthogonal |-muscles in one joint? Or maybe there's another way, like splitting the joint into two, with a short stick between them?
2. I need to allow some parts of the creature to evolve (length of its legs and the range of muscle movement), while keeping other parameters fixed (to keep it simple: I need to evolve a creature from a worm-like legless locomotion to a legged quadruped walking). Can I do it using f0?
3. Is there a way to force the change of some parameters over time? For example, I'd like to compare a creature with forcefully-growing legs, and the one which has evolved its locomotion on its own.

Btw, thank you for this awesome project, seems like it'll be really useful in my research on developmental robotics. Cheers!

Maciej Komosinski's picture

> Well, since I have to use those T-receptors, I guess I'll stick with MechaStick for now.

Not a bad choice. Elastic parts really help in locomotion, rigid ones make locomotion difficult.

> Can I make the creature less springy?

Hehe^^. I wonder if playing with the gravity value and performing all simulations under water would yield a similar effect. Anyway, MechaStick should be more parametrizable... currently, it is pretty inflexible in terms of adjusting simulation.

> 1. Can I use two orthogonal |-muscles in one joint? Or maybe there's another way, like splitting the joint into two, with a short stick between them?

You can definitely use the "short stick" solution. However, in MechaStick, masses of Parts are adjusted so that the mass of each Part equals the number of incident Joints. So adding Parts causes increase in the mass of your design, and you have no control over how the mass is distributed (other than by deciding where Joints should go and how many).

> 2. I need to allow some parts of the creature to evolve (length of its legs and the range of muscle movement), while keeping other parameters fixed (to keep it simple: I need to evolve a creature from a worm-like legless locomotion to a legged quadruped walking). Can I do it using f0?

Yes, you can use the "delete inhibit" and "modify inhibit" flags in f0 for parts, joints, neurons, and neural connections. This is a powerful feature of f0. Search this forum for more information on these flags.

> 3. Is there a way to force the change of some parameters over time? For example, I'd like to compare a creature with forcefully-growing legs, and the one which has evolved its locomotion on its own.

Seems like two separate experiments for me. Anyway, you can do pretty anything with Framsticks by writing your own experiment definitions or macros. Complete the tutorial to become a Framsticks master :-)