Add gripper model and configuration for iiwa7 robot

- Created URDF model for gripper including links and joints.
- Added XACRO files for gripper components: gripper.xacro, gripper_links.xacro, gripper_joints.xacro, gripper_macros.xacro, and gripper_meshes.xacro.
- Integrated gripper into iiwa7 digital twin configuration.
- Defined properties and macros for gripper components to facilitate easier modifications and reuse.
This commit is contained in:
Даниил Грабарь
2026-04-07 14:40:23 +10:00
parent 44dd2505ca
commit a269ef3a76
17 changed files with 598 additions and 168 deletions
+36
View File
@@ -40,6 +40,15 @@
</group_state>
<!--END EFFECTOR: Purpose: Represent information about an end effector.-->
<end_effector name="hand" parent_link="link_ee" group="iiwa_arm"/>
<!--PASSIVE JOINTS: MoveIt не ожидает их в /joint_states и не планирует ими.
Геометрия захвата всё равно учитывается при проверке коллизий.-->
<passive_joint name="base_screw"/>
<passive_joint name="craving1_joint"/>
<passive_joint name="craving2_joint"/>
<passive_joint name="craving3_joint"/>
<passive_joint name="finger1_joint"/>
<passive_joint name="finger2_joint"/>
<passive_joint name="finger3_joint"/>
<!--VIRTUAL JOINT: Purpose: this element defines a virtual joint between a robot link and an external frame of reference (considered fixed with respect to the robot)-->
<virtual_joint name="virtual" type="fixed" parent_frame="word" child_link="base_link"/>
<!--DISABLE COLLISIONS: By default it is assumed that any link of the robot could potentially come into collision with any other link in the robot. This tag disables collision checking between a specified pair of links. -->
@@ -68,4 +77,31 @@
<disable_collisions link1="link5" link2="link6" reason="Adjacent"/>
<disable_collisions link1="link5" link2="link7" reason="Never"/>
<disable_collisions link1="link6" link2="link7" reason="Adjacent"/>
<!-- Захват -->
<disable_collisions link1="link7" link2="base_frame" reason="Adjacent"/>
<disable_collisions link1="link7" link2="plate" reason="Never"/>
<disable_collisions link1="link7" link2="screw" reason="Never"/>
<disable_collisions link1="link7" link2="craving1" reason="Never"/>
<disable_collisions link1="link7" link2="craving2" reason="Never"/>
<disable_collisions link1="link7" link2="craving3" reason="Never"/>
<disable_collisions link1="link7" link2="finger1" reason="Never"/>
<disable_collisions link1="link7" link2="finger2" reason="Never"/>
<disable_collisions link1="link7" link2="finger3" reason="Never"/>
<disable_collisions link1="base_frame" link2="plate" reason="Adjacent"/>
<disable_collisions link1="base_frame" link2="screw" reason="Adjacent"/>
<disable_collisions link1="base_frame" link2="craving1" reason="Never"/>
<disable_collisions link1="base_frame" link2="craving2" reason="Never"/>
<disable_collisions link1="base_frame" link2="craving3" reason="Never"/>
<disable_collisions link1="plate" link2="finger1" reason="Adjacent"/>
<disable_collisions link1="plate" link2="finger2" reason="Adjacent"/>
<disable_collisions link1="plate" link2="finger3" reason="Adjacent"/>
<disable_collisions link1="screw" link2="craving1" reason="Adjacent"/>
<disable_collisions link1="screw" link2="craving2" reason="Adjacent"/>
<disable_collisions link1="screw" link2="craving3" reason="Adjacent"/>
<disable_collisions link1="craving1" link2="craving2" reason="Never"/>
<disable_collisions link1="craving1" link2="craving3" reason="Never"/>
<disable_collisions link1="craving2" link2="craving3" reason="Never"/>
<disable_collisions link1="finger1" link2="finger2" reason="Never"/>
<disable_collisions link1="finger1" link2="finger3" reason="Never"/>
<disable_collisions link1="finger2" link2="finger3" reason="Never"/>
</robot>
+1 -1
View File
@@ -16,7 +16,7 @@ digital_twin:
rviz:
config: pkg://iiwa_config/config/rviz/rviz_moveit.rviz
description: pkg://iiwa_description/urdf/iiwa7.urdf.xacro
description: pkg://iiwa_description/urdf/iiwa7_digital.urdf.xacro
controller:
controller_path: pkg://iiwa_config/config/moveit/iiwa_controller.yaml
-167
View File
@@ -1,167 +0,0 @@
<?xml version="1.0"?>
<robot name="gripper">
<link name="base_frame">
<visual>
<origin xyz="-21 -21 6" rpy="0 0 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/base_frame.stl" />
</geometry>
</visual>
<collision>
<origin xyz="-21 -21 6" rpy="0 0 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/base_frame.stl" />
</geometry>
</collision>
<inertial>
<mass value="0.0"/>
<origin xyz=" 0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
</link>
<link name="plate">
<visual>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/plate.stl"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/plate.stl"/>
</geometry>
</collision>
<inertial>
<mass value="0.0"/>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
</link>
<link name="screw">
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/screw.stl"/>
</geometry>
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/screw.stl"/>
</geometry>
</collision>
</link>
<link name="craving1">
<inertial>
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</visual>
<collision>
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</collision>
</link>
<link name="craving2">
<inertial>
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</visual>
<collision>
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</collision>
</link>
<link name="craving3">
<inertial>
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</visual>
<collision>
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/ros2_iiwa7/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</collision>
</link>
<joint name="base" type="fixed">
<origin xyz="0.0 0.0 61" rpy="0.0 0.0 0.0"/>
<parent link="base_frame"/>
<child link="plate"/>
</joint>
<joint name="base_screw" type="prismatic">
<origin xyz="0.0 0.0 72" rpy="0.0 0.0 0.0"/>
<parent link="base_frame"/>
<child link="screw"/>
<axis xyz="0.0 0.0 1"/>
<limit lower="-7" upper="0.0" effort="0.0" velocity="0.0"/>
</joint>
<joint name="craving1_joint" type="revolute">
<origin xyz="15.5 -9.5 4" rpy="0.0 0 -0.55"/>
<parent link="screw"/>
<child link="craving1"/>
<axis xyz="0.0 1 0.0"/>
<limit lower="-0.3" upper="0.2" effort="5.0" velocity="1.0"/>
<dynamics damping="0.05" friction="0.05"/>
<mimic joint="base_screw" multiplier="0.07" offset="0.2"/>
</joint>
<joint name="craving2_joint" type="revolute">
<origin xyz="-15.5 -9.5 4" rpy="0.0 0 0.55"/>
<parent link="screw"/>
<child link="craving2"/>
<axis xyz="0.0 1 0.0"/>
<limit lower="-0.2" upper="0.3" effort="5.0" velocity="1.0"/>
<dynamics damping="0.05" friction="0.05"/>
<mimic joint="base_screw" multiplier="-0.07" offset="-0.2"/>
</joint>
<joint name="craving3_joint" type="revolute">
<origin xyz="0 18 4" rpy="0.0 0 1.57"/>
<parent link="screw"/>
<child link="craving3"/>
<axis xyz="0.0 1 0.0"/>
<limit lower="-0.3" upper="0.2" effort="5.0" velocity="1.0"/>
<dynamics damping="0.05" friction="0.05"/>
<mimic joint="base_screw" multiplier="0.07" offset="0.2"/>
</joint>
</robot>
@@ -0,0 +1,280 @@
<?xml version="1.0"?>
<robot name="gripper">
<link name="base_frame">
<visual>
<origin xyz="-21 -21 6" rpy="0 0 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/base_frame.stl" />
</geometry>
<material name="black_plastic">
<color rgba="0.05 0.05 0.05 1.0"/>
</material>
</visual>
<collision>
<origin xyz="-21 -21 6" rpy="0 0 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/base_frame.stl" />
</geometry>
</collision>
<inertial>
<mass value="0.0"/>
<origin xyz=" 0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
</link>
<link name="plate">
<visual>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/plate.stl"/>
</geometry>
<material name="alum_plastic">
<color rgba="0.7 0.7 0.7 1.0"/>
</material>
</visual>
<collision>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/plate.stl"/>
</geometry>
</collision>
<inertial>
<mass value="0.0"/>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
</link>
<link name="screw">
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/screw.stl"/>
</geometry>
<material name="alum_plastic">
<color rgba="0.7 0.7 0.7 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/screw.stl"/>
</geometry>
</collision>
</link>
<link name="craving1">
<inertial>
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
<material name="alum_plastic">
<color rgba="0.7 0.7 0.7 1.0"/>
</material>
</visual>
<collision>
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</collision>
</link>
<link name="craving2">
<inertial>
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
<material name="alum_plastic">
<color rgba="0.7 0.7 0.7 1.0"/>
</material>
</visual>
<collision>
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</collision>
</link>
<link name="craving3">
<inertial>
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
<material name="alum_plastic">
<color rgba="0.7 0.7 0.7 1.0"/>
</material>
</visual>
<collision>
<origin xyz="-4 -7 19" rpy="0.0 1.57 0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/craving.stl"/>
</geometry>
</collision>
</link>
<link name="finger1">
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="9 -25 5" rpy="0.0 -1.57 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/finger_plates.stl"/>
</geometry>
<material name="">
<color rgba="0.0 0.8 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="9 -25 5" rpy="0.0 -1.57 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/finger_plates.stl"/>
</geometry>
</collision>
</link>
<link name="finger2">
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="9 -25 5" rpy="0.0 -1.57 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/finger_plates.stl"/>
</geometry>
<material name="">
<color rgba="0.0 0.8 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="9 -25 5" rpy="0.0 -1.57 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/finger_plates.stl"/>
</geometry>
</collision>
</link>
<link name="finger3">
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual name="">
<origin xyz="9 -25 5" rpy="0.0 -1.57 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/finger_plates.stl"/>
</geometry>
<material name="">
<color rgba="0.0 0.8 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="9 -25 5" rpy="0.0 -1.57 0.0"/>
<geometry>
<mesh filename="/home/daniel/dev/kuka_iiwa7_ros2/src/iiwa_description/resource/meshes/gripper/finger_plates.stl"/>
</geometry>
</collision>
</link>
<joint name="base" type="fixed">
<origin xyz="0.0 0.0 61" rpy="0.0 0.0 0.0"/>
<parent link="base_frame"/>
<child link="plate"/>
</joint>
<joint name="base_screw" type="prismatic">
<origin xyz="0.0 0.0 72" rpy="0.0 0.0 0.0"/>
<parent link="base_frame"/>
<child link="screw"/>
<axis xyz="0.0 0.0 1"/>
<limit lower="-7" upper="0.0" effort="0.0" velocity="0.0"/>
</joint>
<joint name="craving1_joint" type="revolute">
<origin xyz="15.5 -9.5 4" rpy="0.0 0 -0.55"/>
<parent link="screw"/>
<child link="craving1"/>
<axis xyz="0.0 1 0.0"/>
<limit lower="-0.25" upper="-0.2" effort="5.0" velocity="1.0"/>
<dynamics damping="0.05" friction="0.05"/>
<mimic joint="base_screw" multiplier="0.0001" offset="-0.25"/>
</joint>
<joint name="craving2_joint" type="revolute">
<origin xyz="-15.5 -9.5 4" rpy="0.0 0 0.55"/>
<parent link="screw"/>
<child link="craving2"/>
<axis xyz="0.0 1 0.0"/>
<limit lower="0.2" upper="0.25" effort="5.0" velocity="1.0"/>
<dynamics damping="0.05" friction="0.05"/>
<mimic joint="base_screw" multiplier="0.0001" offset="0.2"/>
</joint>
<joint name="craving3_joint" type="revolute">
<origin xyz="0 18 4" rpy="0.0 0 1.57"/>
<parent link="screw"/>
<child link="craving3"/>
<axis xyz="0.0 1 0.0"/>
<limit lower="-0.25" upper="-0.2" effort="5.0" velocity="1.0"/>
<dynamics damping="0.05" friction="0.05"/>
<mimic joint="base_screw" multiplier="0.0001" offset="-0.25"/>
</joint>
<joint name="finger1_joint" type="revolute">
<origin xyz="31.5 -18.5 28" rpy="0.0 0.0 -2.12"/>
<parent link="plate"/>
<child link="finger1"/>
<axis xyz="1 0.0 0"/>
<limit lower="-0.2" upper="0.09" effort="0.0" velocity="0.0"/>
<mimic joint="base_screw" multiplier="-0.05" offset="-0.2"/>
</joint>
<joint name="finger2_joint" type="revolute">
<origin xyz="-31.5 -18.5 28" rpy="0.0 0.0 2.12"/>
<parent link="plate"/>
<child link="finger2"/>
<axis xyz="1 0.0 0"/>
<limit lower="-0.2" upper="0.09" effort="0.0" velocity="0.0"/>
<mimic joint="base_screw" multiplier="-0.05" offset="-0.2"/>
</joint>
<joint name="finger3_joint" type="revolute">
<origin xyz="0 37 28" rpy="0.0 0.0 0.0"/>
<parent link="plate"/>
<child link="finger3"/>
<axis xyz="1 0.0 0"/>
<limit lower="-0.2" upper="0.09" effort="0.0" velocity="0.0"/>
<mimic joint="base_screw" multiplier="-0.05" offset="-0.2"/>
</joint>
</robot>
@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!-- Захват для Webots digital twin: все суставы fixed, без физики суставов.
Для реального робота используй gripper.xacro. -->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" xacro:version="1.0">
<!-- Digital: box collision вместо mesh, все суставы с правильной физикой -->
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper_links.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper_joints.xacro"/>
<joint name="gripper_attach_joint" type="fixed">
<origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0"/>
<parent link="link_ee"/>
<child link="base_frame"/>
</joint>
</robot>
@@ -0,0 +1,62 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" xacro:version="1.0">
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper_macros.xacro"/>
<joint name="base_joint" type="fixed">
<origin xyz="0.0 0.0 0.061" rpy="0.0 0.0 0.0"/>
<parent link="base_frame"/>
<child link="plate"/>
</joint>
<xacro:prismatic_joint jname="base_screw"
parent="base_frame" child="screw"
xyz="0.0 0.0 0.072" rpy="0.0 0.0 0.0"
axis="0.0 0.0 1"
lower="-0.007" upper="0.0"
effort="50.0" velocity="0.05"/>
<xacro:mimic_revolute_joint jname="craving1_joint"
parent="screw" child="craving1"
xyz="0.0155 -0.0095 0.004" rpy="0.0 0 -0.55"
axis="0.0 1 0.0"
lower="-0.25" upper="-0.2" effort="5.0" velocity="1.0" damping="0.05"
mimic_joint="base_screw" multiplier="0.1" mimic_offset="-0.25"/>
<xacro:mimic_revolute_joint jname="craving2_joint"
parent="screw" child="craving2"
xyz="-0.0155 -0.0095 0.004" rpy="0.0 0 0.55"
axis="0.0 1 0.0"
lower="0.2" upper="0.25" effort="5.0" velocity="1.0" damping="0.05"
mimic_joint="base_screw" multiplier="0.1" mimic_offset="0.2"/>
<xacro:mimic_revolute_joint jname="craving3_joint"
parent="screw" child="craving3"
xyz="0 0.018 0.004" rpy="0.0 0 1.57"
axis="0.0 1 0.0"
lower="-0.25" upper="-0.2" effort="5.0" velocity="1.0" damping="0.05"
mimic_joint="base_screw" multiplier="0.1" mimic_offset="-0.25"/>
<xacro:mimic_revolute_joint jname="finger1_joint"
parent="plate" child="finger1"
xyz="0.0315 -0.0185 0.028" rpy="0.0 0.0 -2.12"
axis="1 0.0 0"
lower="-0.2" upper="0.09" effort="5.0" velocity="1.0" damping="0.0"
mimic_joint="base_screw" multiplier="-50" mimic_offset="-0.2"/>
<xacro:mimic_revolute_joint jname="finger2_joint"
parent="plate" child="finger2"
xyz="-0.0315 -0.0185 0.028" rpy="0.0 0.0 2.12"
axis="1 0.0 0"
lower="-0.2" upper="0.09" effort="5.0" velocity="1.0" damping="0.0"
mimic_joint="base_screw" multiplier="-50" mimic_offset="-0.2"/>
<xacro:mimic_revolute_joint jname="finger3_joint"
parent="plate" child="finger3"
xyz="0 0.037 0.028" rpy="0.0 0.0 0.0"
axis="1 0.0 0"
lower="-0.2" upper="0.09" effort="5.0" velocity="1.0" damping="0.0"
mimic_joint="base_screw" multiplier="-50" mimic_offset="-0.2"/>
</robot>
@@ -0,0 +1,108 @@
<?xml version="1.0"?>
<!-- Links захвата для Webots digital twin.
Использует gripper_macros_digital.xacro: visual=mesh, collision=box.
Размеры box определены по смещениям суставов и геометрии захвата. -->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" xacro:version="1.0">
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper_macros_digital.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper_meshes.xacro"/>
<xacro:property name="gripper_dark_r" value="0.05"/>
<xacro:property name="gripper_dark_g" value="0.05"/>
<xacro:property name="gripper_dark_b" value="0.05"/>
<xacro:property name="gripper_alum_r" value="0.7"/>
<xacro:property name="gripper_alum_g" value="0.7"/>
<xacro:property name="gripper_alum_b" value="0.7"/>
<xacro:property name="gripper_finger_r" value="0.0"/>
<xacro:property name="gripper_finger_g" value="0.8"/>
<xacro:property name="gripper_finger_b" value="1.0"/>
<!-- base_frame: основной корпус ~44×44×72mm -->
<xacro:gripper_link name="base_frame"
mass="0.3" xyz_iner="0 0 0.035"
ixx="0.00024" ixy="0.0" ixz="0.0"
iyy="0.00024" iyz="0.0" izz="0.00016"
mesh="${mesh_gripper_base_frame}"
visual_xyz="-0.021 -0.021 0.006" visual_rpy="0 0 0"
r="${gripper_dark_r}" g="${gripper_dark_g}" b="${gripper_dark_b}" a="1.0"
box_x="0.044" box_y="0.044" box_z="0.072" box_xyz="0 0 0.036"/>
<!-- plate: пластина ~70×70×10mm -->
<xacro:gripper_link name="plate"
mass="0.15" xyz_iner="0 0 0"
ixx="0.00012" ixy="0.0" ixz="0.0"
iyy="0.00012" iyz="0.0" izz="0.00018"
mesh="${mesh_gripper_plate}"
visual_xyz="0 0 0" visual_rpy="0 0 0"
r="${gripper_alum_r}" g="${gripper_alum_g}" b="${gripper_alum_b}" a="1.0"
box_x="0.070" box_y="0.070" box_z="0.012" box_xyz="0 0 0.006"/>
<!-- screw: ходовой винт ~20×20×15mm -->
<xacro:gripper_link name="screw"
mass="0.03" xyz_iner="0 0 0"
ixx="0.000024" ixy="0.0" ixz="0.0"
iyy="0.000024" iyz="0.0" izz="0.000012"
mesh="${mesh_gripper_screw}"
visual_xyz="0 0 0" visual_rpy="0 0 0"
r="${gripper_alum_r}" g="${gripper_alum_g}" b="${gripper_alum_b}" a="1.0"
box_x="0.020" box_y="0.020" box_z="0.015" box_xyz="0 0 0"/>
<!-- craving1/2/3: кулачки ~12×12×35mm -->
<xacro:gripper_link name="craving1"
mass="0.01" xyz_iner="0 0 0"
ixx="0.000008" ixy="0.0" ixz="0.0"
iyy="0.000008" iyz="0.0" izz="0.000004"
mesh="${mesh_gripper_craving}"
visual_xyz="-0.004 -0.007 0.019" visual_rpy="0 1.57 0"
r="${gripper_alum_r}" g="${gripper_alum_g}" b="${gripper_alum_b}" a="1.0"
box_x="0.012" box_y="0.012" box_z="0.035" box_xyz="0 0 0.017"/>
<xacro:gripper_link name="craving2"
mass="0.01" xyz_iner="0 0 0"
ixx="0.000008" ixy="0.0" ixz="0.0"
iyy="0.000008" iyz="0.0" izz="0.000004"
mesh="${mesh_gripper_craving}"
visual_xyz="-0.004 -0.007 0.019" visual_rpy="0 1.57 0"
r="${gripper_alum_r}" g="${gripper_alum_g}" b="${gripper_alum_b}" a="1.0"
box_x="0.012" box_y="0.012" box_z="0.035" box_xyz="0 0 0.017"/>
<xacro:gripper_link name="craving3"
mass="0.01" xyz_iner="0 0 0"
ixx="0.000008" ixy="0.0" ixz="0.0"
iyy="0.000008" iyz="0.0" izz="0.000004"
mesh="${mesh_gripper_craving}"
visual_xyz="-0.004 -0.007 0.019" visual_rpy="0 1.57 0"
r="${gripper_alum_r}" g="${gripper_alum_g}" b="${gripper_alum_b}" a="1.0"
box_x="0.012" box_y="0.012" box_z="0.035" box_xyz="0 0 0.017"/>
<!-- finger1/2/3: пальцы ~10×10×40mm -->
<xacro:gripper_link name="finger1"
mass="0.015" xyz_iner="0 0 0"
ixx="0.000012" ixy="0.0" ixz="0.0"
iyy="0.000012" iyz="0.0" izz="0.000004"
mesh="${mesh_gripper_finger}"
visual_xyz="0.009 -0.025 0.005" visual_rpy="0 -1.57 0"
r="${gripper_finger_r}" g="${gripper_finger_g}" b="${gripper_finger_b}" a="1.0"
box_x="0.010" box_y="0.010" box_z="0.040" box_xyz="0 0 0.020"/>
<xacro:gripper_link name="finger2"
mass="0.015" xyz_iner="0 0 0"
ixx="0.000012" ixy="0.0" ixz="0.0"
iyy="0.000012" iyz="0.0" izz="0.000004"
mesh="${mesh_gripper_finger}"
visual_xyz="0.009 -0.025 0.005" visual_rpy="0 -1.57 0"
r="${gripper_finger_r}" g="${gripper_finger_g}" b="${gripper_finger_b}" a="1.0"
box_x="0.010" box_y="0.010" box_z="0.040" box_xyz="0 0 0.020"/>
<xacro:gripper_link name="finger3"
mass="0.015" xyz_iner="0 0 0"
ixx="0.000012" ixy="0.0" ixz="0.0"
iyy="0.000012" iyz="0.0" izz="0.000004"
mesh="${mesh_gripper_finger}"
visual_xyz="0.009 -0.025 0.005" visual_rpy="0 -1.57 0"
r="${gripper_finger_r}" g="${gripper_finger_g}" b="${gripper_finger_b}" a="1.0"
box_x="0.010" box_y="0.010" box_z="0.040" box_xyz="0 0 0.020"/>
</robot>
@@ -0,0 +1,70 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" xacro:version="1.0">
<xacro:macro name="gripper_link"
params="name mass
ixx ixy ixz iyy iyz izz xyz_iner
mesh
visual_xyz visual_rpy
r g b a
box_x box_y box_z box_xyz">
<link name="${name}">
<inertial>
<origin xyz="${xyz_iner}" rpy="0 0 0"/>
<mass value="${mass}"/>
<inertia ixx="${ixx}" ixy="${ixy}" ixz="${ixz}"
iyy="${iyy}" iyz="${iyz}" izz="${izz}"/>
</inertial>
<visual>
<origin xyz="${visual_xyz}" rpy="${visual_rpy}"/>
<geometry>
<mesh filename="${mesh}" scale="0.001 0.001 0.001"/>
</geometry>
<material name="${name}_material">
<color rgba="${r} ${g} ${b} ${a}"/>
</material>
</visual>
<collision>
<origin xyz="${box_xyz}" rpy="0 0 0"/>
<geometry>
<box size="${box_x} ${box_y} ${box_z}"/>
</geometry>
</collision>
</link>
</xacro:macro>
<xacro:macro name="prismatic_joint"
params="jname parent child xyz rpy axis lower upper effort velocity">
<joint name="${jname}" type="prismatic">
<origin xyz="${xyz}" rpy="${rpy}"/>
<parent link="${parent}"/>
<child link="${child}"/>
<axis xyz="${axis}"/>
<limit lower="${lower}" upper="${upper}"
effort="${effort}" velocity="${velocity}"/>
<dynamics damping="0.5" friction="0.1"/>
</joint>
</xacro:macro>
<xacro:macro name="mimic_revolute_joint"
params="jname parent child xyz rpy axis
lower upper effort velocity damping
mimic_joint multiplier mimic_offset">
<joint name="${jname}" type="revolute">
<origin xyz="${xyz}" rpy="${rpy}"/>
<parent link="${parent}"/>
<child link="${child}"/>
<axis xyz="${axis}"/>
<limit lower="${lower}" upper="${upper}"
effort="${effort}" velocity="${velocity}"/>
<dynamics damping="${damping}" friction="0.05"/>
<mimic joint="${mimic_joint}"
multiplier="${multiplier}"
offset="${mimic_offset}"/>
</joint>
</xacro:macro>
</robot>
@@ -0,0 +1,13 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" xacro:version="1.0">
<xacro:property name="gripper_pkg"
value="package://iiwa_description/resource/meshes/gripper"/>
<xacro:property name="mesh_gripper_base_frame" value="${gripper_pkg}/base_frame.stl"/>
<xacro:property name="mesh_gripper_plate" value="${gripper_pkg}/plate.stl"/>
<xacro:property name="mesh_gripper_screw" value="${gripper_pkg}/screw.stl"/>
<xacro:property name="mesh_gripper_craving" value="${gripper_pkg}/craving.stl"/>
<xacro:property name="mesh_gripper_finger" value="${gripper_pkg}/finger_plates.stl"/>
</robot>
@@ -13,6 +13,8 @@
<xacro:include filename="$(find iiwa_description)/urdf/links.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/joints.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper.xacro"/>
<webots>
<plugin type="webots_ros2_control::Ros2Control"/>
</webots>
@@ -134,6 +136,15 @@
<state_interface name="effort"/>
</joint>
<!-- Захват -->
<!-- <joint name="base_screw">
<command_interface name="position"/>
<state_interface name="position">
<param name="initial_value">0.0</param>
</state_interface>
<state_interface name="velocity"/>
</joint> -->
</ros2_control>
@@ -17,6 +17,7 @@
<xacro:include filename="$(find iiwa_description)/urdf/macros.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/links.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/joints.xacro"/>
<xacro:include filename="$(find iiwa_description)/urdf/gripper/gripper.xacro"/>
<ros2_control name="iiwaFRIControl" type="system">