├── .github ├── dependabot.yml ├── mergify.yml └── workflows │ ├── ci-format.yml │ ├── ci-ros-lint.yml │ ├── humble-binary-main.yml │ ├── humble-binary-testing.yml │ ├── jazzy-binary-main.yml │ ├── jazzy-binary-testing.yml │ ├── kilted-binary-main.yml │ ├── kilted-binary-testing.yml │ ├── prerelease.yml │ ├── reusable_ici.yml │ ├── rolling-binary-main.yml │ ├── rolling-binary-testing.yml │ └── update-ci.yml ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGELOG.rst ├── CMakeLists.txt ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── ci_status.md ├── config ├── initial_positions.yaml ├── ur10 │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur10e │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur12e │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur15 │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur16e │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur20 │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur3 │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur30 │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur3e │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur5 │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── ur5e │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml └── ur7e │ ├── default_kinematics.yaml │ ├── joint_limits.yaml │ ├── physical_parameters.yaml │ └── visual_parameters.yaml ├── doc ├── conf.py ├── frames │ ├── base.png │ └── base_link.png ├── index.rst ├── migration │ ├── jazzy.rst │ └── kilted.rst ├── robot_frames.rst ├── structure.drawio └── structure.svg ├── launch └── view_ur.launch.py ├── meshes ├── ur10 │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae ├── ur10e │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae ├── ur15 │ ├── LICENSE.txt │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── UR15_DIFF_8bit_2K.jpg │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae ├── ur16e │ ├── collision │ │ ├── forearm.stl │ │ └── upperarm.stl │ └── visual │ │ ├── forearm.dae │ │ └── upperarm.dae ├── ur20 │ ├── LICENSE.txt │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── UR20_DIFF_8bit_2K.png │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae ├── ur3 │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae ├── ur30 │ ├── LICENSE.txt │ ├── collision │ │ ├── forearm.stl │ │ └── upperarm.stl │ └── visual │ │ ├── UR30_DIFF_8bit_2K.png │ │ ├── forearm.dae │ │ └── upperarm.dae ├── ur3e │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae ├── ur5 │ ├── collision │ │ ├── base.stl │ │ ├── forearm.stl │ │ ├── shoulder.stl │ │ ├── upperarm.stl │ │ ├── wrist1.stl │ │ ├── wrist2.stl │ │ └── wrist3.stl │ └── visual │ │ ├── base.dae │ │ ├── forearm.dae │ │ ├── shoulder.dae │ │ ├── upperarm.dae │ │ ├── wrist1.dae │ │ ├── wrist2.dae │ │ └── wrist3.dae └── ur5e │ ├── collision │ ├── base.stl │ ├── forearm.stl │ ├── shoulder.stl │ ├── upperarm.stl │ ├── wrist1.stl │ ├── wrist2.stl │ └── wrist3.stl │ └── visual │ ├── base.dae │ ├── forearm.dae │ ├── shoulder.dae │ ├── upperarm.dae │ ├── wrist1.dae │ ├── wrist2.dae │ └── wrist3.dae ├── model.pdf ├── package.xml ├── rviz └── view_robot.rviz ├── test ├── test_ur_urdf_xacro.py └── test_view_ur_launch.py └── urdf ├── inc ├── ur_common.xacro ├── ur_joint_control.xacro ├── ur_sensors.xacro └── ur_transmissions.xacro ├── ros2_control_mock_hardware.xacro ├── ur.urdf.xacro ├── ur_macro.xacro └── ur_mocked.urdf.xacro /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Update actions in workflows weekly 2 | 3 | version: 2 4 | 5 | updates: 6 | - package-ecosystem: "github-actions" 7 | directory: "/" 8 | schedule: 9 | interval: "weekly" 10 | -------------------------------------------------------------------------------- /.github/mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: Backport to humble branch 3 | conditions: 4 | - base=rolling 5 | - label=backport-humble 6 | actions: 7 | backport: 8 | branches: 9 | - humble 10 | labels: 11 | - humble 12 | - name: Backport to jazzy branch 13 | conditions: 14 | - base=rolling 15 | - label=backport-jazzy 16 | actions: 17 | backport: 18 | branches: 19 | - jazzy 20 | labels: 21 | - jazzy 22 | -------------------------------------------------------------------------------- /.github/workflows/ci-format.yml: -------------------------------------------------------------------------------- 1 | # This is a format job. Pre-commit has a first-party GitHub action, so we use 2 | # that: https://github.com/pre-commit/action 3 | 4 | name: Format 5 | 6 | on: 7 | workflow_dispatch: 8 | pull_request: 9 | push: 10 | branches: 11 | - ros2 12 | 13 | jobs: 14 | pre-commit: 15 | name: Format 16 | runs-on: ubuntu-22.04 17 | steps: 18 | - uses: actions/checkout@v4 19 | - uses: actions/setup-python@v5 20 | with: 21 | python-version: '3.10' 22 | - uses: pre-commit/action@v3.0.1 23 | with: 24 | extra_args: --all-files --hook-stage manual 25 | -------------------------------------------------------------------------------- /.github/workflows/ci-ros-lint.yml: -------------------------------------------------------------------------------- 1 | name: ROS2 Lint 2 | on: 3 | pull_request: 4 | 5 | jobs: 6 | ament_lint: 7 | name: ament_${{ matrix.linter }} 8 | runs-on: ubuntu-22.04 9 | strategy: 10 | fail-fast: false 11 | matrix: 12 | env: 13 | - linter: copyright 14 | arguments: '--exclude doc/conf.py' 15 | - linter: lint_cmake 16 | arguments: '' 17 | steps: 18 | - uses: actions/checkout@v4 19 | - uses: ros-tooling/setup-ros@v0.7 20 | - uses: ros-tooling/action-ros-lint@v0.1 21 | with: 22 | distribution: rolling 23 | linter: ${{ matrix.env.linter }} 24 | arguments: ${{ matrix.env.arguments }} 25 | package-name: 26 | ur_description 27 | -------------------------------------------------------------------------------- /.github/workflows/humble-binary-main.yml: -------------------------------------------------------------------------------- 1 | name: Humble Binary Build Main 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - humble 7 | push: 8 | branches: 9 | - humble 10 | schedule: 11 | - cron: '53 5 * * *' 12 | 13 | jobs: 14 | humble_binary_main: 15 | uses: ./.github/workflows/reusable_ici.yml 16 | with: 17 | ros_distro: humble 18 | ros_repo: main 19 | ref_for_scheduled_build: humble 20 | -------------------------------------------------------------------------------- /.github/workflows/humble-binary-testing.yml: -------------------------------------------------------------------------------- 1 | name: Humble Binary Build Testing 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - humble 7 | push: 8 | branches: 9 | - humble 10 | schedule: 11 | - cron: '53 5 * * *' 12 | 13 | jobs: 14 | humble_binary_testing: 15 | uses: ./.github/workflows/reusable_ici.yml 16 | with: 17 | ros_distro: humble 18 | ros_repo: testing 19 | ref_for_scheduled_build: humble 20 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-binary-main.yml: -------------------------------------------------------------------------------- 1 | name: Jazzy Binary Build Main 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - jazzy 7 | push: 8 | branches: 9 | - jazzy 10 | schedule: 11 | - cron: '53 5 * * *' 12 | 13 | jobs: 14 | jazzy_binary_main: 15 | uses: ./.github/workflows/reusable_ici.yml 16 | with: 17 | ros_distro: jazzy 18 | ros_repo: main 19 | ref_for_scheduled_build: jazzy 20 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-binary-testing.yml: -------------------------------------------------------------------------------- 1 | name: Jazzy Binary Build Testing 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - jazzy 7 | push: 8 | branches: 9 | - jazzy 10 | schedule: 11 | - cron: '53 5 * * *' 12 | 13 | jobs: 14 | jazzy_binary_testing: 15 | uses: ./.github/workflows/reusable_ici.yml 16 | with: 17 | ros_distro: jazzy 18 | ros_repo: testing 19 | ref_for_scheduled_build: jazzy 20 | -------------------------------------------------------------------------------- /.github/workflows/kilted-binary-main.yml: -------------------------------------------------------------------------------- 1 | name: Kilted Binary Build Main 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - rolling 7 | push: 8 | branches: 9 | - rolling 10 | schedule: 11 | - cron: '53 5 * * *' 12 | 13 | jobs: 14 | kilted_binary_main: 15 | uses: ./.github/workflows/reusable_ici.yml 16 | with: 17 | ros_distro: kilted 18 | ros_repo: main 19 | ref_for_scheduled_build: rolling 20 | -------------------------------------------------------------------------------- /.github/workflows/kilted-binary-testing.yml: -------------------------------------------------------------------------------- 1 | name: Kilted Binary Build Testing 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - rolling 7 | push: 8 | branches: 9 | - rolling 10 | schedule: 11 | - cron: '53 5 * * *' 12 | 13 | jobs: 14 | kilted_binary_testing: 15 | uses: ./.github/workflows/reusable_ici.yml 16 | with: 17 | ros_distro: kilted 18 | ros_repo: testing 19 | ref_for_scheduled_build: rolling 20 | -------------------------------------------------------------------------------- /.github/workflows/prerelease.yml: -------------------------------------------------------------------------------- 1 | name: Prerelease 2 | on: 3 | push: 4 | branches: 5 | - ros2 6 | tags: 7 | - '**' 8 | jobs: 9 | prerelease: 10 | name: prerelease build 11 | runs-on: ubuntu-latest 12 | strategy: 13 | fail-fast: false 14 | matrix: 15 | ROS_DISTRO: [jazzy, kilted, rolling] 16 | ROS_REPO: [main] 17 | PRERELEASE: [true] 18 | env: 19 | BASEDIR: ${{ github.workspace }}/.work 20 | steps: 21 | - uses: actions/checkout@v4 22 | - uses: 'ros-industrial/industrial_ci@master' 23 | env: 24 | ROS_DISTRO: ${{ matrix.ROS_DISTRO }} 25 | ROS_REPO: ${{ matrix.ROS_REPO }} 26 | PRERELEASE: ${{ matrix.PRERELEASE }} 27 | -------------------------------------------------------------------------------- /.github/workflows/reusable_ici.yml: -------------------------------------------------------------------------------- 1 | name: Reusable industrial_ci workflow 2 | # original author: Denis Štogl 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | ref_for_scheduled_build: 8 | description: 'Reference on which the repo should be checkout for scheduled build. Usually is this name of a branch or a tag.' 9 | default: '' 10 | required: false 11 | type: string 12 | upstream_workspace: 13 | description: 'UPSTREAM_WORKSPACE variable for industrial_ci. Usually path to local .repos file.' 14 | required: false 15 | type: string 16 | ros_distro: 17 | description: 'ROS_DISTRO variable for industrial_ci' 18 | required: true 19 | type: string 20 | ros_repo: 21 | description: 'ROS_REPO to run for industrial_ci. Possible values: "main", "testing"' 22 | default: 'main' 23 | required: false 24 | type: string 25 | before_install_upstream_dependencies: 26 | description: 'BEFORE_INSTALL_UPSTREAM_DEPENDENCIES variable for industrial_ci' 27 | default: '' 28 | required: false 29 | type: string 30 | 31 | jobs: 32 | reusable_ici: 33 | name: ${{ inputs.ros_distro }} ${{ inputs.ros_repo }} ${{ inputs.os_code_name }} 34 | runs-on: ubuntu-latest 35 | steps: 36 | - name: Checkout ${{ inputs.ref }} when build is not scheduled 37 | if: ${{ github.event_name != 'schedule' }} 38 | uses: actions/checkout@v4 39 | - name: Checkout ${{ inputs.ref }} on scheduled build 40 | if: ${{ github.event_name == 'schedule' }} 41 | uses: actions/checkout@v4 42 | with: 43 | ref: ${{ inputs.ref_for_scheduled_build }} 44 | - uses: 'ros-industrial/industrial_ci@master' 45 | env: 46 | UPSTREAM_WORKSPACE: ${{ inputs.upstream_workspace }} 47 | ROS_DISTRO: ${{ inputs.ros_distro }} 48 | ROS_REPO: ${{ inputs.ros_repo }} 49 | -------------------------------------------------------------------------------- /.github/workflows/rolling-binary-main.yml: -------------------------------------------------------------------------------- 1 | name: Rolling Binary Build Main 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - rolling 7 | - ros2 8 | push: 9 | branches: 10 | - rolling 11 | schedule: 12 | - cron: '53 5 * * *' 13 | 14 | jobs: 15 | rolling_binary_main: 16 | uses: ./.github/workflows/reusable_ici.yml 17 | with: 18 | ros_distro: rolling 19 | ros_repo: main 20 | ref_for_scheduled_build: rolling 21 | -------------------------------------------------------------------------------- /.github/workflows/rolling-binary-testing.yml: -------------------------------------------------------------------------------- 1 | name: Rolling Binary Build Testing 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | branches: 6 | - rolling 7 | - ros2 8 | push: 9 | branches: 10 | - rolling 11 | schedule: 12 | - cron: '53 5 * * *' 13 | 14 | jobs: 15 | rolling_binary_main: 16 | uses: ./.github/workflows/reusable_ici.yml 17 | with: 18 | ros_distro: rolling 19 | ros_repo: testing 20 | ref_for_scheduled_build: rolling 21 | -------------------------------------------------------------------------------- /.github/workflows/update-ci.yml: -------------------------------------------------------------------------------- 1 | # Auto-update CI tools regularly 2 | 3 | name: CI auto-update 4 | 5 | on: 6 | schedule: 7 | # Run weekly 8 | - cron: '23 5 * * 0' 9 | workflow_dispatch: 10 | 11 | jobs: 12 | ci_auto_update: 13 | name: CI auto-update 14 | runs-on: ubuntu-latest 15 | steps: 16 | # Setup pre-commit 17 | - uses: actions/checkout@v4 18 | - uses: actions/setup-python@v5 19 | with: 20 | python-version: 3.10.4 21 | - name: Install pre-commit 22 | run: pip install pre-commit 23 | 24 | # Run update 25 | - name: Run pre-commit autoupdate 26 | run: pre-commit autoupdate 27 | 28 | # Create pull request 29 | - name: Create pull-request 30 | id: cpr 31 | uses: peter-evans/create-pull-request@v7 32 | with: 33 | branch: update-ci/pre-commit-autoupdate 34 | delete-branch: true 35 | title: Auto-update pre-commit hooks 36 | committer: github-actions[bot] 37 | author: github-actions[bot] 38 | commit-message: Auto-update pre-commit hooks 39 | labels: CI 40 | - name: Check outputs 41 | if: ${{ steps.cpr.pull-request-number }} 42 | run: echo "Opened pull request ${{ steps.cpr.outputs.pull-request-number }} - ${{ steps.cpr.outputs.pull-request-url }}" 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/__pycache__/ 2 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # To use: 3 | # 4 | # pre-commit run -a 5 | # 6 | # Or: 7 | # 8 | # pre-commit install # (runs every time you commit in git) 9 | # 10 | # To update this file: 11 | # 12 | # pre-commit autoupdate 13 | # 14 | # See https://github.com/pre-commit/pre-commit 15 | 16 | 17 | repos: 18 | # Standard hooks 19 | - repo: https://github.com/pre-commit/pre-commit-hooks 20 | rev: v5.0.0 21 | hooks: 22 | - id: check-added-large-files 23 | args: ['--maxkb=1500'] 24 | - id: check-ast 25 | - id: check-case-conflict 26 | - id: check-docstring-first 27 | - id: check-merge-conflict 28 | - id: check-symlinks 29 | - id: check-xml 30 | #- id: check-yaml 31 | - id: debug-statements 32 | - id: end-of-file-fixer 33 | - id: mixed-line-ending 34 | - id: check-byte-order-marker # Forbid UTF-8 byte-order markers 35 | - id: trailing-whitespace 36 | # This need to be a one to one copy from the Universal Robots legal no matter trailing spaces or not 37 | exclude: | 38 | (?x)^( 39 | meshes/ur15/LICENSE.txt| 40 | meshes/ur20/LICENSE.txt| 41 | meshes/ur30/LICENSE.txt 42 | )$ 43 | 44 | # Python hooks 45 | - repo: https://github.com/asottile/pyupgrade 46 | rev: v3.20.0 47 | hooks: 48 | - id: pyupgrade 49 | args: [--py36-plus] 50 | 51 | - repo: https://github.com/psf/black 52 | rev: 25.1.0 53 | hooks: 54 | - id: black 55 | args: ["--line-length=100"] 56 | 57 | 58 | - repo: https://github.com/pycqa/flake8 59 | rev: 7.2.0 60 | hooks: 61 | - id: flake8 62 | args: ["--ignore=E501"] 63 | 64 | # CPP hooks 65 | # The same options as in ament_cppcheck are used, but its not working... 66 | #- repo: https://github.com/pocc/pre-commit-hooks 67 | #rev: v1.1.1 68 | #hooks: 69 | #- id: cppcheck 70 | #args: ['--error-exitcode=1', '-f', '--inline-suppr', '-q', '-rp', '--suppress=internalAstError', '--suppress=unknownMacro', '--verbose'] 71 | 72 | 73 | # Cmake hooks 74 | - repo: local 75 | hooks: 76 | - id: ament_lint_cmake 77 | name: ament_lint_cmake 78 | description: Check format of CMakeLists.txt files. 79 | stages: [pre-commit] 80 | entry: ament_lint_cmake 81 | language: system 82 | files: CMakeLists.txt$ 83 | 84 | # Copyright 85 | - repo: local 86 | hooks: 87 | - id: ament_copyright 88 | name: ament_copyright 89 | description: Check if copyright notice is available in all files. 90 | stages: [pre-commit] 91 | entry: ament_copyright 92 | language: system 93 | args: ['--exclude', 'doc/conf.py'] 94 | 95 | # Docs - RestructuredText hooks 96 | - repo: https://github.com/PyCQA/doc8 97 | rev: v1.1.2 98 | hooks: 99 | - id: doc8 100 | args: ['--max-line-length=100', '--ignore=D001'] 101 | 102 | - repo: https://github.com/pre-commit/pygrep-hooks 103 | rev: v1.10.0 104 | hooks: 105 | - id: rst-backticks 106 | - id: rst-directive-colons 107 | - id: rst-inline-touching-normal 108 | 109 | # Spellcheck in comments and docs 110 | # skipping of *.svg files is not working... 111 | - repo: https://github.com/codespell-project/codespell 112 | rev: v2.4.1 113 | hooks: 114 | - id: codespell 115 | args: ['--write-changes'] 116 | exclude: \.(svg|pyc)$ 117 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | project(ur_description) 3 | 4 | find_package(ament_cmake REQUIRED) 5 | 6 | install( 7 | DIRECTORY config launch meshes rviz urdf test 8 | DESTINATION share/${PROJECT_NAME} 9 | ) 10 | 11 | ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS}) 12 | 13 | if(BUILD_TESTING) 14 | find_package(ament_cmake_pytest REQUIRED) 15 | 16 | ament_add_pytest_test(ur_urdf_xacro test/test_ur_urdf_xacro.py) 17 | ament_add_pytest_test(view_ur_launch test/test_view_ur_launch.py) 18 | endif() 19 | 20 | ament_package() 21 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | Thank you for your interest in contributing to `Universal_Robots_ROS2_Description`. 3 | Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 7 | information to effectively respond to your bug report or contribution. 8 | 9 | 10 | ## Reporting Bugs/Feature Requests 11 | We welcome you to use the GitHub issue tracker to report bugs or suggest features. 12 | 13 | When filing an issue, please check [existing open][issues], or [recently closed][closed-issues], issues to make sure 14 | somebody else hasn't already reported the issue. 15 | Please try to include as much information as you can. Details like these are incredibly useful: 16 | 17 | * A reproducible test case or series of steps 18 | * The version of our code being used 19 | * Any modifications you've made relevant to the bug 20 | * Anything unusual about your environment or deployment 21 | 22 | 23 | ## Contributing via Pull Requests 24 | Contributions via pull requests are much appreciated. 25 | Before sending us a pull request, please ensure that: 26 | 27 | 1. You are working against the latest source on the *master* branch. 28 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 29 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 30 | 31 | To send us a pull request, please: 32 | 33 | 1. Fork the repository. 34 | 2. Modify the source; please focus on the specific change you are contributing. 35 | If you also reformat all the code, it will be hard for us to focus on your change. 36 | 3. Ensure local tests pass. 37 | 4. Commit to your fork using clear commit messages. 38 | 5. Send a pull request, answering any default questions in the pull request interface. 39 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 40 | 41 | GitHub provides additional documentation on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 42 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 43 | 44 | 45 | ## Licensing 46 | Any contribution that you make to this repository will 47 | be under the 3-Clause BSD License, as dictated by that 48 | [license](https://opensource.org/licenses/BSD-3-Clause). 49 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Redistribution and use in source and binary forms, with or without 2 | modification, are permitted provided that the following conditions are met: 3 | 4 | * Redistributions of source code must retain the above copyright 5 | notice, this list of conditions and the following disclaimer. 6 | 7 | * Redistributions in binary form must reproduce the above copyright 8 | notice, this list of conditions and the following disclaimer in the 9 | documentation and/or other materials provided with the distribution. 10 | 11 | * Neither the name of the copyright holder nor the names of its 12 | contributors may be used to endorse or promote products derived from 13 | this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 | POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Universal_Robots_ROS2_Description 2 | 3 | This repository contains description files and meshes for *Universal Robots* manipulators. 4 | 5 | ## Build status 6 | 7 | ROS2 Distro | Branch | Build status | Released packages 8 | :---------: | :----: | :----------: | :---------------: 9 | **Humble** | [`humble`](https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/tree/humble) | [![Build Status](https://build.ros2.org/job/Hbin_uJ64__ur_description__ubuntu_jammy_amd64__binary/badge/icon)](https://build.ros2.org/job/Hbin_uJ64__ur_description__ubuntu_jammy_amd64__binary/) | [ur_description](https://index.ros.org/p/ur_description/#humble) 10 | **Jazzy** | [`jazzy`](https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/tree/jazzy) | [![Build Status](https://build.ros2.org/job/Jbin_uN64__ur_description__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Jbin_uN64__ur_description__ubuntu_noble_amd64__binary/) | [ur_description](https://index.ros.org/p/ur_description/#jazzy) 11 | **Kilted** | [`rolling`](https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/tree/rolling) | [![Build Status](https://build.ros2.org/job/Kbin_uN64__ur_description__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Kbin_uN64__ur_description__ubuntu_noble_amd64__binary/) | [ur_description](https://index.ros.org/p/ur_description/#kilted) 12 | **Rolling** | [`rolling`](https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/tree/rolling) | [![Build Status](https://build.ros2.org/job/Rbin_uN64__ur_description__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__ur_description__ubuntu_noble_amd64__binary/)| [ur_description](https://index.ros.org/p/ur_description/#rolling) 13 | 14 | A more [detailed build status](ci_status.md) shows the state of all CI workflows inside this repo. 15 | Please note that the detailed view is intended for developers, while the one here should give end 16 | users an overview of the current released state. 17 | 18 | 19 | ## License 20 | The [UR15 meshes](meshes/ur15), [UR20 meshes](meshes/ur20) and [UR30 meshes](meshes/ur30) constitutes “Graphical Documentation” the use of which is subject to and governed by our “[Terms and Conditions for use of Graphical Documentation](https://www.universal-robots.com/legal/terms-and-conditions/terms_and_conditions_for_use_of_graphical_documentation.txt)”. 21 | 22 | Universal Robots' [Terms and Conditions for use of Graphical Documentation](https://www.universal-robots.com/legal/terms-and-conditions/terms_and_conditions_for_use_of_graphical_documentation.txt) do not fully comply with [OSI's definition of Open Source](https://opensource.org/osd/), but they do allow you to use, modify and share “Graphical Documentation”, including [UR15 meshes](meshes/ur15), [UR20](meshes/ur20) and [UR30](meshes/ur30) meshes, subject to certain restrictions.\ 23 | If you have any questions regarding this license or if this license doesn't fit your use-case, please contact [legal@universal-robots.com](mailto:legal@universal-robots.com). 24 | 25 | All other content is licensed under the BSD-3-Clause license 26 | 27 | ## Testing description of a manipulator 28 | 29 | To visualize the robot install this repository to you workspace and execute the following: 30 | 31 | ``` bash 32 | ros2 launch ur_description view_ur.launch.py ur_type:=ur5e 33 | ``` 34 | 35 | To test other descriptions change the `ur_type` argument. 36 | 37 | ## Further documentation 38 | 39 | For further documentation about this description, please see [doc/index.rst](doc/index.rst). 40 | -------------------------------------------------------------------------------- /ci_status.md: -------------------------------------------------------------------------------- 1 | ## Build Status 2 | 3 | This page gives a detailed overview of the build status of this repository. Please note that due to 4 | upstream changes some pipelines might turn red temporarily which can be expected behavior. 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 33 | 43 | 53 | 63 | 64 | 65 | 66 | 69 | 72 | 75 | 78 | 79 |
HumbleJazzyKiltedRolling
Branchhumblejazzyrollingrolling
Repo builds 24 | 25 | Humble Binary Main 27 |
28 | 29 | Humble Binary Testing 31 |
32 |
34 | 35 | Jazzy Binary Main 37 |
38 | 39 | Jazzy Binary Testing 41 |
42 |
44 | 45 | Kilted Binary Main 47 |
48 | 49 | Kilted Binary Testing 51 |
52 |
54 | 55 | Rolling Binary Main 57 |
58 | 59 | Rolling Binary Testing 61 |
62 |
Buildfarm 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 |
80 | -------------------------------------------------------------------------------- /config/initial_positions.yaml: -------------------------------------------------------------------------------- 1 | shoulder_pan_joint: 0.0 2 | shoulder_lift_joint: -1.57 3 | elbow_joint: 0.0 4 | wrist_1_joint: -1.57 5 | wrist_2_joint: 0.0 6 | wrist_3_joint: 0.0 7 | -------------------------------------------------------------------------------- /config/ur10/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1273 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.612 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.5723 25 | y: 0 26 | z: 0.163941 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.1157 33 | z: -2.373046667922381e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.0922 40 | z: -1.891053610911353e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_17227329492635474227 45 | -------------------------------------------------------------------------------- /config/ur10/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - UR10 User Manual, Universal Robots, UR10/CB3, Version 3.13 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69442/99203_UR10_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 330.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 120.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 330.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 120.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 56.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 56.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 56.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur10/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 7.1 7 | upper_arm_mass: 12.7 8 | forearm_mass: 4.27 9 | wrist_1_mass: 2.0 10 | wrist_2_mass: 2.0 11 | wrist_3_mass: 0.365 12 | 13 | links: 14 | base: 15 | radius: 0.075 16 | length: 0.038 17 | 18 | center_of_mass: 19 | shoulder_cog: 20 | x: 0.021 # model.x 21 | y: -0.027 # -model.z 22 | z: 0.0 # model.y 23 | upper_arm_cog: 24 | x: -0.232 # model.x - upper_arm_length 25 | y: 0.0 # model.y 26 | z: 0.158 # model.z 27 | forearm_cog: 28 | x: -0.3323 # model.x - forearm_length 29 | y: 0.0 # model.y 30 | z: 0.068 # model.z 31 | wrist_1_cog: 32 | x: 0.0 # model.x 33 | y: -0.018 # -model.z 34 | z: 0.007 # model.y 35 | wrist_2_cog: 36 | x: 0.0 # model.x 37 | y: 0.018 # model.z 38 | z: -0.007 # -model.y 39 | wrist_3_cog: 40 | x: 0.0 # model.x 41 | y: 0 # model.y 42 | z: -0.026 # model.z 43 | 44 | rotation: 45 | shoulder: 46 | roll: 1.570796326794897 47 | pitch: 0 48 | yaw: 0 49 | upper_arm: 50 | roll: 0 51 | pitch: 0 52 | yaw: 0 53 | forearm: 54 | roll: 0 55 | pitch: 0 56 | yaw: 0 57 | wrist_1: 58 | roll: 1.570796326794897 59 | pitch: 0 60 | yaw: 0 61 | wrist_2: 62 | roll: -1.570796326794897 63 | pitch: 0 64 | yaw: 0 65 | wrist_3: 66 | roll: 0 67 | pitch: 0 68 | yaw: 0 69 | 70 | # extracted from URSim 71 | tensor: 72 | shoulder: 73 | ixx: 0.03408 74 | ixy: 0.00002 75 | ixz: -0.00425 76 | iyy: 0.03529 77 | iyz: 0.00008 78 | izz: 0.02156 79 | upper_arm: 80 | ixx: 0.02814 81 | ixy: 0.00005 82 | ixz: -0.01561 83 | iyy: 0.77068 84 | iyz: 0.00002 85 | izz: 0.76943 86 | forearm: 87 | ixx: 0.01014 88 | ixy: 0.00008 89 | ixz: 0.00916 90 | iyy: 0.30928 91 | iyz: 0.0 92 | izz: 0.30646 93 | wrist_1: 94 | ixx: 0.00296 95 | ixy: -0.00001 96 | ixz: 0.0 97 | iyy: 0.00222 98 | iyz: -0.00024 99 | izz: 0.00258 100 | wrist_2: 101 | ixx: 0.00296 102 | ixy: -0.00001 103 | ixz: 0.0 104 | iyy: 0.00222 105 | iyz: -0.00024 106 | izz: 0.00258 107 | wrist_3: 108 | ixx: 0.00040 109 | ixy: 0.0 110 | ixz: 0.0 111 | iyy: 0.00041 112 | iyz: 0.0 113 | izz: 0.00034 114 | -------------------------------------------------------------------------------- /config/ur10/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur10/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur10/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur10/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur10/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur10/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur10/collision/upperarm.stl 47 | mesh_offset: 48 | x: 0.0 49 | y: 0.0 50 | z: 0.220941 51 | roll: !degrees 90 52 | pitch: 0.0 53 | yaw: !degrees -90 54 | 55 | forearm: 56 | visual: 57 | mesh: 58 | package: ur_description 59 | path: meshes/ur10/visual/forearm.dae 60 | collision: 61 | mesh: 62 | package: ur_description 63 | path: meshes/ur10/collision/forearm.stl 64 | mesh_offset: 65 | x: 0.0 66 | y: 0.0 67 | z: 0.049042 68 | roll: !degrees 90 69 | pitch: 0.0 70 | yaw: !degrees -90 71 | 72 | wrist_1: 73 | visual: 74 | mesh: 75 | package: ur_description 76 | path: meshes/ur10/visual/wrist1.dae 77 | collision: 78 | mesh: 79 | package: ur_description 80 | path: meshes/ur10/collision/wrist1.stl 81 | mesh_offset: 82 | x: 0.0 83 | y: 0.0 84 | z: -0.1149 85 | roll: !degrees 90 86 | pitch: 0.0 87 | yaw: 0.0 88 | 89 | wrist_2: 90 | visual: 91 | mesh: 92 | package: ur_description 93 | path: meshes/ur10/visual/wrist2.dae 94 | collision: 95 | mesh: 96 | package: ur_description 97 | path: meshes/ur10/collision/wrist2.stl 98 | mesh_offset: 99 | x: 0.0 100 | y: 0.0 101 | z: -0.1158 102 | roll: 0.0 103 | pitch: 0.0 104 | yaw: 0.0 105 | 106 | wrist_3: 107 | visual: 108 | mesh: 109 | package: ur_description 110 | path: meshes/ur10/visual/wrist3.dae 111 | collision: 112 | mesh: 113 | package: ur_description 114 | path: meshes/ur10/collision/wrist3.stl 115 | mesh_offset: 116 | x: 0.0 117 | y: 0.0 118 | z: -0.0922 119 | roll: !degrees 90 120 | pitch: 0.0 121 | yaw: 0.0 122 | -------------------------------------------------------------------------------- /config/ur10e/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1807 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.6127 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.57155 25 | y: 0 26 | z: 0.17415 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.11985 33 | z: -2.458164590756244e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.11655 40 | z: -2.390480459346185e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_5119701370761913513 45 | -------------------------------------------------------------------------------- /config/ur10e/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR10e, Version 5.8 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69139/99405_UR10e_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 330.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 120.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 330.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 120.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 54.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 54.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 54.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur10e/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 7.369 7 | upper_arm_mass: 13.051 8 | forearm_mass: 3.989 9 | wrist_1_mass: 2.1 10 | wrist_2_mass: 1.98 11 | wrist_3_mass: 0.615 12 | 13 | links: 14 | base: 15 | radius: 0.075 16 | length: 0.038 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.021 # model.x 22 | y: -0.027 # -model.z 23 | z: 0.0 # model.y 24 | upper_arm_cog: 25 | x: -0.2327 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.158 # model.z 28 | forearm_cog: 29 | x: -0.33155 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.068 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.018 # -model.z 35 | z: 0.007 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.018 # model.z 39 | z: -0.007 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.026 # model.z 44 | 45 | rotation: 46 | shoulder: 47 | roll: 1.570796326794897 48 | pitch: 0 49 | yaw: 0 50 | upper_arm: 51 | roll: 0 52 | pitch: 0 53 | yaw: 0 54 | forearm: 55 | roll: 0 56 | pitch: 0 57 | yaw: 0 58 | wrist_1: 59 | roll: 1.570796326794897 60 | pitch: 0 61 | yaw: 0 62 | wrist_2: 63 | roll: -1.570796326794897 64 | pitch: 0 65 | yaw: 0 66 | wrist_3: 67 | roll: 0 68 | pitch: 0 69 | yaw: 0 70 | 71 | tensor: 72 | shoulder: 73 | ixx: 0.03408 74 | ixy: 0.00002 75 | ixz: -0.00425 76 | iyy: 0.03529 77 | iyz: 0.00008 78 | izz: 0.02156 79 | upper_arm: 80 | ixx: 0.02814 81 | ixy: 0.00005 82 | ixz: -0.01561 83 | iyy: 0.77068 84 | iyz: 0.00002 85 | izz: 0.76943 86 | forearm: 87 | ixx: 0.01014 88 | ixy: 0.00008 89 | ixz: 0.00916 90 | iyy: 0.30928 91 | iyz: 0.0 92 | izz: 0.30646 93 | wrist_1: 94 | ixx: 0.00296 95 | ixy: -0.00001 96 | ixz: 0.0 97 | iyy: 0.00222 98 | iyz: -0.00024 99 | izz: 0.00258 100 | wrist_2: 101 | ixx: 0.00296 102 | ixy: -0.00001 103 | ixz: 0.0 104 | iyy: 0.00222 105 | iyz: -0.00024 106 | izz: 0.00258 107 | wrist_3: 108 | ixx: 0.00040 109 | ixy: 0.0 110 | ixz: 0.0 111 | iyy: 0.00041 112 | iyz: 0.0 113 | izz: 0.00034 114 | -------------------------------------------------------------------------------- /config/ur10e/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur10e/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur10e/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur10e/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur10e/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur10e/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur10e/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.1762 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur10e/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur10e/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.0393 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur10e/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur10e/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.135 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur10e/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur10e/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.12 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur10e/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur10e/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.1168 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur12e/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1807 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.6127 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.57155 25 | y: 0 26 | z: 0.17415 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.11985 33 | z: -2.458164590756244e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.11655 40 | z: -2.390480459346185e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_5119701370761913513 45 | -------------------------------------------------------------------------------- /config/ur12e/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR10e, Version 5.8 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69139/99405_UR10e_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 330.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 120.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 330.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 120.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 54.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 54.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 54.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur12e/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 7.369 7 | upper_arm_mass: 13.051 8 | forearm_mass: 3.989 9 | wrist_1_mass: 2.1 10 | wrist_2_mass: 1.98 11 | wrist_3_mass: 0.615 12 | 13 | links: 14 | base: 15 | radius: 0.075 16 | length: 0.038 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.021 # model.x 22 | y: -0.027 # -model.z 23 | z: 0.0 # model.y 24 | upper_arm_cog: 25 | x: -0.2327 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.158 # model.z 28 | forearm_cog: 29 | x: -0.33155 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.068 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.018 # -model.z 35 | z: 0.007 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.018 # model.z 39 | z: -0.007 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.026 # model.z 44 | 45 | rotation: 46 | shoulder: 47 | roll: 1.570796326794897 48 | pitch: 0 49 | yaw: 0 50 | upper_arm: 51 | roll: 0 52 | pitch: 0 53 | yaw: 0 54 | forearm: 55 | roll: 0 56 | pitch: 0 57 | yaw: 0 58 | wrist_1: 59 | roll: 1.570796326794897 60 | pitch: 0 61 | yaw: 0 62 | wrist_2: 63 | roll: -1.570796326794897 64 | pitch: 0 65 | yaw: 0 66 | wrist_3: 67 | roll: 0 68 | pitch: 0 69 | yaw: 0 70 | 71 | tensor: 72 | shoulder: 73 | ixx: 0.03408 74 | ixy: 0.00002 75 | ixz: -0.00425 76 | iyy: 0.03529 77 | iyz: 0.00008 78 | izz: 0.02156 79 | upper_arm: 80 | ixx: 0.02814 81 | ixy: 0.00005 82 | ixz: -0.01561 83 | iyy: 0.77068 84 | iyz: 0.00002 85 | izz: 0.76943 86 | forearm: 87 | ixx: 0.01014 88 | ixy: 0.00008 89 | ixz: 0.00916 90 | iyy: 0.30928 91 | iyz: 0.0 92 | izz: 0.30646 93 | wrist_1: 94 | ixx: 0.00296 95 | ixy: -0.00001 96 | ixz: 0.0 97 | iyy: 0.00222 98 | iyz: -0.00024 99 | izz: 0.00258 100 | wrist_2: 101 | ixx: 0.00296 102 | ixy: -0.00001 103 | ixz: 0.0 104 | iyy: 0.00222 105 | iyz: -0.00024 106 | izz: 0.00258 107 | wrist_3: 108 | ixx: 0.00040 109 | ixy: 0.0 110 | ixz: 0.0 111 | iyy: 0.00041 112 | iyz: 0.0 113 | izz: 0.00034 114 | -------------------------------------------------------------------------------- /config/ur12e/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur10e/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur10e/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur10e/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur10e/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur10e/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur10e/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.1762 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur10e/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur10e/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.0393 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur10e/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur10e/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.135 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur10e/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur10e/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.12 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur10e/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur10e/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.1168 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur15/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.21859999999999999 6 | roll: -0 7 | pitch: 0 8 | yaw: -0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: -0 16 | forearm: 17 | x: -0.64749999999999996 18 | y: 0 19 | z: 0 20 | roll: -0 21 | pitch: 0 22 | yaw: -0 23 | wrist_1: 24 | x: -0.51639999999999997 25 | y: 0 26 | z: 0.18240000000000001 27 | roll: -0 28 | pitch: 0 29 | yaw: -0 30 | wrist_2: 31 | x: 0 32 | y: -0.1361 33 | z: -2.7914576620936571e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: -0 37 | wrist_3: 38 | x: 0 39 | y: 0.1434 40 | z: -2.941183164909849e-11 41 | roll: 1.5707963265897931 42 | pitch: 3.1415926535897931 43 | yaw: 3.1415926535897931 44 | hash: calib_16739373764049705779 45 | -------------------------------------------------------------------------------- /config/ur15/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | joint_limits: 3 | shoulder_pan_joint: 4 | # acceleration limits are not publicly available 5 | has_acceleration_limits: false 6 | has_effort_limits: true 7 | has_position_limits: true 8 | has_velocity_limits: true 9 | max_effort: 433.0 10 | max_position: !degrees 360.0 11 | max_velocity: !degrees 180.0 12 | min_position: !degrees -360.0 13 | shoulder_lift_joint: 14 | # acceleration limits are not publicly available 15 | has_acceleration_limits: false 16 | has_effort_limits: true 17 | has_position_limits: true 18 | has_velocity_limits: true 19 | max_effort: 433.0 20 | max_position: !degrees 360.0 21 | max_velocity: !degrees 180.0 22 | min_position: !degrees -360.0 23 | elbow_joint: 24 | # acceleration limits are not publicly available 25 | has_acceleration_limits: false 26 | has_effort_limits: true 27 | has_position_limits: true 28 | has_velocity_limits: true 29 | max_effort: 204.0 30 | # we artificially limit this joint to half its actual joint position limit 31 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 32 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 33 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 34 | # 35 | # This leads to planning problems as the search space will be divided into 36 | # two sections, with no connections from one to the other. 37 | # 38 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 39 | # more information. 40 | max_position: !degrees 180.0 41 | max_velocity: !degrees 240.0 42 | min_position: !degrees -180.0 43 | wrist_1_joint: 44 | # acceleration limits are not publicly available 45 | has_acceleration_limits: false 46 | has_effort_limits: true 47 | has_position_limits: true 48 | has_velocity_limits: true 49 | max_effort: 70.0 50 | max_position: !degrees 360.0 51 | max_velocity: !degrees 300.0 52 | min_position: !degrees -360.0 53 | wrist_2_joint: 54 | # acceleration limits are not publicly available 55 | has_acceleration_limits: false 56 | has_effort_limits: true 57 | has_position_limits: true 58 | has_velocity_limits: true 59 | max_effort: 70.0 60 | max_position: !degrees 360.0 61 | max_velocity: !degrees 300.0 62 | min_position: !degrees -360.0 63 | wrist_3_joint: 64 | # acceleration limits are not publicly available 65 | has_acceleration_limits: false 66 | has_effort_limits: true 67 | has_position_limits: true 68 | has_velocity_limits: true 69 | max_effort: 70.0 70 | max_position: !degrees 360.0 71 | max_velocity: !degrees 300.0 72 | min_position: !degrees -360.0 73 | -------------------------------------------------------------------------------- /config/ur15/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Physical parameters 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 9.9883 7 | upper_arm_mass: 14.9255 8 | forearm_mass: 6.1015 9 | wrist_1_mass: 2.089 10 | wrist_2_mass: 2.0869 11 | wrist_3_mass: 1.0666 12 | 13 | # used to approximate the inertia tensor of the fixed base using a cylinder approximation. This 14 | # is only relevant if the robot's base is moving e.g. when it's mounted on a mobile platform. 15 | links: 16 | base: 17 | radius: 0.17 18 | length: 0.1 19 | 20 | center_of_mass: 21 | shoulder_cog: 22 | x: 0.000024 # model.x 23 | y: -0.025304 # -model.z 24 | z: -0.033309 # model.y 25 | upper_arm_cog: 26 | x: -0.228491 # model.x - upperarm_length 27 | y: -0.000083 # model.y 28 | z: 0.192787 # model.z 29 | forearm_cog: 30 | x: -0.210929 # model.x - forearm_length 31 | y: 0.000019 # model.y 32 | z: 0.070552 # model.z 33 | wrist_1_cog: 34 | x: 0.000025 # model.x 35 | y: -0.016413 # -model.z 36 | z: -0.019695 # model.y 37 | wrist_2_cog: 38 | x: 0.000025 # model.x 39 | y: 0.015886 # model.z 40 | z: -0.019960 # -model.y 41 | wrist_3_cog: 42 | x: -0.000018 # model.x 43 | y: -0.000112 # model.y 44 | z: -0.053397 # model.z 45 | 46 | rotation: 47 | shoulder: 48 | roll: 1.570796326794897 49 | pitch: 0 50 | yaw: 0 51 | upper_arm: 52 | roll: 0 53 | pitch: 0 54 | yaw: 0 55 | forearm: 56 | roll: 0 57 | pitch: 0 58 | yaw: 0 59 | wrist_1: 60 | roll: 1.570796326794897 61 | pitch: 0 62 | yaw: 0 63 | wrist_2: 64 | roll: -1.570796326794897 65 | pitch: 0 66 | yaw: 0 67 | wrist_3: 68 | roll: 0 69 | pitch: 0 70 | yaw: 0 71 | 72 | tensor: 73 | shoulder: 74 | ixx: 0.051334 75 | ixy: 0.000025 76 | ixz: -0.000016 77 | iyy: 0.047702 78 | iyz: 0.008805 79 | izz: 0.034263 80 | upper_arm: 81 | ixx: 0.048202 82 | ixy: 0.000232 83 | ixz: -0.032135 84 | iyy: 1.188499 85 | iyz: -0.000017 86 | izz: 1.182771 87 | forearm: 88 | ixx: 0.018481 89 | ixy: -0.000005 90 | ixz: 0.013601 91 | iyy: 0.303502 92 | iyz: 0.000003 93 | izz: 0.296843 94 | wrist_1: 95 | ixx: 0.004339 96 | ixy: 0.000019 97 | ixz: 0.000001 98 | iyy: 0.002548 99 | iyz: 0.000706 100 | izz: 0.003912 101 | wrist_2: 102 | ixx: 0.004288 103 | ixy: 0.000017 104 | ixz: -0.000003 105 | iyy: 0.002566 106 | iyz: -0.000716 107 | izz: 0.003927 108 | wrist_3: 109 | ixx: 0.001406 110 | ixy: -0.000003 111 | ixz: 0.000010 112 | iyy: 0.001404 113 | iyz: -0.000024 114 | izz: 0.001002 115 | -------------------------------------------------------------------------------- /config/ur15/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur15/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur15/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur15/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur15/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur15/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur15/collision/upperarm.stl 47 | mesh_offset: 48 | x: 0.0 49 | y: 0.0 50 | z: 0.100 51 | roll: !degrees 90 52 | pitch: 0.0 53 | yaw: !degrees -90 54 | 55 | forearm: 56 | visual: 57 | mesh: 58 | package: ur_description 59 | path: meshes/ur15/visual/forearm.dae 60 | collision: 61 | mesh: 62 | package: ur_description 63 | path: meshes/ur15/collision/forearm.stl 64 | mesh_offset: 65 | x: 0.0 66 | y: 0.0 67 | z: 0.125 68 | roll: !degrees 90 69 | pitch: 0.0 70 | yaw: !degrees -90 71 | 72 | wrist_1: 73 | visual: 74 | mesh: 75 | package: ur_description 76 | path: meshes/ur15/visual/wrist1.dae 77 | collision: 78 | mesh: 79 | package: ur_description 80 | path: meshes/ur15/collision/wrist1.stl 81 | mesh_offset: 82 | x: 0.0 83 | y: 0.0 84 | z: -0.0502 85 | roll: !degrees 90 86 | pitch: 0.0 87 | yaw: 0.0 88 | 89 | wrist_2: 90 | visual: 91 | mesh: 92 | package: ur_description 93 | path: meshes/ur15/visual/wrist2.dae 94 | collision: 95 | mesh: 96 | package: ur_description 97 | path: meshes/ur15/collision/wrist2.stl 98 | mesh_offset: 99 | x: 0.0 100 | y: 0.0 101 | z: -0.064 102 | roll: 0.0 103 | pitch: 0.0 104 | yaw: 0.0 105 | 106 | wrist_3: 107 | visual: 108 | mesh: 109 | package: ur_description 110 | path: meshes/ur15/visual/wrist3.dae 111 | collision: 112 | mesh: 113 | package: ur_description 114 | path: meshes/ur15/collision/wrist3.stl 115 | mesh_offset: 116 | x: 0.0 117 | y: 0.0 118 | z: -0.0715 119 | roll: !degrees 90 120 | pitch: 0.0 121 | yaw: 0.0 122 | -------------------------------------------------------------------------------- /config/ur16e/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1807 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.4784 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.36 25 | y: 0 26 | z: 0.17415 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.11985 33 | z: -2.458164590756244e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.11655 40 | z: -2.390480459346185e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_1935737212149401527 45 | -------------------------------------------------------------------------------- /config/ur16e/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR16e, Version 5.8 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69187/99473_UR16e_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 330.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 120.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 330.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 120.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 54.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 54.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 54.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur16e/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | # taken from https://www.universal-robots.com/how-tos-and-faqs/faq/ur-faq/parameters-for-calculations-of-kinematics-and-dynamics-45257/ 6 | base_mass: 4.0 # This mass might be incorrect 7 | shoulder_mass: 7.369 8 | upper_arm_mass: 10.450 9 | forearm_mass: 4.321 10 | wrist_1_mass: 2.180 11 | wrist_2_mass: 2.033 12 | wrist_3_mass: 0.907 13 | 14 | links: 15 | base: 16 | radius: 0.075 17 | length: 0.038 18 | 19 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 20 | center_of_mass: 21 | shoulder_cog: 22 | x: 0.0 # model.x 23 | y: -0.030 # -model.z 24 | z: -0.016 # model.y 25 | upper_arm_cog: 26 | x: -0.1764 # model.x - upperarm_length 27 | y: 0.0 # model.y 28 | z: 0.16 # model.z 29 | forearm_cog: 30 | x: -0.166 # model.x - forearm_length 31 | y: 0.0 # model.y 32 | z: 0.065 # model.z 33 | wrist_1_cog: 34 | x: 0.0 # model.x 35 | y: -0.011 # -model.z 36 | z: -0.009 # model.y 37 | wrist_2_cog: 38 | x: 0.0 # model.x 39 | y: 0.012 # model.z 40 | z: -0.018 # -model.y 41 | wrist_3_cog: 42 | x: 0.0 # model.x 43 | y: 0.0 # model.y 44 | z: -0.044 # model.z 45 | 46 | rotation: 47 | shoulder: 48 | roll: 1.570796326794897 49 | pitch: 0 50 | yaw: 0 51 | upper_arm: 52 | roll: 0 53 | pitch: 0 54 | yaw: 0 55 | forearm: 56 | roll: 0 57 | pitch: 0 58 | yaw: 0 59 | wrist_1: 60 | roll: 1.570796326794897 61 | pitch: 0 62 | yaw: 0 63 | wrist_2: 64 | roll: -1.570796326794897 65 | pitch: 0 66 | yaw: 0 67 | wrist_3: 68 | roll: 0 69 | pitch: 0 70 | yaw: 0 71 | 72 | tensor: 73 | shoulder: 74 | ixx: 0.03351 75 | ixy: 0.00002 76 | ixz: -0.00001 77 | iyy: 0.03374 78 | iyz: 0.00374 79 | izz: 0.02100 80 | upper_arm: 81 | ixx: 0.02796 82 | ixy: -0.00010 83 | ixz: -0.00720 84 | iyy: 0.47558 85 | iyz: 0.00003 86 | izz: 0.47635 87 | forearm: 88 | ixx: 0.01091 89 | ixy: 0.00006 90 | ixz: 0.01012 91 | iyy: 0.12060 92 | iyz: 0.00001 93 | izz: 0.11714 94 | wrist_1: 95 | ixx: 0.00609 96 | ixy: -0.00001 97 | ixz: 0.0 98 | iyy: 0.00245 99 | iyz: 0.00083 100 | izz: 0.00579 101 | wrist_2: 102 | ixx: 0.00389 103 | ixy: -0.00001 104 | ixz: 0.0 105 | iyy: 0.00219 106 | iyz: -0.00045 107 | izz: 0.00363 108 | wrist_3: 109 | ixx: 0.00117 110 | ixy: 0.0 111 | ixz: 0.0 112 | iyy: 0.00118 113 | iyz: 0.0 114 | izz: 0.00084 115 | -------------------------------------------------------------------------------- /config/ur16e/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | # UR16e uses the same parts as UR10e except the upper and lower arm are shortened 3 | 4 | mesh_files: 5 | base: 6 | visual: 7 | mesh: 8 | package: ur_description 9 | path: meshes/ur10e/visual/base.dae 10 | collision: 11 | mesh: 12 | package: ur_description 13 | path: meshes/ur10e/collision/base.stl 14 | mesh_offset: 15 | x: 0.0 16 | y: 0.0 17 | z: 0.0 18 | roll: 0.0 19 | pitch: 0.0 20 | yaw: !degrees 180 21 | 22 | shoulder: 23 | visual: 24 | mesh: 25 | package: ur_description 26 | path: meshes/ur10e/visual/shoulder.dae 27 | collision: 28 | mesh: 29 | package: ur_description 30 | path: meshes/ur10e/collision/shoulder.stl 31 | mesh_offset: 32 | x: 0.0 33 | y: 0.0 34 | z: 0.0 35 | roll: 0.0 36 | pitch: 0.0 37 | yaw: !degrees 180 38 | 39 | upper_arm: 40 | visual: 41 | mesh: 42 | package: ur_description 43 | path: meshes/ur16e/visual/upperarm.dae 44 | collision: 45 | mesh: 46 | package: ur_description 47 | path: meshes/ur16e/collision/upperarm.stl 48 | mesh_files: 49 | mesh_offset: 50 | x: 0.0 51 | y: 0.0 52 | z: 0.1762 53 | roll: !degrees 90 54 | pitch: 0.0 55 | yaw: !degrees -90 56 | 57 | forearm: 58 | visual: 59 | mesh: 60 | package: ur_description 61 | path: meshes/ur16e/visual/forearm.dae 62 | collision: 63 | mesh: 64 | package: ur_description 65 | path: meshes/ur16e/collision/forearm.stl 66 | mesh_offset: 67 | x: 0.0 68 | y: 0.0 69 | z: 0.0393 70 | roll: !degrees 90 71 | pitch: 0.0 72 | yaw: !degrees -90 73 | 74 | wrist_1: 75 | visual: 76 | mesh: 77 | package: ur_description 78 | path: meshes/ur10e/visual/wrist1.dae 79 | collision: 80 | mesh: 81 | package: ur_description 82 | path: meshes/ur10e/collision/wrist1.stl 83 | mesh_offset: 84 | x: 0.0 85 | y: 0.0 86 | z: -0.135 87 | roll: !degrees 90 88 | pitch: 0.0 89 | yaw: 0.0 90 | 91 | wrist_2: 92 | visual: 93 | mesh: 94 | package: ur_description 95 | path: meshes/ur10e/visual/wrist2.dae 96 | collision: 97 | mesh: 98 | package: ur_description 99 | path: meshes/ur10e/collision/wrist2.stl 100 | mesh_offset: 101 | x: 0.0 102 | y: 0.0 103 | z: -0.12 104 | roll: 0.0 105 | pitch: 0.0 106 | yaw: 0.0 107 | 108 | wrist_3: 109 | visual: 110 | mesh: 111 | package: ur_description 112 | path: meshes/ur10e/visual/wrist3.dae 113 | collision: 114 | mesh: 115 | package: ur_description 116 | path: meshes/ur10e/collision/wrist3.stl 117 | mesh_offset: 118 | x: 0.0 119 | y: 0.0 120 | z: -0.1168 121 | roll: !degrees 90 122 | pitch: 0.0 123 | yaw: 0.0 124 | -------------------------------------------------------------------------------- /config/ur20/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.23630000000000001 6 | roll: -0 7 | pitch: 0 8 | yaw: -0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: -0 16 | forearm: 17 | x: -0.86199999999999999 18 | y: 0 19 | z: 0 20 | roll: -0 21 | pitch: 0 22 | yaw: -0 23 | wrist_1: 24 | x: -0.72870000000000001 25 | y: 0 26 | z: 0.20100000000000001 27 | roll: -0 28 | pitch: 0 29 | yaw: -0 30 | wrist_2: 31 | x: 0 32 | y: -0.1593 33 | z: -3.2672976162492252e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: -0 37 | wrist_3: 38 | x: 0 39 | y: 0.15429999999999999 40 | z: -3.1647459019915597e-11 41 | roll: 1.5707963265897931 42 | pitch: 3.1415926535897931 43 | yaw: 3.1415926535897931 44 | hash: calib_4890363623803256388 45 | -------------------------------------------------------------------------------- /config/ur20/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR20, Version 5.14 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/203281/706-276-00_UR20_User_Manual_en_Global.pdf 7 | joint_limits: 8 | shoulder_pan_joint: 9 | # acceleration limits are not publicly available 10 | has_acceleration_limits: false 11 | has_effort_limits: true 12 | has_position_limits: true 13 | has_velocity_limits: true 14 | max_effort: 738.0 15 | max_position: !degrees 360.0 16 | max_velocity: !degrees 120.0 17 | min_position: !degrees -360.0 18 | shoulder_lift_joint: 19 | # acceleration limits are not publicly available 20 | has_acceleration_limits: false 21 | has_effort_limits: true 22 | has_position_limits: true 23 | has_velocity_limits: true 24 | max_effort: 738.0 25 | max_position: !degrees 360.0 26 | max_velocity: !degrees 120.0 27 | min_position: !degrees -360.0 28 | elbow_joint: 29 | # acceleration limits are not publicly available 30 | has_acceleration_limits: false 31 | has_effort_limits: true 32 | has_position_limits: true 33 | has_velocity_limits: true 34 | max_effort: 433.0 35 | # we artificially limit this joint to half its actual joint position limit 36 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 37 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 38 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 39 | # 40 | # This leads to planning problems as the search space will be divided into 41 | # two sections, with no connections from one to the other. 42 | # 43 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 44 | # more information. 45 | max_position: !degrees 180.0 46 | max_velocity: !degrees 150.0 47 | min_position: !degrees -180.0 48 | wrist_1_joint: 49 | # acceleration limits are not publicly available 50 | has_acceleration_limits: false 51 | has_effort_limits: true 52 | has_position_limits: true 53 | has_velocity_limits: true 54 | max_effort: 107.0 55 | max_position: !degrees 360.0 56 | max_velocity: !degrees 210.0 57 | min_position: !degrees -360.0 58 | wrist_2_joint: 59 | # acceleration limits are not publicly available 60 | has_acceleration_limits: false 61 | has_effort_limits: true 62 | has_position_limits: true 63 | has_velocity_limits: true 64 | max_effort: 107.0 65 | max_position: !degrees 360.0 66 | max_velocity: !degrees 210.0 67 | min_position: !degrees -360.0 68 | wrist_3_joint: 69 | # acceleration limits are not publicly available 70 | has_acceleration_limits: false 71 | has_effort_limits: true 72 | has_position_limits: true 73 | has_velocity_limits: true 74 | max_effort: 107.0 75 | max_position: !degrees 360.0 76 | max_velocity: !degrees 210.0 77 | min_position: !degrees -360.0 78 | -------------------------------------------------------------------------------- /config/ur20/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | # taken from https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 6 | base_mass: 4.0 # This mass might be incorrect 7 | shoulder_mass: 16.343 8 | upper_arm_mass: 29.632 9 | forearm_mass: 7.879 10 | wrist_1_mass: 3.054 11 | wrist_2_mass: 3.126 12 | wrist_3_mass: 0.926 13 | 14 | links: 15 | base: 16 | radius: 0.075 17 | length: 0.038 18 | 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.0 # model.x 22 | y: -0.0062 # -model.z 23 | z: -0.061 # model.y 24 | upper_arm_cog: 25 | x: -0.3394 # model.x - upperarm_length 26 | y: 0.0 # model.y 27 | z: 0.2098 # model.z 28 | forearm_cog: 29 | x: -0.4053 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0604 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.0393 # -model.z 35 | z: -0.0026 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.0379 # model.z 39 | z: -0.0024 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.0293 # model.z 44 | 45 | rotation: 46 | shoulder: 47 | roll: 1.570796326794897 48 | pitch: 0 49 | yaw: 0 50 | upper_arm: 51 | roll: 0 52 | pitch: 0 53 | yaw: 0 54 | forearm: 55 | roll: 0 56 | pitch: 0 57 | yaw: 0 58 | wrist_1: 59 | roll: 1.570796326794897 60 | pitch: 0 61 | yaw: 0 62 | wrist_2: 63 | roll: -1.570796326794897 64 | pitch: 0 65 | yaw: 0 66 | wrist_3: 67 | roll: 0 68 | pitch: 0 69 | yaw: 0 70 | 71 | tensor: 72 | shoulder: 73 | ixx: 0.08866 74 | ixy: -0.00011 75 | ixz: -0.00011 76 | iyy: 0.07632 77 | iyz: 0.00720 78 | izz: 0.08418 79 | upper_arm: 80 | ixx: 0.14670 81 | ixy: 0.00019 82 | ixz: -0.05163 83 | iyy: 4.66590 84 | iyz: 0.00004 85 | izz: 4.63480 86 | forearm: 87 | ixx: 0.02612 88 | ixy: -0.00005 89 | ixz: -0.02898 90 | iyy: 0.75763 91 | iyz: -0.00001 92 | izz: 0.75327 93 | wrist_1: 94 | ixx: 0.00555 95 | ixy: -0.00001 96 | ixz: -0.00002 97 | iyy: 0.00537 98 | iyz: 0.00036 99 | izz: 0.00402 100 | wrist_2: 101 | ixx: 0.00586 102 | ixy: -0.00001 103 | ixz: -0.00002 104 | iyy: 0.00578 105 | iyz: -0.00037 106 | izz: 0.00427 107 | wrist_3: 108 | ixx: 0.00092 109 | ixy: 0.0 110 | ixz: 0.0 111 | iyy: 0.00091 112 | iyz: 0.0 113 | izz: 0.00117 114 | -------------------------------------------------------------------------------- /config/ur20/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur20/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur20/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur20/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur20/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur20/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur20/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.260 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur20/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur20/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.043 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur20/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur20/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.0775 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur20/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur20/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.0749 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur20/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur20/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.07 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur3/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1519 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.24365 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.21325 25 | y: 0 26 | z: 0.11235 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.08535 33 | z: -1.750557762378351e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.0819 40 | z: -1.679797079540562e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_9122066269688285636 45 | -------------------------------------------------------------------------------- /config/ur3/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - UR3 User Manual, Universal Robots, UR3/CB3, Version 3.13 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69300/99241_UR3_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 56.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 180.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 56.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 180.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 28.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 12.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 360.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 12.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 360.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: false 76 | has_velocity_limits: true 77 | max_effort: 12.0 78 | max_velocity: !degrees 360.0 79 | -------------------------------------------------------------------------------- /config/ur3/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 2.0 # This mass might be incorrect 6 | shoulder_mass: 2.0 7 | upper_arm_mass: 3.42 8 | forearm_mass: 1.26 9 | wrist_1_mass: 0.8 10 | wrist_2_mass: 0.8 11 | wrist_3_mass: 0.35 12 | 13 | links: 14 | base: 15 | radius: 0.075 16 | length: 0.038 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.0 # model.x 22 | y: 0.0 # -model.z 23 | z: -0.02 # model.y 24 | upper_arm_cog: 25 | x: -0.11365 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.1157 # model.z 28 | forearm_cog: 29 | x: -0.16325 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0238 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.01 # -model.z 35 | z: 0.0 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.01 # model.z 39 | z: 0.0 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.02 # model.z 44 | 45 | # compatible with cylinder approximation 46 | rotation: 47 | shoulder: 48 | roll: 0 49 | pitch: 0 50 | yaw: 0 51 | upper_arm: 52 | roll: 0 53 | pitch: 1.570796326794897 54 | yaw: 0 55 | forearm: 56 | roll: 0 57 | pitch: 1.570796326794897 58 | yaw: 0 59 | wrist_1: 60 | roll: 0 61 | pitch: 0 62 | yaw: 0 63 | wrist_2: 64 | roll: 0 65 | pitch: 0 66 | yaw: 0 67 | wrist_3: 68 | roll: 0 69 | pitch: 0 70 | yaw: 0 71 | 72 | 73 | # generated using cylinder approximation 74 | tensor: 75 | shoulder: 76 | ixx: 0.008093166666666665 77 | ixy: 0 78 | ixz: 0 79 | iyy: 0.008093166666666665 80 | iyz: 0 81 | izz: 0.005625 82 | upper_arm: 83 | ixx: 0.021728491912499998 84 | ixy: 0 85 | ixz: 0 86 | iyy: 0.021728491912499998 87 | iyz: 0 88 | izz: 0.00961875 89 | forearm: 90 | ixx: 0.0065468090625 91 | ixy: 0 92 | ixz: 0 93 | iyy: 0.0065468090625 94 | iyz: 0 95 | izz: 0.00354375 96 | wrist_1: 97 | ixx: 0.0016106414999999998 98 | ixy: 0 99 | ixz: 0 100 | iyy: 0.0016106414999999998 101 | iyz: 0 102 | izz: 0.00225 103 | wrist_2: 104 | ixx: 0.0015721739999999998 105 | ixy: 0 106 | ixz: 0 107 | iyy: 0.0015721739999999998 108 | iyz: 0 109 | izz: 0.00225 110 | wrist_3: 111 | ixx: 0.00013626666666666665 112 | ixy: 0 113 | ixz: 0 114 | iyy: 0.00013626666666666665 115 | iyz: 0 116 | izz: 0.0001792 117 | -------------------------------------------------------------------------------- /config/ur3/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur3/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur3/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur3/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur3/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur3/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur3/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.1198 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur3/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur3/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.0275 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur3/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur3/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.085 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur3/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur3/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.083 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur3/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur3/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: -0.00255 119 | z: -0.082 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur30/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.23630000000000001 6 | roll: -0 7 | pitch: 0 8 | yaw: -0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: -0 16 | forearm: 17 | x: -0.63700000000000001 18 | y: 0 19 | z: 0 20 | roll: -0 21 | pitch: 0 22 | yaw: -0 23 | wrist_1: 24 | x: -0.50370000000000004 25 | y: 0 26 | z: 0.20100000000000001 27 | roll: -0 28 | pitch: 0 29 | yaw: -0 30 | wrist_2: 31 | x: 0 32 | y: -0.1593 33 | z: -3.2672976162492252e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: -0 37 | wrist_3: 38 | x: 0 39 | y: 0.15429999999999999 40 | z: -3.1647459019915597e-11 41 | roll: 1.5707963265897931 42 | pitch: 3.1415926535897931 43 | yaw: 3.1415926535897931 44 | hash: calib_12001109639981648826 45 | -------------------------------------------------------------------------------- /config/ur30/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR20, Version 5.14 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/203281/706-276-00_UR20_User_Manual_en_Global.pdf 7 | joint_limits: 8 | shoulder_pan_joint: 9 | # acceleration limits are not publicly available 10 | has_acceleration_limits: false 11 | has_effort_limits: true 12 | has_position_limits: true 13 | has_velocity_limits: true 14 | max_effort: 738.0 15 | max_position: !degrees 360.0 16 | max_velocity: !degrees 120.0 17 | min_position: !degrees -360.0 18 | shoulder_lift_joint: 19 | # acceleration limits are not publicly available 20 | has_acceleration_limits: false 21 | has_effort_limits: true 22 | has_position_limits: true 23 | has_velocity_limits: true 24 | max_effort: 738.0 25 | max_position: !degrees 360.0 26 | max_velocity: !degrees 120.0 27 | min_position: !degrees -360.0 28 | elbow_joint: 29 | # acceleration limits are not publicly available 30 | has_acceleration_limits: false 31 | has_effort_limits: true 32 | has_position_limits: true 33 | has_velocity_limits: true 34 | max_effort: 433.0 35 | # we artificially limit this joint to half its actual joint position limit 36 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 37 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 38 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 39 | # 40 | # This leads to planning problems as the search space will be divided into 41 | # two sections, with no connections from one to the other. 42 | # 43 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 44 | # more information. 45 | max_position: !degrees 180.0 46 | max_velocity: !degrees 150.0 47 | min_position: !degrees -180.0 48 | wrist_1_joint: 49 | # acceleration limits are not publicly available 50 | has_acceleration_limits: false 51 | has_effort_limits: true 52 | has_position_limits: true 53 | has_velocity_limits: true 54 | max_effort: 107.0 55 | max_position: !degrees 360.0 56 | max_velocity: !degrees 210.0 57 | min_position: !degrees -360.0 58 | wrist_2_joint: 59 | # acceleration limits are not publicly available 60 | has_acceleration_limits: false 61 | has_effort_limits: true 62 | has_position_limits: true 63 | has_velocity_limits: true 64 | max_effort: 107.0 65 | max_position: !degrees 360.0 66 | max_velocity: !degrees 210.0 67 | min_position: !degrees -360.0 68 | wrist_3_joint: 69 | # acceleration limits are not publicly available 70 | has_acceleration_limits: false 71 | has_effort_limits: true 72 | has_position_limits: true 73 | has_velocity_limits: true 74 | max_effort: 107.0 75 | max_position: !degrees 360.0 76 | max_velocity: !degrees 210.0 77 | min_position: !degrees -360.0 78 | -------------------------------------------------------------------------------- /config/ur30/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | # taken from https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 6 | base_mass: 4.0 # This mass might be incorrect 7 | shoulder_mass: 16.343 8 | upper_arm_mass: 28.542 9 | forearm_mass: 7.156 10 | wrist_1_mass: 3.054 11 | wrist_2_mass: 3.126 12 | wrist_3_mass: 0.926 13 | 14 | links: 15 | base: 16 | radius: 0.075 17 | length: 0.038 18 | 19 | center_of_mass: 20 | shoulder_cog: 21 | x: -0.0001 # model.x 22 | y: -0.0069 # -model.z 23 | z: -0.06 # model.y 24 | upper_arm_cog: 25 | x: -0.2476 # model.x - upperarm_length 26 | y: 0.0 # model.y 27 | z: 0.2103 # model.z 28 | forearm_cog: 29 | x: -0.278 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0629 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.0353 # -model.z 35 | z: -0.0048 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.0341 # model.z 39 | z: -0.0046 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.0293 # model.z 44 | 45 | rotation: 46 | shoulder: 47 | roll: 1.570796326794897 48 | pitch: 0 49 | yaw: 0 50 | upper_arm: 51 | roll: 0 52 | pitch: 0 53 | yaw: 0 54 | forearm: 55 | roll: 0 56 | pitch: 0 57 | yaw: 0 58 | wrist_1: 59 | roll: 1.570796326794897 60 | pitch: 0 61 | yaw: 0 62 | wrist_2: 63 | roll: -1.570796326794897 64 | pitch: 0 65 | yaw: 0 66 | wrist_3: 67 | roll: 0 68 | pitch: 0 69 | yaw: 0 70 | 71 | tensor: 72 | shoulder: 73 | ixx: 0.03351 74 | ixy: 0.00002 75 | ixz: -0.00001 76 | iyy: 0.03374 77 | iyz: 0.00374 78 | izz: 0.02100 79 | upper_arm: 80 | ixx: 0.02796 81 | ixy: -0.00010 82 | ixz: -0.00720 83 | iyy: 0.47558 84 | iyz: 0.00003 85 | izz: 0.47635 86 | forearm: 87 | ixx: 0.01091 88 | ixy: 0.00006 89 | ixz: 0.01012 90 | iyy: 0.12060 91 | iyz: 0.00001 92 | izz: 0.11714 93 | wrist_1: 94 | ixx: 0.00609 95 | ixy: -0.00001 96 | ixz: 0.0 97 | iyy: 0.00245 98 | iyz: 0.00083 99 | izz: 0.00579 100 | wrist_2: 101 | ixx: 0.00389 102 | ixy: 0.00001 103 | ixz: 0.0 104 | iyy: 0.00219 105 | iyz: -0.00045 106 | izz: 0.00363 107 | wrist_3: 108 | ixx: 0.00117 109 | ixy: 0.0 110 | ixz: 0.0 111 | iyy: 0.00118 112 | iyz: 0.0 113 | izz: 0.00084 114 | -------------------------------------------------------------------------------- /config/ur30/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur20/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur20/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur20/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur20/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur30/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur30/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.260 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur30/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur30/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.043 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur20/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur20/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.0775 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur20/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur20/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.0749 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur20/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur20/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.07 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur3e/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.15185 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.24355 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.2132 25 | y: 0 26 | z: 0.13105 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.08535 33 | z: -1.750557762378351e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.0921 40 | z: -1.8890025766262e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_16756443741236045476 45 | -------------------------------------------------------------------------------- /config/ur3e/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR3e, Version 5.8 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69043/99403_UR3e_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 54.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 180.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 54.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 180.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 28.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 9.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 360.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 9.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 360.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: false 76 | has_velocity_limits: true 77 | max_effort: 9.0 78 | max_velocity: !degrees 360.0 79 | -------------------------------------------------------------------------------- /config/ur3e/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 2.0 # This mass might be incorrect 6 | shoulder_mass: 1.98 7 | upper_arm_mass: 3.4445 8 | forearm_mass: 1.437 9 | wrist_1_mass: 0.871 10 | wrist_2_mass: 0.805 11 | wrist_3_mass: 0.261 12 | 13 | links: 14 | base: 15 | radius: 0.075 16 | length: 0.038 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.0 # model.x 22 | y: 0.0 # -model.z 23 | z: -0.02 # model.y 24 | upper_arm_cog: 25 | x: -0.11355 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.1157 # model.z 28 | forearm_cog: 29 | x: -0.1632 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0238 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.01 # -model.z 35 | z: 0.0 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.01 # model.z 39 | z: 0.0 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.02 # model.z 44 | 45 | rotation: 46 | shoulder: 47 | roll: 1.570796326794897 48 | pitch: 0 49 | yaw: 0 50 | upper_arm: 51 | roll: 0 52 | pitch: 0 53 | yaw: 0 54 | forearm: 55 | roll: 0 56 | pitch: 0 57 | yaw: 0 58 | wrist_1: 59 | roll: 1.570796326794897 60 | pitch: 0 61 | yaw: 0 62 | wrist_2: 63 | roll: -1.570796326794897 64 | pitch: 0 65 | yaw: 0 66 | wrist_3: 67 | roll: 0 68 | pitch: 0 69 | yaw: 0 70 | 71 | tensor: 72 | shoulder: 73 | ixx: 0.0027657 74 | ixy: 0.0000096 75 | ixz: -0.0000149 76 | iyy: 0.0021501 77 | iyz: 0.0001873 78 | izz: 0.0025626 79 | upper_arm: 80 | ixx: 0.0042623 81 | ixy: -0.0000409 82 | ixz: -0.0014960 83 | iyy: 0.0460284 84 | iyz: -0.0000129 85 | izz: 0.0448947 86 | forearm: 87 | ixx: 0.0010511 88 | ixy: 0.0 89 | ixz: -0.0000331 90 | iyy: 0.0113396 91 | iyz: 0.0000022 92 | izz: 0.0110895 93 | wrist_1: 94 | ixx: 0.0008174 95 | ixy: -0.0000005 96 | ixz: 0.0000021 97 | iyy: 0.0006844 98 | iyz: 0.0000617 99 | izz: 0.0005497 100 | wrist_2: 101 | ixx: 0.0006059 102 | ixy: -0.0000006 103 | ixz: -0.0000006 104 | iyy: 0.0005837 105 | iyz: -0.0000271 106 | izz: 0.0003831 107 | wrist_3: 108 | ixx: 0.0001080 109 | ixy: -0.0000001 110 | ixz: -0.0000001 111 | iyy: 0.0001086 112 | iyz: -0.0000002 113 | izz: 0.0001371 114 | -------------------------------------------------------------------------------- /config/ur3e/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur3e/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur3e/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur3e/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur3e/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur3e/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur3e/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.120 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur3e/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur3e/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.027 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur3e/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur3e/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.104 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur3e/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur3e/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.08535 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur3e/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur3e/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.0921 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur5/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.089159 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.425 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.39225 25 | y: 0 26 | z: 0.10915 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.09465 33 | z: -1.941303950897609e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.0823 40 | z: -1.688001216681175e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_209549117540498681 45 | -------------------------------------------------------------------------------- /config/ur5/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - UR5 User Manual, Universal Robots, UR5/CB3, Version 3.13 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69371/99202_UR5_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 150.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 180.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 150.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 180.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 28.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 28.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 28.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur5/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 3.7000 7 | upper_arm_mass: 8.3930 8 | forearm_mass: 2.33 9 | wrist_1_mass: 1.2190 10 | wrist_2_mass: 1.2190 11 | wrist_3_mass: 0.1879 12 | 13 | links: 14 | base: 15 | radius: 0.06 16 | length: 0.05 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.0 # model.x 22 | y: -0.00193 # -model.z 23 | z: -0.02561 # model.y 24 | upper_arm_cog: 25 | x: -0.2125 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.11336 # model.z 28 | forearm_cog: 29 | x: -0.24225 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0265 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.01634 # -model.z 35 | z: -0.0018 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.01634 # model.z 39 | z: -0.0018 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.001159 # model.z 44 | 45 | # compatible with cylinder approximation 46 | rotation: 47 | shoulder: 48 | roll: 0 49 | pitch: 0 50 | yaw: 0 51 | upper_arm: 52 | roll: 0 53 | pitch: 1.570796326794897 54 | yaw: 0 55 | forearm: 56 | roll: 0 57 | pitch: 1.570796326794897 58 | yaw: 0 59 | wrist_1: 60 | roll: 0 61 | pitch: 0 62 | yaw: 0 63 | wrist_2: 64 | roll: 0 65 | pitch: 0 66 | yaw: 0 67 | wrist_3: 68 | roll: 0 69 | pitch: 0 70 | yaw: 0 71 | 72 | # generated using cylinder approximation 73 | tensor: 74 | shoulder: 75 | ixx: 0.014972358333333331 76 | ixy: 0 77 | ixz: 0 78 | iyy: 0.014972358333333331 79 | iyz: 0 80 | izz: 0.01040625 81 | upper_arm: 82 | ixx: 0.13388583541666665 83 | ixy: 0 84 | ixz: 0 85 | iyy: 0.13388583541666665 86 | iyz: 0 87 | izz: 0.0151074 88 | forearm: 89 | ixx: 0.031216803515624995 90 | ixy: 0 91 | ixz: 0 92 | iyy: 0.031216803515624995 93 | iyz: 0 94 | izz: 0.004095 95 | wrist_1: 96 | ixx: 0.002013889583333333 97 | ixy: 0 98 | ixz: 0 99 | iyy: 0.002013889583333333 100 | iyz: 0 101 | izz: 0.0021942 102 | wrist_2: 103 | ixx: 0.0018310395833333333 104 | ixy: 0 105 | ixz: 0 106 | iyy: 0.0018310395833333333 107 | iyz: 0 108 | izz: 0.0021942 109 | wrist_3: 110 | ixx: 8.062475833333332e-05 111 | ixy: 0 112 | ixz: 0 113 | iyy: 8.062475833333332e-05 114 | iyz: 0 115 | izz: 0.0001321171875 116 | -------------------------------------------------------------------------------- /config/ur5/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur5/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur5/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur5/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur5/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur5/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur5/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.13585 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur5/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur5/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.0165 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur5/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur5/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.093 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur5/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur5/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.095 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur5/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur5/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.0818 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur5e/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1625 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.425 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.3922 25 | y: 0 26 | z: 0.1333 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.0997 33 | z: -2.044881182297852e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.09959999999999999 40 | z: -2.042830148012698e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_12788084448423163542 45 | -------------------------------------------------------------------------------- /config/ur5e/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR5e, Version 5.8 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69091/99404_UR5e_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 150.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 180.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 150.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 180.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 28.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 28.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 28.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur5e/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 3.761 7 | upper_arm_mass: 8.058 8 | forearm_mass: 2.846 9 | wrist_1_mass: 1.37 10 | wrist_2_mass: 1.3 11 | wrist_3_mass: 0.365 12 | 13 | links: 14 | base: 15 | radius: 0.06 16 | length: 0.05 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.0 # model.x 22 | y: -0.00193 # -model.z 23 | z: -0.02561 # model.y 24 | upper_arm_cog: 25 | x: -0.2125 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.11336 # model.z 28 | forearm_cog: 29 | x: -0.2422 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0265 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.01634 # -model.z 35 | z: -0.0018 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.01634 # model.z 39 | z: -0.0018 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.001159 # model.z 44 | 45 | rotation: 46 | shoulder: 47 | roll: 1.570796326794897 48 | pitch: 0 49 | yaw: 0 50 | upper_arm: 51 | roll: 0 52 | pitch: 0 53 | yaw: 0 54 | forearm: 55 | roll: 0 56 | pitch: 0 57 | yaw: 0 58 | wrist_1: 59 | roll: 1.570796326794897 60 | pitch: 0 61 | yaw: 0 62 | wrist_2: 63 | roll: -1.570796326794897 64 | pitch: 0 65 | yaw: 0 66 | wrist_3: 67 | roll: 0 68 | pitch: 0 69 | yaw: 0 70 | 71 | tensor: 72 | shoulder: 73 | ixx: 0.00700210 74 | ixy: 0.00000073 75 | ixz: -0.00001053 76 | iyy: 0.00648091 77 | iyz: 0.00049994 78 | izz: 0.00657286 79 | upper_arm: 80 | ixx: 0.01505885 81 | ixy: -0.00005400 82 | ixz: 0.00000563 83 | iyy: 0.33388086 84 | iyz: -0.00000181 85 | izz: 0.33247207 86 | forearm: 87 | ixx: 0.00399632 88 | ixy: -0.00001365 89 | ixz: 0.00137272 90 | iyy: 0.07879254 91 | iyz: -0.00000660 92 | izz: 0.07848510 93 | wrist_1: 94 | ixx: 0.00165491 95 | ixy: -0.00000282 96 | ixz: -0.00000438 97 | iyy: 0.00135962 98 | iyz: 0.00010157 99 | izz: 0.00126279 100 | wrist_2: 101 | ixx: 0.00135617 102 | ixy: -0.00000274 103 | ixz: 0.00000444 104 | iyy: 0.00127827 105 | iyz: -0.00005048 106 | izz: 0.00096614 107 | wrist_3: 108 | ixx: 0.00018694 109 | ixy: 0.00000006 110 | ixz: -0.00000017 111 | iyy: 0.00018908 112 | iyz: -0.00000092 113 | izz: 0.00025756 114 | -------------------------------------------------------------------------------- /config/ur5e/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur5e/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur5e/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur5e/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur5e/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur5e/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur5e/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.138 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur5e/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur5e/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.007 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur5e/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur5e/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.127 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur5e/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur5e/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.0997 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur5e/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur5e/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.0989 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /config/ur7e/default_kinematics.yaml: -------------------------------------------------------------------------------- 1 | kinematics: 2 | shoulder: 3 | x: 0 4 | y: 0 5 | z: 0.1625 6 | roll: 0 7 | pitch: 0 8 | yaw: 0 9 | upper_arm: 10 | x: 0 11 | y: 0 12 | z: 0 13 | roll: 1.570796327 14 | pitch: 0 15 | yaw: 0 16 | forearm: 17 | x: -0.425 18 | y: 0 19 | z: 0 20 | roll: 0 21 | pitch: 0 22 | yaw: 0 23 | wrist_1: 24 | x: -0.3922 25 | y: 0 26 | z: 0.1333 27 | roll: 0 28 | pitch: 0 29 | yaw: 0 30 | wrist_2: 31 | x: 0 32 | y: -0.0997 33 | z: -2.044881182297852e-11 34 | roll: 1.570796327 35 | pitch: 0 36 | yaw: 0 37 | wrist_3: 38 | x: 0 39 | y: 0.09959999999999999 40 | z: -2.042830148012698e-11 41 | roll: 1.570796326589793 42 | pitch: 3.141592653589793 43 | yaw: 3.141592653589793 44 | hash: calib_12788084448423163542 45 | -------------------------------------------------------------------------------- /config/ur7e/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # Joints limits 2 | # 3 | # Sources: 4 | # 5 | # - Universal Robots e-Series, User Manual, UR5e, Version 5.8 6 | # https://s3-eu-west-1.amazonaws.com/ur-support-site/69091/99404_UR5e_User_Manual_en_Global.pdf 7 | # - Support > Articles > UR articles > Max. joint torques 8 | # https://www.universal-robots.com/articles/ur-articles/max-joint-torques 9 | # retrieved: 2020-06-16, last modified: 2020-06-09 10 | joint_limits: 11 | shoulder_pan_joint: 12 | # acceleration limits are not publicly available 13 | has_acceleration_limits: false 14 | has_effort_limits: true 15 | has_position_limits: true 16 | has_velocity_limits: true 17 | max_effort: 150.0 18 | max_position: !degrees 360.0 19 | max_velocity: !degrees 180.0 20 | min_position: !degrees -360.0 21 | shoulder_lift_joint: 22 | # acceleration limits are not publicly available 23 | has_acceleration_limits: false 24 | has_effort_limits: true 25 | has_position_limits: true 26 | has_velocity_limits: true 27 | max_effort: 150.0 28 | max_position: !degrees 360.0 29 | max_velocity: !degrees 180.0 30 | min_position: !degrees -360.0 31 | elbow_joint: 32 | # acceleration limits are not publicly available 33 | has_acceleration_limits: false 34 | has_effort_limits: true 35 | has_position_limits: true 36 | has_velocity_limits: true 37 | max_effort: 150.0 38 | # we artificially limit this joint to half its actual joint position limit 39 | # to avoid (MoveIt/OMPL) planning problems, as due to the physical 40 | # construction of the robot, it's impossible to rotate the 'elbow_joint' 41 | # over more than approx +- 1 pi (the shoulder lift joint gets in the way). 42 | # 43 | # This leads to planning problems as the search space will be divided into 44 | # two sections, with no connections from one to the other. 45 | # 46 | # Refer to https://github.com/ros-industrial/universal_robot/issues/265 for 47 | # more information. 48 | max_position: !degrees 180.0 49 | max_velocity: !degrees 180.0 50 | min_position: !degrees -180.0 51 | wrist_1_joint: 52 | # acceleration limits are not publicly available 53 | has_acceleration_limits: false 54 | has_effort_limits: true 55 | has_position_limits: true 56 | has_velocity_limits: true 57 | max_effort: 28.0 58 | max_position: !degrees 360.0 59 | max_velocity: !degrees 180.0 60 | min_position: !degrees -360.0 61 | wrist_2_joint: 62 | # acceleration limits are not publicly available 63 | has_acceleration_limits: false 64 | has_effort_limits: true 65 | has_position_limits: true 66 | has_velocity_limits: true 67 | max_effort: 28.0 68 | max_position: !degrees 360.0 69 | max_velocity: !degrees 180.0 70 | min_position: !degrees -360.0 71 | wrist_3_joint: 72 | # acceleration limits are not publicly available 73 | has_acceleration_limits: false 74 | has_effort_limits: true 75 | has_position_limits: true 76 | has_velocity_limits: true 77 | max_effort: 28.0 78 | max_position: !degrees 360.0 79 | max_velocity: !degrees 180.0 80 | min_position: !degrees -360.0 81 | -------------------------------------------------------------------------------- /config/ur7e/physical_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Physical parameters 2 | 3 | 4 | inertia_parameters: 5 | base_mass: 4.0 # This mass might be incorrect 6 | shoulder_mass: 3.761 7 | upper_arm_mass: 8.058 8 | forearm_mass: 2.846 9 | wrist_1_mass: 1.37 10 | wrist_2_mass: 1.3 11 | wrist_3_mass: 0.365 12 | 13 | links: 14 | base: 15 | radius: 0.06 16 | length: 0.05 17 | 18 | # model referring to https://www.universal-robots.com/articles/ur/application-installation/dh-parameters-for-calculations-of-kinematics-and-dynamics/ 19 | center_of_mass: 20 | shoulder_cog: 21 | x: 0.0 # model.x 22 | y: -0.00193 # -model.z 23 | z: -0.02561 # model.y 24 | upper_arm_cog: 25 | x: -0.2125 # model.x - upper_arm_length 26 | y: 0.0 # model.y 27 | z: 0.11336 # model.z 28 | forearm_cog: 29 | x: -0.2422 # model.x - forearm_length 30 | y: 0.0 # model.y 31 | z: 0.0265 # model.z 32 | wrist_1_cog: 33 | x: 0.0 # model.x 34 | y: -0.01634 # -model.z 35 | z: -0.0018 # model.y 36 | wrist_2_cog: 37 | x: 0.0 # model.x 38 | y: 0.01634 # model.z 39 | z: -0.0018 # -model.y 40 | wrist_3_cog: 41 | x: 0.0 # model.x 42 | y: 0.0 # model.y 43 | z: -0.001159 # model.z 44 | 45 | # compatible with cylinder approximation 46 | rotation: 47 | shoulder: 48 | roll: 0 49 | pitch: 0 50 | yaw: 0 51 | upper_arm: 52 | roll: 0 53 | pitch: 1.570796326794897 54 | yaw: 0 55 | forearm: 56 | roll: 0 57 | pitch: 1.570796326794897 58 | yaw: 0 59 | wrist_1: 60 | roll: 0 61 | pitch: 0 62 | yaw: 0 63 | wrist_2: 64 | roll: 0 65 | pitch: 0 66 | yaw: 0 67 | wrist_3: 68 | roll: 0 69 | pitch: 0 70 | yaw: 0 71 | 72 | # generated using cylinder approximation 73 | tensor: 74 | shoulder: 75 | ixx: 0.010267499999999999 76 | ixy: 0 77 | ixz: 0 78 | iyy: 0.010267499999999999 79 | iyz: 0 80 | izz: 0.00666 81 | upper_arm: 82 | ixx: 0.13388583541666665 83 | ixy: 0 84 | ixz: 0 85 | iyy: 0.13388583541666665 86 | iyz: 0 87 | izz: 0.0151074 88 | forearm: 89 | ixx: 0.03120936758333333 90 | ixy: 0 91 | ixz: 0 92 | iyy: 0.03120936758333333 93 | iyz: 0 94 | izz: 0.004095 95 | wrist_1: 96 | ixx: 0.0025599 97 | ixy: 0 98 | ixz: 0 99 | iyy: 0.0025599 100 | iyz: 0 101 | izz: 0.0021942 102 | wrist_2: 103 | ixx: 0.0025599 104 | ixy: 0 105 | ixz: 0 106 | iyy: 0.0025599 107 | iyz: 0 108 | izz: 0.0021942 109 | wrist_3: 110 | ixx: 9.890414008333333e-05 111 | ixy: 0 112 | ixz: 0 113 | iyy: 9.890414008333333e-05 114 | iyz: 0 115 | izz: 0.0001321171875 116 | -------------------------------------------------------------------------------- /config/ur7e/visual_parameters.yaml: -------------------------------------------------------------------------------- 1 | # Visualisation 2 | 3 | mesh_files: 4 | base: 5 | visual: 6 | mesh: 7 | package: ur_description 8 | path: meshes/ur5e/visual/base.dae 9 | collision: 10 | mesh: 11 | package: ur_description 12 | path: meshes/ur5e/collision/base.stl 13 | mesh_offset: 14 | x: 0.0 15 | y: 0.0 16 | z: 0.0 17 | roll: 0.0 18 | pitch: 0.0 19 | yaw: !degrees 180 20 | 21 | shoulder: 22 | visual: 23 | mesh: 24 | package: ur_description 25 | path: meshes/ur5e/visual/shoulder.dae 26 | collision: 27 | mesh: 28 | package: ur_description 29 | path: meshes/ur5e/collision/shoulder.stl 30 | mesh_offset: 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | roll: 0.0 35 | pitch: 0.0 36 | yaw: !degrees 180 37 | 38 | upper_arm: 39 | visual: 40 | mesh: 41 | package: ur_description 42 | path: meshes/ur5e/visual/upperarm.dae 43 | collision: 44 | mesh: 45 | package: ur_description 46 | path: meshes/ur5e/collision/upperarm.stl 47 | mesh_files: 48 | mesh_offset: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.138 52 | roll: !degrees 90 53 | pitch: 0.0 54 | yaw: !degrees -90 55 | 56 | forearm: 57 | visual: 58 | mesh: 59 | package: ur_description 60 | path: meshes/ur5e/visual/forearm.dae 61 | collision: 62 | mesh: 63 | package: ur_description 64 | path: meshes/ur5e/collision/forearm.stl 65 | mesh_offset: 66 | x: 0.0 67 | y: 0.0 68 | z: 0.007 69 | roll: !degrees 90 70 | pitch: 0.0 71 | yaw: !degrees -90 72 | 73 | wrist_1: 74 | visual: 75 | mesh: 76 | package: ur_description 77 | path: meshes/ur5e/visual/wrist1.dae 78 | collision: 79 | mesh: 80 | package: ur_description 81 | path: meshes/ur5e/collision/wrist1.stl 82 | mesh_offset: 83 | x: 0.0 84 | y: 0.0 85 | z: -0.127 86 | roll: !degrees 90 87 | pitch: 0.0 88 | yaw: 0.0 89 | 90 | wrist_2: 91 | visual: 92 | mesh: 93 | package: ur_description 94 | path: meshes/ur5e/visual/wrist2.dae 95 | collision: 96 | mesh: 97 | package: ur_description 98 | path: meshes/ur5e/collision/wrist2.stl 99 | mesh_offset: 100 | x: 0.0 101 | y: 0.0 102 | z: -0.0997 103 | roll: 0.0 104 | pitch: 0.0 105 | yaw: 0.0 106 | 107 | wrist_3: 108 | visual: 109 | mesh: 110 | package: ur_description 111 | path: meshes/ur5e/visual/wrist3.dae 112 | collision: 113 | mesh: 114 | package: ur_description 115 | path: meshes/ur5e/collision/wrist3.stl 116 | mesh_offset: 117 | x: 0.0 118 | y: 0.0 119 | z: -0.0989 120 | roll: !degrees 90 121 | pitch: 0.0 122 | yaw: 0.0 123 | -------------------------------------------------------------------------------- /doc/conf.py: -------------------------------------------------------------------------------- 1 | project = "ur_description" 2 | copyright = "2025, Universal Robots A/S" 3 | author = "Felix Exner" 4 | 5 | # The short X.Y version 6 | version = "" 7 | # The full version, including alpha/beta/rc tags 8 | release = "" 9 | 10 | # -- General configuration --------------------------------------------------- 11 | 12 | # If your documentation needs a minimal Sphinx version, state it here. 13 | # 14 | # needs_sphinx = '1.0' 15 | 16 | # Add any Sphinx extension module names here, as strings. They can be 17 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 18 | # ones. 19 | extensions = [] 20 | 21 | # Add any paths that contain templates here, relative to this directory. 22 | templates_path = ["_templates"] 23 | 24 | # The suffix(es) of source filenames. 25 | # You can specify multiple suffix as a list of string: 26 | # 27 | source_suffix = [".rst"] 28 | 29 | # The master toctree document. 30 | master_doc = "index" 31 | 32 | numfig = True 33 | 34 | # The language for content autogenerated by Sphinx. Refer to documentation 35 | # for a list of supported languages. 36 | # 37 | # This is also used if you do content translation via gettext catalogs. 38 | # Usually you set "language" from the command line for these cases. 39 | language = None 40 | 41 | # List of patterns, relative to source directory, that match files and 42 | # directories to ignore when looking for source files. 43 | # This pattern also affects html_static_path and html_extra_path. 44 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] 45 | 46 | # The name of the Pygments (syntax highlighting) style to use. 47 | pygments_style = None 48 | 49 | 50 | # -- Options for HTML output ------------------------------------------------- 51 | 52 | # The theme to use for HTML and HTML Help pages. See the documentation for 53 | # a list of builtin themes. 54 | # 55 | html_theme = "alabaster" 56 | 57 | # Theme options are theme-specific and customize the look and feel of a theme 58 | # further. For a list of options available for each theme, see the 59 | # documentation. 60 | # 61 | # html_theme_options = {} 62 | 63 | # Add any paths that contain custom static files (such as style sheets) here, 64 | # relative to this directory. They are copied after the builtin static files, 65 | # so a file named "default.css" will overwrite the builtin "default.css". 66 | html_static_path = ["_static"] 67 | 68 | # Custom sidebar templates, must be a dictionary that maps document names 69 | # to template names. 70 | # 71 | # The default sidebars (for documents that don't match any pattern) are 72 | # defined by theme itself. Builtin themes are using these templates by 73 | # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', 74 | # 'searchbox.html']``. 75 | # 76 | # html_sidebars = {} 77 | 78 | 79 | # -- Options for HTMLHelp output --------------------------------------------- 80 | 81 | # Output file base name for HTML help builder. 82 | htmlhelp_basename = "ur_description_doc" 83 | -------------------------------------------------------------------------------- /doc/frames/base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/doc/frames/base.png -------------------------------------------------------------------------------- /doc/frames/base_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/doc/frames/base_link.png -------------------------------------------------------------------------------- /doc/index.rst: -------------------------------------------------------------------------------- 1 | :github_url: https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/blob/rolling/doc/index.rst 2 | 3 | .. _ur_description: 4 | 5 | ur_description 6 | ============== 7 | 8 | This package contains the kinematic and visual description of Universal Robots manipulators for ROS 9 | 2. 10 | 11 | .. toctree:: 12 | :maxdepth: 4 13 | :caption: Contents: 14 | 15 | robot_frames 16 | 17 | .. contents:: 18 | :depth: 2 19 | :local: 20 | 21 | Structure of the repository 22 | --------------------------- 23 | 24 | As the kinematics of all models is roughly the same and varies only in the meshes, the DH 25 | parameters and the physical parameters, the description uses xacro macros in order to make it reuse 26 | as much as possible. This way it is less likely that errors are introduced in one of the models. 27 | 28 | Therefore, the description is split up into multiple URDF/XACRO files: 29 | 30 | - ``urdf/ur_macro.xacro`` - macro file with UR-manipulator description. This file is usually included into external projects to visualize and configure UR manipulators properly. An example how to use this macro is in ``urdf/ur.urdf.xacro`` file. 31 | - ``urdf/ur.urdf.xacro`` - an example scene where the robot is standing alone without any 32 | environment. This is obviously not a real-life example, as the robot has to be mounted somewhere. 33 | 34 | The kinematic description itself uses config files to get parametrized to the correct robot model. 35 | 36 | .. image:: structure.svg 37 | :alt: Structure of the description's parametrization 38 | 39 | Basically, the description can be modified using configuration values stored in four files: 40 | - ``config/urXX/default_kinematics.yaml`` - This contains the calibration values as they can be 41 | extracted from the robot. Changing these values with the one extracted from a real robot will 42 | result in a description matching the real robot exactly (w.r.t the ``tool0`` frame). It is highly 43 | recommended to use matching kinematic values in real-world applications. 44 | - ``config/urXX/joint_limits.yaml`` - If you'd like to further restrict the robot's joint limits, 45 | these limits can be modified there. 46 | - ``config/urXX/physical_parameters.yaml`` - Everything regarding physics simulation parameters 47 | (e.g. inertia poses and values) can be tuned here. 48 | - ``config/urXX/visual_parameters.yaml`` - Some users change certain visual aspects, e.g. replacing 49 | the cap on the wrist_3_link. This config file specifies which meshes (both, visual and collision) 50 | should be used. 51 | 52 | The four configuration files have to be passed to ``ur_macro.xacro`` (more specific to the macro 53 | defined in that file) which is done inside the ``ur.urdf.xacro``. Contents of the files are parsed 54 | inside ``inc/ur_common.xacro``. 55 | 56 | Arguments that have to be passed to the main ``ur.urdf.xacro`` file are: 57 | - kinematics_params - Filename to the ``default_kinematics.yaml`` (or equivalent specific kinematics) file 58 | - joint_limit_params - Filename to the ``joint_limits.yaml`` file 59 | - physical_params - Filename to the ``physical_parameters.yaml`` file 60 | - visual_params - Filename to the ``visual_params.yaml`` file 61 | 62 | The launchfile ``launch/view_ur.launch.py`` abstracts these four parameters to one ``ur_type`` argument 63 | which will basically replace the ``urXX`` part of the paths as shown in the picture above. 64 | 65 | ros2_control integration 66 | ^^^^^^^^^^^^^^^^^^^^^^^^ 67 | 68 | `ros2_control `_ uses the robot_description in order to describe the 69 | robot's control structure. Since this will vary for the respective control method (Driver for real 70 | robot, Gazebo simulation, mock_hardware simulation, etc.) this is kept inside the respective control repository. This 71 | repository provides macros for including the common control description (Joints with their 72 | interfaces) as well as an example using mock hardware. 73 | 74 | - ``urdf/ros2_control_mock_hardware.xacro`` - xacro providing the control description for 75 | mock_hardware. 76 | - ``urdf/ur_mocked.urdf.xacro`` - an example for a controlled robot consisting of the kinematic 77 | description and the control description. 78 | - ``urdf/inc/ur_joint_control.xacro`` - macro for describing the joints' control structure. 79 | - ``urdf/inc/ur_sensors.xacro`` - macro for describing the robot's sensors for ros2_control 80 | 81 | Creating your own description including this description 82 | -------------------------------------------------------- 83 | 84 | In real-world applications you will most probably have a more complex description consisting of more objects than just the robot. It is recommended to create a separate ROS package containing this particular description. Inside this description you could also store your robot-specific kinematics parameters file. 85 | 86 | See the `custom workcell example `_ as an example for integrating this description in your own scene description. 87 | -------------------------------------------------------------------------------- /doc/migration/jazzy.rst: -------------------------------------------------------------------------------- 1 | :github_url: https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/blob/rolling/doc/migration/jazzy.rst 2 | 3 | ur_description 4 | ^^^^^^^^^^^^^^ 5 | 6 | ros2_control xacro tag moved to driver package 7 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 | 9 | The description package no longer adds the ``ros2_control`` tag to the robot's URDF. This is done 10 | in the driver / simulation repos now. The description package still provides macros for the 11 | system-independent parts such as joint configurations and an example using mock_hardware with the 12 | robot. 13 | 14 | Enforce absolute paths in launchfiles 15 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | 17 | The ``view_ur.launch.py`` launchfile now expects an absolute path for the description file and RViz 18 | config file. Before it was expecting a ``description_package`` and a ``description_file`` argument 19 | with a relative path to the package. 20 | This way, users can provide their own description file and / or RViz config without the need to 21 | replicate the complete package structure. 22 | 23 | Absolute paths can still be generated dynamically using a package + relative path structure inside 24 | other launchfiles or by using ``ros2 pkg prefix`` on the command line. 25 | -------------------------------------------------------------------------------- /doc/migration/kilted.rst: -------------------------------------------------------------------------------- 1 | :github_url: https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/blob/rolling/doc/migration/kilted.rst 2 | 3 | ur_description 4 | ^^^^^^^^^^^^^^ 5 | 6 | Radius definitions removed 7 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 | 9 | The ``shoulder_radius: ...`` and alike for the other joints got removed from the 10 | ``physical_parameters.yaml`` files. Alongside parsing these got removed from 11 | ``urdf/inc/ur_common.xacro``. Using the new parameter files with the old parser (if that git copied 12 | to a modified package) will fail. 13 | 14 | All mesh offsets are now part of the visual_parameters 15 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | 17 | The ``physical_parameters`` did contain the two mesh offsets for the shoulder and elbow. These got 18 | now moved to the ``visual_parameters.yaml`` files. 19 | 20 | Mesh offsets defined with all 6 DOF 21 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | 23 | The ``visual_parameters.yaml`` files now contain the mesh offsets for all 6 dimensions. The URDF 24 | expects this structure of the config files. So, the URDF won't accept any old visual parameter 25 | config files. They will have to be updated to contain the full ``mesh_offset`` entries. 26 | -------------------------------------------------------------------------------- /doc/robot_frames.rst: -------------------------------------------------------------------------------- 1 | Robot Frames 2 | ============ 3 | 4 | The URDF model uses multiple frames in the robot's base. This page describes why that is and what 5 | the purpose of each of those frames is. In particular, there are three frames in the robot's base: 6 | 7 | - ``base_link`` - This serves as the root link of the kinematic chain. It follows `REP-103 8 | `_ , where *forward* for the ``base_link`` is defined as the 9 | direction where the arm is pointing to for an all-zero joint configuration. 10 | 11 | .. figure:: frames/base_link.png 12 | :alt: The robot with an all-zeros joint configuration showing its base_link frame 13 | 14 | The robot with an all-zeros joint configuration showing its ``base_link`` frame 15 | 16 | - ``base`` - This is the frame that is used by the robot controller to represent the robot's *Base* 17 | feature (Polyscope 5) / *base* frame (PolyScope X). 18 | It has the same position as ``base_link`` but is rotated by 180 degrees around the Z-axis. 19 | This follows the `REP proposal 199 `_ with 20 | respect to the frame ``base`` and ``tool0``. 21 | 22 | Any lookup of ``tool0`` w.r.t. ``base`` will yield the same result as the pose shown on the teach 23 | pendant when ``base`` is selected as a reference there and the tool is set to "all-zero" being in 24 | the center of the flange. 25 | 26 | .. figure:: frames/base.png 27 | :alt: The robot with an all-zeros joint configuration showing its base frame 28 | 29 | The robot with an all-zeros joint configuration showing its ``base`` frame 30 | 31 | - ``base_link_inertia`` - Since some libraries such as KDL don't support inertia for the root link 32 | of a kinematic chain (see `ros/kdl_parser#27 `_), 33 | the ``base_link`` doesn't contain any meshes or inertia attached to it. Instead, those are 34 | attached to the ``base_link_inertia`` frame. This frame is rotated in the same way as ``base``. 35 | 36 | 37 | This leads to the following kinematic chain: 38 | 39 | .. code:: text 40 | 41 | base_link 42 | ├ base 43 | └ base_link_inertia 44 | └ shoulder_link 45 | └ upper_arm_link 46 | └ forearm_link 47 | └ wrist_1_link 48 | └ wrist_2_link 49 | └ wrist_3_link 50 | └ flange 51 | └ tool0 52 | 53 | The frame ``tool0`` is the tool frame as calculated using forward kinematics. If the robot has an 54 | all-zero tool configured, this should be equivalent to the tool frame on the control box / teach pendant. 55 | 56 | The frame ``flange`` is supposed to be used to attach custom tool frame or end-effectors to the 57 | robot. For instance, with a gripper's ``xacro:macro`` available, it is often possible to specify a 58 | parent frame, for which ``flange`` should be used. 59 | 60 | .. note:: 61 | 62 | When making TF lookups in the ROS system and comparing that to what the teach pendant shows, 63 | please consider that the robot uses the ``base`` frame as reference, not ``base_link``. Also, 64 | make sure that the teach pendant's view is set to "Base" and that any configured tool will have 65 | an effect on the values. 66 | -------------------------------------------------------------------------------- /launch/view_ur.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021 PickNik, Inc. 2 | # 3 | # Redistribution and use in source and binary forms, with or without 4 | # modification, are permitted provided that the following conditions are met: 5 | # 6 | # * Redistributions of source code must retain the above copyright 7 | # notice, this list of conditions and the following disclaimer. 8 | # 9 | # * Redistributions in binary form must reproduce the above copyright 10 | # notice, this list of conditions and the following disclaimer in the 11 | # documentation and/or other materials provided with the distribution. 12 | # 13 | # * Neither the name of the {copyright_holder} nor the names of its 14 | # contributors may be used to endorse or promote products derived from 15 | # this software without specific prior written permission. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | # 29 | # Author: Denis Stogl 30 | 31 | from launch import LaunchDescription 32 | from launch.actions import DeclareLaunchArgument 33 | from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution 34 | from launch_ros.actions import Node 35 | from launch_ros.substitutions import FindPackageShare 36 | from launch_ros.parameter_descriptions import ParameterValue 37 | 38 | 39 | def generate_launch_description(): 40 | declared_arguments = [] 41 | # UR specific arguments 42 | declared_arguments.append( 43 | DeclareLaunchArgument( 44 | "ur_type", 45 | description="Type/series of used UR robot.", 46 | choices=[ 47 | "ur3", 48 | "ur3e", 49 | "ur5", 50 | "ur5e", 51 | "ur7e", 52 | "ur10", 53 | "ur10e", 54 | "ur12e", 55 | "ur16e", 56 | "ur15", 57 | "ur20", 58 | "ur30", 59 | ], 60 | ) 61 | ) 62 | declared_arguments.append( 63 | DeclareLaunchArgument( 64 | "safety_limits", 65 | default_value="true", 66 | description="Enables the safety limits controller if true.", 67 | ) 68 | ) 69 | declared_arguments.append( 70 | DeclareLaunchArgument( 71 | "safety_pos_margin", 72 | default_value="0.15", 73 | description="The margin to lower and upper limits in the safety controller.", 74 | ) 75 | ) 76 | declared_arguments.append( 77 | DeclareLaunchArgument( 78 | "safety_k_position", 79 | default_value="20", 80 | description="k-position factor in the safety controller.", 81 | ) 82 | ) 83 | declared_arguments.append( 84 | DeclareLaunchArgument( 85 | "description_file", 86 | default_value=PathJoinSubstitution( 87 | [FindPackageShare("ur_description"), "urdf", "ur.urdf.xacro"] 88 | ), 89 | description="URDF/XACRO description file (absolute path) with the robot.", 90 | ) 91 | ) 92 | declared_arguments.append( 93 | DeclareLaunchArgument( 94 | "rviz_config_file", 95 | default_value=PathJoinSubstitution( 96 | [FindPackageShare("ur_description"), "rviz", "view_robot.rviz"] 97 | ), 98 | description="RViz config file (absolute path) to use when launching rviz.", 99 | ) 100 | ) 101 | declared_arguments.append( 102 | DeclareLaunchArgument( 103 | "tf_prefix", 104 | default_value='""', 105 | description="Prefix of the joint names, useful for " 106 | "multi-robot setup. If changed than also joint names in the controllers' configuration " 107 | "have to be updated.", 108 | ) 109 | ) 110 | 111 | # Initialize Arguments 112 | ur_type = LaunchConfiguration("ur_type") 113 | safety_limits = LaunchConfiguration("safety_limits") 114 | safety_pos_margin = LaunchConfiguration("safety_pos_margin") 115 | safety_k_position = LaunchConfiguration("safety_k_position") 116 | description_file = LaunchConfiguration("description_file") 117 | tf_prefix = LaunchConfiguration("tf_prefix") 118 | rviz_config_file = LaunchConfiguration("rviz_config_file") 119 | 120 | robot_description_content = Command( 121 | [ 122 | PathJoinSubstitution([FindExecutable(name="xacro")]), 123 | " ", 124 | description_file, 125 | " ", 126 | "safety_limits:=", 127 | safety_limits, 128 | " ", 129 | "safety_pos_margin:=", 130 | safety_pos_margin, 131 | " ", 132 | "safety_k_position:=", 133 | safety_k_position, 134 | " ", 135 | "name:=", 136 | "ur", 137 | " ", 138 | "ur_type:=", 139 | ur_type, 140 | " ", 141 | "tf_prefix:=", 142 | tf_prefix, 143 | ] 144 | ) 145 | robot_description = { 146 | "robot_description": ParameterValue(value=robot_description_content, value_type=str) 147 | } 148 | 149 | joint_state_publisher_node = Node( 150 | package="joint_state_publisher_gui", 151 | executable="joint_state_publisher_gui", 152 | ) 153 | robot_state_publisher_node = Node( 154 | package="robot_state_publisher", 155 | executable="robot_state_publisher", 156 | output="both", 157 | parameters=[robot_description], 158 | ) 159 | rviz_node = Node( 160 | package="rviz2", 161 | executable="rviz2", 162 | name="rviz2", 163 | output="log", 164 | arguments=["-d", rviz_config_file], 165 | ) 166 | 167 | nodes_to_start = [ 168 | joint_state_publisher_node, 169 | robot_state_publisher_node, 170 | rviz_node, 171 | ] 172 | 173 | return LaunchDescription(declared_arguments + nodes_to_start) 174 | -------------------------------------------------------------------------------- /meshes/ur10/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur10/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur10/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur10/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur10/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur10/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur10/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur10e/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur10e/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur15/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur15/visual/UR15_DIFF_8bit_2K.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur15/visual/UR15_DIFF_8bit_2K.jpg -------------------------------------------------------------------------------- /meshes/ur16e/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur16e/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur16e/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur16e/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur20/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur20/visual/UR20_DIFF_8bit_2K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur20/visual/UR20_DIFF_8bit_2K.png -------------------------------------------------------------------------------- /meshes/ur3/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur3/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur3/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur3/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur3/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur3/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur3/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur30/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur30/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur30/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur30/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur30/visual/UR30_DIFF_8bit_2K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur30/visual/UR30_DIFF_8bit_2K.png -------------------------------------------------------------------------------- /meshes/ur3e/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur3e/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur3e/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur3e/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur3e/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur3e/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur3e/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur3e/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur5/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5/collision/wrist3.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/base.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/forearm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/forearm.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/shoulder.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/shoulder.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/upperarm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/upperarm.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/wrist1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/wrist1.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/wrist2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/wrist2.stl -------------------------------------------------------------------------------- /meshes/ur5e/collision/wrist3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/meshes/ur5e/collision/wrist3.stl -------------------------------------------------------------------------------- /model.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UniversalRobots/Universal_Robots_ROS2_Description/c79a8e9778f8cac890a058ee5d1e8d4a204f8586/model.pdf -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ur_description 5 | 4.0.0 6 | 7 | URDF description for Universal Robots 8 | 9 | 10 | Nadia Hammoudeh Garcia 11 | Kelsey Hawkins 12 | G.A. vd. Hoorn 13 | Lovro Ivanov 14 | Mathias Ludtke 15 | Wim Meeussen 16 | Felix Messmer 17 | Miguel Prada Sarasola 18 | Denis Stogl 19 | Andy Zelenak 20 | Marvin Grosse Besselmann 21 | Tristan Schnell 22 | Lovro Ivanov 23 | Denis Stogl 24 | Vincenzo Di Pentima 25 | 26 | Felix Exner 27 | Rune Søe-Knudsen 28 | Universal Robots A/S 29 | 30 | BSD-3-Clause 31 | 32 | Universal Robots A/S’ Terms and Conditions for Use of Graphical Documentation 33 | 34 | 35 | 36 | 37 | https://github.com/UniversalRobots/Universal_Robots_ROS2_Description/issues 38 | https://github.com/UniversalRobots/Universal_Robots_ROS2_Description 39 | 40 | ament_cmake 41 | 42 | joint_state_publisher_gui 43 | launch 44 | launch_ros 45 | robot_state_publisher 46 | rviz2 47 | urdf 48 | xacro 49 | 50 | ament_cmake_pytest 51 | launch_testing_ament_cmake 52 | launch_testing_ros 53 | liburdfdom-tools 54 | xacro 55 | 56 | 57 | ament_cmake 58 | 59 | 60 | -------------------------------------------------------------------------------- /rviz/view_robot.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz_common/Displays 3 | Help Height: 87 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /RobotModel1/Description Topic1 8 | Splitter Ratio: 0.5 9 | Tree Height: 1096 10 | - Class: rviz_common/Selection 11 | Name: Selection 12 | - Class: rviz_common/Tool Properties 13 | Expanded: 14 | - /2D Goal Pose1 15 | - /Publish Point1 16 | Name: Tool Properties 17 | Splitter Ratio: 0.5886790156364441 18 | - Class: rviz_common/Views 19 | Expanded: 20 | - /Current View1 21 | Name: Views 22 | Splitter Ratio: 0.5 23 | Visualization Manager: 24 | Class: "" 25 | Displays: 26 | - Alpha: 0.5 27 | Cell Size: 1 28 | Class: rviz_default_plugins/Grid 29 | Color: 160; 160; 164 30 | Enabled: true 31 | Line Style: 32 | Line Width: 0.029999999329447746 33 | Value: Lines 34 | Name: Grid 35 | Normal Cell Count: 0 36 | Offset: 37 | X: 0 38 | Y: 0 39 | Z: 0 40 | Plane: XY 41 | Plane Cell Count: 10 42 | Reference Frame: 43 | Value: true 44 | - Alpha: 1 45 | Class: rviz_default_plugins/RobotModel 46 | Collision Enabled: false 47 | Description File: "" 48 | Description Source: Topic 49 | Description Topic: 50 | Depth: 5 51 | Durability Policy: Volatile 52 | History Policy: Keep Last 53 | Reliability Policy: Reliable 54 | Value: /robot_description 55 | Enabled: true 56 | Links: 57 | All Links Enabled: true 58 | Expand Joint Details: false 59 | Expand Link Details: false 60 | Expand Tree: false 61 | Link Tree Style: Links in Alphabetic Order 62 | base: 63 | Alpha: 1 64 | Show Axes: false 65 | Show Trail: false 66 | base_link: 67 | Alpha: 1 68 | Show Axes: false 69 | Show Trail: false 70 | base_link_inertia: 71 | Alpha: 1 72 | Show Axes: false 73 | Show Trail: false 74 | Value: true 75 | flange: 76 | Alpha: 1 77 | Show Axes: false 78 | Show Trail: false 79 | forearm_link: 80 | Alpha: 1 81 | Show Axes: false 82 | Show Trail: false 83 | Value: true 84 | shoulder_link: 85 | Alpha: 1 86 | Show Axes: false 87 | Show Trail: false 88 | Value: true 89 | tool0: 90 | Alpha: 1 91 | Show Axes: false 92 | Show Trail: false 93 | upper_arm_link: 94 | Alpha: 1 95 | Show Axes: false 96 | Show Trail: false 97 | Value: true 98 | wrist_1_link: 99 | Alpha: 1 100 | Show Axes: false 101 | Show Trail: false 102 | Value: true 103 | wrist_2_link: 104 | Alpha: 1 105 | Show Axes: false 106 | Show Trail: false 107 | Value: true 108 | wrist_3_link: 109 | Alpha: 1 110 | Show Axes: false 111 | Show Trail: false 112 | Value: true 113 | Name: RobotModel 114 | TF Prefix: "" 115 | Update Interval: 0 116 | Value: true 117 | Visual Enabled: true 118 | Enabled: true 119 | Global Options: 120 | Background Color: 48; 48; 48 121 | Fixed Frame: base_link 122 | Frame Rate: 30 123 | Name: root 124 | Tools: 125 | - Class: rviz_default_plugins/Interact 126 | Hide Inactive Objects: true 127 | - Class: rviz_default_plugins/MoveCamera 128 | - Class: rviz_default_plugins/Select 129 | - Class: rviz_default_plugins/FocusCamera 130 | - Class: rviz_default_plugins/Measure 131 | Line color: 128; 128; 0 132 | - Class: rviz_default_plugins/SetInitialPose 133 | Topic: 134 | Depth: 5 135 | Durability Policy: Volatile 136 | History Policy: Keep Last 137 | Reliability Policy: Reliable 138 | Value: /initialpose 139 | - Class: rviz_default_plugins/SetGoal 140 | Topic: 141 | Depth: 5 142 | Durability Policy: Volatile 143 | History Policy: Keep Last 144 | Reliability Policy: Reliable 145 | Value: /goal_pose 146 | - Class: rviz_default_plugins/PublishPoint 147 | Single click: true 148 | Topic: 149 | Depth: 5 150 | Durability Policy: Volatile 151 | History Policy: Keep Last 152 | Reliability Policy: Reliable 153 | Value: /clicked_point 154 | Transformation: 155 | Current: 156 | Class: rviz_default_plugins/TF 157 | Value: true 158 | Views: 159 | Current: 160 | Class: rviz_default_plugins/Orbit 161 | Distance: 3.493516445159912 162 | Enable Stereo Rendering: 163 | Stereo Eye Separation: 0.05999999865889549 164 | Stereo Focal Distance: 1 165 | Swap Stereo Eyes: false 166 | Value: false 167 | Focal Point: 168 | X: -0.0457618348300457 169 | Y: -0.07058511674404144 170 | Z: 0.49734944105148315 171 | Focal Shape Fixed Size: true 172 | Focal Shape Size: 0.05000000074505806 173 | Invert Z Axis: false 174 | Name: Current View 175 | Near Clip Distance: 0.009999999776482582 176 | Pitch: 0.15039828419685364 177 | Target Frame: 178 | Value: Orbit (rviz) 179 | Yaw: 0.5353983640670776 180 | Saved: ~ 181 | Window Geometry: 182 | Displays: 183 | collapsed: false 184 | Height: 1379 185 | Hide Left Dock: false 186 | Hide Right Dock: false 187 | QMainWindow State: 000000ff00000000fd00000004000000000000016a000004f0fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000007901000003fb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000048000004f00000010101000003fb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c000002610000000100000110000004f0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000048000004f0000000db01000003fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d0065010000000000000450000000000000000000000784000004f000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 188 | Selection: 189 | collapsed: false 190 | Tool Properties: 191 | collapsed: false 192 | Views: 193 | collapsed: false 194 | Width: 2560 195 | X: 0 196 | Y: 30 197 | -------------------------------------------------------------------------------- /test/test_ur_urdf_xacro.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022 FZI Forschungszentrum Informatik 2 | # 3 | # Redistribution and use in source and binary forms, with or without 4 | # modification, are permitted provided that the following conditions are met: 5 | # 6 | # * Redistributions of source code must retain the above copyright 7 | # notice, this list of conditions and the following disclaimer. 8 | # 9 | # * Redistributions in binary form must reproduce the above copyright 10 | # notice, this list of conditions and the following disclaimer in the 11 | # documentation and/or other materials provided with the distribution. 12 | # 13 | # * Neither the name of the {copyright_holder} nor the names of its 14 | # contributors may be used to endorse or promote products derived from 15 | # this software without specific prior written permission. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | # 29 | # Author: Lukas Sackewitz 30 | 31 | import os 32 | import shutil 33 | import subprocess 34 | import tempfile 35 | import pytest 36 | 37 | from ament_index_python.packages import get_package_share_directory 38 | 39 | 40 | @pytest.mark.parametrize( 41 | "ur_type", 42 | [ 43 | "ur3", 44 | "ur3e", 45 | "ur5", 46 | "ur5e", 47 | "ur7e", 48 | "ur10", 49 | "ur10e", 50 | "ur12e", 51 | "ur16e", 52 | "ur15", 53 | "ur20", 54 | "ur30", 55 | ], 56 | ) 57 | @pytest.mark.parametrize("description_file", ["ur.urdf.xacro", "ur_mocked.urdf.xacro"]) 58 | @pytest.mark.parametrize("prefix", ["", "my_ur_"]) 59 | def test_ur_urdf_xacro(ur_type, description_file, prefix): 60 | # Initialize Arguments 61 | safety_limits = "true" 62 | safety_pos_margin = "0.15" 63 | safety_k_position = "20" 64 | # General Arguments 65 | description_package = "ur_description" 66 | 67 | joint_limit_params = os.path.join( 68 | get_package_share_directory(description_package), "config", ur_type, "joint_limits.yaml" 69 | ) 70 | kinematics_params = os.path.join( 71 | get_package_share_directory(description_package), 72 | "config", 73 | ur_type, 74 | "default_kinematics.yaml", 75 | ) 76 | physical_params = os.path.join( 77 | get_package_share_directory(description_package), 78 | "config", 79 | ur_type, 80 | "physical_parameters.yaml", 81 | ) 82 | visual_params = os.path.join( 83 | get_package_share_directory(description_package), 84 | "config", 85 | ur_type, 86 | "visual_parameters.yaml", 87 | ) 88 | 89 | description_file_path = os.path.join( 90 | get_package_share_directory(description_package), "urdf", description_file 91 | ) 92 | 93 | (_, tmp_urdf_output_file) = tempfile.mkstemp(suffix=".urdf") 94 | 95 | # Compose `xacro` and `check_urdf` command 96 | xacro_command = ( 97 | f"{shutil.which('xacro')}" 98 | f" {description_file_path}" 99 | f" joint_limit_params:={joint_limit_params}" 100 | f" kinematics_params:={kinematics_params}" 101 | f" physical_params:={physical_params}" 102 | f" visual_params:={visual_params}" 103 | f" safety_limits:={safety_limits}" 104 | f" safety_pos_margin:={safety_pos_margin}" 105 | f" safety_k_position:={safety_k_position}" 106 | f" name:={ur_type}" 107 | f" prefix:={prefix}" 108 | f" > {tmp_urdf_output_file}" 109 | ) 110 | check_urdf_command = f"{shutil.which('check_urdf')} {tmp_urdf_output_file}" 111 | 112 | # Try to call processes but finally remove the temp file 113 | try: 114 | xacro_process = subprocess.run( 115 | xacro_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True 116 | ) 117 | 118 | assert xacro_process.returncode == 0, " --- XACRO command failed ---" 119 | 120 | check_urdf_process = subprocess.run( 121 | check_urdf_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True 122 | ) 123 | 124 | assert ( 125 | check_urdf_process.returncode == 0 126 | ), "\n --- URDF check failed! --- \nYour xacro does not unfold into a proper urdf robot description. Please check your xacro file." 127 | 128 | finally: 129 | os.remove(tmp_urdf_output_file) 130 | 131 | 132 | if __name__ == "__main__": 133 | test_ur_urdf_xacro() 134 | -------------------------------------------------------------------------------- /test/test_view_ur_launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022 FZI Forschungszentrum Informatik 2 | # 3 | # Redistribution and use in source and binary forms, with or without 4 | # modification, are permitted provided that the following conditions are met: 5 | # 6 | # * Redistributions of source code must retain the above copyright 7 | # notice, this list of conditions and the following disclaimer. 8 | # 9 | # * Redistributions in binary form must reproduce the above copyright 10 | # notice, this list of conditions and the following disclaimer in the 11 | # documentation and/or other materials provided with the distribution. 12 | # 13 | # * Neither the name of the {copyright_holder} nor the names of its 14 | # contributors may be used to endorse or promote products derived from 15 | # this software without specific prior written permission. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | # 29 | # Author: Lukas Sackewitz 30 | 31 | import os 32 | import pytest 33 | 34 | from ament_index_python.packages import get_package_share_directory 35 | from launch import LaunchDescription 36 | from launch.actions import IncludeLaunchDescription 37 | from launch.launch_description_sources import PythonLaunchDescriptionSource 38 | from launch_testing.actions import ReadyToTest 39 | 40 | 41 | # Executes the given launch file and checks if all nodes can be started 42 | @pytest.mark.rostest 43 | def generate_test_description(): 44 | launch_include = IncludeLaunchDescription( 45 | PythonLaunchDescriptionSource( 46 | os.path.join(get_package_share_directory("ur_description"), "launch/view_ur.launch.py") 47 | ), 48 | launch_arguments={"ur_type": "ur3"}.items(), 49 | ) 50 | 51 | return LaunchDescription([launch_include, ReadyToTest()]) 52 | -------------------------------------------------------------------------------- /urdf/inc/ur_joint_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | ${initial_positions['shoulder_pan_joint']} 14 | 15 | 16 | 0.0 17 | 18 | 19 | 0.0 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | ${initial_positions['shoulder_lift_joint']} 28 | 29 | 30 | 0.0 31 | 32 | 33 | 0.0 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | ${initial_positions['elbow_joint']} 42 | 43 | 44 | 0.0 45 | 46 | 47 | 0.0 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | ${initial_positions['wrist_1_joint']} 56 | 57 | 58 | 0.0 59 | 60 | 61 | 0.0 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | ${initial_positions['wrist_2_joint']} 70 | 71 | 72 | 0.0 73 | 74 | 75 | 0.0 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | ${initial_positions['wrist_3_joint']} 84 | 85 | 86 | 0.0 87 | 88 | 89 | 0.0 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /urdf/inc/ur_sensors.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /urdf/inc/ur_transmissions.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | transmission_interface/SimpleTransmission 13 | 14 | ${hw_interface} 15 | 16 | 17 | 1 18 | 19 | 20 | 21 | 22 | transmission_interface/SimpleTransmission 23 | 24 | ${hw_interface} 25 | 26 | 27 | 1 28 | 29 | 30 | 31 | 32 | transmission_interface/SimpleTransmission 33 | 34 | ${hw_interface} 35 | 36 | 37 | 1 38 | 39 | 40 | 41 | 42 | transmission_interface/SimpleTransmission 43 | 44 | ${hw_interface} 45 | 46 | 47 | 1 48 | 49 | 50 | 51 | 52 | transmission_interface/SimpleTransmission 53 | 54 | ${hw_interface} 55 | 56 | 57 | 1 58 | 59 | 60 | 61 | 62 | transmission_interface/SimpleTransmission 63 | 64 | ${hw_interface} 65 | 66 | 67 | 1 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /urdf/ros2_control_mock_hardware.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 | 16 | mock_components/GenericSystem 17 | ${mock_sensor_commands} 18 | 0.0 19 | true 20 | 21 | 25 | 26 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /urdf/ur.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /urdf/ur_mocked.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 51 | 52 | 53 | 54 | 55 | 61 | 62 | --------------------------------------------------------------------------------