From b9a251909312c00b03c313dce9ca3d7a80328e3f Mon Sep 17 00:00:00 2001 From: Ventsi <uquzq@student.kit.edu> Date: Fri, 9 Aug 2024 00:27:54 +0200 Subject: [PATCH] Update forward_kinematics_node for the simple_robot simulation --- .../forward_kinematics_node_1dof.py | 53 ++++++++++++++++--- .../simple_robot_1dof/urdf/simple_robot.urdf | 8 +++ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/ros2_ws/src/simple_robot_1dof/simple_robot_1dof/forward_kinematics_node_1dof.py b/ros2_ws/src/simple_robot_1dof/simple_robot_1dof/forward_kinematics_node_1dof.py index 3ac27f8..440bb6f 100644 --- a/ros2_ws/src/simple_robot_1dof/simple_robot_1dof/forward_kinematics_node_1dof.py +++ b/ros2_ws/src/simple_robot_1dof/simple_robot_1dof/forward_kinematics_node_1dof.py @@ -35,6 +35,16 @@ class Forward_Kinematics_Node_1Dof(Node): self.Glist = self.robot_model["Glist"] self.Blist = self.robot_model["Blist"] + urdf_file_path_simple_robot = os.path.join( + get_package_share_directory('simple_robot_1dof'), 'urdf', 'simple_robot.urdf') + self.simple_robot_model = loadURDF(urdf_file_path_simple_robot) + self.simple_robot_M = self.simple_robot_model["M"] + self.simple_robot_Slist = self.simple_robot_model["Slist"] + self.simple_robot_Mlist = self.simple_robot_model["Mlist"] + self.simple_robot_Glist = self.simple_robot_model["Glist"] + self.simple_robot_Blist = self.simple_robot_model["Blist"] + + # create two publishers for the RViz simulation - one for the whole path and one for the marker self.path_publisher_ = self.create_publisher(Path, '/simple_robot/visualization_path', 10) self.point_publisher_ = self.create_publisher(Marker, '/simple_robot/visualization_marker', 10) @@ -57,9 +67,10 @@ class Forward_Kinematics_Node_1Dof(Node): if self.phi == 0: self.index += 1 - self.transformation() + self.transformation_kuka() + self.transformation_simple_robot() - def transformation(self): + def transformation_kuka(self): # Define the desired rotation here theta = - pi / 1.8 # Split theta @@ -92,13 +103,43 @@ class Forward_Kinematics_Node_1Dof(Node): end_position = end_forward_kinematics[:4, 3] end_orientation = Rotation.from_matrix(end_forward_kinematics[:3, :3]).as_quat() - - self.publish_pose_simple_robot(end_position, end_orientation) - if self.index == 2: self.publish_pose_target_pose(end_position, end_orientation) + + + def transformation_simple_robot(self): + # Define the desired rotation here + theta = - pi / 1.8 + # Split theta + theta_fraction = self.phi * theta + + self.publish_angle(theta_fraction) + + # Define the matrix + intermediate_rotation = np.array([ + [cos(theta_fraction), -sin(theta_fraction), 0, 0], + [sin(theta_fraction), cos(theta_fraction), 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]) + + self.simple_robot_joint_angles = np.zeros(len(self.simple_robot_Slist[0])) + # self.simple_robot_joint_angles[1] = np.pi / 2 + + start_forward_kinematics_simple = FKinBody(self.simple_robot_M, self.simple_robot_Blist, self.simple_robot_joint_angles) + + start_position_simple = start_forward_kinematics_simple[:4 ,3] + start_orientation = Rotation.from_matrix(start_forward_kinematics_simple[:3, :3]).as_quat() + + end_forward_kinematics_simple = np.matmul(intermediate_rotation, start_forward_kinematics_simple) + + end_position_simple = end_forward_kinematics_simple[:4, 3] + end_orientation_simple = Rotation.from_matrix(end_forward_kinematics_simple[:3, :3]).as_quat() + + + self.publish_pose_simple_robot(end_position_simple, end_orientation_simple) - self.construct_path(end_position) + self.construct_path(end_position_simple) def construct_path(self, vector): # RViz diff --git a/ros2_ws/src/simple_robot_1dof/urdf/simple_robot.urdf b/ros2_ws/src/simple_robot_1dof/urdf/simple_robot.urdf index 2eb36ab..f9459f8 100644 --- a/ros2_ws/src/simple_robot_1dof/urdf/simple_robot.urdf +++ b/ros2_ws/src/simple_robot_1dof/urdf/simple_robot.urdf @@ -78,6 +78,14 @@ <limit effort = "300" lower="-2.96705972839" upper="2.96705972839" velocity = "10" /> </joint> + <link name="ee_link" /> + + <joint name="ee_joint" type="fixed"> + <parent link="arm3"/> + <child link="ee_link"/> + <origin xyz="-0.3 0 0"/> + </joint> + </robot> -- GitLab