Import
This commit is contained in:
commit
7faabd0dbe
25
.github/ISSUE_TEMPLATE/1-bug-report.yml
vendored
Normal file
25
.github/ISSUE_TEMPLATE/1-bug-report.yml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Copyright 2025 Enactic, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
name: Bug Report
|
||||||
|
description: File a bug report.
|
||||||
|
type: Bug
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Describe the problem you got
|
||||||
|
description: It's better that you provide information as much as possible.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
25
.github/ISSUE_TEMPLATE/2-feature-request.yml
vendored
Normal file
25
.github/ISSUE_TEMPLATE/2-feature-request.yml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Copyright 2025 Enactic, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
name: Feature Request
|
||||||
|
description: Request a feature.
|
||||||
|
type: Feature
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Describe the feature you want
|
||||||
|
description: It's better that you also provide your use case.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
22
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
22
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Copyright 2025 Enactic, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Discord
|
||||||
|
url: https://discord.gg/FsZaZ4z3We
|
||||||
|
about: Please ask and answer questions here.
|
||||||
|
- name: GitHub Discussions
|
||||||
|
url: https://github.com/enactic/openarm_description/discussions
|
||||||
|
about: If you prefer GitHub Discussions to Discord, you can use GitHub Discussions too.
|
||||||
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Copyright 2025 Enactic, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
*.urdf
|
||||||
42
CMakeLists.txt
Normal file
42
CMakeLists.txt
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Copyright 2025 Enactic, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.8)
|
||||||
|
project(openarm_description)
|
||||||
|
|
||||||
|
find_package(ament_cmake REQUIRED)
|
||||||
|
|
||||||
|
if(BUILD_TESTING)
|
||||||
|
find_package(ament_lint_auto REQUIRED)
|
||||||
|
# the following line skips the linter which checks for copyrights
|
||||||
|
# comment the line when a copyright and license is added to all source files
|
||||||
|
set(ament_cmake_copyright_FOUND TRUE)
|
||||||
|
# the following line skips cpplint (only works in a git repo)
|
||||||
|
# comment the line when this package is in a git repo and when
|
||||||
|
# a copyright and license is added to all source files
|
||||||
|
set(ament_cmake_cpplint_FOUND TRUE)
|
||||||
|
ament_lint_auto_find_test_dependencies()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(DIRECTORY
|
||||||
|
launch
|
||||||
|
meshes
|
||||||
|
rviz
|
||||||
|
urdf
|
||||||
|
# worlds
|
||||||
|
config
|
||||||
|
DESTINATION share/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
ament_package()
|
||||||
133
CODE_OF_CONDUCT.md
Normal file
133
CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
|
any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email address,
|
||||||
|
without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official email address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
hi_public@reazon.jp.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.1, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||||
|
[https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
19
CONTRIBUTING.md
Normal file
19
CONTRIBUTING.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# How to contribute
|
||||||
|
|
||||||
|
## Did you find a bug?
|
||||||
|
|
||||||
|
Please report it to [GitHub Issues](https://github.com/enactic/openarm_description/issues/new?template=1-bug-report.yml)!
|
||||||
|
|
||||||
|
## Did you have a feature request?
|
||||||
|
|
||||||
|
Please share it to [GitHub Issues](https://github.com/enactic/openarm_description/issues/new?template=2-feature-request.yml)!
|
||||||
|
|
||||||
|
## Did you write a patch?
|
||||||
|
|
||||||
|
Please open a pull request with it!
|
||||||
|
|
||||||
|
Please make sure to review [our license](https://github.com/enactic/openarm_description/blob/main/LICENSE.txt) before you open a pull request.
|
||||||
|
|
||||||
|
## Others?
|
||||||
|
|
||||||
|
Please share it on [Discord](https://discord.gg/FsZaZ4z3We) or [GitHub Discussions](https://github.com/enactic/openarm_description/discussions)!
|
||||||
201
LICENSE.txt
Normal file
201
LICENSE.txt
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
36
README.md
Normal file
36
README.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Robot Description files for OpenArm
|
||||||
|
|
||||||
|
This package contains description files to generate OpenArm URDFs (Universal Robot Description Files).
|
||||||
|
|
||||||
|
To generate or view the URDF, install ROS2, source the setup script, and clone this package into a workspace.
|
||||||
|
|
||||||
|
For example, for ROS2 Humble:
|
||||||
|
```sh
|
||||||
|
source /opt/ros/humble/setup.bash
|
||||||
|
mkdir -p ~/ros2_ws/src
|
||||||
|
git clone https://github.com/enactic/openarm_description.git ~/ros2_ws/src/openarm_description
|
||||||
|
colcon build
|
||||||
|
source ~/ros2_ws/install/setup.bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Then to view the bimanual URDF:
|
||||||
|
```sh
|
||||||
|
ros2 launch openarm_description display_openarm.launch.py arm_type:=v10 bimanual:=true
|
||||||
|
```
|
||||||
|
|
||||||
|
Or to generate a URDF:
|
||||||
|
```sh
|
||||||
|
URDF_NAME=openarm_bimanual.urdf
|
||||||
|
xacro ~/ros2_ws/src/openarm_description/urdf/robot/v10.urdf.xacro arm_type:=v10 bimanual:=true > $URDF_NAME
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Licensed under the Apache License 2.0. See `LICENSE.txt` for details.
|
||||||
|
|
||||||
|
Copyright 2025 Enactic, Inc.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
All participation in the OpenArm project is governed by our
|
||||||
|
[Code of Conduct](CODE_OF_CONDUCT.md).
|
||||||
135
config/arm/v10/inertials.yaml
Normal file
135
config/arm/v10/inertials.yaml
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
link0:
|
||||||
|
origin:
|
||||||
|
x: -0.0009483362816297526
|
||||||
|
y: 0.0001580207020448382
|
||||||
|
z: 0.03076860287587199
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 1.1432284943239561
|
||||||
|
inertia:
|
||||||
|
xx: 0.001128
|
||||||
|
xy: -4.0e-06
|
||||||
|
xz: -3.3e-05
|
||||||
|
yy: 0.000962
|
||||||
|
yz: -7.0e-06
|
||||||
|
zz: 0.00147
|
||||||
|
|
||||||
|
link1:
|
||||||
|
origin:
|
||||||
|
x: 0.0011467657911800769
|
||||||
|
y: 3.319987657026362e-05
|
||||||
|
z: 0.05395284380736254
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 1.1416684646202298
|
||||||
|
inertia:
|
||||||
|
xx: 0.001567
|
||||||
|
xy: -1.0e-06
|
||||||
|
xz: -2.9e-05
|
||||||
|
yy: 0.001273
|
||||||
|
yz: 1e-06
|
||||||
|
zz: 0.001016
|
||||||
|
|
||||||
|
link2:
|
||||||
|
origin:
|
||||||
|
x: 0.00839629182351943
|
||||||
|
y: -2.0145102027597523e-08
|
||||||
|
z: 0.03256649300522363
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 0.2775092746011571
|
||||||
|
inertia:
|
||||||
|
xx: 0.000359
|
||||||
|
xy: 1e-06
|
||||||
|
xz: -0.000109
|
||||||
|
yy: 0.000376
|
||||||
|
yz: 1e-06
|
||||||
|
zz: 0.000232
|
||||||
|
|
||||||
|
link3:
|
||||||
|
origin:
|
||||||
|
x: -0.002104752099628911
|
||||||
|
y: 0.0005549085042607548
|
||||||
|
z: 0.08847470545721961
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 1.073863338202347
|
||||||
|
inertia:
|
||||||
|
xx: 0.004372
|
||||||
|
xy: 1e-06
|
||||||
|
xz: 1.1e-05
|
||||||
|
yy: 0.004319
|
||||||
|
yz: -3.6e-05
|
||||||
|
zz: 0.000661
|
||||||
|
|
||||||
|
link4:
|
||||||
|
origin:
|
||||||
|
x: -0.0029006831074562967
|
||||||
|
y: -0.03030575826634669
|
||||||
|
z: 0.06339637422196209
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 0.5598534566833373
|
||||||
|
inertia:
|
||||||
|
xx: 0.000623
|
||||||
|
xy: -1.0e-06
|
||||||
|
xz: -1.9e-05
|
||||||
|
yy: 0.000511
|
||||||
|
yz: 3.8e-05
|
||||||
|
zz: 0.000334
|
||||||
|
|
||||||
|
link5:
|
||||||
|
origin:
|
||||||
|
x: -0.003049665024221911
|
||||||
|
y: 0.0008866902457326625
|
||||||
|
z: 0.043079803024980934
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 0.5506588026168502
|
||||||
|
inertia:
|
||||||
|
xx: 0.000423
|
||||||
|
xy: -8.0e-06
|
||||||
|
xz: 6.0e-06
|
||||||
|
yy: 0.000445
|
||||||
|
yz: -6.0e-06
|
||||||
|
zz: 0.000324
|
||||||
|
|
||||||
|
link6:
|
||||||
|
origin:
|
||||||
|
x: -0.037136587005447405
|
||||||
|
y: 0.00033230528343419053
|
||||||
|
z: -9.498374522309838e-05
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 0.385202773187987
|
||||||
|
inertia:
|
||||||
|
xx: 0.000143
|
||||||
|
xy: 1e-06
|
||||||
|
xz: 1e-06
|
||||||
|
yy: 0.000157
|
||||||
|
yz: 1e-06
|
||||||
|
zz: 0.000159
|
||||||
|
|
||||||
|
link7:
|
||||||
|
origin:
|
||||||
|
x: 6.875510271106056e-05
|
||||||
|
y: 0.01266175250761268
|
||||||
|
z: 0.06951945409987448
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
mass: 0.3859771327380578
|
||||||
|
inertia:
|
||||||
|
xx: 0.000639
|
||||||
|
xy: 1e-06
|
||||||
|
xz: 1e-06
|
||||||
|
yy: 0.000497
|
||||||
|
yz: 8.9e-05
|
||||||
|
zz: 0.000342
|
||||||
62
config/arm/v10/joint_limits.yaml
Normal file
62
config/arm/v10/joint_limits.yaml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
joint1:
|
||||||
|
limit:
|
||||||
|
lower: -1.396263
|
||||||
|
upper: 3.490659
|
||||||
|
velocity: 16.754666
|
||||||
|
effort: 40
|
||||||
|
|
||||||
|
joint2:
|
||||||
|
limit:
|
||||||
|
lower: -1.745329
|
||||||
|
upper: 1.745329
|
||||||
|
velocity: 16.754666
|
||||||
|
effort: 40
|
||||||
|
|
||||||
|
joint3:
|
||||||
|
limit:
|
||||||
|
lower: -1.570796
|
||||||
|
upper: 1.570796
|
||||||
|
velocity: 5.445426
|
||||||
|
effort: 27
|
||||||
|
|
||||||
|
joint4:
|
||||||
|
limit:
|
||||||
|
lower: 0.0
|
||||||
|
upper: 2.443461
|
||||||
|
velocity: 5.445426
|
||||||
|
effort: 27
|
||||||
|
|
||||||
|
joint5:
|
||||||
|
limit:
|
||||||
|
lower: -1.570796
|
||||||
|
upper: 1.570796
|
||||||
|
velocity: 20.943946
|
||||||
|
effort: 7
|
||||||
|
|
||||||
|
joint6:
|
||||||
|
limit:
|
||||||
|
lower: -0.785398
|
||||||
|
upper: 0.785398
|
||||||
|
velocity: 20.943946
|
||||||
|
effort: 7
|
||||||
|
|
||||||
|
joint7:
|
||||||
|
limit:
|
||||||
|
lower: -1.570796
|
||||||
|
upper: 1.570796
|
||||||
|
velocity: 20.943946
|
||||||
|
effort: 7
|
||||||
|
|
||||||
|
# joint_gripper1:
|
||||||
|
# limit:
|
||||||
|
# lower: 0.0
|
||||||
|
# upper: 0.043
|
||||||
|
# velocity: 100
|
||||||
|
# effort: 100
|
||||||
|
|
||||||
|
# joint_gripper2:
|
||||||
|
# limit:
|
||||||
|
# lower: 0.0
|
||||||
|
# upper: 0.043
|
||||||
|
# velocity: 100
|
||||||
|
# effort: 100
|
||||||
89
config/arm/v10/kinematics.yaml
Normal file
89
config/arm/v10/kinematics.yaml
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
joint1:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0625
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint2:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0301
|
||||||
|
y: 0.0
|
||||||
|
z: 0.06
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint3:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0301
|
||||||
|
y: 0.0
|
||||||
|
z: 0.06625
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint4:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0
|
||||||
|
y: 0.0315
|
||||||
|
z: 0.15375
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint5:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: -0.0315
|
||||||
|
z: 0.0955
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint6:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0375
|
||||||
|
y: 0.0
|
||||||
|
z: 0.1205
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
# joint7:
|
||||||
|
# kinematic:
|
||||||
|
# x: -0.0375
|
||||||
|
# y: 0.0205
|
||||||
|
# z: 0.0
|
||||||
|
# roll: 0
|
||||||
|
# pitch: 0
|
||||||
|
# yaw: 0
|
||||||
|
|
||||||
|
joint7:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0375
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
# joint8:
|
||||||
|
# kinematic:
|
||||||
|
# x: 1e-06
|
||||||
|
# y: -0.098
|
||||||
|
# z: 0.114501
|
||||||
|
# roll: 0
|
||||||
|
# pitch: 0
|
||||||
|
# yaw: 0
|
||||||
|
|
||||||
|
joint8:
|
||||||
|
kinematic:
|
||||||
|
x: 1e-06
|
||||||
|
y: 0.0205
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
80
config/arm/v10/kinematics_link.yaml
Normal file
80
config/arm/v10/kinematics_link.yaml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
link0:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
link1:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0
|
||||||
|
y: 0.0
|
||||||
|
z: -0.0625
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
link2:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0301
|
||||||
|
y: 0.0
|
||||||
|
z: -0.1225
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
link3:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0
|
||||||
|
y: -0.0
|
||||||
|
z: -0.18875
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
link4:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: -0.0315
|
||||||
|
z: -0.3425
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
link5:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0
|
||||||
|
y: -0.0
|
||||||
|
z: -0.438
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
link6:
|
||||||
|
kinematic:
|
||||||
|
x: -0.0375
|
||||||
|
y: -0.0
|
||||||
|
z: -0.5585
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
# link7:
|
||||||
|
# kinematic:
|
||||||
|
# x: 0.0
|
||||||
|
# y: -0.0205
|
||||||
|
# z: -0.5585
|
||||||
|
# roll: 0.0
|
||||||
|
# pitch: 0.0
|
||||||
|
# yaw: 0.0
|
||||||
|
|
||||||
|
link7:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: -0.0
|
||||||
|
z: -0.5585
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
71
config/arm/v10/kinematics_offset.yaml
Normal file
71
config/arm/v10/kinematics_offset.yaml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
joint1:
|
||||||
|
kinematic_offset:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint2:
|
||||||
|
kinematic_offset:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 1.57079632679
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint3:
|
||||||
|
kinematic_offset:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint4:
|
||||||
|
kinematic_offset:
|
||||||
|
x: -0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint5:
|
||||||
|
kinematic_offset:
|
||||||
|
x: 0.0
|
||||||
|
y: -0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint6:
|
||||||
|
kinematic_offset:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint7:
|
||||||
|
kinematic_offset:
|
||||||
|
x: -0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
|
||||||
|
joint8:
|
||||||
|
kinematic_offset:
|
||||||
|
x: 0.0
|
||||||
|
y: -0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
14
config/body/v10/inertials.yaml
Normal file
14
config/body/v10/inertials.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
body_link0:
|
||||||
|
origin:
|
||||||
|
xyz: 0.0 0.0 0.0
|
||||||
|
rpy: 0.0 0.0 0.0
|
||||||
|
mass: 13.89
|
||||||
|
inertia:
|
||||||
|
xx: 1.653
|
||||||
|
xy: 0.0
|
||||||
|
xz: 0.0
|
||||||
|
yy: 1.653
|
||||||
|
yz: 0.0
|
||||||
|
zz: 0.051
|
||||||
|
|
||||||
|
|
||||||
8
config/body/v10/kinematics.yaml
Normal file
8
config/body/v10/kinematics.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
body_link0:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
8
config/body/v10/kinematics_link.yaml
Normal file
8
config/body/v10/kinematics_link.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
body_link0:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
70
config/hand/openarm_hand/inertials.yaml
Normal file
70
config/hand/openarm_hand/inertials.yaml
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
hand:
|
||||||
|
origin:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.002
|
||||||
|
z: 0.019
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
mass: 0.3
|
||||||
|
inertia:
|
||||||
|
xx: 0.0001
|
||||||
|
yy: 0.00025
|
||||||
|
zz: 0.00017
|
||||||
|
xy: 1e-06
|
||||||
|
xz: 1e-06
|
||||||
|
yz: 1e-06
|
||||||
|
|
||||||
|
left_finger:
|
||||||
|
origin:
|
||||||
|
x: 0.0064528
|
||||||
|
y: 0.017020
|
||||||
|
z: 0.0219685
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
mass: 0.03602545343277134
|
||||||
|
inertia:
|
||||||
|
xx: 2.3749999999999997e-06
|
||||||
|
yy: 2.3749999999999997e-06
|
||||||
|
zz: 7.5e-07
|
||||||
|
xy: 1e-06
|
||||||
|
xz: 1e-06
|
||||||
|
yz: 1e-06
|
||||||
|
|
||||||
|
right_finger:
|
||||||
|
origin:
|
||||||
|
x: 0.0064528
|
||||||
|
y: -0.017020
|
||||||
|
z: 0.0219685
|
||||||
|
roll: 0
|
||||||
|
pitch: 0
|
||||||
|
yaw: 0
|
||||||
|
mass: 0.03602545343277134
|
||||||
|
inertia:
|
||||||
|
xx: 2.3749999999999997e-06
|
||||||
|
yy: 2.3749999999999997e-06
|
||||||
|
zz: 7.5e-07
|
||||||
|
xy: 1e-06
|
||||||
|
xz: 1e-06
|
||||||
|
yz: 1e-06
|
||||||
|
|
||||||
|
# left_finger: &finger
|
||||||
|
# origin:
|
||||||
|
# x: 00064528
|
||||||
|
# y: 0.017020
|
||||||
|
# z: 0.0219685
|
||||||
|
# roll: 0
|
||||||
|
# pitch: 0
|
||||||
|
# yaw: 0
|
||||||
|
# mass: 0.03602545343277134
|
||||||
|
# inertia:
|
||||||
|
# xx: 2.3749999999999997e-06
|
||||||
|
# yy: 2.3749999999999997e-06
|
||||||
|
# zz: 7.5e-07
|
||||||
|
# xy: 0
|
||||||
|
# xz: 0
|
||||||
|
# yz: 0
|
||||||
|
# right_finger: *finger
|
||||||
|
|
||||||
|
|
||||||
0
config/hand/openarm_hand/joint_limits.yaml
Normal file
0
config/hand/openarm_hand/joint_limits.yaml
Normal file
0
config/hand/openarm_hand/kinematics.yaml
Normal file
0
config/hand/openarm_hand/kinematics.yaml
Normal file
62
config/hand/openarm_hand/kinematics_link.yaml
Normal file
62
config/hand/openarm_hand/kinematics_link.yaml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# hand:
|
||||||
|
# kinematic:
|
||||||
|
# x: 0.0
|
||||||
|
# y: -0.0205
|
||||||
|
# z: -0.5585
|
||||||
|
# roll: 0.0
|
||||||
|
# pitch: 0.0
|
||||||
|
# yaw: 0.0
|
||||||
|
|
||||||
|
hand:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.005
|
||||||
|
z: -0.6585
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
# left_finger:
|
||||||
|
# kinematic:
|
||||||
|
# x: 0.0
|
||||||
|
# y: 0.0775
|
||||||
|
# z: -0.673001
|
||||||
|
# roll: 0.0
|
||||||
|
# pitch: 0.0
|
||||||
|
# yaw: 0.0
|
||||||
|
|
||||||
|
# left_finger:
|
||||||
|
# kinematic:
|
||||||
|
# x: 0.0
|
||||||
|
# y: 0.053
|
||||||
|
# z: -0.673001
|
||||||
|
# roll: 0.0
|
||||||
|
# pitch: 0.0
|
||||||
|
# yaw: 0.0
|
||||||
|
|
||||||
|
# right_finger:
|
||||||
|
# kinematic:
|
||||||
|
# x: 0.0
|
||||||
|
# y: 0.143
|
||||||
|
# z: -0.673001
|
||||||
|
# roll: 0.0
|
||||||
|
# pitch: 0.0
|
||||||
|
# yaw: 0.0
|
||||||
|
|
||||||
|
left_finger:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: -0.05
|
||||||
|
z: -0.673001
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
|
|
||||||
|
right_finger:
|
||||||
|
kinematic:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.05
|
||||||
|
z: -0.673001
|
||||||
|
roll: 0.0
|
||||||
|
pitch: 0.0
|
||||||
|
yaw: 0.0
|
||||||
120
launch/display_openarm.launch.py
Normal file
120
launch/display_openarm.launch.py
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
# Copyright 2025 Enactic, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import xacro
|
||||||
|
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
|
||||||
|
from launch import LaunchDescription, LaunchContext
|
||||||
|
from launch.actions import DeclareLaunchArgument, OpaqueFunction
|
||||||
|
from launch.substitutions import LaunchConfiguration
|
||||||
|
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
|
||||||
|
|
||||||
|
def robot_state_publisher_spawner(context: LaunchContext, arm_type, ee_type, bimanual):
|
||||||
|
arm_type_str = context.perform_substitution(arm_type)
|
||||||
|
ee_type_str = context.perform_substitution(ee_type)
|
||||||
|
bimanual_str = context.perform_substitution(bimanual)
|
||||||
|
|
||||||
|
xacro_path = os.path.join(
|
||||||
|
get_package_share_directory("openarm_description"),
|
||||||
|
"urdf", "robot", f"{arm_type_str}.urdf.xacro"
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_description = xacro.process_file(
|
||||||
|
xacro_path,
|
||||||
|
mappings={
|
||||||
|
"arm_type": arm_type_str,
|
||||||
|
"ee_type": ee_type_str,
|
||||||
|
"bimanual": bimanual_str,
|
||||||
|
}
|
||||||
|
).toprettyxml(indent=" ")
|
||||||
|
|
||||||
|
return [
|
||||||
|
Node(
|
||||||
|
package="robot_state_publisher",
|
||||||
|
executable="robot_state_publisher",
|
||||||
|
name="robot_state_publisher",
|
||||||
|
output="screen",
|
||||||
|
parameters=[{"robot_description": robot_description}],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def rviz_spawner(context: LaunchContext, bimanual):
|
||||||
|
bimanual_str = context.perform_substitution(bimanual)
|
||||||
|
|
||||||
|
rviz_config_file = "bimanual.rviz" if bimanual_str.lower() == "true" else "arm_only.rviz"
|
||||||
|
rviz_config_path = os.path.join(
|
||||||
|
get_package_share_directory("openarm_description"),
|
||||||
|
"rviz", rviz_config_file
|
||||||
|
)
|
||||||
|
|
||||||
|
return [
|
||||||
|
Node(
|
||||||
|
package="rviz2",
|
||||||
|
executable="rviz2",
|
||||||
|
name="rviz2",
|
||||||
|
arguments=["--display-config", rviz_config_path],
|
||||||
|
output="screen"
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
arm_type_arg = DeclareLaunchArgument(
|
||||||
|
"arm_type",
|
||||||
|
description="Type of arm to visualize (e.g., v10)"
|
||||||
|
)
|
||||||
|
|
||||||
|
ee_type_arg = DeclareLaunchArgument(
|
||||||
|
"ee_type",
|
||||||
|
default_value="openarm_hand",
|
||||||
|
description="Type of end-effector to attach (e.g., openarm_hand or none)"
|
||||||
|
)
|
||||||
|
|
||||||
|
bimanual_arg = DeclareLaunchArgument(
|
||||||
|
"bimanual",
|
||||||
|
default_value="false",
|
||||||
|
description="Whether to use bimanual configuration"
|
||||||
|
)
|
||||||
|
|
||||||
|
arm_type = LaunchConfiguration("arm_type")
|
||||||
|
ee_type = LaunchConfiguration("ee_type")
|
||||||
|
bimanual = LaunchConfiguration("bimanual")
|
||||||
|
|
||||||
|
robot_state_publisher_loader = OpaqueFunction(
|
||||||
|
function=robot_state_publisher_spawner,
|
||||||
|
args=[arm_type, ee_type, bimanual]
|
||||||
|
)
|
||||||
|
|
||||||
|
rviz_loader = OpaqueFunction(
|
||||||
|
function=rviz_spawner,
|
||||||
|
args=[bimanual]
|
||||||
|
)
|
||||||
|
|
||||||
|
return LaunchDescription([
|
||||||
|
arm_type_arg,
|
||||||
|
ee_type_arg,
|
||||||
|
bimanual_arg,
|
||||||
|
robot_state_publisher_loader,
|
||||||
|
Node(
|
||||||
|
package="joint_state_publisher_gui",
|
||||||
|
executable="joint_state_publisher_gui",
|
||||||
|
name="joint_state_publisher_gui"
|
||||||
|
),
|
||||||
|
rviz_loader,
|
||||||
|
])
|
||||||
BIN
meshes/arm/v10/collision/link0_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link0_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link1_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link1_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link2_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link2_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link3_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link3_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link4_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link4_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link5_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link5_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link6_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link6_symp.stl
Normal file
Binary file not shown.
BIN
meshes/arm/v10/collision/link7_symp.stl
Normal file
BIN
meshes/arm/v10/collision/link7_symp.stl
Normal file
Binary file not shown.
240
meshes/arm/v10/visual/link0.dae
Normal file
240
meshes/arm/v10/visual/link0.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link0.stl
Normal file
BIN
meshes/arm/v10/visual/link0.stl
Normal file
Binary file not shown.
406
meshes/arm/v10/visual/link1.dae
Normal file
406
meshes/arm/v10/visual/link1.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link1.stl
Normal file
BIN
meshes/arm/v10/visual/link1.stl
Normal file
Binary file not shown.
263
meshes/arm/v10/visual/link2.dae
Normal file
263
meshes/arm/v10/visual/link2.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link2.stl
Normal file
BIN
meshes/arm/v10/visual/link2.stl
Normal file
Binary file not shown.
383
meshes/arm/v10/visual/link3.dae
Normal file
383
meshes/arm/v10/visual/link3.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link3.stl
Normal file
BIN
meshes/arm/v10/visual/link3.stl
Normal file
Binary file not shown.
383
meshes/arm/v10/visual/link4.dae
Normal file
383
meshes/arm/v10/visual/link4.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link4.stl
Normal file
BIN
meshes/arm/v10/visual/link4.stl
Normal file
Binary file not shown.
303
meshes/arm/v10/visual/link5.dae
Normal file
303
meshes/arm/v10/visual/link5.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link5.stl
Normal file
BIN
meshes/arm/v10/visual/link5.stl
Normal file
Binary file not shown.
160
meshes/arm/v10/visual/link6.dae
Normal file
160
meshes/arm/v10/visual/link6.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link6.stl
Normal file
BIN
meshes/arm/v10/visual/link6.stl
Normal file
Binary file not shown.
286
meshes/arm/v10/visual/link7.dae
Normal file
286
meshes/arm/v10/visual/link7.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/arm/v10/visual/link7.stl
Normal file
BIN
meshes/arm/v10/visual/link7.stl
Normal file
Binary file not shown.
BIN
meshes/body/v10/collision/body_link0_symp.stl
Normal file
BIN
meshes/body/v10/collision/body_link0_symp.stl
Normal file
Binary file not shown.
452
meshes/body/v10/visual/body_link0.dae
Normal file
452
meshes/body/v10/visual/body_link0.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/body/v10/visual/body_link0.stl
Normal file
BIN
meshes/body/v10/visual/body_link0.stl
Normal file
Binary file not shown.
BIN
meshes/ee/openarm_hand/collision/finger.stl
Normal file
BIN
meshes/ee/openarm_hand/collision/finger.stl
Normal file
Binary file not shown.
BIN
meshes/ee/openarm_hand/collision/hand.stl
Normal file
BIN
meshes/ee/openarm_hand/collision/hand.stl
Normal file
Binary file not shown.
160
meshes/ee/openarm_hand/visual/finger.dae
Normal file
160
meshes/ee/openarm_hand/visual/finger.dae
Normal file
File diff suppressed because one or more lines are too long
BIN
meshes/ee/openarm_hand/visual/finger.stl
Normal file
BIN
meshes/ee/openarm_hand/visual/finger.stl
Normal file
Binary file not shown.
160
meshes/ee/openarm_hand/visual/hand.dae
Normal file
160
meshes/ee/openarm_hand/visual/hand.dae
Normal file
File diff suppressed because one or more lines are too long
40
package.xml
Normal file
40
package.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2025 Enactic, Inc.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<package format="3">
|
||||||
|
<name>openarm_description</name>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<description>URDF with optional configuration parameters for OpenArm</description>
|
||||||
|
<maintainer email="openarm_dev@enactic.ai">Enactic, Inc.</maintainer>
|
||||||
|
<license>Apache-2.0</license>
|
||||||
|
|
||||||
|
<buildtool_depend>ament_cmake</buildtool_depend>
|
||||||
|
|
||||||
|
<test_depend>ament_lint_auto</test_depend>
|
||||||
|
<test_depend>ament_lint_common</test_depend>
|
||||||
|
<test_depend>ament_cmake_pytest</test_depend>
|
||||||
|
|
||||||
|
<depend>joint_state_publisher_gui</depend>
|
||||||
|
<depend>ros_gz</depend>
|
||||||
|
<depend>realsense2_description</depend>
|
||||||
|
<exec_depend>xacro</exec_depend>
|
||||||
|
<exec_depend>rviz2</exec_depend>
|
||||||
|
|
||||||
|
<export>
|
||||||
|
<build_type>ament_cmake</build_type>
|
||||||
|
</export>
|
||||||
|
</package>
|
||||||
185
rviz/arm_only.rviz
Normal file
185
rviz/arm_only.rviz
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
Panels:
|
||||||
|
- Class: rviz_common/Displays
|
||||||
|
Help Height: 138
|
||||||
|
Name: Displays
|
||||||
|
Property Tree Widget:
|
||||||
|
Expanded:
|
||||||
|
- /Global Options1
|
||||||
|
Splitter Ratio: 0.5
|
||||||
|
Tree Height: 758
|
||||||
|
- Class: rviz_common/Views
|
||||||
|
Expanded:
|
||||||
|
- /Current View1
|
||||||
|
Name: Views
|
||||||
|
Splitter Ratio: 0.5
|
||||||
|
Visualization Manager:
|
||||||
|
Class: ""
|
||||||
|
Displays:
|
||||||
|
- Alpha: 0.5
|
||||||
|
Cell Size: 1
|
||||||
|
Class: rviz_default_plugins/Grid
|
||||||
|
Color: 160; 160; 164
|
||||||
|
Enabled: true
|
||||||
|
Line Style:
|
||||||
|
Line Width: 0.029999999329447746
|
||||||
|
Value: Lines
|
||||||
|
Name: Grid
|
||||||
|
Normal Cell Count: 0
|
||||||
|
Offset:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Z: 0
|
||||||
|
Plane: XY
|
||||||
|
Plane Cell Count: 10
|
||||||
|
Reference Frame: <Fixed Frame>
|
||||||
|
Value: true
|
||||||
|
- Alpha: 1
|
||||||
|
Class: rviz_default_plugins/RobotModel
|
||||||
|
Collision Enabled: false
|
||||||
|
Description File: ""
|
||||||
|
Description Source: Topic
|
||||||
|
Description Topic:
|
||||||
|
Depth: 5
|
||||||
|
Durability Policy: Volatile
|
||||||
|
History Policy: Keep Last
|
||||||
|
Reliability Policy: Reliable
|
||||||
|
Value: /robot_description
|
||||||
|
Enabled: true
|
||||||
|
Links:
|
||||||
|
All Links Enabled: true
|
||||||
|
Expand Joint Details: false
|
||||||
|
Expand Link Details: false
|
||||||
|
Expand Tree: false
|
||||||
|
Link Tree Style: Links in Alphabetic Order
|
||||||
|
openarm_hand:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_hand_tcp:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
openarm_left_finger:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link0:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link1:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link2:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link3:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link4:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link5:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link6:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link7:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_link8:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
openarm_right_finger:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
Mass Properties:
|
||||||
|
Inertia: false
|
||||||
|
Mass: false
|
||||||
|
Name: RobotModel
|
||||||
|
TF Prefix: ""
|
||||||
|
Update Interval: 0
|
||||||
|
Value: true
|
||||||
|
Visual Enabled: true
|
||||||
|
- Class: rviz_default_plugins/TF
|
||||||
|
Enabled: false
|
||||||
|
Frame Timeout: 15
|
||||||
|
Frames:
|
||||||
|
All Enabled: true
|
||||||
|
Marker Scale: 1
|
||||||
|
Name: TF
|
||||||
|
Show Arrows: true
|
||||||
|
Show Axes: true
|
||||||
|
Show Names: false
|
||||||
|
Tree:
|
||||||
|
{}
|
||||||
|
Update Interval: 0
|
||||||
|
Value: false
|
||||||
|
Enabled: true
|
||||||
|
Global Options:
|
||||||
|
Background Color: 48; 48; 48
|
||||||
|
Fixed Frame: openarm_link0
|
||||||
|
Frame Rate: 30
|
||||||
|
Name: root
|
||||||
|
Tools:
|
||||||
|
- Class: rviz_default_plugins/MoveCamera
|
||||||
|
Transformation:
|
||||||
|
Current:
|
||||||
|
Class: rviz_default_plugins/TF
|
||||||
|
Value: true
|
||||||
|
Views:
|
||||||
|
Current:
|
||||||
|
Class: rviz_default_plugins/Orbit
|
||||||
|
Distance: 2.424237012863159
|
||||||
|
Enable Stereo Rendering:
|
||||||
|
Stereo Eye Separation: 0.05999999865889549
|
||||||
|
Stereo Focal Distance: 1
|
||||||
|
Swap Stereo Eyes: false
|
||||||
|
Value: false
|
||||||
|
Focal Point:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Z: 0
|
||||||
|
Focal Shape Fixed Size: true
|
||||||
|
Focal Shape Size: 0.05000000074505806
|
||||||
|
Invert Z Axis: false
|
||||||
|
Name: Current View
|
||||||
|
Near Clip Distance: 0.009999999776482582
|
||||||
|
Pitch: 0.33000001311302185
|
||||||
|
Target Frame: <Fixed Frame>
|
||||||
|
Value: Orbit (rviz)
|
||||||
|
Yaw: 5.5
|
||||||
|
Saved: ~
|
||||||
|
Window Geometry:
|
||||||
|
Displays:
|
||||||
|
collapsed: false
|
||||||
|
Height: 1922
|
||||||
|
Hide Left Dock: false
|
||||||
|
Hide Right Dock: false
|
||||||
|
QMainWindow State: 000000ff00000000fd0000000100000000000001da000006f0fc0200000002fb000000100044006900730070006c0061007900730100000069000003e40000017800fffffffb0000000a005600690065007700730100000459000003000000012300ffffff00000afa000006f000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
||||||
|
Views:
|
||||||
|
collapsed: false
|
||||||
|
Width: 3296
|
||||||
|
X: 0
|
||||||
|
Y: 64
|
||||||
257
rviz/bimanual.rviz
Normal file
257
rviz/bimanual.rviz
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
Panels:
|
||||||
|
- Class: rviz_common/Displays
|
||||||
|
Help Height: 138
|
||||||
|
Name: Displays
|
||||||
|
Property Tree Widget:
|
||||||
|
Expanded:
|
||||||
|
- /Global Options1
|
||||||
|
Splitter Ratio: 0.5
|
||||||
|
Tree Height: 139
|
||||||
|
- Class: rviz_common/Views
|
||||||
|
Expanded:
|
||||||
|
- /Current View1
|
||||||
|
Name: Views
|
||||||
|
Splitter Ratio: 0.5
|
||||||
|
Visualization Manager:
|
||||||
|
Class: ""
|
||||||
|
Displays:
|
||||||
|
- Alpha: 0.5
|
||||||
|
Cell Size: 1
|
||||||
|
Class: rviz_default_plugins/Grid
|
||||||
|
Color: 160; 160; 164
|
||||||
|
Enabled: true
|
||||||
|
Line Style:
|
||||||
|
Line Width: 0.029999999329447746
|
||||||
|
Value: Lines
|
||||||
|
Name: Grid
|
||||||
|
Normal Cell Count: 0
|
||||||
|
Offset:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Z: 0
|
||||||
|
Plane: XY
|
||||||
|
Plane Cell Count: 10
|
||||||
|
Reference Frame: <Fixed Frame>
|
||||||
|
Value: true
|
||||||
|
- Alpha: 1
|
||||||
|
Class: rviz_default_plugins/RobotModel
|
||||||
|
Collision Enabled: false
|
||||||
|
Description File: ""
|
||||||
|
Description Source: Topic
|
||||||
|
Description Topic:
|
||||||
|
Depth: 5
|
||||||
|
Durability Policy: Volatile
|
||||||
|
History Policy: Keep Last
|
||||||
|
Reliability Policy: Reliable
|
||||||
|
Value: /robot_description
|
||||||
|
Enabled: true
|
||||||
|
Links:
|
||||||
|
All Links Enabled: true
|
||||||
|
Expand Joint Details: false
|
||||||
|
Expand Link Details: false
|
||||||
|
Expand Tree: false
|
||||||
|
Link Tree Style: Links in Alphabetic Order
|
||||||
|
openarm_left_hand:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_hand_tcp:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
openarm_left_left_finger:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link0:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link1:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link2:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link3:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link4:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link5:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link6:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link7:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_left_link8:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
openarm_left_right_finger:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_hand:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_hand_tcp:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
openarm_right_left_finger:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link0:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link1:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link2:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link3:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link4:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link5:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link6:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link7:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
openarm_right_link8:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
openarm_right_right_finger:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
v10_body_link0:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Value: true
|
||||||
|
world:
|
||||||
|
Alpha: 1
|
||||||
|
Show Axes: false
|
||||||
|
Show Trail: false
|
||||||
|
Mass Properties:
|
||||||
|
Inertia: false
|
||||||
|
Mass: false
|
||||||
|
Name: RobotModel
|
||||||
|
TF Prefix: ""
|
||||||
|
Update Interval: 0
|
||||||
|
Value: true
|
||||||
|
Visual Enabled: true
|
||||||
|
- Class: rviz_default_plugins/TF
|
||||||
|
Enabled: false
|
||||||
|
Frame Timeout: 15
|
||||||
|
Frames:
|
||||||
|
All Enabled: true
|
||||||
|
Marker Scale: 1
|
||||||
|
Name: TF
|
||||||
|
Show Arrows: true
|
||||||
|
Show Axes: true
|
||||||
|
Show Names: false
|
||||||
|
Tree:
|
||||||
|
{}
|
||||||
|
Update Interval: 0
|
||||||
|
Value: false
|
||||||
|
Enabled: true
|
||||||
|
Global Options:
|
||||||
|
Background Color: 48; 48; 48
|
||||||
|
Fixed Frame: world
|
||||||
|
Frame Rate: 30
|
||||||
|
Name: root
|
||||||
|
Tools:
|
||||||
|
- Class: rviz_default_plugins/MoveCamera
|
||||||
|
Transformation:
|
||||||
|
Current:
|
||||||
|
Class: rviz_default_plugins/TF
|
||||||
|
Value: true
|
||||||
|
Views:
|
||||||
|
Current:
|
||||||
|
Class: rviz_default_plugins/Orbit
|
||||||
|
Distance: 5
|
||||||
|
Enable Stereo Rendering:
|
||||||
|
Stereo Eye Separation: 0.05999999865889549
|
||||||
|
Stereo Focal Distance: 1
|
||||||
|
Swap Stereo Eyes: false
|
||||||
|
Value: false
|
||||||
|
Focal Point:
|
||||||
|
X: 0
|
||||||
|
Y: 0
|
||||||
|
Z: 0
|
||||||
|
Focal Shape Fixed Size: true
|
||||||
|
Focal Shape Size: 0.05000000074505806
|
||||||
|
Invert Z Axis: false
|
||||||
|
Name: Current View
|
||||||
|
Near Clip Distance: 0.009999999776482582
|
||||||
|
Pitch: 0.33000001311302185
|
||||||
|
Target Frame: <Fixed Frame>
|
||||||
|
Value: Orbit (rviz)
|
||||||
|
Yaw: 5.5
|
||||||
|
Saved: ~
|
||||||
|
Window Geometry:
|
||||||
|
Displays:
|
||||||
|
collapsed: false
|
||||||
|
Height: 826
|
||||||
|
Hide Left Dock: false
|
||||||
|
Hide Right Dock: false
|
||||||
|
QMainWindow State: 000000ff00000000fd0000000100000000000001da000002a8fc0200000002fb000000100044006900730070006c0061007900730100000069000001790000017800fffffffb0000000a0056006900650077007301000001ee000001230000012300ffffff000002ca000002a800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
||||||
|
Views:
|
||||||
|
collapsed: false
|
||||||
|
Width: 1200
|
||||||
|
X: 42
|
||||||
|
Y: 64
|
||||||
118
urdf/arm/openarm_arm.xacro
Normal file
118
urdf/arm/openarm_arm.xacro
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="openarm">
|
||||||
|
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/arm/openarm_macro.xacro" />
|
||||||
|
|
||||||
|
<xacro:macro name="openarm_arm" params="arm_type arm_prefix:='' no_prefix:=false description_pkg:='openarm_description' connected_to:='base' xyz:='0 0 0' rpy:='0 0 0' joint_limits inertials kinematics kinematics_link kinematics_offset:=none " >
|
||||||
|
|
||||||
|
<xacro:property name="prefix" value="${'' if no_prefix else 'openarm' + '_' + arm_prefix}" />
|
||||||
|
|
||||||
|
<xacro:if value="${arm_prefix == 'right_'}">
|
||||||
|
<xacro:property name="reflect" value="1" />
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:unless value="${arm_prefix == 'right_'}">
|
||||||
|
<xacro:property name="reflect" value="-1" />
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
<xacro:unless value="${connected_to == ''}">
|
||||||
|
<joint name="${prefix}${connected_to}_joint" type="fixed">
|
||||||
|
<parent link="${connected_to}"/>
|
||||||
|
<child link="${prefix}link0"/>
|
||||||
|
<origin rpy="${rpy}" xyz="${xyz}"/>
|
||||||
|
</joint>
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link0" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}"/>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link1" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}"/>
|
||||||
|
|
||||||
|
<joint name="${prefix}joint1" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint1" config="${kinematics}" reflect="${reflect}"/>
|
||||||
|
<parent link="${prefix}link0" />
|
||||||
|
<child link="${prefix}link1" />
|
||||||
|
<axis xyz="0 0 1" />
|
||||||
|
<xacro:openarm-limits name="joint1" config="${joint_limits}" offset="${-2.094396 if arm_prefix=='left_' else 0}"/>
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<!-- for bimanual offset -->
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link2" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}"/>
|
||||||
|
|
||||||
|
<xacro:property name="limit_offset_joint2" value="0" />
|
||||||
|
|
||||||
|
<xacro:if value="${prefix.find('right_') != -1}">
|
||||||
|
<xacro:property name="limit_offset_joint2" value="${pi/2}" />
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:if value="${prefix.find('left_') != -1}">
|
||||||
|
<xacro:property name="limit_offset_joint2" value="${-pi/2}" />
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<joint name="${prefix}joint2" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint2" config="${kinematics}" offset="${kinematics_offset}" reflect="${reflect}"/>
|
||||||
|
<parent link="${prefix}link1" />
|
||||||
|
<child link="${prefix}link2" />
|
||||||
|
<axis xyz="-1 0 0" />
|
||||||
|
<xacro:openarm-limits name="joint2" config="${joint_limits}" reflect="${reflect}" offset="${limit_offset_joint2}"/>
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link3" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}"/>
|
||||||
|
|
||||||
|
<joint name="${prefix}joint3" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint3" config="${kinematics}" />
|
||||||
|
<parent link="${prefix}link2" />
|
||||||
|
<child link="${prefix}link3" />
|
||||||
|
<axis xyz="0 0 1" />
|
||||||
|
<xacro:openarm-limits name="joint3" config="${joint_limits}" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link4" kinematics_link="${kinematics_link}" />
|
||||||
|
|
||||||
|
<joint name="${prefix}joint4" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint4" config="${kinematics}" />
|
||||||
|
<parent link="${prefix}link3" />
|
||||||
|
<child link="${prefix}link4" />
|
||||||
|
<axis xyz="0 1 0" />
|
||||||
|
<xacro:openarm-limits name="joint4" config="${joint_limits}" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link5" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}" />
|
||||||
|
|
||||||
|
<joint name="${prefix}joint5" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint5" config="${kinematics}" />
|
||||||
|
<parent link="${prefix}link4" />
|
||||||
|
<child link="${prefix}link5" />
|
||||||
|
<axis xyz="0 0 1" />
|
||||||
|
<xacro:openarm-limits name="joint5" config="${joint_limits}" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link6" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}"/>
|
||||||
|
|
||||||
|
<joint name="${prefix}joint6" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint6" config="${kinematics}" />
|
||||||
|
<parent link="${prefix}link5" />
|
||||||
|
<child link="${prefix}link6" />
|
||||||
|
<axis xyz="1 0 0" />
|
||||||
|
<xacro:openarm-limits name="joint6" config="${joint_limits}" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<xacro:link_with_sc no_prefix="${no_prefix}" name="link7" kinematics_link="${kinematics_link}" inertials="${inertials}" reflect="${reflect}"/>
|
||||||
|
|
||||||
|
<joint name="${prefix}joint7" type="revolute">
|
||||||
|
<xacro:openarm-kinematics name="joint7" config="${kinematics}" />
|
||||||
|
<parent link="${prefix}link6"/>
|
||||||
|
<child link="${prefix}link7"/>
|
||||||
|
<axis xyz="0 ${reflect} 0"/>
|
||||||
|
<xacro:openarm-limits name="joint7" config="${joint_limits}" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<link name="${prefix}link8"/>
|
||||||
|
|
||||||
|
<joint name="${prefix}joint8" type="fixed">
|
||||||
|
<xacro:openarm-kinematics name="joint8" config="${kinematics}" />
|
||||||
|
<parent link="${prefix}link7" />
|
||||||
|
<child link="${prefix}link8" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
137
urdf/arm/openarm_macro.xacro
Normal file
137
urdf/arm/openarm_macro.xacro
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-inertials" params="name inertials:=^ reflect:=1">
|
||||||
|
<xacro:unless value="${name in inertials}">
|
||||||
|
${xacro.warning('No inertia properties defined for: ' + name)}
|
||||||
|
</xacro:unless>
|
||||||
|
<xacro:if value="${name in inertials}">
|
||||||
|
<xacro:property name="I" value="${inertials[name]}" lazy_eval="false" />
|
||||||
|
<inertial>
|
||||||
|
<origin
|
||||||
|
xyz="${I.origin.x} ${reflect * I.origin.y} ${I.origin.z}"
|
||||||
|
rpy="${I.origin.roll} ${I.origin.pitch} ${I.origin.yaw}" />
|
||||||
|
<mass value="${I.mass}" />
|
||||||
|
<xacro:if value="${'inertia' in I}">
|
||||||
|
<xacro:property name="inert" value="${I.inertia}" />
|
||||||
|
<inertia ixx="${inert.xx}" ixy="${inert.xy}" ixz="${inert.xz}"
|
||||||
|
iyy="${inert.yy}" iyz="${inert.yz}" izz="${inert.zz}" />
|
||||||
|
</xacro:if>
|
||||||
|
</inertial>
|
||||||
|
</xacro:if>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="link_with_sc" params="name no_prefix:='false' rpy:='0 0 0' kinematics_link:='' reflect:=1 inertials:=^">
|
||||||
|
<!-- <xacro:property name="prefix" value="${'' if no_prefix else arm_prefix + arm_type + '_'}" /> -->
|
||||||
|
<xacro:property name="prefix" value="${'' if no_prefix else 'openarm' + '_' + arm_prefix}" />
|
||||||
|
<link name="${prefix}${name}">
|
||||||
|
<visual name="${prefix}${name}_visual">
|
||||||
|
<xacro:openarm-kinematics-link config="${kinematics_link}" name="${name}" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/arm/${arm_type}/visual/${name}.dae" scale="0.001 ${0.001*reflect} 0.001" />
|
||||||
|
</geometry>
|
||||||
|
</visual>
|
||||||
|
<collision name="${prefix}${name}_collision">
|
||||||
|
<xacro:openarm-kinematics-link config="${kinematics_link}" name="${name}" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://openarm_description/meshes/arm/${arm_type}/collision/${name}_symp.stl" scale="0.001 ${0.001*reflect} 0.001" />
|
||||||
|
<!-- <mesh filename="package://openarm_description/meshes/arm/${arm_type}/collision/${name}.stl" scale="0.001 0.001 0.001" /> -->
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
<xacro:openarm-inertials name="${name}" inertials="${inertials}" reflect="${reflect}" />
|
||||||
|
</link>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="transmission-openarm-state" params="arm_type:=fer">
|
||||||
|
<transmission name="${arm_prefix}${arm_type}_openarm_state">
|
||||||
|
<type>openarm_hw/openarmStateInterface</type>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint1"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint2"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint3"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint4"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint5"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint6"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
<joint name="${arm_prefix}${arm_type}_joint7"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></joint>
|
||||||
|
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor1"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor2"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor3"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor4"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor5"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor6"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${arm_prefix}${arm_type}_motor7"><hardwareInterface>openarm_hw/openarmStateInterface</hardwareInterface></actuator>
|
||||||
|
</transmission>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="transmission-openarm-model" params="arm_type:=v10 root:=v10_joint1 tip:=v10_joint7">
|
||||||
|
<transmission name="${arm_prefix}${arm_type}_openarm_model">
|
||||||
|
<type>openarm_hw/openarmModelInterface</type>
|
||||||
|
<joint name="${root}">
|
||||||
|
<role>root</role>
|
||||||
|
<hardwareInterface>openarm_hw/openarmModelInterface</hardwareInterface>
|
||||||
|
</joint>
|
||||||
|
<joint name="${tip}">
|
||||||
|
<role>tip</role>
|
||||||
|
<hardwareInterface>openarm_hw/openarmModelInterface</hardwareInterface>
|
||||||
|
</joint>
|
||||||
|
<actuator name="${root}_motor_root"><hardwareInterface>openarm_hw/openarmModelInterface</hardwareInterface></actuator>
|
||||||
|
<actuator name="${tip}_motor_tip" ><hardwareInterface>openarm_hw/openarmModelInterface</hardwareInterface></actuator>
|
||||||
|
</transmission>
|
||||||
|
</xacro:macro>
|
||||||
|
<xacro:macro name="inertia-cylinder" params="mass radius h">
|
||||||
|
<inertial>
|
||||||
|
<mass value="${mass}" />
|
||||||
|
<inertia ixx="${1./12 * mass * (3 * radius**2 + h**2)}" ixy = "0" ixz = "0"
|
||||||
|
iyy="${1./12 * mass * (3 * radius**2 + h**2)}" iyz = "0"
|
||||||
|
izz="${1./2 * mass * radius**2}" />
|
||||||
|
</inertial>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-limits" params="name config reflect:=1 offset:=0">
|
||||||
|
<xacro:property name="limits" value="${config[name]['limit']}"/>
|
||||||
|
<xacro:property name="raw_lower" value="${limits.lower * reflect + offset}" />
|
||||||
|
<xacro:property name="raw_upper" value="${limits.upper * reflect + offset}" />
|
||||||
|
|
||||||
|
<xacro:property name="lower" value="0.0" />
|
||||||
|
<xacro:property name="upper" value="0.0" />
|
||||||
|
|
||||||
|
<xacro:if value="${raw_lower < raw_upper}">
|
||||||
|
<xacro:property name="lower" value="${raw_lower}" />
|
||||||
|
<xacro:property name="upper" value="${raw_upper}" />
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:unless value="${raw_lower < raw_upper}">
|
||||||
|
<xacro:property name="lower" value="${raw_upper}" />
|
||||||
|
<xacro:property name="upper" value="${raw_lower}" />
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
<limit
|
||||||
|
lower="${lower}"
|
||||||
|
upper="${upper}"
|
||||||
|
effort="${limits.effort}"
|
||||||
|
velocity="${limits.velocity}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-kinematics" params="name config offset:=none reflect:=1">
|
||||||
|
<xacro:property name="kinematics" value="${config[name]['kinematic']}" lazy_eval="false" />
|
||||||
|
<xacro:if value="${offset != 'none'}">
|
||||||
|
<xacro:property name="offset" value="${offset[name]['kinematic_offset']}" lazy_eval="false" />
|
||||||
|
<origin
|
||||||
|
xyz="${kinematics.x + offset.x} ${kinematics.y + offset.y} ${kinematics.z + offset.z}"
|
||||||
|
rpy="${reflect*(kinematics.roll + offset.roll)} ${reflect*(kinematics.pitch + offset.pitch)} ${reflect*(kinematics.yaw + offset.yaw)}" />
|
||||||
|
</xacro:if>
|
||||||
|
<xacro:unless value="${offset != 'none'}">
|
||||||
|
<origin
|
||||||
|
xyz="${kinematics.x} ${kinematics.y} ${kinematics.z}"
|
||||||
|
rpy="${reflect*kinematics.roll} ${reflect*kinematics.pitch} ${reflect*kinematics.yaw}" />
|
||||||
|
</xacro:unless>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-kinematics-link" params="config name">
|
||||||
|
<xacro:property name="kinematics_link" value="${config[name]['kinematic']}" lazy_eval="false" />
|
||||||
|
<origin rpy="${kinematics_link.roll} ${kinematics_link.pitch} ${kinematics_link.yaw}"
|
||||||
|
xyz="${kinematics_link.x} ${kinematics_link.y} ${kinematics_link.z}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
</robot>
|
||||||
37
urdf/body/openarm_body.xacro
Normal file
37
urdf/body/openarm_body.xacro
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="openarm_body">
|
||||||
|
|
||||||
|
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/body/openarm_body_macro.xacro" />
|
||||||
|
|
||||||
|
<xacro:macro name="openarm_body"
|
||||||
|
params="body_type
|
||||||
|
body_prefix:=''
|
||||||
|
no_prefix:=false
|
||||||
|
description_pkg:='openarm_description'
|
||||||
|
connected_to:='world'
|
||||||
|
xyz:='0 0 0'
|
||||||
|
rpy:='0 0 0'
|
||||||
|
inertials
|
||||||
|
kinematics
|
||||||
|
kinematics_link">
|
||||||
|
|
||||||
|
<!-- <xacro:property name="prefix" value="${'' if no_prefix else body_prefix + 'body_'}" /> -->
|
||||||
|
<xacro:property name="prefix" value="${'' if no_prefix else 'openarm_' + 'body_'}" />
|
||||||
|
|
||||||
|
<xacro:unless value="${not connected_to}">
|
||||||
|
<link name="${connected_to}" />
|
||||||
|
<joint name="${prefix}${connected_to}_joint" type="fixed">
|
||||||
|
<parent link="${connected_to}" />
|
||||||
|
<child link="${prefix}link0" />
|
||||||
|
<origin xyz="${xyz}" rpy="${rpy}" />
|
||||||
|
</joint>
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
<xacro:body_link_with_sc
|
||||||
|
name="body_link0"
|
||||||
|
no_prefix="${no_prefix}"
|
||||||
|
kinematics_link="${kinematics_link}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
</robot>
|
||||||
55
urdf/body/openarm_body_macro.xacro
Normal file
55
urdf/body/openarm_body_macro.xacro
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-body-inertials" params="name inertials:=^">
|
||||||
|
<xacro:unless value="${name in inertials}">${xacro.warning('No inertia properties defined for: ' + name)}</xacro:unless>
|
||||||
|
<xacro:if value="${name in inertials}">
|
||||||
|
<!-- Access inertia properties of link 'name' -->
|
||||||
|
<xacro:property name="link_inertials" value="${inertials[name]}" lazy_eval="false" />
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="${link_inertials.origin.rpy}" xyz="${link_inertials.origin.xyz}" />
|
||||||
|
<mass value="${link_inertials.mass}" />
|
||||||
|
<xacro:if value="${'inertia' in link_inertials}">
|
||||||
|
<xacro:property name="I" value="${link_inertials.inertia}" />
|
||||||
|
<inertia ixx="${I.xx}" ixy="${I.xy}" ixz="${I.xz}" iyy="${I.yy}" iyz="${I.yz}" izz="${I.zz}" />
|
||||||
|
</xacro:if>
|
||||||
|
</inertial>
|
||||||
|
</xacro:if>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
|
||||||
|
<xacro:macro name="body_link_with_sc" params="name no_prefix:='false' rpy:='0 0 0' kinematics_link">
|
||||||
|
<!-- <xacro:property name="prefix" value="${'' if no_prefix else body_prefix + body_type + '_'}" /> -->
|
||||||
|
<xacro:property name="prefix" value="${'' if no_prefix else 'openarm' + '_' + body_prefix}" />
|
||||||
|
<link name="${prefix}${name}">
|
||||||
|
<visual name="${prefix}${name}_visual">
|
||||||
|
<xacro:openarm-body-kinematics config="${kinematics_link}" name="${name}" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/body/${body_type}/visual/${name}.dae" scale="0.001 0.001 0.001" />
|
||||||
|
</geometry>
|
||||||
|
</visual>
|
||||||
|
<collision name="${prefix}${name}_collision">
|
||||||
|
<xacro:openarm-body-kinematics config="${kinematics_link}" name="${name}" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://openarm_description/meshes/body/${body_type}/collision/${name}_symp.stl" scale="0.001 0.001 0.001" />
|
||||||
|
<!-- <mesh filename="package://openarm_description/meshes/arm/${arm_type}/collision/${name}.stl" scale="0.001 0.001 0.001" /> -->
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
<xacro:openarm-body-inertials name="${name}" />
|
||||||
|
</link>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-body-kinematics" params="config name">
|
||||||
|
<xacro:property name="kinematics" value="${config[name]['kinematic']}" lazy_eval="false" />
|
||||||
|
<origin rpy="${kinematics.roll} ${kinematics.pitch} ${kinematics.yaw}"
|
||||||
|
xyz="${kinematics.x} ${kinematics.y} ${kinematics.z}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-body-kinematics-link" params="config name">
|
||||||
|
<xacro:property name="kinematics_link" value="${config[name]['kinematic']}" lazy_eval="false" />
|
||||||
|
<origin rpy="${kinematics_link.roll} ${kinematics_link.pitch} ${kinematics_link.yaw}"
|
||||||
|
xyz="${kinematics_link.x} ${kinematics_link.y} ${kinematics_link.z}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
|
||||||
|
</robot>
|
||||||
29
urdf/ee/ee_with_one_link.xacro
Normal file
29
urdf/ee/ee_with_one_link.xacro
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="ee_with_one_link">
|
||||||
|
<!-- safety_distance: Minimum safety distance in [m] by which the collision volumes are expanded and which is enforced during robot motions -->
|
||||||
|
<xacro:macro name="ee_with_one_link" params="connected_to:='' arm_type arm_prefix:='' ee_type ee_inertials rpy_ee:='0 0 0' xyz_ee:='0 0 0' tcp_xyz:='0 0 0' tcp_rpy:='0 0 0' description_pkg:=openarm_description with_sc:=false">
|
||||||
|
<xacro:property name="ee_prefix" default="robot_"/>
|
||||||
|
<xacro:unless value="${arm_type == ''}">
|
||||||
|
<xacro:property name="ee_prefix" value="openarm_${arm_prefix}" />
|
||||||
|
</xacro:unless>
|
||||||
|
<xacro:unless value="${connected_to == ''}">
|
||||||
|
<joint name="${ee_prefix}${ee_type}_joint" type="fixed">
|
||||||
|
<parent link="${connected_to}" />
|
||||||
|
<child link="${ee_prefix}${ee_type}" />
|
||||||
|
<origin xyz="${xyz_ee}" rpy="${rpy_ee}" />
|
||||||
|
</joint>
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
<xacro:ee_link_with_sc name="${ee_type}"/>
|
||||||
|
|
||||||
|
<!-- Define the ${ee_type}_tcp frame -->
|
||||||
|
<link name="${ee_prefix}${ee_type}_tcp" />
|
||||||
|
|
||||||
|
<joint name="${ee_prefix}${ee_type}_tcp_joint" type="fixed">
|
||||||
|
<origin xyz="${tcp_xyz}" rpy="${tcp_rpy}" />
|
||||||
|
<parent link="${ee_prefix}${ee_type}" />
|
||||||
|
<child link="${ee_prefix}${ee_type}_tcp" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
85
urdf/ee/openarm_hand.xacro
Normal file
85
urdf/ee/openarm_hand.xacro
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="hand">
|
||||||
|
<!-- safety_distance: Minimum safety distance in [m] by which the collision volumes are expanded and which is enforced during robot motions -->
|
||||||
|
<xacro:macro name="openarm_hand" params="connected_to:='' arm_type arm_prefix:='' ee_type ee_inertials ee_kinematics_link rpy_ee:='0 0 0' xyz_ee:='0 0 0' tcp_xyz:='0 0 0' tcp_rpy:='0 0 0' description_pkg:=openarm_description">
|
||||||
|
|
||||||
|
<xacro:property name="ee_prefix" default=""/>
|
||||||
|
|
||||||
|
<xacro:unless value="${arm_type == ''}">
|
||||||
|
<!-- <xacro:property name="ee_prefix" value="${arm_prefix}${arm_type}_" /> -->
|
||||||
|
<xacro:property name="ee_prefix" value="openarm_${arm_prefix}" />
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
|
||||||
|
<xacro:ee_link_with_sc name="hand" prefix="${ee_prefix}" ee_kinematics_link="${ee_kinematics_link}"/>
|
||||||
|
<!-- <link name="${ee_prefix}hand"/> -->
|
||||||
|
|
||||||
|
<xacro:unless value="${connected_to == ''}">
|
||||||
|
<!-- <joint name="${ee_prefix}hand_joint" type="fixed"> -->
|
||||||
|
<joint name="${arm_prefix}openarm_hand_joint" type="fixed">
|
||||||
|
<parent link="${connected_to}" />
|
||||||
|
<child link="${ee_prefix}hand" />
|
||||||
|
<origin xyz="${xyz_ee}" rpy="${rpy_ee}" />
|
||||||
|
</joint>
|
||||||
|
</xacro:unless>
|
||||||
|
|
||||||
|
<!-- Define the hand_tcp frame -->
|
||||||
|
<link name="${ee_prefix}hand_tcp" />
|
||||||
|
|
||||||
|
<joint name="${ee_prefix}hand_tcp_joint" type="fixed">
|
||||||
|
<origin xyz="${tcp_xyz}" rpy="${tcp_rpy}" />
|
||||||
|
<parent link="${ee_prefix}hand" />
|
||||||
|
<child link="${ee_prefix}hand_tcp" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<link name="${ee_prefix}left_finger">
|
||||||
|
<visual name="${ee_prefix}left_finger_visual">
|
||||||
|
<xacro:openarm-ee-kinematics-link config="${ee_kinematics_link}" name="left_finger" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/ee/${ee_type}/visual/finger.dae" scale="0.001 0.001 0.001"/>
|
||||||
|
</geometry>
|
||||||
|
</visual>
|
||||||
|
<collision name="${ee_prefix}left_finger_collision">
|
||||||
|
<xacro:openarm-ee-kinematics-link config="${ee_kinematics_link}" name="left_finger" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/ee/${ee_type}/collision/finger.stl" scale="0.001 0.001 0.001" />
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
<xacro:ee-inertials name="left_finger"/>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link name="${ee_prefix}right_finger">
|
||||||
|
<visual name="${ee_prefix}right_finger_visual">
|
||||||
|
<xacro:openarm-ee-kinematics-link config="${ee_kinematics_link}" name="right_finger" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/ee/${ee_type}/visual/finger.dae" scale="0.001 -0.001 0.001"/>
|
||||||
|
</geometry>
|
||||||
|
</visual>
|
||||||
|
<collision name="${ee_prefix}right_finger_collision">
|
||||||
|
<xacro:openarm-ee-kinematics-link config="${ee_kinematics_link}" name="right_finger" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/ee/${ee_type}/collision/finger.stl" scale="0.001 -0.001 0.001" />
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
<xacro:ee-inertials name="right_finger"/>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<joint name="${ee_prefix}finger_joint1" type="prismatic">
|
||||||
|
<parent link="${ee_prefix}hand" />
|
||||||
|
<child link="${ee_prefix}right_finger" />
|
||||||
|
<origin xyz="0 0.00 0.015" rpy="0 0 0" />
|
||||||
|
<axis xyz="0 -1 0" />
|
||||||
|
<limit effort="333" lower="0.0" upper="0.044" velocity="10.0" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<joint name="${ee_prefix}finger_joint2" type="prismatic">
|
||||||
|
<parent link="${ee_prefix}hand" />
|
||||||
|
<child link="${ee_prefix}left_finger" />
|
||||||
|
<origin xyz="0 0.012 0.015" rpy="0 0 0" />
|
||||||
|
<axis xyz="0 1 0" />
|
||||||
|
<limit effort="333" lower="0.0" upper="0.044" velocity="10.0" />
|
||||||
|
<mimic joint="${ee_prefix}finger_joint1" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
25
urdf/ee/openarm_hand_arguments.xacro
Normal file
25
urdf/ee/openarm_hand_arguments.xacro
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
|
||||||
|
<!-- Where is the end-effector connected to, if different from the robot flange? -->
|
||||||
|
<xacro:arg name="special_connection" default="" />
|
||||||
|
|
||||||
|
<!-- Position offset between ee and parent frame -->
|
||||||
|
<xacro:arg name="xyz_ee" default="0 -0.025 0.1001" />
|
||||||
|
|
||||||
|
<!-- Rotation offset between ee and parent frame -->
|
||||||
|
<xacro:arg name="rpy_ee" default= "0 0 0" />
|
||||||
|
|
||||||
|
<!-- Position offset between ee frame and tcp frame -->
|
||||||
|
<xacro:arg name="tcp_xyz" default="0 -0.0 0.08" />
|
||||||
|
|
||||||
|
<!-- Rotation offset between ee frame and tcp frame -->
|
||||||
|
<xacro:arg name="tcp_rpy" default="0 0 0" />
|
||||||
|
|
||||||
|
<!-- Is the robot being simulated in gazebo? -->
|
||||||
|
<!-- <xacro:arg name="gazebo" default="false" /> -->
|
||||||
|
|
||||||
|
<!-- Name of the description package -->
|
||||||
|
<xacro:arg name="description_pkg" default="openarm_description" />
|
||||||
|
|
||||||
|
</robot>
|
||||||
55
urdf/ee/openarm_hand_macro.xacro
Normal file
55
urdf/ee/openarm_hand_macro.xacro
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
|
||||||
|
|
||||||
|
<xacro:macro name="ee-inertials" params="name ee_inertials:=^">
|
||||||
|
<xacro:unless value="${name in ee_inertials}">
|
||||||
|
${xacro.warning('No inertia properties defined for: ' + name)}
|
||||||
|
</xacro:unless>
|
||||||
|
<xacro:if value="${name in ee_inertials}">
|
||||||
|
<xacro:property name="link_inertials" value="${ee_inertials[name]}" lazy_eval="false" />
|
||||||
|
<xacro:property name="xyz" value="${link_inertials.origin.x} ${link_inertials.origin.y} ${link_inertials.origin.z}" />
|
||||||
|
<xacro:property name="rpy" value="${link_inertials.origin.roll} ${link_inertials.origin.pitch} ${link_inertials.origin.yaw}" />
|
||||||
|
<inertial>
|
||||||
|
<origin xyz="${xyz}" rpy="${rpy}" />
|
||||||
|
<mass value="${link_inertials.mass}" />
|
||||||
|
<xacro:if value="${'inertia' in link_inertials}">
|
||||||
|
<xacro:property name="I" value="${link_inertials.inertia}" />
|
||||||
|
<inertia ixx="${I.xx}" ixy="${I.xy}" ixz="${I.xz}"
|
||||||
|
iyy="${I.yy}" iyz="${I.yz}" izz="${I.zz}" />
|
||||||
|
</xacro:if>
|
||||||
|
</inertial>
|
||||||
|
</xacro:if>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="ee_link_with_sc" params="name prefix rpy:='0 0 0' ee_kinematics_link">
|
||||||
|
<link name="${prefix}${name}">
|
||||||
|
<visual name="${prefix}${name}_visual">
|
||||||
|
<xacro:openarm-ee-kinematics-link config="${ee_kinematics_link}" name="${name}" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://${description_pkg}/meshes/ee/${ee_type}/visual/${name}.dae" scale="0.001 0.001 0.001" />
|
||||||
|
</geometry>
|
||||||
|
</visual>
|
||||||
|
<collision name="${prefix}${name}_collision">
|
||||||
|
<xacro:openarm-ee-kinematics-link config="${ee_kinematics_link}" name="${name}" />
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="package://openarm_description/meshes/ee/${ee_type}/collision/${name}.stl" scale="0.001 0.001 0.001" />
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
<xacro:ee-inertials name="${name}" />
|
||||||
|
</link>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-ee-kinematics" params="config name">
|
||||||
|
<xacro:property name="kinematics" value="${config[name]['kinematic']}" lazy_eval="false" />
|
||||||
|
<origin rpy="${kinematics.roll} ${kinematics.pitch} ${kinematics.yaw}"
|
||||||
|
xyz="${kinematics.x} ${kinematics.y} ${kinematics.z}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:macro name="openarm-ee-kinematics-link" params="config name">
|
||||||
|
<xacro:property name="kinematics_link" value="${config[name]['kinematic']}" lazy_eval="false" />
|
||||||
|
<origin rpy="${kinematics_link.roll} ${kinematics_link.pitch} ${kinematics_link.yaw}"
|
||||||
|
xyz="${kinematics_link.x} ${kinematics_link.y} ${kinematics_link.z}" />
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
</robot>
|
||||||
195
urdf/robot/openarm_robot.xacro
Normal file
195
urdf/robot/openarm_robot.xacro
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
<xacro:macro name="openarm_robot"
|
||||||
|
params="arm_type
|
||||||
|
joint_limits
|
||||||
|
kinematics
|
||||||
|
kinematics_link
|
||||||
|
kinematics_offset
|
||||||
|
inertials
|
||||||
|
body_type
|
||||||
|
body_inertials
|
||||||
|
body_kinematics
|
||||||
|
body_kinematics_link
|
||||||
|
ee_kinematics_link
|
||||||
|
parent:='world'
|
||||||
|
xyz:='0 0 0'
|
||||||
|
rpy:='0 0 0'
|
||||||
|
hand:='false'
|
||||||
|
ee_type:=''
|
||||||
|
ros2_control:=false
|
||||||
|
can_interface:=''
|
||||||
|
use_fake_hardware:=false
|
||||||
|
fake_sensor_commands:=false
|
||||||
|
no_prefix:='false'
|
||||||
|
arm_prefix:=''
|
||||||
|
body_prefix:=''
|
||||||
|
arm_connected_to='base'
|
||||||
|
body_connected_to='world'
|
||||||
|
bimanual:=false
|
||||||
|
right_arm_base_xyz='0 0 0'
|
||||||
|
left_arm_base_xyz='0 0 0'
|
||||||
|
right_arm_base_rpy='0 0 0'
|
||||||
|
left_arm_base_rpy='0 0 0'
|
||||||
|
left_can_interface:='can1'
|
||||||
|
right_can_interface:='can0'
|
||||||
|
left_arm_prefix:='left_'
|
||||||
|
right_arm_prefix:='right_'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/arm/openarm_macro.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/arm/openarm_arm.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/body/openarm_body_macro.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/body/openarm_body.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/ee/openarm_hand.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/ee/openarm_hand_macro.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/ros2_control/openarm.ros2_control.xacro" />
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/ros2_control/openarm.bimanual.ros2_control.xacro" />
|
||||||
|
<xacro:if value="${ee_type != 'none'}">
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/ee/${ee_type}_arguments.xacro" />
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:property name="arm_prefix_modified" value="${'' if arm_prefix == '' else arm_prefix + '_'}" />
|
||||||
|
<xacro:property name="body_prefix_modified" value="${'' if body_prefix == '' else body_prefix + '_'}" />
|
||||||
|
|
||||||
|
<xacro:if value="${bimanual}">
|
||||||
|
|
||||||
|
<xacro:openarm_body
|
||||||
|
body_type="${body_type}"
|
||||||
|
body_prefix="${body_prefix_modified}"
|
||||||
|
no_prefix="${no_prefix}"
|
||||||
|
description_pkg="openarm_description"
|
||||||
|
connected_to="${body_connected_to}"
|
||||||
|
xyz="${xyz}"
|
||||||
|
rpy="${rpy}"
|
||||||
|
inertials="${body_inertials}"
|
||||||
|
kinematics="${body_kinematics}"
|
||||||
|
kinematics_link="${body_kinematics_link}" />
|
||||||
|
|
||||||
|
<!-- left arm -->
|
||||||
|
<xacro:openarm_arm
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="left_"
|
||||||
|
no_prefix="false"
|
||||||
|
description_pkg="openarm_description"
|
||||||
|
connected_to="openarm_body_link0"
|
||||||
|
xyz="${left_arm_base_xyz}"
|
||||||
|
rpy="${left_arm_base_rpy}"
|
||||||
|
joint_limits="${joint_limits}"
|
||||||
|
inertials="${inertials}"
|
||||||
|
kinematics="${kinematics}"
|
||||||
|
kinematics_link="${kinematics_link}"
|
||||||
|
kinematics_offset="${kinematics_offset}" />
|
||||||
|
|
||||||
|
<!-- right arm -->
|
||||||
|
<xacro:openarm_arm
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="right_"
|
||||||
|
no_prefix="false"
|
||||||
|
description_pkg="openarm_description"
|
||||||
|
connected_to="openarm_body_link0"
|
||||||
|
xyz="${right_arm_base_xyz}"
|
||||||
|
rpy="${right_arm_base_rpy}"
|
||||||
|
joint_limits="${joint_limits}"
|
||||||
|
inertials="${inertials}"
|
||||||
|
kinematics="${kinematics}"
|
||||||
|
kinematics_link="${kinematics_link}"
|
||||||
|
kinematics_offset="${kinematics_offset}" />
|
||||||
|
|
||||||
|
<!-- ros2_control hardware interfaces for bimanual setup -->
|
||||||
|
<xacro:if value="${ros2_control}">
|
||||||
|
<xacro:openarm_bimanual_ros2_control
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
left_can_interface="${left_can_interface}"
|
||||||
|
right_can_interface="${right_can_interface}"
|
||||||
|
use_fake_hardware="${use_fake_hardware}"
|
||||||
|
fake_sensor_commands="${fake_sensor_commands}"
|
||||||
|
left_arm_prefix="${left_arm_prefix}"
|
||||||
|
right_arm_prefix="${right_arm_prefix}"
|
||||||
|
hand="${hand}"/>
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:if value="$(eval hand and ee_type == 'openarm_hand')">
|
||||||
|
<xacro:openarm_hand
|
||||||
|
connected_to="openarm_left_link8"
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="left_"
|
||||||
|
ee_type="${ee_type}"
|
||||||
|
ee_kinematics_link="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/kinematics_link.yaml')}"
|
||||||
|
ee_inertials="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/inertials.yaml')}"
|
||||||
|
rpy_ee="$(arg rpy_ee)"
|
||||||
|
xyz_ee="$(arg xyz_ee)"
|
||||||
|
tcp_xyz="$(arg tcp_xyz)"
|
||||||
|
tcp_rpy="$(arg tcp_rpy)"
|
||||||
|
description_pkg="$(arg description_pkg)"
|
||||||
|
/>
|
||||||
|
<xacro:openarm_hand
|
||||||
|
connected_to="openarm_right_link8"
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="right_"
|
||||||
|
ee_type="${ee_type}"
|
||||||
|
ee_kinematics_link="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/kinematics_link.yaml')}"
|
||||||
|
ee_inertials="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/inertials.yaml')}"
|
||||||
|
rpy_ee="$(arg rpy_ee)"
|
||||||
|
xyz_ee="$(arg xyz_ee)"
|
||||||
|
tcp_xyz="$(arg tcp_xyz)"
|
||||||
|
tcp_rpy="$(arg tcp_rpy)"
|
||||||
|
description_pkg="$(arg description_pkg)"
|
||||||
|
/>
|
||||||
|
</xacro:if>
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:if value="${not bimanual}">
|
||||||
|
|
||||||
|
<xacro:openarm_arm
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="${arm_prefix_modified}"
|
||||||
|
no_prefix="${no_prefix}"
|
||||||
|
xyz="${xyz}"
|
||||||
|
rpy="${rpy}"
|
||||||
|
joint_limits="${joint_limits}"
|
||||||
|
kinematics="${kinematics}"
|
||||||
|
kinematics_link="${kinematics_link}"
|
||||||
|
inertials="${inertials}"
|
||||||
|
connected_to=""
|
||||||
|
/>
|
||||||
|
|
||||||
|
<xacro:if value="${ros2_control}">
|
||||||
|
|
||||||
|
<xacro:openarm_arm_ros2_control
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="${arm_prefix_modified}"
|
||||||
|
can_interface="${can_interface}"
|
||||||
|
use_fake_hardware="${use_fake_hardware}"
|
||||||
|
fake_sensor_commands="${fake_sensor_commands}"
|
||||||
|
hand="${hand}"
|
||||||
|
bimanual="false"/>
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:if value="${hand and ee_type == 'openarm_hand'}">
|
||||||
|
|
||||||
|
<xacro:property name="special_connection" value="$(arg special_connection)" />
|
||||||
|
<!-- <xacro:property name="connection" value="${special_connection if special_connection != '' else arm_type + '_link8'}" /> -->
|
||||||
|
<xacro:property name="connection" value="${special_connection if special_connection != '' else 'openarm' + '_link8'}" />
|
||||||
|
|
||||||
|
<xacro:if value="$(eval hand and ee_type == 'openarm_hand')">
|
||||||
|
<xacro:openarm_hand
|
||||||
|
connected_to="${arm_prefix_modified}${connection}"
|
||||||
|
arm_type="${arm_type}"
|
||||||
|
arm_prefix="${arm_prefix_modified}"
|
||||||
|
ee_type="${ee_type}"
|
||||||
|
ee_kinematics_link="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/kinematics_link.yaml')}"
|
||||||
|
ee_inertials="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/inertials.yaml')}"
|
||||||
|
rpy_ee="$(arg rpy_ee)"
|
||||||
|
xyz_ee="$(arg xyz_ee)"
|
||||||
|
tcp_xyz="$(arg tcp_xyz)"
|
||||||
|
tcp_rpy="$(arg tcp_rpy)"
|
||||||
|
description_pkg="$(arg description_pkg)"/>
|
||||||
|
</xacro:if>
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
84
urdf/robot/v10.urdf.xacro
Normal file
84
urdf/robot/v10.urdf.xacro
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="openarm">
|
||||||
|
|
||||||
|
<xacro:include filename="$(find openarm_description)/urdf/robot/openarm_robot.xacro"/>
|
||||||
|
|
||||||
|
<xacro:arg name="arm_type" default="v10" />
|
||||||
|
|
||||||
|
<xacro:arg name="body_type" default="v10" />
|
||||||
|
|
||||||
|
<xacro:arg name="ee_type" default="openarm_hand" />
|
||||||
|
|
||||||
|
<xacro:arg name="no_prefix" default="false"/>
|
||||||
|
|
||||||
|
<xacro:arg name="hand" default="true" />
|
||||||
|
|
||||||
|
<xacro:if value="$(eval ee_type == 'none')">
|
||||||
|
<xacro:property name="hand" value="false"/>
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
<xacro:arg name="parent" default="world" />
|
||||||
|
|
||||||
|
<xacro:arg name="xyz" default="0 0 0" />
|
||||||
|
|
||||||
|
<xacro:arg name="rpy" default="0 0 0" />
|
||||||
|
|
||||||
|
<xacro:arg name="ros2_control" default="false" />
|
||||||
|
|
||||||
|
<xacro:arg name="can_interface" default="can0" />
|
||||||
|
|
||||||
|
<xacro:arg name="left_can_interface" default="can1" />
|
||||||
|
|
||||||
|
<xacro:arg name="right_can_interface" default="can0" />
|
||||||
|
|
||||||
|
<xacro:arg name="left_arm_prefix" default="left_" />
|
||||||
|
|
||||||
|
<xacro:arg name="right_arm_prefix" default="right_" />
|
||||||
|
|
||||||
|
<xacro:arg name="use_fake_hardware" default="false" />
|
||||||
|
|
||||||
|
<xacro:arg name="fake_sensor_commands" default="false" />
|
||||||
|
|
||||||
|
<xacro:arg name="bimanual" default="false" />
|
||||||
|
|
||||||
|
<xacro:arg name="right_arm_base_xyz" default="0.0 -0.031 0.698" />
|
||||||
|
<xacro:arg name="right_arm_base_rpy" default="1.5708 0 0" />
|
||||||
|
|
||||||
|
<xacro:arg name="left_arm_base_xyz" default="0.0 0.031 0.698" />
|
||||||
|
<xacro:arg name="left_arm_base_rpy" default="-1.5708 0 0" />
|
||||||
|
|
||||||
|
<xacro:openarm_robot
|
||||||
|
arm_type="v10"
|
||||||
|
body_type="v10"
|
||||||
|
joint_limits="${xacro.load_yaml('$(find openarm_description)/config//arm/v10/joint_limits.yaml')}"
|
||||||
|
inertials="${xacro.load_yaml('$(find openarm_description)/config/arm/v10/inertials.yaml')}"
|
||||||
|
kinematics="${xacro.load_yaml('$(find openarm_description)/config/arm/v10/kinematics.yaml')}"
|
||||||
|
kinematics_link="${xacro.load_yaml('$(find openarm_description)/config/arm/v10/kinematics_link.yaml')}"
|
||||||
|
kinematics_offset="${xacro.load_yaml('$(find openarm_description)/config/arm/v10/kinematics_offset.yaml')}"
|
||||||
|
body_inertials="${xacro.load_yaml('$(find openarm_description)/config/body/v10/inertials.yaml')}"
|
||||||
|
body_kinematics="${xacro.load_yaml('$(find openarm_description)/config/body/v10/kinematics.yaml')}"
|
||||||
|
body_kinematics_link="${xacro.load_yaml('$(find openarm_description)/config/body/v10/kinematics.yaml')}"
|
||||||
|
ee_kinematics_link="${xacro.load_yaml('$(find openarm_description)/config/hand/openarm_hand/kinematics_link.yaml')}"
|
||||||
|
hand="$(arg hand)"
|
||||||
|
ee_type="$(arg ee_type)"
|
||||||
|
ros2_control="$(arg ros2_control)"
|
||||||
|
can_interface="$(arg can_interface)"
|
||||||
|
left_can_interface="$(arg left_can_interface)"
|
||||||
|
right_can_interface="$(arg right_can_interface)"
|
||||||
|
left_arm_prefix="$(arg left_arm_prefix)"
|
||||||
|
right_arm_prefix="$(arg right_arm_prefix)"
|
||||||
|
use_fake_hardware="$(arg use_fake_hardware)"
|
||||||
|
fake_sensor_commands="$(arg fake_sensor_commands)"
|
||||||
|
no_prefix="$(arg no_prefix)"
|
||||||
|
arm_prefix=""
|
||||||
|
body_prefix=""
|
||||||
|
arm_connected_to="base"
|
||||||
|
body_connected_to="world"
|
||||||
|
bimanual="$(arg bimanual)"
|
||||||
|
right_arm_base_xyz="$(arg right_arm_base_xyz)"
|
||||||
|
left_arm_base_xyz="$(arg left_arm_base_xyz)"
|
||||||
|
right_arm_base_rpy="$(arg right_arm_base_rpy)"
|
||||||
|
left_arm_base_rpy="$(arg left_arm_base_rpy)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</robot>
|
||||||
99
urdf/ros2_control/openarm.bimanual.ros2_control.xacro
Normal file
99
urdf/ros2_control/openarm.bimanual.ros2_control.xacro
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
|
||||||
|
<xacro:macro name="openarm_bimanual_ros2_control"
|
||||||
|
params="arm_type
|
||||||
|
left_can_interface:=^|can1
|
||||||
|
right_can_interface:=^|can0
|
||||||
|
use_fake_hardware:=^|false
|
||||||
|
fake_sensor_commands:=^|false
|
||||||
|
hand:=^|false
|
||||||
|
left_arm_prefix:=^|left_
|
||||||
|
right_arm_prefix:=^|right_
|
||||||
|
can_fd:=^|true">
|
||||||
|
|
||||||
|
<!-- Left Arm Hardware Interface -->
|
||||||
|
<ros2_control name="openarm_left_hardware_interface" type="system">
|
||||||
|
<hardware>
|
||||||
|
<param name="arm_type">${arm_type}</param>
|
||||||
|
<xacro:if value="${use_fake_hardware}">
|
||||||
|
<plugin>fake_components/GenericSystem</plugin>
|
||||||
|
<param name="fake_sensor_commands">${fake_sensor_commands}</param>
|
||||||
|
<param name="state_following_offset">0.0</param>
|
||||||
|
</xacro:if>
|
||||||
|
<xacro:unless value="${use_fake_hardware}">
|
||||||
|
<plugin>openarm_hardware/OpenArm_v10HW</plugin>
|
||||||
|
<param name="can_interface">${left_can_interface}</param>
|
||||||
|
<param name="arm_prefix">${left_arm_prefix}</param>
|
||||||
|
<param name="hand">${hand}</param>
|
||||||
|
<param name="can_fd">${can_fd}</param>
|
||||||
|
</xacro:unless>
|
||||||
|
</hardware>
|
||||||
|
|
||||||
|
<xacro:macro name="configure_joint" params="joint_name initial_position">
|
||||||
|
<joint name="${joint_name}">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<command_interface name="velocity"/>
|
||||||
|
<command_interface name="effort"/>
|
||||||
|
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_position}</param>
|
||||||
|
</state_interface>
|
||||||
|
|
||||||
|
<state_interface name="velocity">
|
||||||
|
<param name="initial_value">0.0</param>
|
||||||
|
</state_interface>
|
||||||
|
|
||||||
|
<state_interface name="effort">
|
||||||
|
<param name="initial_value">0.0</param>
|
||||||
|
</state_interface>
|
||||||
|
</joint>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint1" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint2" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint3" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint4" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint5" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint6" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}joint7" initial_position="0.0"/>
|
||||||
|
|
||||||
|
<xacro:if value="${hand}">
|
||||||
|
<xacro:configure_joint joint_name="openarm_${left_arm_prefix}finger_joint1" initial_position="0.0" />
|
||||||
|
</xacro:if>
|
||||||
|
</ros2_control>
|
||||||
|
|
||||||
|
<!-- Right Arm Hardware Interface -->
|
||||||
|
<ros2_control name="openarm_right_hardware_interface" type="system">
|
||||||
|
<hardware>
|
||||||
|
<param name="arm_type">${arm_type}</param>
|
||||||
|
<xacro:if value="${use_fake_hardware}">
|
||||||
|
<plugin>fake_components/GenericSystem</plugin>
|
||||||
|
<param name="fake_sensor_commands">${fake_sensor_commands}</param>
|
||||||
|
<param name="state_following_offset">0.0</param>
|
||||||
|
</xacro:if>
|
||||||
|
<xacro:unless value="${use_fake_hardware}">
|
||||||
|
<plugin>openarm_hardware/OpenArm_v10HW</plugin>
|
||||||
|
<param name="can_interface">${right_can_interface}</param>
|
||||||
|
<param name="arm_prefix">${right_arm_prefix}</param>
|
||||||
|
<param name="hand">${hand}</param>
|
||||||
|
<param name="can_fd">${can_fd}</param>
|
||||||
|
</xacro:unless>
|
||||||
|
</hardware>
|
||||||
|
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint1" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint2" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint3" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint4" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint5" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint6" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}joint7" initial_position="0.0"/>
|
||||||
|
|
||||||
|
<xacro:if value="${hand}">
|
||||||
|
<xacro:configure_joint joint_name="openarm_${right_arm_prefix}finger_joint1" initial_position="0.0" />
|
||||||
|
</xacro:if>
|
||||||
|
</ros2_control>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
</robot>
|
||||||
77
urdf/ros2_control/openarm.ros2_control.xacro
Normal file
77
urdf/ros2_control/openarm.ros2_control.xacro
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
|
||||||
|
<xacro:macro name="openarm_arm_ros2_control"
|
||||||
|
params="arm_type
|
||||||
|
can_interface
|
||||||
|
use_fake_hardware:=^|false
|
||||||
|
fake_sensor_commands:=^|false
|
||||||
|
hand:=^|false
|
||||||
|
gazebo_effort:=^|false
|
||||||
|
arm_prefix:=''
|
||||||
|
bimanual:=false
|
||||||
|
can_fd:=^|true">
|
||||||
|
|
||||||
|
<ros2_control name="openarm_hardware_interface" type="system">
|
||||||
|
<hardware>
|
||||||
|
<param name="arm_type">${arm_type}</param>
|
||||||
|
<param name="prefix">${arm_prefix}</param>
|
||||||
|
<xacro:if value="${use_fake_hardware}">
|
||||||
|
<plugin>fake_components/GenericSystem</plugin>
|
||||||
|
<param name="fake_sensor_commands">${fake_sensor_commands}</param>
|
||||||
|
<param name="state_following_offset">0.0</param>
|
||||||
|
</xacro:if>
|
||||||
|
<xacro:if value="${use_fake_hardware == 0}">
|
||||||
|
<plugin>openarm_hardware/OpenArm_${arm_type}HW</plugin>
|
||||||
|
<param name="can_interface">${can_interface}</param>
|
||||||
|
<param name="arm_prefix">${arm_prefix}</param>
|
||||||
|
<param name="hand">${hand}</param>
|
||||||
|
<param name="can_fd">${can_fd}</param>
|
||||||
|
</xacro:if>
|
||||||
|
</hardware>
|
||||||
|
|
||||||
|
<xacro:macro name="configure_joint" params="joint_name initial_position">
|
||||||
|
<joint name="${joint_name}">
|
||||||
|
<!--
|
||||||
|
deactivated for gazebo velocity and position interface due to a bug
|
||||||
|
https://github.com/ros-controls/gz_ros2_control/issues/343
|
||||||
|
|
||||||
|
Command Interfaces -->
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<command_interface name="velocity"/>
|
||||||
|
<command_interface name="effort"/>
|
||||||
|
|
||||||
|
<!-- State Interfaces -->
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_position}</param>
|
||||||
|
</state_interface>
|
||||||
|
|
||||||
|
<state_interface name="velocity">
|
||||||
|
<param name="initial_value">0.0</param>
|
||||||
|
</state_interface>
|
||||||
|
|
||||||
|
<state_interface name="effort">
|
||||||
|
<param name="initial_value">0.0</param>
|
||||||
|
</state_interface>
|
||||||
|
|
||||||
|
</joint>
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint1" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint2" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint3" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint4" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint5" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint6" initial_position="0.0"/>
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}joint7" initial_position="0.0"/>
|
||||||
|
|
||||||
|
<xacro:if value="${hand}">
|
||||||
|
<xacro:configure_joint joint_name="openarm_${arm_prefix}finger_joint1" initial_position="0.0" />
|
||||||
|
</xacro:if>
|
||||||
|
|
||||||
|
</ros2_control>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
|
||||||
|
|
||||||
|
</robot>
|
||||||
Loading…
Reference in New Issue
Block a user