PDA

View Full Version : Introducing a rotation offset into a link


EnvisMJ
11-10-2013, 03:56 PM
I am working in a immersive VR simulator, and I am picking up and moving objects around.

Grabbing an object is pretty easy:
grabLink = viz.link(hand,object,1)
This allows it to follow translation and orientation exactly

I can also modify the link to act in a couple different ways by modifying the link like so:

Creating a 'locked rotations' link (the grabbed object follows the translations of the hand, but it's orientation is locked at [0,0,0] exactly)
grabLink.setEuler([0,0,0]) #set the yaw, pitch and roll to zero

Create a 'z-pinned' link (the grabbed object follows rotations exactly, but the block is only able to translate in the z-axis)
yPos = object.getPosition()[1] #y position of object
xPos = object.getPosition()[0] #x position of object
grabLink.clampPosY([yPos,yPos],1,viz.LINK_FULL_OP) #clamp item's vertical motion
grabLink.clampPosX([xPos,xPos],1,viz.LINK_FULL_OP) #clamp item's lateral motion

Create a 'movement bounded' link (object can't move past the zBound point on the z-axis)
grabLink.clampPosZ([None,zBound],1,viz.LINK_FULL_OP) #clamp item's forward motion



Ok, so all that is working well and good. But now I need to 'offset' the position of the object vs. the hand with a set of offsets
rotationOffsets = [x,y,z]

Anyone know how to get this done?

Frank Verberne
11-13-2013, 05:51 AM
I think you're looking for something like this:
positionOffsets = [x,y,z]
rotationOffsets = [yaw,pitch,roll]
grabLink = viz.link(hand,object,1)
grabLink.preTrans(positionOffsets)
grabLink.preEuler(rotationOffsets)
You mentioned in your question that you want to offset the position, but in the piece of code below, there is a variable called rotationOffsets. You can offset the rotation of a link with link.preEuler() and the position of a link with link.preTrans(). Both are described in the code above. Hope that solves your problem!