Example: Robot Collision Checking

Started by Johannes @ Robots in Architecture, April 29, 2016, 03:57:44 PM

Previous topic - Next topic

Johannes @ Robots in Architecture

Robot Collision Checking
Requirements: Rhinoceros 5, Grasshopper 0.9.0076, KUKA|prc V2

When collision checking is enabled, KUKA|prc will check for collisions between axes, cell geometry and custom collision geometry. Note that it is very computationally intensive - smaller meshes (e.g. via ReduceMesh) greatly increase the speed.
Members can use the "Analysis" component to automatically optimize towards avoiding collisions.


Hello Johannes,

can you give me a hint how I could use Collision Checking to automatically optimize towards avoiding collisions.
I am trying to do an robotic assembly with the Kuka Iiwa. The Goal is to place 12 straight rods at 12 unique positions all initially picked up at one central point. As the Assembly evolves the Geometry for Collision Checking will continuously change.
Is there a way to automatically optimize the robotic movement?

Thank you a lot in advance,


Johannes @ Robots in Architecture

Hello Lukas,

The is no real "automatic" way of optimizing a toolpath, because every application has got different constraints and degrees of freedom. For example with milling, you can rotate around the tool axis, because it is symmetrical. With the iiwa, you can adjust the redundant axis (but also not all the time, depending on the application).
In any case, Galapagos is a nice way to start experimenting with automatic optimization. So you get the Analysis component (available in the member version) and e.g. do a mass addition on the collision output (0 for an axis is no collision, 1 is a collision). Then you set your parameters for Galapagos to adjust (e.g. the value of the redundant axis) and let Galapagos minimize the fitness value, thus reducing collisions. Of course you can also do this "brute-force", by just evaluating ten different values or so and taking the best.

In general, the iiwa is slightly complicated when it comes to reachability because of its limited axis range.
One more thing regarding collision checking: Use the Rhino command "ReduceMesh" to reduce the complexity of meshes as far as possible (both tools and collision geometry).

Let me know if you've got any further questions!

Wang Cong

Hello Johannes,

I have tried the case you provided, this is something I haven't tried before. It will be useful in practice.  and I also have some confusions.
This method can find the toolpaths contains collisions or unreachable positions.  Is it just means that we should adjust the form or position of the object? or can I only change the axis posture to avoid the collisions without change the form of position.   
I am very inserested in the way use Galapagos.  But I think it's a little hard for me to integrate them.  So where can I get some case or tutorial of these?  I really want to learn this method.

Thanks a lot.

Johannes @ Robots in Architecture


The problem is that KUKA|prc is a generic interface, so depending on the application the requirements and constraints for optimization will be widely different.
For e.g. milling, you are using a rotary tool and gain a degree of freedom that allows you to rotate the tool frame around its axis to optimize reachability.
If you've got a robot with an external axis, the position of the external axis could be a way to optimize it.
And of course with a parametric object you could change object parameters, which are highly individual to that particular object.

So unfortunately there isn't really a straight reply or approach to that. If you get stuck somewhere I'd of course be happy to help along.