concepts.simulator.pybullet.components.robot_base.BulletArmRobotBase#
- class BulletArmRobotBase[source]#
Bases:
BulletRobotBase
Base class for arm robots, such as UR5, Panda, etc.
In this class, we assume that the robot joints are composed of two parts: the arm joints and the gripper joints. All joint IDs and joint configurations functions are based on arm joints. To handle the “full” joint configuration, we provide an additional set of functions to get and set the full joint configuration, including the gripper joints.
Methods
attach_object
(object_id, ee_to_object)create_gripper_constraint
(object_id[, verbose])do
(action_name, *args, **kwargs)Execute an action primitive.
fk
(qpos[, link_name_or_id])Forward kinematics.
Get the pybullet body ID of the robot.
Get the pose of the robot body.
get_coriolis_torque
([qpos, qvel])Get the Coriolis torque.
get_dof
()Get the total degrees of freedom of the robot.
Get the default orientation of the end effector.
Get the home position of the end effector.
Get the home orientation of the end effector.
Get the pybullet link ID of the robot end effector.
get_ee_pose
([fk])Get the pose of the end effector.
get_ee_quat_from_vectors
([u, v])Compute the quaternion from two directions (the "down" direction for the end effector and the "forward" direction for the end effector).
get_ee_to_tool
(tool_id)Get the pose of the tool frame relative to the end effector frame.
get_ee_velocity
([fk])Get the velocity of the end effector.
Get the total degrees of freedom of the robot, including the gripper joints.
Get the home joint configuration.
Get the pybullet joint IDs of the robot, including the gripper joints.
Get the joint limits of the robot arm, including the gripper joints.
Get the current joint configuration.
Get the current joint velocity.
Get the gripper state.
Get the home joint configuration.
get_jacobian
([qpos, link_id])Get the Jacobian matrix.
Get the pybullet joint IDs of the robot.
Get the joint limits.
get_mass_matrix
([qpos])Get the mass matrix.
get_qpos
()Get the current joint configuration.
get_qvel
()Get the current joint velocity.
ik
(pos, quat[, force, max_distance, ...])Inverse kinematics.
ik_pybullet
(pos, quat[, force, pos_tol, ...])Inverse kinematics using pybullet.
ikfast
(pos, quat[, last_qpos, max_attempts, ...])Inverse kinematics using IKFast.
is_colliding
([q, return_contacts, ...])Check if the robot is colliding with other objects.
is_colliding_with_saved_state
([q, ...])move_home
([timeout])Move the robot to the home configuration.
move_home_cfree
([speed, timeout])move_pose
(pos, quat[, speed, force, verbose])Move the end effector to the given pose.
move_pose_smooth
(pos, quat[, speed, ...])move_qpos
(target_qpos[, speed, timeout, ...])Move the robot to the given joint configuration.
move_qpos_path
(qpos_trajectory[, speed, ...])Move the robot along the given joint configuration trajectory.
move_qpos_path_v2
(qpos_trajectory[, timeout])A customized version of move_qpos_trajectory.
move_qpos_path_v2_set_control
(qpos_trajectory)register_action
(name, func[, interface])Register an action primitive.
replay_qpos_trajectory
(qpos_trajectory[, ...])Replay a joint confifguartion trajectory.
Reset the home joint configuration.
rrt_collision_free
(qpos1[, qpos2, ...])RRT-based collision-free path planning.
set_arm_joint_position_control
(target_qpos)Set the arm joint position control.
set_ee_impedance_control
(target_pos, target_quat)Set the end-effector impedance control command.
set_ee_pose
(pos, quat)Set the pose of the end effector by inverse kinematics.
set_full_hold_position_control
([qpos, gains])Set the control parameter for holding the current arm joint positions, while the gripper holding the object.
set_full_qpos
(qpos)Set the joint configuration.
set_ik_method
(ik_method)set_qpos
(qpos)Set the joint configuration.
set_qpos_with_holding
(qpos)Set the joint configuration with the gripper holding the object.
set_suppress_warnings
([value])Attributes
- __init__(client, body_name=None, gripper_objects=None, current_interface='pybullet', ik_method='pybullet', use_magic_gripper=True)[source]#
- __new__(**kwargs)#
- do(action_name, *args, **kwargs)#
Execute an action primitive.
- get_body_id()#
Get the pybullet body ID of the robot.
- Returns:
Body ID of the robot.
- Return type:
- get_body_pose()#
Get the pose of the robot body.
- Returns:
3D position and 4D quaternion of the robot body.
- Return type:
Tuple[np.ndarray, np.ndarray]
- get_dof()#
Get the total degrees of freedom of the robot.
- Returns:
Total degrees of freedom.
- Return type:
- get_ee_link_id()[source]#
Get the pybullet link ID of the robot end effector.
- Returns:
Link ID of the robot end effector.
- Return type:
- get_ee_pose(fk=True)[source]#
Get the pose of the end effector.
- Parameters:
fk (bool) – whether to run forward kinematics to re-compute the pose.
- Returns:
3D position and 4D quaternion of the end effector.
- Return type:
Tuple[np.ndarray, np.ndarray]
- get_ee_quat_from_vectors(u=(-1., 0., 0.), v=(1., 0., 0.))[source]#
Compute the quaternion from two directions (the “down” direction for the end effector and the “forward” direction for the end effector).
- get_ee_to_tool(tool_id)[source]#
Get the pose of the tool frame relative to the end effector frame.
- Parameters:
tool_id (int) – ID of the tool frame.
- Returns:
3D position and 4D quaternion of the tool frame.
- Return type:
Tuple[np.ndarray, np.ndarray]
- get_ee_velocity(fk=True)[source]#
Get the velocity of the end effector.
- Returns:
3D linear velocity and 3D angular velocity of the end effector.
- Return type:
Tuple[np.ndarray, np.ndarray]
- Parameters:
fk (bool)
- get_full_dof()[source]#
Get the total degrees of freedom of the robot, including the gripper joints.
- Returns:
Total degrees of freedom.
- Return type:
- get_full_joint_ids()[source]#
Get the pybullet joint IDs of the robot, including the gripper joints.
- Returns:
Joint IDs of the robot.
- Return type:
Sequence[int]
- get_full_joint_limits()[source]#
Get the joint limits of the robot arm, including the gripper joints.
- Returns:
Lower and upper joint limits.
- Return type:
Tuple[np.ndarray, np.ndarray]
- get_full_qpos()[source]#
Get the current joint configuration.
- Returns:
Current joint configuration.
- Return type:
np.ndarray
- get_full_qvel()[source]#
Get the current joint velocity.
- Returns:
Current joint velocity.
- Return type:
np.ndarray
- get_gripper_state()[source]#
Get the gripper state.
- Returns:
True if the gripper is activated.
- Return type:
Optional[bool]
- get_joint_ids()#
Get the pybullet joint IDs of the robot.
- Returns:
Joint IDs of the robot.
- Return type:
Sequence[int]
- get_joint_limits()#
Get the joint limits.
- Returns:
Lower and upper joint limits.
- Return type:
Tuple[np.ndarray, np.ndarray]
- get_mass_matrix(qpos=None)[source]#
Get the mass matrix.
- Parameters:
qpos (ndarray | None) – Joint configuration.
- Returns:
Mass matrix.
- Return type:
np.ndarray
- get_qpos()#
Get the current joint configuration.
- Returns:
Current joint configuration.
- Return type:
np.ndarray
- get_qvel()#
Get the current joint velocity.
- Returns:
Current joint velocity.
- Return type:
np.ndarray
- ik(pos, quat, force=False, max_distance=float('inf'), max_attempts=1000, verbose=False)[source]#
Inverse kinematics.
- Parameters:
pos (ndarray) – 3D position of the end effector.
quat (ndarray) – 4D quaternion of the end effector.
force (bool) – Whether to force the IK solver to return a solution. Defaults to False. If set, the IK solve may return a solution even if the end effector is not at the given pose. This function is useful for debugging and for moving towards a certain direction.
max_distance (float) – Maximum distance between the last qpos and the solution (Only used for IKFast). Defaults to float(‘inf’).
max_attempts (int) – Maximum number of attempts (only used for IKFast). Defaults to 1000.
verbose (bool) – Whether to print debug information.
- Returns:
Joint configuration.
- Return type:
np.ndarray
- ik_pybullet(pos, quat, force=False, pos_tol=1e-2, quat_tol=1e-2, verbose=False)[source]#
Inverse kinematics using pybullet.
- Parameters:
pos (ndarray) – 3D position of the end effector.
quat (ndarray) – 4D quaternion of the end effector.
force (bool) – Whether to force the IK solver to return a solution. Defaults to False. If set, the IK solve may return a solution even if the end effector is not at the given pose. This function is useful for debugging and for moving towards a certain direction.
pos_tol (float) – tolerance of the position. Defaults to 1e-2.
quat_tol (float) – tolerance of the quaternion. Defaults to 1e-2.
verbose (bool) – Whether to print debug information.
- Returns:
Joint configuration.
- Return type:
np.ndarray
- ikfast(pos, quat, last_qpos=None, max_attempts=1000, max_distance=float('inf'), error_on_fail=True, verbose=False)[source]#
Inverse kinematics using IKFast.
- Parameters:
pos (ndarray) – 3D position of the end effector.
quat (ndarray) – 4D quaternion of the end effector.
last_qpos (ndarray | None) – Last joint configuration. Defaults to None. If None, the current joint configuration is used.
max_attempts (int) – Maximum number of IKFast attempts. Defaults to 1000.
max_distance (float) – Maximum distance between the target pose and the end effector. Defaults to float(‘inf’).
error_on_fail (bool) – Whether to raise an error if the IKFast solver fails. Defaults to True.
verbose (bool) – Whether to print debug information.
- Returns:
Joint configuration.
- Return type:
np.ndarray
- is_colliding(q=None, return_contacts=False, ignored_collision_bodies=None)[source]#
Check if the robot is colliding with other objects. When the joint configuration (q) is provided, we will set the robot to that configuration before checking the collision. Note that this function will not restore the robot to the original configuration after the check. If you want to restore the robot to the original configuration, you should use
is_colliding_with_saved_state()
instead.- Parameters:
q (ndarray | None) – Joint configuration. If None, the current joint configuration is used.
return_contacts (bool) – whether to return the contact information. Defaults to False.
ignored_collision_bodies (Sequence[int] | None) – IDs of the objects to be ignored in collision checking. Defaults to None.
- is_colliding_with_saved_state(q=None, return_contacts=False, ignored_collision_bodies=None)[source]#
- move_pose(pos, quat, speed=0.01, force=False, verbose=False)[source]#
Move the end effector to the given pose.
- Parameters:
pos – 3D position of the end effector.
quat – 4D quaternion of the end effector.
speed – Speed of the movement. Defaults to 0.01.
force (bool) – Whether to force the IK solver to return a solution. Defaults to False. If set, the IK solve may return a solution even if the end effector is not at the specified pose.
verbose (bool) – Whether to print debug information.
- Returns:
True if the movement is successful.
- Return type:
- move_qpos(target_qpos, speed=0.01, timeout=10.0, local_smoothing=True)[source]#
Move the robot to the given joint configuration.
- Parameters:
- Returns:
True if the movement is successful.
- Return type:
- move_qpos_path(qpos_trajectory, speed=0.01, timeout=10, first_timeout=None, local_smoothing=True, verbose=False)[source]#
Move the robot along the given joint configuration trajectory.
- Parameters:
qpos_trajectory (Iterable[ndarray]) – Joint configuration trajectory.
speed (float) – Speed of the movement. Defaults to 0.01.
timeout (float) – Timeout of the movement. Defaults to 10.
first_timeout (float) – Timeout of the first movement. Defaults to None (same as timeout).
local_smoothing (bool) – Whether to use local smoothing. Defaults to True.
verbose (bool) – Whether to print debug information.
- Returns:
True if the movement is successful.
- Return type:
- move_qpos_path_v2(qpos_trajectory, timeout=20)[source]#
A customized version of move_qpos_trajectory. It allows the user to specify path tracking mechanisms.
- move_qpos_path_v2_set_control(qpos_trajectory, step_size=1, gains=0.3, atol=0.03, timeout=20, verbose=False, return_world_states=False)[source]#
- register_action(name, func, interface=None)#
Register an action primitive.
- Parameters:
- Raises:
ValueError – If the action primitive is already registered.
- Return type:
None
- replay_qpos_trajectory(qpos_trajectory, verbose=True)[source]#
Replay a joint confifguartion trajectory. This function is useful for debugging a generated joint trajectory.
- reset_home_qpos()#
Reset the home joint configuration.
- rrt_collision_free(qpos1, qpos2=None, ignored_collision_bodies=None, smooth_fine_path=False, disable_renderer=True, **kwargs)[source]#
RRT-based collision-free path planning.
- Parameters:
qpos1 (ndarray) – Start position.
qpos2 (ndarray | None) – End position. If None, the current position is used.
ignored_collision_bodies (Sequence[int] | None) – IDs of the objects to ignore in collision checking. Defaults to None.
smooth_fine_path (bool) – Whether to smooth the path. Defaults to False.
disable_renderer (bool) – Whether to disable the renderer. Defaults to True.
kwargs – Additional arguments.
- Returns:
True if the path is collision-free. List[np.ndarray]: Joint configuration trajectory.
- Return type:
- set_arm_joint_position_control(target_qpos, control_mode=pybullet.POSITION_CONTROL, gains=0.3, set_gripper_control=True)[source]#
Set the arm joint position control.
- set_ee_impedance_control(target_pos, target_quat, kp_pos=200, kp_ori=1, kd_pos=None, kd_ori=0.01, max_torque=100, damping_scale=2.0, simulate_with_position_pd=False, tau_to_qpos_ratio=0.0005, set_gripper_control=True, verbose=True)[source]#
Set the end-effector impedance control command.
- Parameters:
target_pos (ndarray) – the target position of the end-effector.
target_quat (ndarray) – the target orientation of the end-effector.
kp_pos (float | ndarray) – the proportional gains for the position control.
kp_ori (float | ndarray) – the proportional gains for the orientation control.
kd_pos (float | ndarray | None) – the derivative gains for the position control.
kd_ori (float | ndarray | None) – the derivative gains for the orientation control. It is recommended to manual set this to a small value to avoid oscillation (instead of using the critical damping).
max_torque (float) – the maximum torque allowed for the robot.
damping_scale (float) – the scale for the damping term (as a multiplicative term to the critical damping).
simulate_with_position_pd (bool) – if True, we will simulate the torque control using the position control. This is useful for debugging and it can be more stable.
tau_to_qpos_ratio (float) – the ratio between the torque and the joint position. This is only used when simulate_with_position_pd is True. We will use qpos += tau * tau_to_qpos_ratio to simulate the position control.
set_gripper_control (bool) – if True, the gripper control will be set.
verbose (bool) – if True, the debug information will be printed.
- set_ee_pose(pos, quat)[source]#
Set the pose of the end effector by inverse kinematics. Return True if the IK solver succeeds.
- set_full_hold_position_control(qpos=None, gains=0.3)[source]#
Set the control parameter for holding the current arm joint positions, while the gripper holding the object.
- set_full_qpos(qpos)[source]#
Set the joint configuration.
- Parameters:
qpos (ndarray) – Joint configuration.
- Return type:
None
- set_qpos(qpos)#
Set the joint configuration.
- Parameters:
qpos (ndarray) – Joint configuration.
- Return type:
None
- set_qpos_with_holding(qpos)[source]#
Set the joint configuration with the gripper holding the object.
- Parameters:
qpos (ndarray) – Joint configuration.
- Return type:
None
- suppress_warnings()#
- property p#
- property w#
- property world#