Hi everyone,
I want to move the robot to a specific frame but with some fixed angle constraints. I was looking into inverse kinematics with constraints in COMPAS RRC, but it looks like that I need the model of the robot. is the model of ABB IRB4600 60_2.05 available now? Are there any other solutions in COMPAS RRC?
Thank you.
COMPAS RRC only does controlling/execution, for planning, you can use COMPAS FAB, which does indeed have models for these robots.
There’s different ways to load a robot model, depending on which backend you want to use. The simplest is to use a plain IK solver based on DH-params from COMPAS FAB. These solvers don’t do collision checking, but they are enough for doing IK and are a quick way to get started. Once you want to move into more sophisticated planning tools, you can switch the backend to pybullet or to ROS/MoveIt (still using COMPAS FAB)
Cheers
1 Like
Hi Mahsa,
To add onto Gonzalo’s reply as another option, you could directly feed a COMPAS frame (with the target position and orientation you need) into the MoveToFrame() command from COMPAS_RRC. The frame can either be manually created/coded or parametrically created (in Grasshopper for example). Then, you could visualize this virtually using ABB RobotStudio where all the ABB robot models are available.
With this workflow, you won’t need to directly solve the inverse kinematics so it may be simpler to get started with (before you move onto COMPAS FAB if you would still need to in the future). If this isn’t what you’re looking for, could you give some more information about what you would like to achieve with the robot?
Hope this helps!
1 Like
Hi Adonis,
Thank you for your response. I want the robot to move to a specific frame with some joint angles fixed, so I want to make the inverse kinematics constrained on some joint angles.
Hi Mahsa,
Could you clarify a bit more what you want to do? The arm you point to has only 6 joints, so if you fix some of them, some frames will not really be reachable at all. I am not really sure I understand the use case. Unless, when you say fixed, you mean constrained between a specific range, for example, you don’t want joint 6 to be less than 0 or more than 1/2 full rotation.
But again, if you remove one degree of freedom to the 6DoF system, the solver will have a hard time reaching frames
Cheers
Gonzalo
Hi Gonzalo,
Thank you for your response.
We are using the ABB arm for a 3D printing case, so we have a nozzle attached. I need the robot to move to the frames with the nozzle always pointing down, so basically only joints 1 and 3 should move.
I figured out the issue.
- My tool calibration was off. I was using TCP&Z, but then I switched to TCP with 4 points.
- In my code to move between frames, I was missing a minus in defining the frame while transforming to the world frame (cg. Frame(point, [1,0,0], [0,-1,0])).
Now, when I move the robot to a home position with specific joint angles that cause the nozzle to point down, and then I move it linearly to the frames, it doesn’t rotate the nozzle.
Ah ok! So, does that mean this is solved then?
Yes it is solved! Thank you!
1 Like
Mahsa and I took this offline to figure out and I just wanted to add a summary and explanation of the issue and solution for anyone in the future who may have the same issue and comes across this post.
The issue was that the robot had a 3D printing head mounted to its flange and the nozzle needed to be pointing straight down during the entire print.
The solution can be completely dealt with in COMPAS_RRC without the need for any inverse kinematics. As Gonzalo mentioned, you wouldn’t want to lock any axes as that will limit the robot. You will just need to make sure you properly define 2 things and make sure they match: the tool frame of your print nozzle and the target frames.
If you set up the Z vector of your tool frame to be pointing down and away from the nozzle (this is done on the ABB side, directly on the controller), you need to create a matching target frame with the Z vector also pointing down. This will ensure that the tool points down at the target. The X and Y vectors of the target will determine how the tool is oriented around that target in terms of its rotation around that specific Z vector (example at the end of this post).
So, you will need to define the target as a COMPAS frame so that:
- The point is the coordinate you want the robot to be at, and
- The X and Y vectors orient the TCP in the correct orientation where Z is also pointing down
Then you can use those targets with the rrc.MoveToFrame() command with a LINEAR motion to ensure the tool stays in the same orientation the entire time.
For example, your targets could look like this:
- frame = Frame(Point(100, 100, 0), Vector(0, 1, 0), Vector(1, 0, 0)).
Using this target with the MoveToFrame command and a LINEAR motion will move the robot so that the X and Y vector of the target point to the Y and X vector of the work object respectively, and as a result, the Z vector of the target will be pointing down (which is the -Z vector of the work object):
- abb.send(rrc.MoveToFrame(frame, 10, rrc.Zone.Z0, rrc.Motion.LINEAR))
1 Like