Trying to create a collision avoidance model (RRT) for an RRRRR manipulator. I am unable to wrap my head around how to represent the same in configuration space. Anything upto 3 joint variables is easy to visualize but how do I go about for anything with more variables?

I understand that I need to sample points in C-space and check for collision using forward kinematics. But how do I sample these points if I dont know what the C space looks like (what the x, y or z axis represent - I have only 3 axis's for 5 variables)?

Any explanation or link to reading material would be highly appreciated!


1 Answer 1


You do not neceserily create an explicit C-Space representation which you sample.

You have to choose, if you want to create your path in axis space or operational space (Cartesian space). This is a design choice and has some influence on the final shape of the trajectory. I am going to assume, that you plan in operational space (Cartesian-like).

You sample the operational space. You select one pose of the TCP with 5 coordinates, e.g. $X_{TCP} = [x, y, z, a, b]$, 3 positions and 2 orientations.

You apply the inverse kinematics to find the position and orientation of the linkages of the robot which sets the TCP to this pose. This starts with finding the axis angles.

$$Q = f^{-1}(X_{TCP})$$ where $Q = [q_1, q_2, q_3, q_5, q_5]$

If you have the axis angles you can build up the transformation matrices for each linkage and position the linkages in the operational space.

The full collision check now can be done. There is no constraint on which method you use, the more accurate the method, the more accurate the results, obviously.

The results of the collision check is binary, collision or now collision. If you get a collision, you know that in the C-Space you sampled a configuration which collides. If not, you sampled a configuration, which did not collide. Essentially, you got the evaluation of the C-Space function

$$ \mathcal{c}_{X_{TCP}} = \mathcal{C}(X_{TCP})$$

As expected this way of sampling is less efficient then creating an actual C-Space function and sampling that explicit function. However, it is expected that creating the explicit function, if possible, will have a large overhead. Something in between is also possible, where the sampling can be sped up by pre-computing different elements which are often required, or caching results which are often sampled.

  • $\begingroup$ Thank you! I dont have the pose/orientation in the cartesian space either. I do understand your answer though! What i do have is a C-space map with obstacles on it- the way its supposed to work is that I click 2 points on the map (each point corresponding to a certain configuration). The RRT algorithm is then supposed to find the way between the two configs. What I m puzzled with is - how do I assgn a config (q1,q2,q3,q4,q5) to the two points that I select on this map (considering that I dont know what the axis of this map stand for)? Thank you again! (mdpi.com/1424-8220/18/2/571) $\endgroup$
    – user27243
    Oct 12, 2020 at 9:55
  • $\begingroup$ You click two points, that means you have a cartesian position, you must defeine an orientation also. I mean, what does the application require as an orientation? Do you need to grip something? do you need to push a button? do you need to weld something? if it is just a theoretical example, you can just put 0 orientation until the whole thing works and then figure out what to do with the orientation $\endgroup$
    – 50k4
    Oct 12, 2020 at 9:59
  • $\begingroup$ As the RRT plans, you need to sample the C-Space. For each point at which you need to sample, you either get X or Q. Just use it to see if there is a collision or not... $\endgroup$
    – 50k4
    Oct 12, 2020 at 9:59
  • $\begingroup$ The axes of your C-Space map are either the same as your operational space (meaning x, y, z a, b) or your axis space (q, ... q5). You can have a projection of this map in 2D or 3D to select e.g. xyz and then somehow add the other two, a and b, or treat all others as 0 until the application runs and then expand the remaining dimensions. $\endgroup$
    – 50k4
    Oct 12, 2020 at 10:21
  • $\begingroup$ ^that does makes sense! Thank you again! I ll see if i can get that going! $\endgroup$
    – user27243
    Oct 12, 2020 at 10:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.