Adding the elbow control
For the elbow control, I would like a locator-like shape. So, select l_eye_ctrl_offset, hit Ctrl+D to duplicate it and then Shift+P to un-parent it from its current hierarchy. Rename the duplicated control hierarchy from top to bottom as follows: l_elbow_ctrl_offset, l_elbow_ctrl_auto and l_elbow_ctrl. You can use the Search and Replace Names tool to speed up the renaming of the control. You'll find this tool under Modify.
Next we need to position the elbow control correctly so the arm does now pop when switching between FK and IK. To do this, select in this order: l_upperArmDrive_IK_jnt, l_lowerArmDrive_IK_jnt, l_armEndDrive_IK_jnt and then l_elbow_ctrl_offset. Go Constrain > Point (Options), make sure Maintain Offset it turned off and hit Apply. Now select l_lowerArmDrive_IK_jnt, ctrl-select l_elbow_ctrl_offset in the Outliner and go Constrain > Aim. Now that the elbow control is correctly positioned, delete the 2 constraint nodes that live under l_elbow_ctrl_offset. Then, make sure the Translate tool is set to Local and drag the l_elbow_ctrl_offset out slightly along the Z-axis. Lastly, select l_elbow_ctrl and Ctrl+select l_arm_IK in the Outliner or Shift+select it in the viewport and go Constrain > Pole Vector. You can now translate the l_elbow_ctrl to control the twisting of the arm.
Creating an elbow control to twist the arm and aligning it correctly
Let's start by cleaning up the Outliner. First select l_upperArm_FK_jnt, l_upperArm_IK_jnt, l_upperArmDrive_IK_jnt and parent them under l_shoulder_jnt. Next parent l_shoulder_ctrl_offset under chest_IK_ctrl. Now, in this order, select l_shoulder_ctrl, l_shoulder_jnt and go Constrain > Point. This will allow the arm to follow the torso correctly. Now, select both l_arm_IK_ctrl_offset and l_elbow_ctrl_offset and hit Ctrl+G. Rename the new group l_arm_IK_ctrl_grp. Select l_Arm_IK, l_shoulder_jnt and hit Ctrl+G. Rename that new group l_arm_rig_grp.
Let's now mirror the arm joint chain to the other side. Select l_shoulder_jnt and go Skeleton > Mirror Joint (Options). Set the Mirror across to YZ and the Mirror function to Behaviour. Pop an l_ for Search for and an r_ for Replace with. This will rename the joints for us correctly. Hit Mirror and we should now have the joints in place for the right arm. Go through and delete all the constraint nodes and the geometry that have come along with the mirroring and rebuild the rig for the right arm.
Mirroring the joints for the right arm
The last thing to do is to lock and hide some of the attributes from the Channel Box so the animator cannot set keys on them. First select l_clavicle_ctrl, l_shoulder_ctrl, l_scapula_ctrl, l_upperArm_FK_ctrl and l_lowerArm_FK_ctrl. In the Channel Box, highlight all the translate and the scale channels, hold down the RMB and go Lock and Hide Selected. Then select l_arm_IK_ctrl and lock and hide the rotate and scale channels.
Next time, we'll create the rig for the hand and the fingers.
Make sure to lock and hide any attributes you wish the animator not to key
Top Tip: Blend colors node
So far, we've used orient constraints to switch between FK and IK mode. This is just one of many ways to create such a result. Another method is to use the Blend Colors node which you will find in the HyperShade, under Create > Color Utilities. With this node, you could plug the rotate attributes from the IK and FK joints into the Color 1 and Color 2 parameters on the Blend Colors node. The output from the Blend Colors node could then be plugged into the rotate attributes for the joints that will drive the mesh. The Blender attribute on the Blend Colors node will then allow you to dictate which joint chain (FK or IK) is in control and this could then be driven through a Set Driven Key.
Using a Blend Colors node to handle the blending between the FK and IK modes
Jahirul's previous rigging tutorials can be found here:
Maya rigging: Introduction to rigging
Maya rigging: Introduction to rigging a human torso
Maya rigging: Introduction to rigging the neck and the head
Check out Jahirul's site