Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,26 @@
# See the License for the specific language governing permissions and
# limitations under the License.

*.urdf
# *.urdf
**/build/*
/backup
**/base_urdf_ws
*.zip
# .github
.vscode
.codex
__pycache__
# *.obj
# *.dae
# *.stl
# *.mtl
# *.txt
# *.xml
*.tsv
**/processed/*
**/review/*
**/tmp/*
*.egg-info/
.venv/
.agents/
/urdf/
7 changes: 5 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ if(BUILD_TESTING)
ament_lint_auto_find_test_dependencies()
endif()

install(DIRECTORY launch meshes rviz urdf config
DESTINATION share/${PROJECT_NAME})
foreach(asset_dir assets docs launch rviz scripts)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${asset_dir}")
install(DIRECTORY ${asset_dir} DESTINATION share/${PROJECT_NAME})
endif()
endforeach()

ament_package()
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,22 @@

This package contains description files to generate OpenArm URDFs (Universal Robot Description Files). See [documentation](https://docs.openarm.dev/software/description) for details.

<!-- ## Project Entry Points
Use one of these entry documents depending on what you are working on:
- Active preset-driven robot pipeline:
[docs/openarm_v2.0/00_OpenArm_v2.0_Description.md](docs/openarm_v2.0/00_OpenArm_v2.0_Description.md)
- Minimal legacy compatibility layer for old `v10` robots:
[docs/openarm_v1.0/00_OpenArm_v1.0_Compatibility.md](docs/openarm_v1.0/00_OpenArm_v1.0_Compatibility.md)
- Extraction and helper scripts:
[docs/openarm_v2.0/01_URDF_Extract_Scripts.md](docs/openarm_v2.0/01_URDF_Extract_Scripts.md)
Recommended starting point:
- for all new robot assembly, presets, xacro, and URDF generation work, start with `assets/robot/openarm_v2.0`
- only use `assets/robot/openarm_v1.0` when you need the old `v10 + parallel_link` compatibility path -->

## Related links

- 📚 Read the [documentation](https://docs.openarm.dev/software/description)
Expand Down
14 changes: 14 additions & 0 deletions assets/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from pathlib import Path

ASSETS_ROOT = Path(__file__).resolve().parent

def get_v2_urdf_path() -> str:
"""
assets/robot/openarm_v2.0/urdf/example/v2.urdf の絶対パスを返す
"""
urdf_path = ASSETS_ROOT / "robot" / "openarm_v2.0" / "urdf" / "example" / "v2.urdf"
if not urdf_path.exists():
print(f"[Warning] URDF not found at: {urdf_path}")
return str(urdf_path)

__all__ = ["get_v2_urdf_path", "ASSETS_ROOT"]
Original file line number Diff line number Diff line change
@@ -1,20 +1,3 @@
hand:
origin:
x: 0.0
y: 0.002
z: 0.03
roll: 0
pitch: 0
yaw: 0
mass: 0.35
inertia:
xx: 0.0002473
yy: 1.763e-05
zz: 0.0002521
xy: 1e-06
xz: 1e-06
yz: 1e-06

left_finger:
origin:
x: 0.0064528
Expand Down Expand Up @@ -66,5 +49,3 @@ right_finger:
# xz: 0
# yz: 0
# right_finger: *finger


6 changes: 6 additions & 0 deletions assets/end_effector/parallel_link/config/joint_limits.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
finger_joint:
limit:
lower: 0.0
upper: 0.044
velocity: 20.943946
effort: 9
8 changes: 8 additions & 0 deletions assets/end_effector/parallel_link/config/kinematics.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
finger_joint:
kinematic:
x: 0.0
y: 0.0
z: 0.1025
roll: 0
pitch: 0
yaw: 0
17 changes: 17 additions & 0 deletions assets/end_effector/parallel_link/config/kinematics_link.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
left_finger:
kinematic:
x: 0.0
y: -0.05
z: -0.673001
roll: 0.0
pitch: 0.0
yaw: 0.0

right_finger:
kinematic:
x: 0.0
y: 0.05
z: -0.673001
roll: 0.0
pitch: 0.0
yaw: 0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="parallel_link">

<xacro:arg name="ee_config_dir" default="$(find openarm_description)/assets/end_effector/parallel_link/config" />
<xacro:arg name="mesh_root" default="$(find openarm_description)/assets/end_effector/parallel_link/meshes" />
<xacro:arg name="tcp_xyz" default="0 0 0" />
<xacro:arg name="tcp_rpy" default="0 0 0" />

<xacro:property name="ee_inertials" value="${xacro.load_yaml('$(arg ee_config_dir)/inertials.yaml')}" />
<xacro:property name="ee_kinematics" value="${xacro.load_yaml('$(arg ee_config_dir)/kinematics.yaml')}" />
<xacro:property name="ee_kinematics_link" value="${xacro.load_yaml('$(arg ee_config_dir)/kinematics_link.yaml')}" />
<xacro:property name="ee_joint_limits" value="${xacro.load_yaml('$(arg ee_config_dir)/joint_limits.yaml')}" />

<xacro:macro name="parallel_link_inertial" params="name">
<xacro:property name="I" value="${ee_inertials[name]}" lazy_eval="false" />
<inertial>
<origin
xyz="${I.origin.x} ${I.origin.y} ${I.origin.z}"
rpy="${I.origin.roll} ${I.origin.pitch} ${I.origin.yaw}" />
<mass value="${I.mass}" />
<inertia ixx="${I.inertia.xx}" ixy="${I.inertia.xy}" ixz="${I.inertia.xz}"
iyy="${I.inertia.yy}" iyz="${I.inertia.yz}" izz="${I.inertia.zz}" />
</inertial>
</xacro:macro>

<xacro:macro name="parallel_link_visual_collision" params="name mesh_name mesh_scale">
<xacro:property name="K" value="${ee_kinematics_link[name]['kinematic']}" lazy_eval="false" />
<visual name="${name}_visual">
<origin xyz="${K.x} ${K.y} ${K.z}" rpy="${K.roll} ${K.pitch} ${K.yaw}" />
<geometry>
<mesh filename="$(arg mesh_root)/visual/${mesh_name}.dae" scale="${mesh_scale}" />
</geometry>
</visual>
<collision name="${name}_collision">
<origin xyz="${K.x} ${K.y} ${K.z}" rpy="${K.roll} ${K.pitch} ${K.yaw}" />
<geometry>
<mesh filename="$(arg mesh_root)/collision/${mesh_name}.stl" scale="${mesh_scale}" />
</geometry>
</collision>
</xacro:macro>

<link name="base_link">
<visual name="base_link_visual">
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="$(arg mesh_root)/visual/hand.dae" scale="0.001 0.001 0.001" />
</geometry>
</visual>
<collision name="base_link_collision">
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="$(arg mesh_root)/collision/hand.stl" scale="0.001 0.001 0.001" />
</geometry>
</collision>
</link>

<link name="hand_tcp" />
<joint name="hand_tcp_joint" type="fixed">
<origin xyz="$(arg tcp_xyz)" rpy="$(arg tcp_rpy)" />
<parent link="base_link" />
<child link="hand_tcp" />
</joint>

<link name="right_finger">
<xacro:parallel_link_visual_collision name="right_finger" mesh_name="finger" mesh_scale="-0.001 0.001 0.001" />
<xacro:parallel_link_inertial name="right_finger" />
</link>

<link name="left_finger">
<xacro:parallel_link_visual_collision name="left_finger" mesh_name="finger" mesh_scale="0.001 0.001 0.001" />
<xacro:parallel_link_inertial name="left_finger" />
</link>

<joint name="finger_joint1" type="prismatic">
<parent link="base_link" />
<child link="right_finger" />
<xacro:property name="fj" value="${ee_kinematics['finger_joint']['kinematic']}" />
<origin xyz="${fj.x} ${fj.y} ${fj.z}" rpy="${fj.roll} ${fj.pitch} ${fj.yaw}" />
<axis xyz="0 -1 0" />
<limit
effort="${ee_joint_limits['finger_joint']['limit']['effort']}"
lower="${ee_joint_limits['finger_joint']['limit']['lower']}"
upper="${ee_joint_limits['finger_joint']['limit']['upper']}"
velocity="${ee_joint_limits['finger_joint']['limit']['velocity']}" />
</joint>

<joint name="finger_joint2" type="prismatic">
<parent link="base_link" />
<child link="left_finger" />
<xacro:property name="fj" value="${ee_kinematics['finger_joint']['kinematic']}" />
<origin xyz="${fj.x} ${-fj.y} ${fj.z}" rpy="${fj.roll} ${fj.pitch} ${fj.yaw}" />
<axis xyz="0 1 0" />
<limit
effort="${ee_joint_limits['finger_joint']['limit']['effort']}"
lower="${ee_joint_limits['finger_joint']['limit']['lower']}"
upper="${ee_joint_limits['finger_joint']['limit']['upper']}"
velocity="${ee_joint_limits['finger_joint']['limit']['velocity']}" />
<mimic joint="finger_joint1" />
</joint>

</robot>
48 changes: 48 additions & 0 deletions assets/end_effector/pinch_gripper/config/inertials/nominal.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
base_link:
origin:
x: -0.0067098
y: 0.008407299999999999
z: -0.05938
roll: 0
pitch: -0
yaw: 0
mass: 0.52832
inertia:
xx: 0.00021911
xy: 4.1683e-06
xz: 1.4043e-06
yy: 0.00015627
yz: -1.5124e-06
zz: 0.0001659
link1:
origin:
x: -0.0124990911725494
y: 0.00176592789915655
z: -0.0241663193888537
roll: 0
pitch: -0
yaw: 0
mass: 0.125979047366671
inertia:
xx: 3.61105363396623e-05
xy: 1.35880208293387e-06
xz: 7.13916341634141e-06
yy: 3.62137424319396e-05
yz: -3.60343788693423e-06
zz: 1.74958961632907e-05
link2:
origin:
x: -0.012796
y: -0.0020183
z: -0.026792
roll: 0
pitch: -0
yaw: 0
mass: 0.11372
inertia:
xx: 3.4565e-05
xy: -1.3392e-06
xz: 7.1576e-06
yy: 3.5306e-05
yz: 3.7172e-06
zz: 1.6571e-05
10 changes: 10 additions & 0 deletions assets/end_effector/pinch_gripper/config/joint/joint_axes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
joint1:
axis:
x: -1
y: 0
z: 0
joint2:
axis:
x: 1
y: 0
z: 0
12 changes: 12 additions & 0 deletions assets/end_effector/pinch_gripper/config/joint/joint_limits.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
joint1:
limit:
lower: -0.7854
upper: 0
effort: 7
velocity: 5
joint2:
limit:
lower: -0.7854
upper: 0
effort: 7
velocity: 5
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
joint2:
joint: joint1
multiplier: 1
offset: 0
16 changes: 16 additions & 0 deletions assets/end_effector/pinch_gripper/config/joint/joint_origins.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
joint1:
origin:
x: -0.0219300000000005
y: 0.0180000000000009
z: -0.06800000000001739
roll: 0
pitch: -0
yaw: 0
joint2:
origin:
x: -0.0219300000000005
y: -0.0180000000000012
z: -0.0680000000000215
roll: 0
pitch: -0
yaw: 0
42 changes: 42 additions & 0 deletions assets/end_effector/pinch_gripper/config/link/collisions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
base_link:
origin:
x: 0
y: 0
z: 0
roll: 0
pitch: -0
yaw: 0
geometry:
mesh: "package://openarm_description/assets/end_effector/pinch_gripper/meshes/collision/ee_base_link.stl"
scale:
x: 1
y: 1
z: 1
link1:
origin:
x: 0
y: 0
z: 0
roll: 0
pitch: -0
yaw: 0
geometry:
mesh: "package://openarm_description/assets/end_effector/pinch_gripper/meshes/collision/finger_inner.stl"
scale:
x: 1
y: 1
z: 1
link2:
origin:
x: 0
y: 0
z: 0
roll: 0
pitch: -0
yaw: 0
geometry:
mesh: "package://openarm_description/assets/end_effector/pinch_gripper/meshes/collision/finger_outter.stl"
scale:
x: 1
y: 1
z: 1
Loading
Loading