Add new urdf

This commit is contained in:
Thomason Zhou 2025-03-08 19:45:28 +08:00
parent c1016d6657
commit 65d94e4aef
26 changed files with 2328 additions and 1 deletions

View File

@ -1,6 +1,7 @@
# ROS2 packages for OpenArm robots
- openarm_grip_description: urdf with gripper actuator
- openarm_description: urdf with gripper actuator
- openarm_grip_description: legacy urdf, to be removed shortly
- openarm_moveit_config: motion planning with [moveit2](https://github.com/moveit/moveit2)
https://github.com/user-attachments/assets/a0f962e5-6150-49ce-b18e-9914bcb322ef

View File

@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.8)
project(openarm_description_2)
find_package(ament_cmake REQUIRED)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
# comment the line when a copyright and license is added to all source files
set(ament_cmake_copyright_FOUND TRUE)
# the following line skips cpplint (only works in a git repo)
# comment the line when this package is in a git repo and when
# a copyright and license is added to all source files
set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
install(DIRECTORY launch meshes rviz urdf worlds
DESTINATION share/${PROJECT_NAME}
)
ament_package()

View File

@ -0,0 +1,39 @@
from pathlib import Path
import launch
from launch.substitutions import Command
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
import launch_ros
from launch_ros.parameter_descriptions import ParameterValue
def generate_launch_description():
pkg_share = Path(launch_ros.substitutions.FindPackageShare(package='openarm_description_2').find('openarm_description_2'))
default_model_path = pkg_share / 'urdf/openarm_wrapper.urdf.xacro'
use_sim_time = LaunchConfiguration('use_sim_time')
use_sim_time_launch_arg = DeclareLaunchArgument('use_sim_time', default_value='true')
robot_state_publisher_node = launch_ros.actions.Node(
package='robot_state_publisher',
executable='robot_state_publisher',
parameters=[
{
# ParameterValue is required to avoid being interpreted as YAML.
'robot_description': ParameterValue(Command(['xacro ', LaunchConfiguration('model')]), value_type=str),
'use_sim_time': use_sim_time,
},
],
)
return launch.LaunchDescription([
launch.actions.DeclareLaunchArgument(
name='model',
default_value=str(default_model_path),
description="Absolute path to the robot's URDF file",
),
use_sim_time_launch_arg,
robot_state_publisher_node,
])

View File

@ -0,0 +1,84 @@
from pathlib import Path
import launch
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
import launch_ros
from launch_ros.substitutions import FindPackageShare
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
def generate_launch_description():
pkg_share = Path(launch_ros.substitutions.FindPackageShare(package='openarm_description_2').find('openarm_description_2'))
default_model_path = pkg_share / 'urdf/openarm_wrapper.urdf.xacro'
default_rviz_config_path = pkg_share / 'rviz/robot_description.rviz'
use_sim_time = LaunchConfiguration('use_sim_time')
robot_state_publisher_node = IncludeLaunchDescription(
PythonLaunchDescriptionSource([
PathJoinSubstitution([
FindPackageShare('openarm_description_2'),
'launch',
'description.launch.py',
]),
]),
launch_arguments=dict(use_sim_time=use_sim_time).items(),
)
joint_state_publisher_node = launch_ros.actions.Node(
package='joint_state_publisher',
executable='joint_state_publisher',
name='joint_state_publisher',
condition=launch.conditions.UnlessCondition(LaunchConfiguration('gui')),
parameters=[{
'use_sim_time': use_sim_time,
}],
)
joint_state_publisher_gui_node = launch_ros.actions.Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui',
name='joint_state_publisher_gui',
condition=launch.conditions.IfCondition(LaunchConfiguration('gui')),
parameters=[{
'use_sim_time': use_sim_time,
}],
)
rviz_node = launch_ros.actions.Node(
package='rviz2',
executable='rviz2',
name='rviz2',
output='screen',
arguments=['-d', LaunchConfiguration('rvizconfig')],
parameters=[{
'use_sim_time': use_sim_time,
}],
)
return launch.LaunchDescription([
launch.actions.DeclareLaunchArgument(
name='use_sim_time',
default_value='false',
description='Flag to enable usage of simulation time',
),
launch.actions.DeclareLaunchArgument(
name='gui',
default_value='True',
description='Flag to enable joint_state_publisher_gui',
),
launch.actions.DeclareLaunchArgument(
name='model',
default_value=str(default_model_path),
description='Absolute path to robot urdf file',
),
launch.actions.DeclareLaunchArgument(
name='rvizconfig',
default_value=str(default_rviz_config_path),
description='Absolute path to rviz config file',
),
joint_state_publisher_node,
joint_state_publisher_gui_node,
robot_state_publisher_node,
rviz_node,
])

View File

@ -0,0 +1,128 @@
import os
import re
import subprocess
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.actions import IncludeLaunchDescription
from launch.conditions import IfCondition
from launch.conditions import UnlessCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration
from launch.substitutions import PathJoinSubstitution
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
def generate_launch_description():
resources_package = 'openarm_description_2'
# Make path to resources dir without last package_name fragment.
path_to_share_dir_clipped = ''.join(get_package_share_directory(resources_package).rsplit('/' + resources_package, 1))
# Gazebo hint for resources.
os.environ['GZ_SIM_RESOURCE_PATH'] = path_to_share_dir_clipped
# Ensure `SDF_PATH` is populated since `sdformat_urdf` uses this rather
# than `GZ_SIM_RESOURCE_PATH` to locate resources.
if "GZ_SIM_RESOURCE_PATH" in os.environ:
gz_sim_resource_path = os.environ["GZ_SIM_RESOURCE_PATH"]
if "SDF_PATH" in os.environ:
sdf_path = os.environ["SDF_PATH"]
os.environ["SDF_PATH"] = sdf_path + ":" + gz_sim_resource_path
else:
os.environ["SDF_PATH"] = gz_sim_resource_path
use_custom_world = LaunchConfiguration('use_custom_world')
use_custom_world_launch_arg = DeclareLaunchArgument('use_custom_world', default_value='true')
gazebo_world = LaunchConfiguration('gazebo_world')
gazebo_world_launch_arg = DeclareLaunchArgument('gazebo_world', default_value='empty.sdf')
# prepare custom world
world = os.getenv('GZ_SIM_WORLD', 'empty')
fly_world_path = resources_package + '/worlds/' + world + '.sdf'
gz_version = subprocess.getoutput("gz sim --versions")
gz_version_major = re.search(r'^\d{1}', gz_version).group()
launch_arguments=dict(gz_args = '-r ' + str(fly_world_path) + ' --verbose ', gz_version = gz_version_major).items()
# Gazebo Sim.
# by default the custom world is used, otherwise the gazebo world is used, which can be changed with the argument
pkg_ros_gz_sim = get_package_share_directory('ros_gz_sim')
gazebo = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(pkg_ros_gz_sim, 'launch', 'gz_sim.launch.py'),
),
launch_arguments=launch_arguments if use_custom_world else dict(gz_args='-r ' + gazebo_world + ' --verbose').items(),
)
# Spawn
spawn = Node(
package='ros_gz_sim',
executable='create',
arguments=[
'-name', 'openarm',
'-x', '1.2',
'-z', '2.3',
'-Y', '3.4',
'-topic', '/robot_description',
],
output='screen',
)
use_sim_time = LaunchConfiguration('use_sim_time')
use_sim_time_launch_arg = DeclareLaunchArgument('use_sim_time', default_value='true')
use_rviz = LaunchConfiguration('use_rviz')
use_rviz_arg = DeclareLaunchArgument("use_rviz", default_value='true')
robot_state_publisher = IncludeLaunchDescription(
PythonLaunchDescriptionSource([
PathJoinSubstitution([
FindPackageShare(resources_package),
'launch',
'description.launch.py',
]),
]),
condition=UnlessCondition(use_rviz), # rviz launch includes rsp.
launch_arguments=dict(use_sim_time=use_sim_time).items(),
)
rviz = IncludeLaunchDescription(
PythonLaunchDescriptionSource([
PathJoinSubstitution([
FindPackageShare(resources_package),
'launch',
'display.launch.py',
]),
]),
condition=IfCondition(use_rviz),
launch_arguments=dict(use_sim_time=use_sim_time).items(),
)
gz_bridge = Node(
package='ros_gz_bridge',
executable='parameter_bridge',
arguments=['/clock@rosgraph_msgs/msg/Clock[ignition.msgs.Clock'],
output='screen',
parameters=[{
'use_sim_time': use_sim_time,
}],
)
return LaunchDescription([
use_sim_time_launch_arg,
use_rviz_arg,
use_custom_world_launch_arg,
gazebo_world_launch_arg,
robot_state_publisher,
rviz,
gazebo,
spawn,
gz_bridge,
])

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,21 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>openarm_description_2</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="TODO@todo.com">TODO</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>joint_state_publisher_gui</depend>
<depend>ros_gz</depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>

View File

@ -0,0 +1,42 @@
Panels:
- Class: rviz_common/Displays
Name: Displays
- Class: rviz_common/Views
Name: Views
Visualization Manager:
Class: ""
Displays:
- Class: rviz_default_plugins/Grid
Name: Grid
Value: true
Alpha: 0.5
- Class: rviz_default_plugins/RobotModel
Description Source: Topic
Description Topic:
Value: /robot_description
Enabled: true
Name: RobotModel
Alpha: 1
Value: true
- Class: rviz_default_plugins/TF
Name: TF
Value: true
Enabled: false
Global Options:
Fixed Frame: l_J1_v002
Frame Rate: 30
Name: root
Tools:
- Class: rviz_default_plugins/MoveCamera
Value: true
Views:
Current:
Class: rviz_default_plugins/Orbit
Distance: 5.0
Name: Current View
Pitch: 0.33
Value: Orbit (rviz)
Yaw: 5.5
Window Geometry:
Height: 800
Width: 1200

View File

@ -0,0 +1,278 @@
<?xml version="1.0" ?>
<robot name="openarm">
<!--Generated by RobotCAD, a ROS Workbench for FreeCAD (https://github.com/drfenixion/freecad.robotcad)-->
<link name="l_J1_v002">
<visual>
<!--J1 v002/Part__Feature.-->
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j1v1_aooobi.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J1_v002__col_J1_v1__BoundBox/col_J1_v1__BoundBox.-->
<origin rpy="0 0 0" xyz="0.0 0.0 0.0296"/>
<geometry>
<box size="0.11 0.073 0.0592"/>
</geometry>
</collision>
<inertial>
<mass value="0.5769283920617252"/>
<origin rpy="0 0 0" xyz="0.0 2.52845e-05 0.0236621"/>
<inertia ixx="0.0003403516757406" ixy="-0.0" ixz="-0.0" iyy="0.000430005830001" iyz="-5.098294821e-07" izz="0.0004802171432002"/>
</inertial>
</link>
<link name="l_J2_v002">
<visual>
<!--J2 v002/Part__Feature001.-->
<origin rpy="0 0 0" xyz="0.0 0.0 -0.05395"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j2v1_jhlkho.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J2_v002__col_J2_v1__BoundBox/col_J2_v1__BoundBox.-->
<origin rpy="0 0 0" xyz="0.0 0.0 0.0371236"/>
<geometry>
<box size="0.059000000014901216 0.08200000000000003 0.0742471498637348"/>
</geometry>
</collision>
<inertial>
<mass value="0.1625750413491735"/>
<origin rpy="0 0 0" xyz="-0.000225878 -0.00183836 0.0278368"/>
<inertia ixx="0.0002390311021329" ixy="-7.55169292e-08" ixz="-1.1282723362e-06" iyy="0.0001049079831478" iyz="5.907962784e-06" izz="0.0001973736868594"/>
</inertial>
</link>
<link name="l_J3_v003">
<visual>
<!--J3 v003/Part__Feature002.-->
<origin rpy="1.570796326794897 0 0" xyz="0.0 0.0987 0.02975"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j3v2_wvlhxy.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J3_v003__col_J3_v2__BoundBox/col_J3_v2__BoundBox.-->
<origin rpy="1.5707963267948968 0 0" xyz="-0.0164466 -0.00045542 0.02975"/>
<geometry>
<box size="0.08989101803441883 0.06999999999999984 0.05903276947803012"/>
</geometry>
</collision>
<inertial>
<mass value="0.420167646991003"/>
<origin rpy="1.5707963267948968 0 0" xyz="-0.00688022 0.0 0.0282752"/>
<inertia ixx="0.0002025600112623" ixy="6.0042478753e-06" ixz="1.3304903058e-06" iyy="0.0002970624991388" iyz="5.980157766e-07" izz="0.0003288999435124"/>
</inertial>
</link>
<link name="l_J4_v002">
<visual>
<!--J4 v002/Part__Feature003.-->
<origin rpy="1.5707963267958094 -1.5620381439005735 0" xyz="0.000536411 0.0992364 0.0612453"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j4v1_augius.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J4_v002__col_J4_v1__BoundBox/col_J4_v1__BoundBox.-->
<origin rpy="1.5707963267958094 -1.5620381439005735 0" xyz="-0.013725 -0.00142762 -0.132481"/>
<geometry>
<box size="0.27584673777150337 0.08211429171582063 0.07186573179325861"/>
</geometry>
</collision>
<inertial>
<mass value="0.8194755393734474"/>
<origin rpy="1.5707963267958094 -1.5620381439005735 0" xyz="-0.00310558 -0.00194096 -0.132377"/>
<inertia ixx="0.0004407845203398" ixy="6.02002369404e-05" ixz="0.0001463745926194" iyy="0.0092087914805304" iyz="1.5469710436e-06" izz="0.0091705393160237"/>
</inertial>
</link>
<link name="l_J5_v003">
<visual>
<!--J5 v003/Part__Feature004.-->
<origin rpy="0 -0.00875818289428989 0" xyz="0.303864 0.0 -0.128451"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j5v2_1zjcxf.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J5_v003__col_J5_v2__BoundBox/col_J5_v2__BoundBox.-->
<origin rpy="0 -0.0087581828942894 0" xyz="-0.0542814 0.00265291 -0.0302022"/>
<geometry>
<box size="0.16827213220625822 0.06430555048399172 0.08257859967140947"/>
</geometry>
</collision>
<inertial>
<mass value="0.4086748254352304"/>
<origin rpy="0 -0.0087581828942894 0" xyz="-0.0831891 0.00251789 -0.0290107"/>
<inertia ixx="0.000314171574253" ixy="-1.13915660296e-05" ixz="-1.88347409006e-05" iyy="0.001221711435314" iyz="1.4672541842e-06" izz="0.0010755135067661"/>
</inertial>
</link>
<link name="l_J6_v002">
<visual>
<!--J6 v002/Part__Feature005.-->
<origin rpy="-2.1276679791304027 -1.5542266826921316 0" xyz="-0.0485412 -0.0860404 0.437784"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j6v1_71vz7n.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J6_v002__col_J6_v1__BoundBox/col_J6_v1__BoundBox.-->
<origin rpy="-2.1276679791303965 -1.5542266826921314 0" xyz="-0.00260794 -0.00312921 -0.0652641"/>
<geometry>
<box size="0.13114353004704765 0.05953478325301745 0.08817196195081879"/>
</geometry>
</collision>
<inertial>
<mass value="0.344847195804925"/>
<origin rpy="-2.1276679791303965 -1.5542266826921314 0" xyz="-0.00898536 -0.0135065 -0.0438611"/>
<inertia ixx="0.0001935598099975" ixy="-1.0061665815e-06" ixz="-3.9096495715e-05" iyy="0.0003486912031866" iyz="6.0880603153e-06" izz="0.0002877497515376"/>
</inertial>
</link>
<link name="l_J7_v002">
<visual>
<!--J7 v002/Part__Feature006.-->
<origin rpy="0 -0.008758182894492011 0" xyz="0.558839 -0.00358671 -0.0631962"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j7v1_ebpnbv.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J7_v002__col_J7_v1__BoundBox/col_J7_v1__BoundBox.-->
<origin rpy="0 -0.008758182894492202 0" xyz="-0.000318103 0.0022839 0.0340014"/>
<geometry>
<box size="0.058327402175132874 0.04432916698753661 0.08267601622411752"/>
</geometry>
</collision>
<inertial>
<mass value="0.2782138078738053"/>
<origin rpy="0 -0.008758182894492202 0" xyz="5.99432e-05 0.0041433 0.0354274"/>
<inertia ixx="0.0001042415331565" ixy="2.735265832e-07" ixz="-1.066232238e-07" iyy="0.0001231355074328" iyz="-8.60499675e-08" izz="9.22131995851e-05"/>
</inertial>
</link>
<link name="l_J8_v002">
<visual>
<!--J8 v002/Part__Feature007.-->
<origin rpy="1.5709195259578743 -0.014065461951076396 0" xyz="0.557948 0.103587 0.019724"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_j8v1_n9o5e8.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_J8_v002__col_J8_v1__BoundBox/col_J8_v1__BoundBox.-->
<origin rpy="1.5709195259578743 -0.014065461951076389 0" xyz="-0.042694 -0.000543176 0.0110286"/>
<geometry>
<box size="0.13038799671743653 0.05180887692688924 0.1601236763440867"/>
</geometry>
</collision>
<inertial>
<mass value="0.3126145274380216"/>
<origin rpy="1.5709195259578743 -0.014065461951076387 0" xyz="-0.0607602 -0.000341696 0.00876618"/>
<inertia ixx="0.0002346566136679" ixy="7.60904888201e-05" ixz="3.088694121e-07" iyy="0.0005065459365215" iyz="1.902281803e-07" izz="0.0003737029250058"/>
</inertial>
</link>
<link name="l_right_jaw_v002">
<visual>
<!--right_jaw v002/Part__Feature009.-->
<origin rpy="0 -0.008758182894796506 0" xyz="0.665265 -0.00286677 -0.175928"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_right_jawv1_fr5g7k.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_right_jaw_v002__col_right_jaw_v1_col_obj/col_right_jaw_v1_col_obj.-->
<origin rpy="0 -0.008758182894796357 0" xyz="0.665265 -0.00286677 -0.175928"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_col_right_jaw_v1_col_obj_p8alje.dae"/>
</geometry>
</collision>
<inertial>
<mass value="0.0429816653011345"/>
<origin rpy="0 -0.008758182894796502 0" xyz="-0.0187844 -0.00272415 -0.0159503"/>
<inertia ixx="1.15612930876e-05" ixy="2.537718468e-06" ixz="-3.6591812258e-06" iyy="2.37016552787e-05" iyz="4.848038236e-07" izz="3.03965294654e-05"/>
</inertial>
</link>
<link name="l_left_jaw_v002">
<visual>
<!--left_jaw v002/Part__Feature008.-->
<origin rpy="0 -0.008758182894441503 0" xyz="0.665265 -0.00286677 -0.0209282"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_left_jawv1_mtevtw.dae"/>
</geometry>
</visual>
<collision>
<!--bound_obj__l_left_jaw_v002__col_left_jaw_v1_col_obj/col_left_jaw_v1_col_obj.-->
<origin rpy="0 -0.008758182894441503 0" xyz="0.665265 -0.00286677 -0.0209282"/>
<geometry>
<mesh filename="package://openarm_description_2/meshes/robotcad_openarm_123_col_left_jaw_v1_col_obj_u5blmp.dae"/>
</geometry>
</collision>
<inertial>
<mass value="0.0429789785639494"/>
<origin rpy="0 -0.008758182894441498 0" xyz="-0.0187138 0.00217075 0.0159499"/>
<inertia ixx="1.17717687429e-05" ixy="-2.3899281666e-06" ixz="3.9992922045e-06" iyy="2.38373544808e-05" iyz="3.494431877e-07" izz="3.04745902141e-05"/>
</inertial>
</link>
<joint name="l_J1_v002__to__l_J2_v002" type="revolute">
<parent link="l_J1_v002"/>
<child link="l_J2_v002"/>
<origin rpy="0 0 0" xyz="0.0 0.0 0.05395"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-2.356194490192345" upper="2.356194490192345" velocity="0.0"/>
</joint>
<joint name="l_J2_v002__to__l_J3_v003" type="revolute">
<parent link="l_J2_v002"/>
<child link="l_J3_v003"/>
<origin rpy="-1.5707963267948977 1.5707963267948957 0" xyz="0.0 -0.02975 0.04475"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-1.5707963267948966" upper="1.5707963267948966" velocity="0.0"/>
</joint>
<joint name="l_J3_v003__to__l_J4_v002" type="revolute">
<parent link="l_J3_v003"/>
<child link="l_J4_v002"/>
<origin rpy="1.5707963267949046 0 1.5795545096892487" xyz="-0.0612477 -0.000536432 0.02975"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-2.0943951023931953" upper="2.0943951023931953" velocity="0.0"/>
</joint>
<joint name="l_J4_v002__to__l_J5_v003" type="revolute">
<parent link="l_J4_v002"/>
<child link="l_J5_v003"/>
<origin rpy="0.7854173400827703 -1.5584104649378014 0.7854173400871975" xyz="-0.0021149 -0.0318708 -0.241471"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-0.3490658503988659" upper="2.792526803190927" velocity="0.0"/>
</joint>
<joint name="l_J5_v003__to__l_J6_v002" type="revolute">
<parent link="l_J5_v003"/>
<child link="l_J6_v002"/>
<origin rpy="1.5707963267949707 -0.5569332500522621 1.5567303253381135" xyz="-0.133937 0.00188408 -0.0297547"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-2.0943951023931953" upper="2.0943951023931953" velocity="0.0"/>
</joint>
<joint name="l_J6_v002__to__l_J7_v002" type="revolute">
<parent link="l_J6_v002"/>
<child link="l_J7_v002"/>
<origin rpy="-1.5707963268025373 -1.5567303253381704 -0.5569332500438752" xyz="-0.0187648 -0.0301352 -0.12105"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-1.5707963267948966" upper="1.5707963267948966" velocity="0.0"/>
</joint>
<joint name="l_J7_v002__to__l_J8_v002" type="revolute">
<parent link="l_J7_v002"/>
<child link="l_J8_v002"/>
<origin rpy="-1.570796326795002 -0.008759049335348993 -0.014066001454933549" xyz="-0.000217313 -0.0154485 0.0355"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="-0.9599310885968813" upper="0.9599310885968813" velocity="0.0"/>
</joint>
<joint name="l_J8_v002__to__l_right_jaw_v002" type="prismatic">
<parent link="l_J8_v002"/>
<child link="l_right_jaw_v002"/>
<origin rpy="1.570796326794885 -0.014066001454926544 0.008759049336297665" xyz="-0.10571 -0.0781373 0.0132053"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="0.0" upper="0.045" velocity="0.0"/>
<mimic joint="l_J8_v002__to__l_left_jaw_v002" multiplier="-1.0" offset="0.0"/>
</joint>
<joint name="l_J8_v002__to__l_left_jaw_v002" type="prismatic">
<parent link="l_J8_v002"/>
<child link="l_left_jaw_v002"/>
<origin rpy="1.5707963267948268 -0.014066001454925883 0.00875904933451695" xyz="-0.1071 0.07686 0.0132053"/>
<axis xyz="0 0 1"/>
<limit effort="0.0" lower="0.0" upper="0.045" velocity="0.0"/>
</joint>
</robot>

View File

@ -0,0 +1,5 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
</robot>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="openarm">
<xacro:include filename="openarm.urdf"/>
<xacro:include filename="openarm_sensors.urdf.xacro"/>
</robot>

View File

@ -0,0 +1,317 @@
<?xml version="1.0" ?>
<sdf version="1.6">
<world name="empty">
<physics type="ode">
<max_step_size>0.004</max_step_size>
<real_time_factor>1.0</real_time_factor>
<real_time_update_rate>250</real_time_update_rate>
</physics>
<plugin
filename="gz-sim-physics-system"
name="gz::sim::systems::Physics">
</plugin>
<plugin
filename="gz-sim-user-commands-system"
name="gz::sim::systems::UserCommands">
</plugin>
<plugin
filename="gz-sim-scene-broadcaster-system"
name="gz::sim::systems::SceneBroadcaster">
</plugin>
<plugin
filename="gz-sim-sensors-system"
name="gz::sim::systems::Sensors">
<!-- <render_engine>ogre</render_engine> -->
<render_engine>ogre2</render_engine>
<!-- <render_engine>optix</render_engine> -->
</plugin>
<plugin
filename="gz-sim-contact-system"
name="gz::sim::systems::Contact">
</plugin>
<gui fullscreen="0">
<!-- 3D scene -->
<plugin filename="MinimalScene" name="3D View">
<gz-gui>
<title>3D View</title>
<property type="bool" key="showTitleBar">false</property>
<property type="string" key="state">docked</property>
</gz-gui>
<engine>ogre2</engine>
<scene>scene</scene>
<ambient_light>0.4 0.4 0.4</ambient_light>
<background_color>0.8 0.8 0.8</background_color>
<camera_pose>-6 0 6 0 0.5 0</camera_pose>
</plugin>
<!-- Plugins that add functionality to the scene -->
<plugin filename="EntityContextMenuPlugin" name="Entity context menu">
<gz-gui>
<property key="state" type="string">floating</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="GzSceneManager" name="Scene Manager">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="InteractiveViewControl" name="Interactive view control">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="CameraTracking" name="Camera Tracking">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="MarkerManager" name="Marker manager">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="SelectEntities" name="Select Entities">
<gz-gui>
<anchors target="Select entities">
<line own="right" target="right"/>
<line own="top" target="top"/>
</anchors>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="VisualizationCapabilities" name="Visualization Capabilities">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<plugin filename="Spawn" name="Spawn Entities">
<gz-gui>
<anchors target="Select entities">
<line own="right" target="right"/>
<line own="top" target="top"/>
</anchors>
<property key="resizable" type="bool">false</property>
<property key="width" type="double">5</property>
<property key="height" type="double">5</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
</gz-gui>
</plugin>
<!-- World control -->
<plugin filename="WorldControl" name="World control">
<gz-gui>
<title>World control</title>
<property type="bool" key="showTitleBar">false</property>
<property type="bool" key="resizable">false</property>
<property type="double" key="height">72</property>
<property type="double" key="z">1</property>
<property type="string" key="state">floating</property>
<anchors target="3D View">
<line own="left" target="left"/>
<line own="bottom" target="bottom"/>
</anchors>
</gz-gui>
<play_pause>true</play_pause>
<step>true</step>
<start_paused>true</start_paused>
<use_event>true</use_event>
</plugin>
<!-- World statistics -->
<plugin filename="WorldStats" name="World stats">
<gz-gui>
<title>World stats</title>
<property type="bool" key="showTitleBar">false</property>
<property type="bool" key="resizable">false</property>
<property type="double" key="height">110</property>
<property type="double" key="width">290</property>
<property type="double" key="z">1</property>
<property type="string" key="state">floating</property>
<anchors target="3D View">
<line own="right" target="right"/>
<line own="bottom" target="bottom"/>
</anchors>
</gz-gui>
<sim_time>true</sim_time>
<real_time>true</real_time>
<real_time_factor>true</real_time_factor>
<iterations>true</iterations>
</plugin>
<!-- Insert simple shapes -->
<plugin filename="Shapes" name="Shapes">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="x" type="double">0</property>
<property key="y" type="double">0</property>
<property key="width" type="double">250</property>
<property key="height" type="double">50</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
<property key="cardBackground" type="string">#666666</property>
</gz-gui>
</plugin>
<!-- Insert lights -->
<plugin filename="Lights" name="Lights">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="x" type="double">250</property>
<property key="y" type="double">0</property>
<property key="width" type="double">150</property>
<property key="height" type="double">50</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
<property key="cardBackground" type="string">#666666</property>
</gz-gui>
</plugin>
<!-- Translate / rotate -->
<plugin filename="TransformControl" name="Transform control">
<gz-gui>
<property key="resizable" type="bool">false</property>
<property key="x" type="double">0</property>
<property key="y" type="double">50</property>
<property key="width" type="double">250</property>
<property key="height" type="double">50</property>
<property key="state" type="string">floating</property>
<property key="showTitleBar" type="bool">false</property>
<property key="cardBackground" type="string">#777777</property>
</gz-gui>
</plugin>
<!-- Inspector -->
<plugin filename="ComponentInspector" name="Component inspector">
<gz-gui>
<property type="string" key="state">docked_collapsed</property>
</gz-gui>
</plugin>
<!-- Entity tree -->
<plugin filename="EntityTree" name="Entity tree">
<gz-gui>
<property type="string" key="state">docked_collapsed</property>
</gz-gui>
</plugin>
<!-- View angle -->
<plugin filename="ViewAngle" name="View angle">
<gz-gui>
<property type="string" key="state">docked_collapsed</property>
</gz-gui>
</plugin>
<!-- Image Display Plugins for visualization -->
<plugin filename="ImageDisplay" name="Image Display">
<gz-gui>
</gz-gui>
<topic>camera</topic>
</plugin>
<plugin name='Grid config' filename='GridConfig'>
<gz-gui>
<property type="string" key="state">docked_collapsed</property>
</gz-gui>
<insert>
<!-- total size = length * cell count-->
<horizontal_cell_count>50</horizontal_cell_count>
<!-- 0 actually means one plane-->
<vertical_cell_count>0</vertical_cell_count>
<!--5m cells-->
<cell_length>2.0</cell_length>
<pose>0 0 0 0 0 0</pose>
<color>1 1 1 0.7</color>
</insert>
</plugin>
</gui>
<light type="directional" name="sun">
<cast_shadows>true</cast_shadows>
<pose>0 0 10 0 0 0</pose>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.2 0.2 0.2 1</specular>
<attenuation>
<range>1000</range>
<constant>0.9</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<direction>-0.5 0.1 -0.9</direction>
</light>
<scene>
<grid>false</grid>
<ambient>0.4 0.4 0.4 1</ambient>
<!-- <background>0.7 0.7 0.7 1</background> -->
<background>0.8 0.8 0.8</background>
<shadows>true</shadows>
</scene>
<model name="ground_plane">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>100 100</size>
</plane>
</geometry>
</collision>
<visual name="visual">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>100 100</size>
</plane>
</geometry>
<material>
<ambient>0.8 0.8 0.8 1</ambient>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.8 0.8 0.8 1</specular>
</material>
</visual>
</link>
</model>
</world>
</sdf>

0
overcross/COLCON_IGNORE Normal file
View File

View File

@ -0,0 +1,27 @@
controller_manager:
ros__parameters:
update_rate: 250
gripper_action_controller_position:
type: position_controllers/GripperActionController
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster
joint_group_position_controller:
type: position_controllers/JointGroupPositionController
gripper_action_controller_position:
ros__parameters:
action_monitor_rate: 20.0
allow_stalling: false
goal_tolerance: 0.01
joint: null
max_effort: 0.0
stall_timeout: 1.0
stall_velocity_threshold: 0.001
joint_state_broadcaster:
ros__parameters:
map_interface_to_joint_state.effort: effort
map_interface_to_joint_state.position: position
map_interface_to_joint_state.velocity: velocity
use_local_topics: false
use_urdf_to_filter: true
joint_group_position_controller:
ros__parameters: {}

86
overcross/robot_meta.xml Normal file
View File

@ -0,0 +1,86 @@
<?xml version="1.0" ?>
<robotMeta>
<robotName>openarm</robotName>
<urdfFileName>openarm.urdf</urdfFileName>
<packageName>openarm_description_2</packageName>
<meshesDir>meshes </meshesDir>
<robotType>nonspecific</robotType>
<generateCodeForRosVersion>jazzy</generateCodeForRosVersion>
<rootLinkName>l_J1_v002</rootLinkName>
<xacroWrapperFileName>openarm_wrapper.urdf.xacro</xacroWrapperFileName>
<controllersConfigFileName>openarm_controllers.yaml</controllersConfigFileName>
<joints>
<joint>
<name>l_J1_v002__to__l_J2_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.09289716518533317</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.0012062241015717492</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>-0.061900576071863</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J2_v002__to__l_J3_v003</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.09289716518533321</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>-0.02854377589842827</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>-0.017150576071863013</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J3_v003__to__l_J4_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.031649514284448864</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.0012062241015718708</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>-0.01661414422754956</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J4_v002__to__l_J5_v003</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>-0.20983062047238518</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.033077014697707</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>-0.016614144227858844</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J5_v003__to__l_J6_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>-0.08488103444256599</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.0022268460560923354</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>0.030965376793060356</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J6_v002__to__l_J7_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.02795991840243387</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>-0.03426282248752859</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>0.07396277148947943</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J7_v002__to__l_J8_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.033758514926782335</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.001187752615916666</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>0.05952028198168136</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J8_v002__to__l_right_jaw_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.0</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.0</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>0.0</jointRelTotalCenterOfMass_z>
</joint>
<joint>
<name>l_J8_v002__to__l_left_jaw_v002</name>
<jointSpecific>unset</jointSpecific>
<jointRotationDirection>unset</jointRotationDirection>
<jointRelTotalCenterOfMass_x>0.0</jointRelTotalCenterOfMass_x>
<jointRelTotalCenterOfMass_y>0.0</jointRelTotalCenterOfMass_y>
<jointRelTotalCenterOfMass_z>0.0</jointRelTotalCenterOfMass_z>
</joint>
</joints>
</robotMeta>