Rosanswers logo

Hello everybody. I face and issue which I think everybody who work with robotic arm should face, but surprisingly I can't find the solution through goggling, searching and keep trying. So I stuck.

I simulate phantomx arm (actually the model doesn't matters) to move it to desired position X,Y, Z. I can move the arm using Move Group Python Interface Tutorial when I set both position and rotation (7 values totally). This is fine when the end effector relative position doesn't change and I can calculate quaternion.

The issue starts when to reach some point (which is hight enough) I need to change the angle of end effector. Have a look on image illustration (sorry can't insert images)

I use Moveit! to find the joints values to reach the desired point, so I can't know beforehand the rotation of the end effector.

The question: Can I move my arm to the desired point without specifying rotation, just letting Moveit! to select any valid value as it does with other joints?

I have 2 ideas how to solve the issue:

  1. Probably rotation constraints are solution, but tutorial is in C++ and I can do in python only
  2. Add fake floating joint as an end effector, so that any rotation would be valid (because the joint is float it can take any values)

Please advice me the right way to solve the issue. I would be really really thankful because it is my headache now.


Originally posted by RyabkoMV on ROS Answers with karma: 1 on 2017-12-07

Post score: 0


1 Answer 1


Rosanswers logo

This may be more a problem than you expect, firstly there is a difference between the 'dexterous' and 'reachable' workspaces of a robot arm. The dexterous workspace is the volume the end effector can reach in any orientation and the reachable workspace is the volume that can be reached with the end effector in a limited set of orientations. We generally avoid moving beyond the dexterous workspace if possible, since by definition you'll be near a singularity.

I don't know the workings of Moveit in too much detail but mathematically if you request the end effector to simply be in a particular location then there are potentially a great many solutions.

One solution would be to try and estimate an end effector orientation beforehand that would give you a good chance of reaching that point. Since the robot arm will be at almost full reach one simple way of doing this would be to orient the end effector so it's facing in the same direction as the vector from the robot base to the desired end point. This should allow the arm to reach almost all of it's reachable volume.

Originally posted by PeteBlackerThe3rd with karma: 9529 on 2017-12-07

This answer was ACCEPTED on the original site

Post score: 1

Original comments

Comment by RyabkoMV on 2017-12-08:
Thanks for your reply! Interesting proposition. I can move to desired position without changing relative orientation. But I want to do same with orientation change and without calculation of final orientation, to cover more points which I can reach.

Comment by RyabkoMV on 2017-12-08:
Basically, what Moveit! does is calculation of joints orientations. I do not set orientations beforehand. So I guess it should be doable with end effector as well.


Your Answer

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