Robot arm rig best practices

   996   5   1
User Avatar
Member
2 posts
Joined: 4月 2017
Offline

In a setup like this, I want to rotate the selected joint along the world's y axis, but if the joint has to point to the next joint in hierarchy for good deformation, I have to rotate all 3 axis to make it possible.

The solution I can think of is either disconnect the joints and have the child constraint to the rotation of the selected joint, or I can add a support joint between the selected and child to porperly setup the axis.

What is the best practices for situation like this?

Attachments:
image.png (420.9 KB)

User Avatar
Member
477 posts
Joined: 8月 2014
Offline
There are probably better ways to deal with this, but personally I would set orientations with VEX.
Take a look at the example file.
Edited by ajz3d - 2023年8月4日 07:55:45

Attachments:
robotic_arm.hipnc.gz (29.4 KB)

User Avatar
Member
2 posts
Joined: 4月 2017
Offline
ajz3d
There are probably better ways to deal with this, but personally I would set orientations with VEX.
Take a look at the example file.

Ah I can't open it since I'm using Indie version. But I'm guessing what you mean is that, instead of using OrientJoints node to setup axis towards child, you would be using RigAttributeWrangle node to setup a straight-up axis for rotation control, and ignore pointing-to-child thing?
User Avatar
Member
477 posts
Joined: 8月 2014
Offline
Apprentice license is gratis and can be installed alongside other licenses. If you don't have it installed, you're missing a lot of great example files posted here on the forum.

swdgame
(...) I'm guessing what you mean is that, instead of using OrientJoints node to setup axis towards child, you would be using RigAttributeWrangle node to setup a straight-up axis for rotation control, and ignore pointing-to-child thing?

I'm using Orient Joints only to set root joint transform, then in a Point Wrangle I'm setting transformmatrices of the two remaining rotator joints. Root transform can also be set here, but I found dropping Orient Joints to be faster than typing in another condition in the wrangle.

Child-parent relationship is completely ignored in this setup.

#include "kinefx.h"
vector dirx;
vector diry;
vector dirz;
vector up;

if(@name == "base"){
    dirx = set(0, 0, 1);
    diry = set(1, 0, 0);
    dirz = set(0, 1, 0);
    up = dirx;
    3@transform = set(dirx, diry, dirz);
}
if(@name == "arm_rotator"){
    dirx = set(0, 0, 1);
    diry = set(0, -1, 0);
    dirz = set(1, 0, 0);
    up = dirx;
    3@transform = set(dirx, diry, dirz);
}

PS. I've updated the file with an additional non-VEX setup.
Edited by ajz3d - 2023年8月4日 08:06:44
User Avatar
Member
313 posts
Joined: 10月 2016
Offline
ajz3d
There are probably better ways to deal with this, but personally I would set orientations with VEX.
Take a look at the example file.

Sweet!

There is also the orient joint tool when you right click a joint (with the handle "h" hidden) and then you can rotate with snapping (ctrl). Also the joint parameters can be displayed with "p" when selected. However, "a one" click solution is better. I'd like to use your VEX example and build a couple of relative joint rotation snippets. For example rotate -x90, +x90, -y90, +y90, -z90, and finally +z90. Thanks for sharing!

Sorry if interfering with the O.P. but is it possible to do this without the Point Wrangle node? I.e. just some snippet in the shelf? Otherwise I'll be exporting my skeleton parts as modules so eventually it does not matter that much.

For clarity I've added a screen grab. The hotkeys used are h, p and ctrl as mentioned above.

Edited by SWest - 2023年8月4日 14:21:11

Attachments:
output.gif (5.9 MB)

Interested in character concepts, modeling, rigging, and animation. Related tool dev with Py and VEX.
User Avatar
Member
477 posts
Joined: 8月 2014
Offline
SWest
(...) is it possible to do this without the Point Wrangle node? I.e. just some snippet in the shelf? Otherwise, I'll be exporting my skeleton parts as modules so eventually it does not matter that much.

Without VEX? You can create helper joints to direct joint orientation and then blast those temporaries to kingdom come afterward. I've updated the example file a while a go, in case you've missed it. It now includes a basic helper joint workflow.

I guess Rig Attribute VOP is also an option. And surely custom joint orienting can be done in many other ways, but I can't think of any at the moment.

To address the rest of your question, if you want to work with snippets to create skeleton modules, and by snippets I mean anything from pure code to whole networks, AND you don't want to use HDAs, then I'll take this opportunity to do a small self-promotion here by suggesting you to try out my Houclip [www.sidefx.com] tool. I know that you're using Debian, just like myself, so this tool might be of interest to you as it utilizes dmenuor rofias a UI, which makes it very fast to search for, add, get or delete snippets. And, its integration with Houdini, if I may call it so, is virtually seamless.

There's a Node Gallery feature of Houdini, which works similarly to Houclip. But, it can store only single nodes and I find it too cumbersome to use. I guess there's a lot of room for improvement here.

Shelf tools with Python scripts generating wrangles along with their VEX code would work too. Also don't forget about node presets, but their list is not searchable, so working with them wastes a lot of time if the list is too long.
  • Quick Links