Joints movement not working when using articulation

I have imported the urdf of a robotic hand with four fingers (each finger has four revolute joints) and created a usd model in a python script. I am using an articulation on the usd model. Articulation is created in the following manner:

# Load the URDF model and convert it to USD
result, prim_path = load_urdf_to_usd()
# Load the articulation from the USD model   
articulation = Articulation(prim_path, name="robot_hand")
articulation.initialize()

# Function to control the articulation
def control_articulation(articulation, joint_names, joint_positions):
    action = articulation.get_applied_action()
    for joint_name, joint_position in zip(joint_names, joint_positions):
        action.joint_positions[articulation.get_dof_index(joint_name)] = joint_position
    articulation.apply_action(action)

When an isolated articulation command is run in the following way, e.g.,

# Control specific joints
finger_joint_names = ['four', 'five', 'six', 'seven']  # Specify the joints of one finger
finger_joint_positions = [np.deg2rad(40), np.deg2rad(40), np.deg2rad(40), np.deg2rad(40)]  # Example positions
control_articulation(articulation, finger_joint_names, finger_joint_positions)

I can see the effect of the above command on the usd model; the respective joints are moved by the given degrees.

However, I do not achieve the proper behavior when running a ROS node that publishes joint commands for all or a subset of joints.

I have a ROS subscriber with a call-back function that receives joint state data on a ROS topic. This data is then used to perform articulation.

While the joint state data is received correctly, the articulation just makes one movement in the beginning closing the fingers all the way, and then no further movements occur even though joint data is continuously available on the topic.

What can be the problem here.

In my python file, I have the following information at the header when creating a simulation app.

from omni.isaac.kit import SimulationApp
simulation_app = SimulationApp({"headless": False})

and then within the main function, I am doing:

 # Main loop to keep the simulation running
while(1):
    simulation_app.update()

Thanks,