From ffbcbacc8370e1572b23fa1154c2f8ea0720603a Mon Sep 17 00:00:00 2001 From: lukestroh Date: Mon, 11 Nov 2024 12:53:56 -0800 Subject: [PATCH 1/5] working chain from linear_slider -> ur5 -> mock_pruner. Fragile. fr3 not working --- .../mock_pruner/MockPrunerASSEMBLED.STL | Bin 0 -> 610184 bytes .../macro/mock_pruner_macro.urdf.xacro | 88 ++ .../mock_pruner/mock_pruner.urdf.xacro | 38 + .../urdf/end_effectors/mock_pruner/test.urdf | 73 ++ pybullet_tree_sim/urdf/robot/base/test.urdf | 510 ------------ .../robot/{base => generic}/robot.urdf.xacro | 53 +- .../urdf/robot/generic/test.urdf | 757 ++++++++++++++++++ 7 files changed, 995 insertions(+), 524 deletions(-) create mode 100644 pybullet_tree_sim/meshes/end_effectors/mock_pruner/MockPrunerASSEMBLED.STL create mode 100644 pybullet_tree_sim/urdf/end_effectors/mock_pruner/macro/mock_pruner_macro.urdf.xacro create mode 100644 pybullet_tree_sim/urdf/end_effectors/mock_pruner/mock_pruner.urdf.xacro create mode 100644 pybullet_tree_sim/urdf/end_effectors/mock_pruner/test.urdf delete mode 100644 pybullet_tree_sim/urdf/robot/base/test.urdf rename pybullet_tree_sim/urdf/robot/{base => generic}/robot.urdf.xacro (83%) create mode 100644 pybullet_tree_sim/urdf/robot/generic/test.urdf diff --git a/pybullet_tree_sim/meshes/end_effectors/mock_pruner/MockPrunerASSEMBLED.STL b/pybullet_tree_sim/meshes/end_effectors/mock_pruner/MockPrunerASSEMBLED.STL new file mode 100644 index 0000000000000000000000000000000000000000..1985cd01fe8760fc36eb6373231f433f1dc34199 GIT binary patch literal 610184 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

!=?ONr@OIK@;_XueLkg(5? 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

    IeaA^Gd2^k<&KmN)49=~T|>V3*^=GDmG7bJTSC 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pybullet_tree_sim/urdf/end_effectors/mock_pruner/mock_pruner.urdf.xacro b/pybullet_tree_sim/urdf/end_effectors/mock_pruner/mock_pruner.urdf.xacro new file mode 100644 index 0000000..088906c --- /dev/null +++ b/pybullet_tree_sim/urdf/end_effectors/mock_pruner/mock_pruner.urdf.xacro @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pybullet_tree_sim/urdf/end_effectors/mock_pruner/test.urdf b/pybullet_tree_sim/urdf/end_effectors/mock_pruner/test.urdf new file mode 100644 index 0000000..ef1c6d5 --- /dev/null +++ b/pybullet_tree_sim/urdf/end_effectors/mock_pruner/test.urdf @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pybullet_tree_sim/urdf/robot/base/test.urdf b/pybullet_tree_sim/urdf/robot/base/test.urdf deleted file mode 100644 index 1a9aab2..0000000 --- a/pybullet_tree_sim/urdf/robot/base/test.urdf +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gazebo/Gray - - - - - - - - - - - - - - - - - - - - - - - - Gazebo/Red - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - linear_slider_system_interface/LinearSliderSystemInterface - - - - - - - - -0.1 - 0.1 - - - - -0.4 - - - 0.0 - - - - - - 0 - - linear_slider__base_link - - - - 0 - - linear_slider__base_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - diff --git a/pybullet_tree_sim/urdf/robot/base/robot.urdf.xacro b/pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro similarity index 83% rename from pybullet_tree_sim/urdf/robot/base/robot.urdf.xacro rename to pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro index 0b149df..e5648cb 100644 --- a/pybullet_tree_sim/urdf/robot/base/robot.urdf.xacro +++ b/pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro @@ -1,10 +1,12 @@ - + - - - + + + + + @@ -17,20 +19,20 @@ - + - + - + - - + + + - + @@ -99,7 +102,7 @@ + + + + + - + @@ -173,6 +181,9 @@ fake_sensor_commands="$(arg fake_sensor_commands)" gazebo_effort="$(arg gazebo_effort)"> + + + @@ -180,7 +191,21 @@ - + + + + + + + + + diff --git a/pybullet_tree_sim/urdf/robot/generic/test.urdf b/pybullet_tree_sim/urdf/robot/generic/test.urdf new file mode 100644 index 0000000..1e5d449 --- /dev/null +++ b/pybullet_tree_sim/urdf/robot/generic/test.urdf @@ -0,0 +1,757 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Gray + + + + + + + + + + + + + + + + + + + + + + + + Gazebo/Red + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + linear_slider_system_interface/LinearSliderSystemInterface + + + + + + + + -0.1 + 0.1 + + + + -0.25 + + + 0.0 + + + + + + 0 + + linear_slider__base_link + + + + 0 + + linear_slider__base_link + + + + + + + ur_robot_driver/URPositionHardwareInterface + 0.0.0.0 + + + + False + 50001 + 50002 + 0.0.0.0 + 50004 + 50003 + ur5e__ + True + 2000 + 0.03 + False + calib_12788084448423163542 + 0 + 0 + 115200 + 1 + 1.5 + 3.5 + /tmp/ttyUR + 54321 + 2 + + + + + + + 0.0 + + + + + + + + + + -1.57 + + + + + + + + + + 0.0 + + + + + + + + + + -1.57 + + + + + + + + + + 0.0 + + + + + + + + + + 0.0 + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ddcd47a66361e92059ad724f5ca499d8b35f4124 Mon Sep 17 00:00:00 2001 From: lukestroh Date: Mon, 11 Nov 2024 13:01:02 -0800 Subject: [PATCH 2/5] formatting --- README.md | 3 ++ main.py | 13 +++-- pybullet_tree_sim/camera.py | 12 +++-- pybullet_tree_sim/pruning_environment.py | 5 +- pybullet_tree_sim/tree.py | 4 +- .../urdf/robot/generic/robot.urdf.xacro | 54 ++++++++++--------- pybullet_tree_sim/utils/camera_helpers.py | 1 + pybullet_tree_sim/utils/pyb_utils.py | 4 +- test/test_camera.py | 4 +- test/test_helpers.py | 11 ++-- 10 files changed, 58 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 6336e99..991873a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +urdf generic launch CLI test: +`xacro robot.urdf.xacro > test.urdf end_effector_type:=mock_pruner eef_parent:=ur5e__tool0 arm_type:=ur5 ur_type:=ur5e tf_prefix:=ur5e__ base_attachment_type:=linear_slider` + ## TODO 1. For Claire: 1. Generic URDF to Generic Robot class diff --git a/main.py b/main.py index def576c..8d3fb03 100644 --- a/main.py +++ b/main.py @@ -21,8 +21,8 @@ def main(): penv = PruningEnv( pbutils=pbutils, load_robot=True, robot_pos=[0, 1, 0], verbose=True, cam_width=cam_width, cam_height=cam_height ) - - penv.activate_shape(shape="cylinder", radius=2*0.0254, height=2.0, orientation=[0,np.pi/2,0]) + + penv.activate_shape(shape="cylinder", radius=2 * 0.0254, height=2.0, orientation=[0, np.pi / 2, 0]) # penv.load_tree( # pbutils=pbutils, # scale=1.0, @@ -39,15 +39,15 @@ def main(): for i in range(100): pbutils.pbclient.stepSimulation() time.sleep(0.1) - + # Simulation loop while True: try: - view_matrix = penv.ur5.get_view_mat_at_curr_pose(0,0,[0,0,0]) - rgbd = penv.pbutils.get_rgbd_at_cur_pose(type='robot', view_matrix=view_matrix) + view_matrix = penv.ur5.get_view_mat_at_curr_pose(0, 0, [0, 0, 0]) + rgbd = penv.pbutils.get_rgbd_at_cur_pose(type="robot", view_matrix=view_matrix) keys_pressed = penv.get_key_pressed() action = penv.get_key_action(keys_pressed=keys_pressed) - action = action.reshape((6,1)) + action = action.reshape((6, 1)) jv, jacobian = penv.ur5.calculate_joint_velocities_from_ee_velocity_dls(end_effector_velocity=action) penv.ur5.action = jv singularity = penv.ur5.set_joint_velocities(penv.ur5.action) @@ -63,4 +63,3 @@ def main(): if __name__ == "__main__": main() - \ No newline at end of file diff --git a/pybullet_tree_sim/camera.py b/pybullet_tree_sim/camera.py index 35edf60..a648375 100644 --- a/pybullet_tree_sim/camera.py +++ b/pybullet_tree_sim/camera.py @@ -22,12 +22,12 @@ def __init__(self, pbutils, sensor_name: str, sensor_type: str = "camera") -> No super().__init__(sensor_name, sensor_type) self.pan = 0 self.tilt = 0 - self.tf_frame: str = '' + self.tf_frame: str = "" # Only dealing with depth data for now, TODO: add RGB data self.depth_width = self.params["depth"]["width"] self.depth_height = self.params["depth"]["height"] - + # Some optical sensors only provide diagonal field of view, get horizontal and vertical from diagonal try: vfov = self.params["depth"]["vfov"] @@ -37,9 +37,11 @@ def __init__(self, pbutils, sensor_name: str, sensor_type: str = "camera") -> No far_val = self.params["depth"]["far_plane"] self.depth_pixel_coords = np.array(list(np.ndindex((self.depth_width, self.depth_height))), dtype=int) - self.depth_film_coords = 2 * ( - self.depth_pixel_coords + np.array([0.5, 0.5]) - np.array([self.depth_width / 2, self.depth_height / 2]) - ) / np.array([self.depth_width, self.depth_height]) + self.depth_film_coords = ( + 2 + * (self.depth_pixel_coords + np.array([0.5, 0.5]) - np.array([self.depth_width / 2, self.depth_height / 2])) + / np.array([self.depth_width, self.depth_height]) + ) self.depth_proj_mat = pbutils.pbclient.computeProjectionMatrixFOV( fov=vfov, aspect=(self.depth_width / self.depth_height), nearVal=near_val, farVal=far_val ) diff --git a/pybullet_tree_sim/pruning_environment.py b/pybullet_tree_sim/pruning_environment.py index 6042f43..2a624e4 100644 --- a/pybullet_tree_sim/pruning_environment.py +++ b/pybullet_tree_sim/pruning_environment.py @@ -398,7 +398,9 @@ def deproject_pixels_to_points( plot = False if plot: - self.debug_plots(camera=camera, data=data, cam_coords=cam_coords, world_coords=world_coords, view_matrix=view_matrix) + self.debug_plots( + camera=camera, data=data, cam_coords=cam_coords, world_coords=world_coords, view_matrix=view_matrix + ) return world_coords @@ -562,7 +564,6 @@ def get_key_action(self, keys_pressed: list) -> np.ndarray: keys_pressed = [] return action - def run_sim(self) -> int: return 0 diff --git a/pybullet_tree_sim/tree.py b/pybullet_tree_sim/tree.py index d2d1ce6..bc9d05f 100644 --- a/pybullet_tree_sim/tree.py +++ b/pybullet_tree_sim/tree.py @@ -447,10 +447,10 @@ def load_tree_urdf( urdf_path = os.path.join(Tree._tree_generated_urdf_path, f"{namespace}{tree_type}_tree{tree_id}.urdf") if not os.path.exists(urdf_path): log.info(f"Could not find file '{urdf_path}'. Generating URDF from xacro.") - + if not os.path.isdir(Tree._tree_generated_urdf_path): os.mkdir(Tree._tree_generated_urdf_path) - + urdf_mappings = { "namespace": namespace, "tree_id": str(tree_id), diff --git a/pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro b/pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro index e5648cb..b9f01a6 100644 --- a/pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro +++ b/pybullet_tree_sim/urdf/robot/generic/robot.urdf.xacro @@ -7,18 +7,18 @@ - + - - + + - + @@ -26,10 +26,10 @@ - + - + - + @@ -84,20 +84,20 @@ - + - + - + - + - + - + @@ -181,32 +181,34 @@ fake_sensor_commands="$(arg fake_sensor_commands)" gazebo_effort="$(arg gazebo_effort)"> - + - + - + --> - + - + - + + + - - + + - - \ No newline at end of file + + diff --git a/pybullet_tree_sim/utils/camera_helpers.py b/pybullet_tree_sim/utils/camera_helpers.py index 3e87f33..ce374a4 100644 --- a/pybullet_tree_sim/utils/camera_helpers.py +++ b/pybullet_tree_sim/utils/camera_helpers.py @@ -39,6 +39,7 @@ def get_fov_from_dfov(camera_width: int, camera_height: int, dFoV: Union[int, fl fov_w = 2 * np.arctan(np.tan(_dfov / 2) * camera_width / camera_diag) return (np.rad2deg(fov_w), np.rad2deg(fov_h)) + # def get_pyb_proj_mat(vfov: float, aspect: float, nearVal: float, farVal: float): # return pbutils.pbclient.computeProjectionMatrixFOV( # fov=vfov, aspect=(self.depth_width / self.depth_height), nearVal=near_val, farVal=far_val diff --git a/pybullet_tree_sim/utils/pyb_utils.py b/pybullet_tree_sim/utils/pyb_utils.py index a2d3acf..e3db702 100644 --- a/pybullet_tree_sim/utils/pyb_utils.py +++ b/pybullet_tree_sim/utils/pyb_utils.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 from __future__ import annotations + """ Author (s): Abhinav Jain, Luke Strohbehn """ @@ -13,6 +14,7 @@ from scipy.constants import g as grav from pybullet_tree_sim import MESHES_PATH, URDF_PATH, TEXTURES_PATH + # from pybullet_tree_sim.camera import Camera # from pybullet_tree_sim.utils.camera_helpers import get_fov_from_dfov @@ -144,7 +146,7 @@ def get_image_at_curr_pose(self, camera, type, view_matrix=None) -> List: if view_matrix is None: raise ValueError("view_matrix cannot be None for robot view") return self.pbclient.getCameraImage( - width=camera.depth_width, # TODO: make separate function for rgb? + width=camera.depth_width, # TODO: make separate function for rgb? height=camera.depth_height, viewMatrix=view_matrix, projectionMatrix=camera.depth_proj_mat, diff --git a/test/test_camera.py b/test/test_camera.py index 277d7f8..d3b5635 100644 --- a/test/test_camera.py +++ b/test/test_camera.py @@ -3,8 +3,8 @@ import unittest + class TestCamera(unittest.TestCase): def test_deproject_transform(self): - + return - \ No newline at end of file diff --git a/test/test_helpers.py b/test/test_helpers.py index ec36693..5ce5d09 100644 --- a/test/test_helpers.py +++ b/test/test_helpers.py @@ -6,7 +6,6 @@ class TestHelpers(unittest.TestCase): - def test_negative_dfov(self): dfov = -65 cam_w = 100 @@ -15,7 +14,7 @@ def test_negative_dfov(self): with self.assertRaises(ValueError) as cm: helpers.get_fov_from_dfov(cam_w, cam_h, dfov) return - + def test_negative_cam_width(self): dfov = 65 cam_w = -100 @@ -24,7 +23,7 @@ def test_negative_cam_width(self): with self.assertRaises(ValueError) as cm: helpers.get_fov_from_dfov(cam_w, cam_h, dfov) return - + def test_negative_cam_height(self): dfov = 65 cam_w = 100 @@ -33,10 +32,6 @@ def test_negative_cam_height(self): with self.assertRaises(ValueError) as cm: helpers.get_fov_from_dfov(cam_w, cam_h, dfov) return - - - - # class TestStringMethods(unittest.TestCase): @@ -55,5 +50,5 @@ def test_negative_cam_height(self): # with self.assertRaises(TypeError): # s.split(2) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() From 827bd3a92373191f368e2d4674a93888e396541f Mon Sep 17 00:00:00 2001 From: clairefollett Date: Fri, 8 Nov 2024 01:52:17 +0000 Subject: [PATCH 3/5] first steps to creating generic and dynamic robot class --- pybullet_tree_sim/robot.py | 429 +++++++++++++++++++++++++++++++++++++ 1 file changed, 429 insertions(+) create mode 100644 pybullet_tree_sim/robot.py diff --git a/pybullet_tree_sim/robot.py b/pybullet_tree_sim/robot.py new file mode 100644 index 0000000..93a4a76 --- /dev/null +++ b/pybullet_tree_sim/robot.py @@ -0,0 +1,429 @@ +import os +import sys +from typing import Optional, Tuple + +from numpy import ndarray +import numpy as np +import pybullet +from typing import Optional + +from nptyping import NDArray, Shape, Float +from collections import namedtuple + +class Robot: + def __init__( + self, + con, + robot_type: str, + robot_urdf_path: str, + tool_link_name: str, + end_effector_link_name: str, + success_link_name: str, + base_link_name: str, + control_joints, + robot_collision_filter_idxs, + init_joint_angles: Optional[list] = None, + pos=(0, 0, 0), + orientation=(0, 0, 0, 1), + randomize_pose=False, + verbose=1 + ) -> None: + self.con = con + self.robot_type = robot_type + self.robot_urdf_path = robot_urdf_path + self.tool_link_name = tool_link_name + self.end_effector_link_name = end_effector_link_name + self.success_link_name = success_link_name + self.base_link_name = base_link_name + self.init_joint_angles = init_joint_angles + self.pos = pos + self.orientation = orientation + self.randomize_pose = randomize_pose + + self.joint_info = namedtuple( + "jointInfo", + ["id", "name", "type", "lowerLimit", "upperLimit", "maxForce", "maxVelocity", "controllable"] + ) + # Pruning camera information + self.camera_base_offset = np.array( + [0.063179, 0.077119, 0.0420027]) + self.verbose = verbose + + self.joints = None + self.robot = None + self.control_joints = control_joints + self.robot_collision_filter_idxs = robot_collision_filter_idxs + self.setup_robot() + + def setup_robot(self): + if self.robot is not None: + self.con.removeBody(self.robot) + del self.robot + flags = self.con.URDF_USE_SELF_COLLISION + + if self.randomize_pose: + delta_pos = np.random.rand(3) * 0.0 + delta_orientation = pybullet.getQuaternionFromEuler(np.random.rand(3) * np.pi / 180 * 5) + else: + delta_pos = np.array([0., 0., 0.]) + delta_orientation = pybullet.getQuaternionFromEuler([0, 0, 0]) + + self.pos, self.orientation = self.con.multiplyTransforms( + self.pos, + self.orientation, + delta_pos, + delta_orientation + ) + self.robot = self.con.loadURDF( + self.robot_urdf_path, + self.pos, + self.orientation, + flags=flags, + useFixedBase=True + ) + self.num_joints = self.con.getNumJoints(self.robot) + + #Get indices dynamically + self.tool0_link_index = self.get_link_index(self.tool_link_name) + self.end_effector_index = self.get_link_index(self.end_effector_link_name) + self.success_link_index = self.get_link_index(self.success_link_name) + self.base_index = self.get_link_index(self.base_link_name) + + self.set_collision_filter() + + #Setup robot info only once + if not self.joints: + self.joints = dict() + self.controllable_joints_idxs = [] + self.joint_lower_limits = [] + self.joint_upper_limits = [] + self.joint_max_forces = [] + self.joint_max_velocities = [] + self.joint_ranges = [] + + for i in range(self.num_joints): + info = self.con.getJointInfo(self.robot, i) + jointID = info[0] + jointName = info[1].decode("utf-8") + jointType = info[2] + jointLowerLimit = info[8] + jointUpperLimit = info[9] + jointMaxForce = info[10] + jointMaxVelocity = info[11] + if self.verbose > 1: + print("Joint Name: ", jointName, "Joint ID: ", jointID) + + controllable = True if jointName in self.control_joints else False + if controllable: + self.controllable_joints_idxs.append(i) + self.joint_lower_limits.append(jointLowerLimit) + self.joint_upper_limits.append(jointUpperLimit) + self.joint_max_forces.append(jointMaxForce) + self.joint_max_velocities.append(jointMaxVelocity) + self.joint_ranges.append(jointUpperLimit - jointLowerLimit) + if self.verbose > 1: + print("Controllable Joint Name: ", jointName, "Joint ID: ", jointID) + + info = self.joint_info( + jointID, + jointName, + jointType, + jointLowerLimit, + jointUpperLimit, + jointMaxForce, + jointMaxVelocity, + controllable + ) + + if info.type == self.con.JOINT_REVOLUTE: + self.con.setJointMotorControl2( + self.robot, + info.id, + self.con.VELOCITY_CONTROL, + targetVelocity=0, + force=0, + ) + self.joints[info.name] = info + + self.set_joint_angles_no_collision(self.init_joint_angles) + self.con.stepSimulation() + + self.init_pos_ee = self.get_current_pose(self.end_effector_index) + self.init_pos_base = self.get_current_pose(self.base_index) + self.init_pos_eebase = self.get_current_pose(self.success_link_index) + self.action = np.zeros(len(self.init_joint_angles), dtype=np.float32) + self.joint_angles = np.array(self.init_joint_angles).astype(np.float32) + self.achieved_pos = np.array(self.get_current_pose(self.end_effector_index)[0]) + base_pos, base_or = self.get_current_pose(self.base_index) + + def get_link_index(self, link_name): + num_joints = self.con.getNumJoints(self.robot) + for i in range(num_joints): + info = self.con.getJointInfo(self.robot, i) + child_link_name = info[12].decode('utf-8') + if child_link_name == link_name: + return i # return link index + + base_link_name = self.con.getBodyInfo(self.robot)[0].decode('utf-8') + if base_link_name == link_name: + return -1 #base link has index of -1 + raise ValueError(f"Link '{link_name}' not found in the robot URDF.") + + def reset_robot(self): + if self.robot is None: + return + + self.set_joint_angles_no_collision(self.init_joint_angles) + + def remove_robot(self): + self.con.removeBody(self.robot) + self.robot = None + + def set_joint_angles_no_collision(self, joint_angles) -> None: + assert len(joint_angles) == len(self.control_joints) + for i, name in enumerate(self.control_joints): + joint = self.joints[name] + self.con.resetJointState(self.robot, joint.id, joint_angles[i], targetVelocity=0) + + def set_joint_angles(self, joint_angles) -> None: + """Set joint angles using pybullet motor control""" + + assert len(joint_angles) == len(self.control_joints) + poses = [] + indexes = [] + forces = [] + + for i, name in enumerate(self.control_joints): + joint = self.joints[name] + poses.append(joint_angles[i]) + indexes.append(joint.id) + forces.append(joint.maxForce) + + self.con.setJointMotorControlArray( + self.robot, indexes, + self.con.POSITION_CONTROL, + targetPositions=joint_angles, + targetVelocities=[0] * len(poses), + positionGains=[0.05] * len(poses), + forces=forces + ) + + def set_joint_velocities(self, joint_velocities) -> None: + """Set joint velocities using pybullet motor control""" + assert len(joint_velocities) == len(self.control_joints) + velocities = [] + indexes = [] + forces = [] + + for i, name in enumerate(self.control_joints): + joint = self.joints[name] + velocities.append(joint_velocities[i]) + indexes.append(joint.id) + forces.append(joint.maxForce) + + self.con.setJointMotorControlArray(self.robot, + indexes, + controlMode=self.con.VELOCITY_CONTROL, + targetVelocities=joint_velocities, + ) + + # TODO: Use proprty decorator for getters? + def get_joint_velocities(self): + j = self.con.getJointStates(self.robot, self.controllable_joints_idxs) + joints = tuple((i[1] for i in j)) + return joints # type: ignore + + def get_joint_angles(self): + """Return joint angles""" + print(self.control_joints, self.controllable_joints_idxs) + j = self.con.getJointStates(self.robot, self.controllable_joints_idxs) + joints = tuple((i[0] for i in j)) + return joints + + def get_current_pose(self, index): + """Returns current pose of the index""" + link_state = self.con.getLinkState(self.robot, index, computeForwardKinematics=True) + position, orientation = link_state[4], link_state[5] + return position, orientation + + def get_current_vel(self, index): + """Returns current pose of the index.""" + link_state = self.con.getLinkState(self.robot, index, computeLinkVelocity=True, + computeForwardKinematics=True) + trans, ang = link_state[6], link_state[7] + return trans, ang + + def get_condition_number(self): + """Get condition number of the jacobian""" + jacobian = self.calculate_jacobian() + condition_number = np.linalg.cond(jacobian) + return condition_number + + def calculate_ik(self, position, orientation): + """Calculates joint angles from end effector position and orientation using inverse kinematics""" + + joint_angles = self.con.calculateInverseKinematics( + self.robot, self.end_effector_index, position, orientation, + jointDamping=[0.01] * len(self.control_joints), upperLimits=self.joint_upper_limits, + lowerLimits=self.joint_lower_limits, jointRanges=self.joint_ranges # , restPoses=self.init_joint_angles + ) + return joint_angles + + def calculate_jacobian(self): + jacobian = self.con.calculateJacobian(self.robot, self.tool0_link_index, [0, 0, 0], + self.get_joint_angles(), + [0]*len(self.control_joints), [0]*len(self.control_joints)) + jacobian = np.vstack(jacobian) + return jacobian + + def calculate_joint_velocities_from_ee_velocity(self, end_effector_velocity): + """Calculate joint velocities from end effector velocity using jacobian using least squares""" + jacobian = self.calculate_jacobian() + inv_jacobian = np.linalg.pinv(jacobian) + joint_velocities = np.matmul(inv_jacobian, end_effector_velocity).astype(np.float32) + return joint_velocities, jacobian + + def calculate_joint_velocities_from_ee_velocity_dls(self, + end_effector_velocity, + damping_factor: float = 0.05): + """Calculate joint velocities from end effector velocity using damped least squares""" + jacobian = self.calculate_jacobian() + identity_matrix = np.eye(jacobian.shape[0]) + damped_matrix = jacobian @ jacobian.T + (damping_factor ** 2) * identity_matrix + damped_matrix_inv = np.linalg.inv(damped_matrix) + dls_inv_jacobian = jacobian.T @ damped_matrix_inv + joint_velocities = dls_inv_jacobian @ end_effector_velocity + return joint_velocities, jacobian + + # TODO: Make camera a separate class? + def create_camera_transform(self, pos, orientation, pan, tilt, xyz_offset) -> np.ndarray: + """Create rotation matrix for camera""" + base_offset_tf = np.identity(4) + base_offset_tf[:3, 3] = self.camera_base_offset + xyz_offset + + ee_transform = np.identity(4) + ee_rot_mat = np.array(self.con.getMatrixFromQuaternion(orientation)).reshape(3, 3) + ee_transform[:3, :3] = ee_rot_mat + ee_transform[:3, 3] = pos + + tilt_tf = np.identity(4) + tilt_rot = np.array([[1, 0, 0], [0, np.cos(tilt), -np.sin(tilt)], [0, np.sin(tilt), np.cos(tilt)]]) + tilt_tf[:3, :3] = tilt_rot + + pan_tf = np.identity(4) + pan_rot = np.array([[np.cos(pan), 0, np.sin(pan)], [0, 1, 0], [-np.sin(pan), 0, np.cos(pan)]]) + pan_tf[:3, :3] = pan_rot + + tf = ee_transform @ pan_tf @ tilt_tf @ base_offset_tf + return tf + + # TODO: Better types for getCameraImage + def get_view_mat_at_curr_pose(self, pan, tilt, xyz_offset) -> np.ndarray: + """Get view matrix at current pose""" + pose, orientation = self.get_current_pose(self.tool0_link_index) + + camera_tf = self.create_camera_transform(pose, orientation, pan, tilt, xyz_offset) + + # Initial vectors + camera_vector = np.array([0, 0, 1]) @ camera_tf[:3, :3].T # + up_vector = np.array([0, 1, 0]) @ camera_tf[:3, :3].T # + # Rotated vectors + # print(camera_vector, up_vector) + view_matrix = self.con.computeViewMatrix(camera_tf[:3, 3], camera_tf[:3, 3] + 0.1 * camera_vector, up_vector) + return view_matrix + + def get_camera_location(self): + pose, orientation = self.get_current_pose(self.tool0_link_index) + tilt = np.pi / 180 * 8 + + camera_tf = self.create_camera_transform(pose, orientation, tilt) + return camera_tf + + # Collision checking + + def set_collision_filter(self): + """Disable collision between pruner and arm""" + for i in self.robot_collision_filter_idxs: + self.con.setCollisionFilterPair(self.robot, self.robot, i[0], i[1], 0) + + def unset_collision_filter(self): + """Enable collision between pruner and arm""" + for i in self.robot_collision_filter_idxs: + self.con.setCollisionFilterPair(self.robot, self.robot, i[0], i[1], 1) + def disable_self_collision(self): + for i in range(self.num_joints): + for j in range(self.num_joints): + if i != j: + self.con.setCollisionFilterPair(self.robot, self.robot, i, j, 0) + + def enable_self_collision(self): + for i in range(self.num_joints): + for j in range(self.num_joints): + if i != j: + self.con.setCollisionFilterPair(self.robot, self.robot, i, j, 1) + + def check_collisions(self, collision_objects) -> Tuple[bool, dict]: + """Check if there are any collisions between the robot and the environment + Returns: Dictionary with information about collisions (Acceptable and Unacceptable) + """ + collision_info = {"collisions_acceptable": False, "collisions_unacceptable": False} + + collision_acceptable_list = ['SPUR', 'WATER_BRANCH'] + collision_unacceptable_list = ['TRUNK', 'BRANCH', 'SUPPORT'] + for type in collision_acceptable_list: + collisions_acceptable = self.con.getContactPoints(bodyA=self.robot, bodyB=collision_objects[type]) + if collisions_acceptable: + for i in range(len(collisions_acceptable)): + if collisions_acceptable[i][-6] < 0: + collision_info["collisions_acceptable"] = True + break + if collision_info["collisions_acceptable"]: + break + + for type in collision_unacceptable_list: + collisions_unacceptable = self.con.getContactPoints(bodyA=self.robot, bodyB=collision_objects[type]) + for i in range(len(collisions_unacceptable)): + if collisions_unacceptable[i][-6] < 0: + collision_info["collisions_unacceptable"] = True + # break + if collision_info["collisions_unacceptable"]: + break + + if not collision_info["collisions_unacceptable"]: + collisons_self = self.con.getContactPoints(bodyA=self.robot, bodyB=self.robot) + collisions_unacceptable = collisons_self + for i in range(len(collisions_unacceptable)): + if collisions_unacceptable[i][-6] < -0.001: + collision_info["collisions_unacceptable"] = True + break + if self.verbose > 1: + print(f"DEBUG: {collision_info}") + + if collision_info["collisions_acceptable"] or collision_info["collisions_unacceptable"]: + return True, collision_info + + return False, collision_info + + def check_success_collision(self, body_b) -> bool: + """Check if there are any collisions between the robot and the environment + Returns: Boolw + """ + collisions_success = self.con.getContactPoints(bodyA=self.robot, bodyB=body_b, + linkIndexA=self.success_link_index) + for i in range(len(collisions_success)): + if collisions_success[i][-6] < 0.05: + if self.verbose > 1: + print("DEBUG: Success Collision") + return True + + return False + + def set_collision_filter_tree(self, collision_objects): + for i in collision_objects.values(): + for j in range(self.num_joints): + self.con.setCollisionFilterPair(self.robot, i, j, 0, 0) + + def unset_collision_filter_tree(self, collision_objects): + for i in collision_objects.values(): + for j in range(self.num_joints): + self.con.setCollisionFilterPair(self.robot, i, j, 0, 1) \ No newline at end of file From 4d7971cd8aeb8b838858380682d5e0b3506b59db Mon Sep 17 00:00:00 2001 From: clairefollett Date: Fri, 8 Nov 2024 05:26:20 +0000 Subject: [PATCH 4/5] fixed a couple things, some unused imports --- pybullet_tree_sim/robot.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pybullet_tree_sim/robot.py b/pybullet_tree_sim/robot.py index 93a4a76..2c6809a 100644 --- a/pybullet_tree_sim/robot.py +++ b/pybullet_tree_sim/robot.py @@ -1,13 +1,6 @@ -import os -import sys from typing import Optional, Tuple - -from numpy import ndarray import numpy as np import pybullet -from typing import Optional - -from nptyping import NDArray, Shape, Float from collections import namedtuple class Robot: From 6a65b1b245fde8247b69dc7c5afaf6d25bd888e7 Mon Sep 17 00:00:00 2001 From: lukestroh Date: Mon, 11 Nov 2024 13:04:05 -0800 Subject: [PATCH 5/5] rebase on claire --- pybullet_tree_sim/robot.py | 125 +++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/pybullet_tree_sim/robot.py b/pybullet_tree_sim/robot.py index 2c6809a..82c2ab2 100644 --- a/pybullet_tree_sim/robot.py +++ b/pybullet_tree_sim/robot.py @@ -3,11 +3,12 @@ import pybullet from collections import namedtuple + class Robot: def __init__( - self, - con, - robot_type: str, + self, + con, + robot_type: str, robot_urdf_path: str, tool_link_name: str, end_effector_link_name: str, @@ -16,10 +17,10 @@ def __init__( control_joints, robot_collision_filter_idxs, init_joint_angles: Optional[list] = None, - pos=(0, 0, 0), - orientation=(0, 0, 0, 1), - randomize_pose=False, - verbose=1 + pos=(0, 0, 0), + orientation=(0, 0, 0, 1), + randomize_pose=False, + verbose=1, ) -> None: self.con = con self.robot_type = robot_type @@ -34,14 +35,12 @@ def __init__( self.randomize_pose = randomize_pose self.joint_info = namedtuple( - "jointInfo", - ["id", "name", "type", "lowerLimit", "upperLimit", "maxForce", "maxVelocity", "controllable"] + "jointInfo", ["id", "name", "type", "lowerLimit", "upperLimit", "maxForce", "maxVelocity", "controllable"] ) # Pruning camera information - self.camera_base_offset = np.array( - [0.063179, 0.077119, 0.0420027]) + self.camera_base_offset = np.array([0.063179, 0.077119, 0.0420027]) self.verbose = verbose - + self.joints = None self.robot = None self.control_joints = control_joints @@ -58,25 +57,16 @@ def setup_robot(self): delta_pos = np.random.rand(3) * 0.0 delta_orientation = pybullet.getQuaternionFromEuler(np.random.rand(3) * np.pi / 180 * 5) else: - delta_pos = np.array([0., 0., 0.]) + delta_pos = np.array([0.0, 0.0, 0.0]) delta_orientation = pybullet.getQuaternionFromEuler([0, 0, 0]) self.pos, self.orientation = self.con.multiplyTransforms( - self.pos, - self.orientation, - delta_pos, - delta_orientation - ) - self.robot = self.con.loadURDF( - self.robot_urdf_path, - self.pos, - self.orientation, - flags=flags, - useFixedBase=True + self.pos, self.orientation, delta_pos, delta_orientation ) + self.robot = self.con.loadURDF(self.robot_urdf_path, self.pos, self.orientation, flags=flags, useFixedBase=True) self.num_joints = self.con.getNumJoints(self.robot) - #Get indices dynamically + # Get indices dynamically self.tool0_link_index = self.get_link_index(self.tool_link_name) self.end_effector_index = self.get_link_index(self.end_effector_link_name) self.success_link_index = self.get_link_index(self.success_link_name) @@ -84,7 +74,7 @@ def setup_robot(self): self.set_collision_filter() - #Setup robot info only once + # Setup robot info only once if not self.joints: self.joints = dict() self.controllable_joints_idxs = [] @@ -118,14 +108,14 @@ def setup_robot(self): print("Controllable Joint Name: ", jointName, "Joint ID: ", jointID) info = self.joint_info( - jointID, - jointName, - jointType, - jointLowerLimit, - jointUpperLimit, + jointID, + jointName, + jointType, + jointLowerLimit, + jointUpperLimit, jointMaxForce, - jointMaxVelocity, - controllable + jointMaxVelocity, + controllable, ) if info.type == self.con.JOINT_REVOLUTE: @@ -153,15 +143,15 @@ def get_link_index(self, link_name): num_joints = self.con.getNumJoints(self.robot) for i in range(num_joints): info = self.con.getJointInfo(self.robot, i) - child_link_name = info[12].decode('utf-8') + child_link_name = info[12].decode("utf-8") if child_link_name == link_name: - return i # return link index - - base_link_name = self.con.getBodyInfo(self.robot)[0].decode('utf-8') + return i # return link index + + base_link_name = self.con.getBodyInfo(self.robot)[0].decode("utf-8") if base_link_name == link_name: - return -1 #base link has index of -1 + return -1 # base link has index of -1 raise ValueError(f"Link '{link_name}' not found in the robot URDF.") - + def reset_robot(self): if self.robot is None: return @@ -193,12 +183,13 @@ def set_joint_angles(self, joint_angles) -> None: forces.append(joint.maxForce) self.con.setJointMotorControlArray( - self.robot, indexes, + self.robot, + indexes, self.con.POSITION_CONTROL, targetPositions=joint_angles, targetVelocities=[0] * len(poses), positionGains=[0.05] * len(poses), - forces=forces + forces=forces, ) def set_joint_velocities(self, joint_velocities) -> None: @@ -214,11 +205,12 @@ def set_joint_velocities(self, joint_velocities) -> None: indexes.append(joint.id) forces.append(joint.maxForce) - self.con.setJointMotorControlArray(self.robot, - indexes, - controlMode=self.con.VELOCITY_CONTROL, - targetVelocities=joint_velocities, - ) + self.con.setJointMotorControlArray( + self.robot, + indexes, + controlMode=self.con.VELOCITY_CONTROL, + targetVelocities=joint_velocities, + ) # TODO: Use proprty decorator for getters? def get_joint_velocities(self): @@ -241,8 +233,7 @@ def get_current_pose(self, index): def get_current_vel(self, index): """Returns current pose of the index.""" - link_state = self.con.getLinkState(self.robot, index, computeLinkVelocity=True, - computeForwardKinematics=True) + link_state = self.con.getLinkState(self.robot, index, computeLinkVelocity=True, computeForwardKinematics=True) trans, ang = link_state[6], link_state[7] return trans, ang @@ -256,16 +247,26 @@ def calculate_ik(self, position, orientation): """Calculates joint angles from end effector position and orientation using inverse kinematics""" joint_angles = self.con.calculateInverseKinematics( - self.robot, self.end_effector_index, position, orientation, - jointDamping=[0.01] * len(self.control_joints), upperLimits=self.joint_upper_limits, - lowerLimits=self.joint_lower_limits, jointRanges=self.joint_ranges # , restPoses=self.init_joint_angles + self.robot, + self.end_effector_index, + position, + orientation, + jointDamping=[0.01] * len(self.control_joints), + upperLimits=self.joint_upper_limits, + lowerLimits=self.joint_lower_limits, + jointRanges=self.joint_ranges, # , restPoses=self.init_joint_angles ) return joint_angles def calculate_jacobian(self): - jacobian = self.con.calculateJacobian(self.robot, self.tool0_link_index, [0, 0, 0], - self.get_joint_angles(), - [0]*len(self.control_joints), [0]*len(self.control_joints)) + jacobian = self.con.calculateJacobian( + self.robot, + self.tool0_link_index, + [0, 0, 0], + self.get_joint_angles(), + [0] * len(self.control_joints), + [0] * len(self.control_joints), + ) jacobian = np.vstack(jacobian) return jacobian @@ -276,9 +277,7 @@ def calculate_joint_velocities_from_ee_velocity(self, end_effector_velocity): joint_velocities = np.matmul(inv_jacobian, end_effector_velocity).astype(np.float32) return joint_velocities, jacobian - def calculate_joint_velocities_from_ee_velocity_dls(self, - end_effector_velocity, - damping_factor: float = 0.05): + def calculate_joint_velocities_from_ee_velocity_dls(self, end_effector_velocity, damping_factor: float = 0.05): """Calculate joint velocities from end effector velocity using damped least squares""" jacobian = self.calculate_jacobian() identity_matrix = np.eye(jacobian.shape[0]) @@ -343,6 +342,7 @@ def unset_collision_filter(self): """Enable collision between pruner and arm""" for i in self.robot_collision_filter_idxs: self.con.setCollisionFilterPair(self.robot, self.robot, i[0], i[1], 1) + def disable_self_collision(self): for i in range(self.num_joints): for j in range(self.num_joints): @@ -361,8 +361,8 @@ def check_collisions(self, collision_objects) -> Tuple[bool, dict]: """ collision_info = {"collisions_acceptable": False, "collisions_unacceptable": False} - collision_acceptable_list = ['SPUR', 'WATER_BRANCH'] - collision_unacceptable_list = ['TRUNK', 'BRANCH', 'SUPPORT'] + collision_acceptable_list = ["SPUR", "WATER_BRANCH"] + collision_unacceptable_list = ["TRUNK", "BRANCH", "SUPPORT"] for type in collision_acceptable_list: collisions_acceptable = self.con.getContactPoints(bodyA=self.robot, bodyB=collision_objects[type]) if collisions_acceptable: @@ -401,8 +401,9 @@ def check_success_collision(self, body_b) -> bool: """Check if there are any collisions between the robot and the environment Returns: Boolw """ - collisions_success = self.con.getContactPoints(bodyA=self.robot, bodyB=body_b, - linkIndexA=self.success_link_index) + collisions_success = self.con.getContactPoints( + bodyA=self.robot, bodyB=body_b, linkIndexA=self.success_link_index + ) for i in range(len(collisions_success)): if collisions_success[i][-6] < 0.05: if self.verbose > 1: @@ -419,4 +420,4 @@ def set_collision_filter_tree(self, collision_objects): def unset_collision_filter_tree(self, collision_objects): for i in collision_objects.values(): for j in range(self.num_joints): - self.con.setCollisionFilterPair(self.robot, i, j, 0, 1) \ No newline at end of file + self.con.setCollisionFilterPair(self.robot, i, j, 0, 1)