Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations waross on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Robotic Arm Movement

Status
Not open for further replies.

TylerLew89

Aerospace
Mar 28, 2011
13
0
0
US
Hey all.

Long time NX user in need of some help. Running NX 10.

I have a robotic arm CAD model that has 7 separate joints in it. Each joint angle is controlled through expressions so I can say I want Joint 1 to be 45 degrees, Joint 2 to be 85 degrees, etc... This works great for quick CAD model changes but really hinders other operations.

Currently I am trying to determine if this arm can reach certain points in space. Controlling each joint through expressions is TERRIBLE for this. I basically have to guess on check on each joint angle and just hope I get close. I end up spending hours to figure out if one point is accessible.

Alternatively I have created a simplified model where each joint is its own component and each component is constrained at the joint. This lets me dynamically move the last joint of the arm and each joint updates along the move. This is extremely finicky at times because NX sometimes does not know what to do to allow a movement to happen. The joints will sometimes spasm out of control or you'll get very odd configurations.

Does anyone have a better way to do this? I basically have a robot arm with a fixed base and a fixed point in space and I need to connect the dots efficiently. Another aspect to this that I would like to add is rotational angle constraints to each joint. For example, joint 2 can only rotate between -100 and +90 degrees about joint 1. This information is imperative to my CAD checking to see if these positions are possible.

Is this possible? Am I asking too much from NX? Thanks!
 
Replies continue below

Recommended for you

We had the same problem, NX 11, or was is NX 12, you can put limits on those angles in your assembly. Which makes it nice. We were trying the same thing, and we just got our robot close enough to check for clearances. Siemens has a product called robot expert, or something like this. This a package where you can create code from the robot movements you do also. We never used it but it looks really nice. Just a quick thought.

 
I looked up that address that Sdeters showed, Clicked the "Overview video".
Now i know that one can zoom and pan and , would you imagine !, -Rotate the view!
Yep. But nothing about the robotics.
I assume that somebody linked the wrong video.

your Robot arm has 7 separate joints, can you upload an illustration on this arm ?
I imagine that the "wrist" is a couple of these 7, If you have this as an assembly with partially constrained components, You should be able to drag ( using the Move component) but then select the last link before the wrist to move the arm into position, then select the wrist adjust the gripper (or whatever attached?. ?
I have done this with a model of a skylift to illustrate access in a factory. I added the skylift to the factory assembly, then selected the basket of the skylift and RMB -Override position. Then drag the arm using the 3-axis handle.

Regards,
Tomas




 
Toost,

I can not give a good illustration of my arm. Imagine it looks something like this Canada arm on the ISS

Each joint has a large range of motion (almost 360 degrees). I have done exactly what you talked about and have used move component to move the last link. This works partially but NX seems to freak out every so often. Its as if the joints will get into a spot and then no more moves can be made. Also, due to how complicated the assembly is, these moves take a long time.

I need an easy way to say whether or not the end of the arm can reach certain points in 3D space and understand what the joint angles are so I can know if the robot can actually maneuver into said position
 
You need an inverse kinematics solver for the linkage if you want to reach a specific point.

What I would do is to just map it. It's easy enough to run each joint in 5 or 10 degree increments and record the end effector position and orientation. that's 35^7 for 10 degree increments. That's 64,339,296,875 X,Y,Z,u,v,w real numbers. I think that's about 3 Terabytes of data.

If all you care about is reach, then you can break the result space into compartments of arbitrary size and just pass-fail for the ability to enter them. I found that such a thing gets smoother if the last degree of freedom is assumed to generate an arc and then evaluating each compartment along the arc.
 
No, what i am trying to say is that if you drag link after link,
starting from the (fixed?) base and outwards and adjust one at a time to a "roughly correct position".
The math should not get locked up. Or ?
When you are close to the final solution , you can probably drag the outermost link.
But if the arm have zillions of degrees of freedom, and you go straight for the last link and do radical changes, it might lock up pretty soon.
This is a quite large equation system with many unknown variables to solve simultaneously.

Regards,
Tomas

 
Toost, the only problem I have with that method is being able to quickly determine if the joint angles I manually put in are valid. For example, joint 4 may only have a range of motion between -120 degrees and +185 degrees. I could very easily exceed those numbers by manually moving each joint and then fine tuning at the end.

Is there anyway to have NX spit the joint angles out after I am done moving something?

Thanks for the help guys
 
hm,
What about :
If the rotation angle is left unconstrained , and you add a measurement using the "new" measure tool , create an angular measurement ( de-select the other types of dimensions) , tick "associative" and "display annotation" then those dimensions will update in real time when you drag. ( It can be a bit tricky to get the angle as desired)

Also i hope that you know that you can drag semi-constrained components when the assembly constraints dialog is on the screen.
place the cursor on top of a component and drag.

Regards
Tomas





 
Status
Not open for further replies.
Back
Top