You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi,
I have a question about how set_external_force_and_torque() is intended to be used for controlling an Articulation in IsaacLab.
In my setup, I am controlling a robot hand that is not fixed to the world. Gravity is disabled, so the hand is essentially a floating articulation. When my policy outputs actions, I use part of the action vector as force and torque inputs and apply them to the hand via set_external_force_and_torque() to translate and rotate it.
I understand how joint-level control works with functions like set_joint_position_target(). In that case, if I provide a joint target value (e.g., 1.2), that value is treated as a PD controller target, and the joint is driven toward that position (1.2).
However, set_external_force_and_torque() seems to behave differently. For example, suppose I want to move the robot from position (1, 0, 0) to (3, 0, 0). If I pass (3, 0, 0) as the force input to set_external_force_and_torque(), it appears that this does not mean “move the robot to position (3, 0, 0)”, but rather “apply a constant force of magnitude (3, 0, 0)”, regardless of the current position.
This leads to my main question.
Assume that I know:
the current position and rotation of the robot, and
a desired target position and rotation that I want the robot to reach.
Is there a principled way to determine what force and torque values should be passed into set_external_force_and_torque() so that the robot reaches the target pose?
From what I understand, set_external_force_and_torque() stores force and torque values in a buffer, and later, when write_data_to_sim() is called, self.root_physx_view.apply_forces_and_torques_at_position() is executed. I tried reading the Omni Physics documentation for apply_forces_and_torques_at_position(), but the description was quite high-level and did not clearly explain how these forces are meant to be interpreted or designed for pose control.
So, in short:
Given the robot’s current position and rotation, is there a recommended or standard way to compute the inputs to set_external_force_and_torque() that would drive the robot toward a desired target position and rotation?
Thanks in advance, and sorry for the long question.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Hi,
I have a question about how
set_external_force_and_torque()is intended to be used for controlling anArticulationin IsaacLab.In my setup, I am controlling a robot hand that is not fixed to the world. Gravity is disabled, so the hand is essentially a floating articulation. When my policy outputs actions, I use part of the action vector as force and torque inputs and apply them to the hand via
set_external_force_and_torque()to translate and rotate it.I understand how joint-level control works with functions like
set_joint_position_target(). In that case, if I provide a joint target value (e.g., 1.2), that value is treated as a PD controller target, and the joint is driven toward that position (1.2).However,
set_external_force_and_torque()seems to behave differently. For example, suppose I want to move the robot from position (1, 0, 0) to (3, 0, 0). If I pass (3, 0, 0) as the force input toset_external_force_and_torque(), it appears that this does not mean “move the robot to position (3, 0, 0)”, but rather “apply a constant force of magnitude (3, 0, 0)”, regardless of the current position.This leads to my main question.
Assume that I know:
Is there a principled way to determine what force and torque values should be passed into
set_external_force_and_torque()so that the robot reaches the target pose?From what I understand,
set_external_force_and_torque()stores force and torque values in a buffer, and later, whenwrite_data_to_sim()is called,self.root_physx_view.apply_forces_and_torques_at_position()is executed. I tried reading the Omni Physics documentation forapply_forces_and_torques_at_position(), but the description was quite high-level and did not clearly explain how these forces are meant to be interpreted or designed for pose control.So, in short:
Given the robot’s current position and rotation, is there a recommended or standard way to compute the inputs to
set_external_force_and_torque()that would drive the robot toward a desired target position and rotation?Thanks in advance, and sorry for the long question.
Beta Was this translation helpful? Give feedback.
All reactions