mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-06 06:25:06 +00:00
Compare commits
168 Commits
v0.10.1
...
45eaf7019d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45eaf7019d | ||
|
|
84aeb6921d | ||
|
|
a95e4d446b | ||
|
|
de6584f7a8 | ||
|
|
2c06f94bcf | ||
|
|
3d9798476b | ||
|
|
c462540484 | ||
|
|
ad54308046 | ||
|
|
5823edec8f | ||
|
|
dde7086aa6 | ||
|
|
f1c7c96095 | ||
|
|
2a686e6ff2 | ||
|
|
00ced4d412 | ||
|
|
5674e180fc | ||
|
|
0bd3025d73 | ||
|
|
8dbea5dbd2 | ||
|
|
06e6d3348c | ||
|
|
9a8d50bbf3 | ||
|
|
0dc11542fb | ||
|
|
f0de653e77 | ||
|
|
89808285ed | ||
|
|
6eaa8e1c63 | ||
|
|
41c130ef54 | ||
|
|
2d30fb79c1 | ||
|
|
743ec8839d | ||
|
|
3f7b991dd9 | ||
|
|
0466b57e0a | ||
|
|
aaf33a8878 | ||
|
|
31f59dc2aa | ||
|
|
46b7ce292b | ||
|
|
3584e92a1e | ||
|
|
e793ff6aa2 | ||
|
|
f90be18926 | ||
|
|
604d82140d | ||
|
|
9c4fdd8001 | ||
|
|
71f6deda6b | ||
|
|
d81297d699 | ||
|
|
23cf713a80 | ||
|
|
c5efa5aa26 | ||
|
|
acf7b6d3f7 | ||
|
|
0593f98f81 | ||
|
|
540c5e94b7 | ||
|
|
f9aae44174 | ||
|
|
10cb645191 | ||
|
|
4456529cfb | ||
|
|
694a779c66 | ||
|
|
5d214ebcd8 | ||
|
|
0e11dacead | ||
|
|
7b68545db3 | ||
|
|
25960c2ed5 | ||
|
|
72c67ba25c | ||
|
|
cd9e7ef12c | ||
|
|
b85722f44d | ||
|
|
5a2cc2d709 | ||
|
|
644feced55 | ||
|
|
61ee446542 | ||
|
|
18f6685e18 | ||
|
|
e2052d4a2c | ||
|
|
50282664e0 | ||
|
|
ce8667f937 | ||
|
|
bef44b2293 | ||
|
|
b78c6c6ba9 | ||
|
|
0d512c9e38 | ||
|
|
c8c755057c | ||
|
|
a6ec20e279 | ||
|
|
b69aceaff3 | ||
|
|
21afdb62bc | ||
|
|
d7d43af40a | ||
|
|
132955617d | ||
|
|
e7521972e4 | ||
|
|
f2753fc69a | ||
|
|
09ad905280 | ||
|
|
7714c71cd2 | ||
|
|
64832718be | ||
|
|
68871358c2 | ||
|
|
498b3cad6a | ||
|
|
157da1759d | ||
|
|
be0a73eb19 | ||
|
|
9be6e1069a | ||
|
|
817e88cfc4 | ||
|
|
15f3f8518b | ||
|
|
bbc49e9aab | ||
|
|
f9a9e91d56 | ||
|
|
96e9c76709 | ||
|
|
06b7962ef9 | ||
|
|
6faa19a250 | ||
|
|
46cec82a51 | ||
|
|
f7db8d17c5 | ||
|
|
a354965f8e | ||
|
|
934276d2f7 | ||
|
|
803809480b | ||
|
|
5478ba3237 | ||
|
|
49f1aa9c28 | ||
|
|
d5d516f0ef | ||
|
|
4471fed4b8 | ||
|
|
30d143e1a5 | ||
|
|
75ea45f21e | ||
|
|
66af337d6c | ||
|
|
ae3c65c1d3 | ||
|
|
11e4f053f1 | ||
|
|
96f37b3b0d | ||
|
|
d7d0a27976 | ||
|
|
34151f5cb2 | ||
|
|
369a21b904 | ||
|
|
90169981c1 | ||
|
|
d297abfd19 | ||
|
|
9c515a252a | ||
|
|
ea5e7a5ce2 | ||
|
|
2e9a0a4677 | ||
|
|
4c7aa8a89a | ||
|
|
d8a0c5e715 | ||
|
|
133ffaac17 | ||
|
|
729a0fcf0c | ||
|
|
6ae77e0408 | ||
|
|
bab4b1d67a | ||
|
|
12c17ec26e | ||
|
|
6577fe12eb | ||
|
|
f1fee5fad9 | ||
|
|
9b3377aedb | ||
|
|
526327727d | ||
|
|
aaa86314e3 | ||
|
|
6a14104e6b | ||
|
|
ab0c4b708b | ||
|
|
c0b7f2decd | ||
|
|
b6c9530c61 | ||
|
|
8698821c52 | ||
|
|
3f53f88390 | ||
|
|
e840516ba4 | ||
|
|
146d8c5296 | ||
|
|
6573c9e02e | ||
|
|
c7b9c6a825 | ||
|
|
48c43d3303 | ||
|
|
55be5e8188 | ||
|
|
1b9f3c666d | ||
|
|
097114d38c | ||
|
|
5bec899479 | ||
|
|
5e86112ebf | ||
|
|
24ecb13b79 | ||
|
|
2573d34713 | ||
|
|
106d71e1db | ||
|
|
3c2a4a64ac | ||
|
|
1e00a66a65 | ||
|
|
46da42deef | ||
|
|
101c1bc3cc | ||
|
|
a62112ae26 | ||
|
|
dd5a7cab75 | ||
|
|
39de3ac58e | ||
|
|
b99969278c | ||
|
|
b957ad2f71 | ||
|
|
e1a7c3a103 | ||
|
|
e63c15997c | ||
|
|
c5a495f409 | ||
|
|
5b240cb0ea | ||
|
|
147b8f47c0 | ||
|
|
6d2489af5f | ||
|
|
807dcdd226 | ||
|
|
8a29bc5597 | ||
|
|
6f6c70ee57 | ||
|
|
478a85951c | ||
|
|
0f2555c90c | ||
|
|
d2dda6ee03 | ||
|
|
208540b307 | ||
|
|
cb7c56a1d9 | ||
|
|
ea2e9c3e3a | ||
|
|
0452a68180 | ||
|
|
90a0f3db9b | ||
|
|
055d120ba8 | ||
|
|
a948f09f60 |
@@ -1,69 +0,0 @@
|
|||||||
package:
|
|
||||||
name: unilabos
|
|
||||||
version: 0.10.1
|
|
||||||
|
|
||||||
build:
|
|
||||||
noarch: python
|
|
||||||
number: 0
|
|
||||||
script:
|
|
||||||
- python -m pip install paho-mqtt opentrons_shared_data
|
|
||||||
- python -m pip install git+https://github.com/Xuwznln/pylabrobot.git
|
|
||||||
|
|
||||||
requirements:
|
|
||||||
host:
|
|
||||||
- python >=3.11
|
|
||||||
- pip
|
|
||||||
- setuptools
|
|
||||||
run:
|
|
||||||
- conda-forge::python =3.11.11
|
|
||||||
- compilers
|
|
||||||
- cmake
|
|
||||||
- make
|
|
||||||
- ninja
|
|
||||||
- sphinx
|
|
||||||
- sphinx_rtd_theme
|
|
||||||
- numpy
|
|
||||||
- scipy
|
|
||||||
- pandas
|
|
||||||
- networkx
|
|
||||||
- matplotlib
|
|
||||||
- pint
|
|
||||||
- pyserial
|
|
||||||
- pyusb
|
|
||||||
- pylibftdi
|
|
||||||
- pymodbus
|
|
||||||
- python-can
|
|
||||||
- pyvisa
|
|
||||||
- opencv
|
|
||||||
- pydantic
|
|
||||||
- fastapi
|
|
||||||
- uvicorn
|
|
||||||
- gradio
|
|
||||||
- flask
|
|
||||||
- websocket
|
|
||||||
- ipython
|
|
||||||
- jupyter
|
|
||||||
- jupyros
|
|
||||||
- colcon-common-extensions
|
|
||||||
- robostack-staging::ros-humble-desktop-full
|
|
||||||
- robostack-staging::ros-humble-control-msgs
|
|
||||||
- robostack-staging::ros-humble-sensor-msgs
|
|
||||||
- robostack-staging::ros-humble-trajectory-msgs
|
|
||||||
- ros-humble-navigation2
|
|
||||||
- ros-humble-ros2-control
|
|
||||||
- ros-humble-robot-state-publisher
|
|
||||||
- ros-humble-joint-state-publisher
|
|
||||||
- ros-humble-rosbridge-server
|
|
||||||
- ros-humble-cv-bridge
|
|
||||||
- ros-humble-tf2
|
|
||||||
- ros-humble-moveit
|
|
||||||
- ros-humble-moveit-servo
|
|
||||||
- ros-humble-simulation
|
|
||||||
- ros-humble-tf-transformations
|
|
||||||
- transforms3d
|
|
||||||
- uni-lab::ros-humble-unilabos-msgs
|
|
||||||
|
|
||||||
about:
|
|
||||||
repository: https://github.com/dptech-corp/Uni-Lab-OS
|
|
||||||
license: GPL-3.0
|
|
||||||
description: "Uni-Lab-OS"
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package:
|
|
||||||
name: unilabos
|
|
||||||
version: "0.10.1"
|
|
||||||
|
|
||||||
source:
|
|
||||||
path: ../..
|
|
||||||
|
|
||||||
build:
|
|
||||||
noarch: python
|
|
||||||
script: |
|
|
||||||
{{ PYTHON }} -m pip install . --no-deps --ignore-installed -vv
|
|
||||||
# {{ PYTHON }} clean_build_dir.py
|
|
||||||
|
|
||||||
requirements:
|
|
||||||
host:
|
|
||||||
- python
|
|
||||||
- pip
|
|
||||||
run:
|
|
||||||
- python
|
|
||||||
|
|
||||||
test:
|
|
||||||
imports:
|
|
||||||
- unilabos
|
|
||||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,7 +1,5 @@
|
|||||||
configs/
|
configs/
|
||||||
temp/
|
temp/
|
||||||
output/
|
|
||||||
unilabos_data/
|
|
||||||
## Python
|
## Python
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
@@ -243,6 +241,4 @@ unilabos/device_mesh/view_robot.rviz
|
|||||||
# Certs
|
# Certs
|
||||||
**/.certs
|
**/.certs
|
||||||
local_test2.py
|
local_test2.py
|
||||||
ros-humble-unilabos-msgs-0.9.13-h6403a04_5.tar.bz2
|
ros-humble-unilabos-msgs-0.9.12-h6403a04_5.tar.bz2
|
||||||
*.bz2
|
|
||||||
test_config.py
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
recursive-include unilabos/registry *.yaml
|
recursive-include unilabos/registry *.yaml
|
||||||
recursive-include unilabos/app/static *
|
recursive-include unilabos/app/web *.html
|
||||||
recursive-include unilabos/app/templates *
|
recursive-include unilabos/app/web *.css
|
||||||
recursive-include unilabos/device_mesh/devices *
|
recursive-include unilabos/device_mesh/devices *
|
||||||
recursive-include unilabos/device_mesh/resources *
|
recursive-include unilabos/device_mesh/resources *
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -40,11 +40,21 @@ Uni-Lab-OS recommends using `mamba` for environment management. Choose the appro
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create new environment
|
# Create new environment
|
||||||
mamba create -n unilab unilab -c unilab -c robostack -c robostack-staging -c conda-forge
|
mamba env create -f unilabos-[YOUR_OS].yaml
|
||||||
|
mamba activate unilab
|
||||||
|
|
||||||
# Or update existing environment
|
# Or update existing environment
|
||||||
# Where `[YOUR_OS]` can be `win64`, `linux-64`, `osx-64`, or `osx-arm64`.
|
# Where `[YOUR_OS]` can be `win64`, `linux-64`, `osx-64`, or `osx-arm64`.
|
||||||
conda env update --file unilabos-[YOUR_OS].yml -n environment_name
|
conda env update --file unilabos-[YOUR_OS].yml -n environment_name
|
||||||
|
|
||||||
|
# Currently, you need to install the `unilabos_msgs` package
|
||||||
|
# You can download the system-specific package from the Release page
|
||||||
|
conda install ros-humble-unilabos-msgs-0.9.12-xxxxx.tar.bz2
|
||||||
|
|
||||||
|
# Install PyLabRobot and other prerequisites
|
||||||
|
git clone https://github.com/PyLabRobot/pylabrobot plr_repo
|
||||||
|
cd plr_repo
|
||||||
|
pip install .[opentrons]
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Install Uni-Lab-OS:
|
2. Install Uni-Lab-OS:
|
||||||
|
|||||||
12
README_zh.md
12
README_zh.md
@@ -40,11 +40,21 @@ Uni-Lab-OS 建议使用 `mamba` 管理环境。根据您的操作系统选择适
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 创建新环境
|
# 创建新环境
|
||||||
mamba create -n unilab unilab -c unilab -c robostack -c robostack-staging -c conda-forge
|
mamba env create -f unilabos-[YOUR_OS].yaml
|
||||||
|
mamba activate unilab
|
||||||
|
|
||||||
# 或更新现有环境
|
# 或更新现有环境
|
||||||
# 其中 `[YOUR_OS]` 可以是 `win64`, `linux-64`, `osx-64`, 或 `osx-arm64`。
|
# 其中 `[YOUR_OS]` 可以是 `win64`, `linux-64`, `osx-64`, 或 `osx-arm64`。
|
||||||
conda env update --file unilabos-[YOUR_OS].yml -n 环境名
|
conda env update --file unilabos-[YOUR_OS].yml -n 环境名
|
||||||
|
|
||||||
|
# 现阶段,需要安装 `unilabos_msgs` 包
|
||||||
|
# 可以前往 Release 页面下载系统对应的包进行安装
|
||||||
|
conda install ros-humble-unilabos-msgs-0.9.12-xxxxx.tar.bz2
|
||||||
|
|
||||||
|
# 安装PyLabRobot等前置
|
||||||
|
git clone https://github.com/PyLabRobot/pylabrobot plr_repo
|
||||||
|
cd plr_repo
|
||||||
|
pip install .[opentrons]
|
||||||
```
|
```
|
||||||
|
|
||||||
2. 安装 Uni-Lab-OS:
|
2. 安装 Uni-Lab-OS:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package:
|
package:
|
||||||
name: ros-humble-unilabos-msgs
|
name: ros-humble-unilabos-msgs
|
||||||
version: 0.10.1
|
version: 0.9.12
|
||||||
source:
|
source:
|
||||||
path: ../../unilabos_msgs
|
path: ../../unilabos_msgs
|
||||||
folder: ros-humble-unilabos-msgs/src/work
|
folder: ros-humble-unilabos-msgs/src/work
|
||||||
@@ -50,12 +50,12 @@ requirements:
|
|||||||
- robostack-staging::ros-humble-rosidl-default-generators
|
- robostack-staging::ros-humble-rosidl-default-generators
|
||||||
- robostack-staging::ros-humble-std-msgs
|
- robostack-staging::ros-humble-std-msgs
|
||||||
- robostack-staging::ros-humble-geometry-msgs
|
- robostack-staging::ros-humble-geometry-msgs
|
||||||
- robostack-staging::ros2-distro-mutex=0.6.*
|
- robostack-staging::ros2-distro-mutex=0.5.*
|
||||||
run:
|
run:
|
||||||
- robostack-staging::ros-humble-action-msgs
|
- robostack-staging::ros-humble-action-msgs
|
||||||
- robostack-staging::ros-humble-ros-workspace
|
- robostack-staging::ros-humble-ros-workspace
|
||||||
- robostack-staging::ros-humble-rosidl-default-runtime
|
- robostack-staging::ros-humble-rosidl-default-runtime
|
||||||
- robostack-staging::ros-humble-std-msgs
|
- robostack-staging::ros-humble-std-msgs
|
||||||
- robostack-staging::ros-humble-geometry-msgs
|
- robostack-staging::ros-humble-geometry-msgs
|
||||||
- robostack-staging::ros2-distro-mutex=0.6.*
|
# - robostack-staging::ros2-distro-mutex=0.6.*
|
||||||
- sel(osx and x86_64): __osx >={{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
|
- sel(osx and x86_64): __osx >={{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package:
|
package:
|
||||||
name: unilabos
|
name: unilabos
|
||||||
version: "0.10.1"
|
version: "0.9.12"
|
||||||
|
|
||||||
source:
|
source:
|
||||||
path: ../..
|
path: ../..
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -4,7 +4,7 @@ package_name = 'unilabos'
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name=package_name,
|
name=package_name,
|
||||||
version='0.10.1',
|
version='0.9.12',
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=['setuptools'],
|
install_requires=['setuptools'],
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
{
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"id": "OrganicSynthesisStation",
|
|
||||||
"name": "有机化学流程综合测试工作站",
|
|
||||||
"children": [
|
|
||||||
"heater_1"
|
|
||||||
],
|
|
||||||
"parent": null,
|
|
||||||
"type": "device",
|
|
||||||
"class": "workstation",
|
|
||||||
"position": {
|
|
||||||
"x": 600,
|
|
||||||
"y": 400,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"protocol_type": [
|
|
||||||
"AddProtocol",
|
|
||||||
"TransferProtocol",
|
|
||||||
"StartStirProtocol",
|
|
||||||
"StopStirProtocol",
|
|
||||||
"StirProtocol",
|
|
||||||
"RunColumnProtocol",
|
|
||||||
"CentrifugeProtocol",
|
|
||||||
"FilterProtocol",
|
|
||||||
"CleanVesselProtocol",
|
|
||||||
"DissolveProtocol",
|
|
||||||
"FilterThroughProtocol",
|
|
||||||
"WashSolidProtocol",
|
|
||||||
"SeparateProtocol",
|
|
||||||
"EvaporateProtocol",
|
|
||||||
"HeatChillProtocol",
|
|
||||||
"HeatChillStartProtocol",
|
|
||||||
"HeatChillStopProtocol",
|
|
||||||
"EvacuateAndRefillProtocol",
|
|
||||||
"PumpTransferProtocol",
|
|
||||||
"AdjustPHProtocol",
|
|
||||||
"ResetHandlingProtocol",
|
|
||||||
"DryProtocol",
|
|
||||||
"HydrogenateProtocol",
|
|
||||||
"RecrystallizeProtocol"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"data": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "heater_1",
|
|
||||||
"name": "加热器",
|
|
||||||
"children": [],
|
|
||||||
"parent": "OrganicSynthesisStation",
|
|
||||||
"type": "device",
|
|
||||||
"class": "virtual_heatchill",
|
|
||||||
"position": {
|
|
||||||
"x": 450,
|
|
||||||
"y": 450,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"max_temp": 200.0,
|
|
||||||
"min_temp": -20.0
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"status": "Idle",
|
|
||||||
"current_temp": 25.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"links": []
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,48 +1,32 @@
|
|||||||
{
|
{
|
||||||
"nodes": [
|
"nodes": [
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": "arm_slider",
|
"id": "benyao",
|
||||||
"name": "arm_slider",
|
"name": "benyao",
|
||||||
"children": [],
|
"children": [
|
||||||
|
],
|
||||||
"parent": null,
|
"parent": null,
|
||||||
"type": "device",
|
"type": "device",
|
||||||
"class": "moveit.arm_slider",
|
"class": "moveit.arm_slider",
|
||||||
"position": {
|
"position": {
|
||||||
"x": -500,
|
"x": 0,
|
||||||
"y": 1000,
|
"y": 0,
|
||||||
"z": -100
|
"z": 0
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"moveit_type": "arm_slider",
|
"moveit_type": "arm_slider",
|
||||||
"joint_poses": {
|
"joint_poses": {
|
||||||
"arm": {
|
"arm": {
|
||||||
"hotel_1": [
|
"home": [0.0, 0.2, 0.0, 0.0, 0.0],
|
||||||
1.05,
|
"pick": [1.2, 0.0, 0.0, 0.0, 0.0]
|
||||||
0.568,
|
|
||||||
-1.0821,
|
|
||||||
0.0,
|
|
||||||
1.0821
|
|
||||||
],
|
|
||||||
"home": [
|
|
||||||
0.865,
|
|
||||||
0.09,
|
|
||||||
0.8727,
|
|
||||||
0.0,
|
|
||||||
-0.8727
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rotation": {
|
"device_config": {
|
||||||
"x": 0,
|
}
|
||||||
"y": 0,
|
|
||||||
"z": -1.5708,
|
|
||||||
"type": "Rotation"
|
|
||||||
},
|
},
|
||||||
"device_config": {}
|
"data": {
|
||||||
},
|
}
|
||||||
"data": {}
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
name: unilab
|
name: unilab
|
||||||
channels:
|
channels:
|
||||||
- unilab
|
|
||||||
- robostack
|
- robostack
|
||||||
- robostack-staging
|
- robostack-staging
|
||||||
- conda-forge
|
- conda-forge
|
||||||
@@ -62,8 +61,7 @@ dependencies:
|
|||||||
- transforms3d
|
- transforms3d
|
||||||
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
||||||
# ilab equipments
|
# ilab equipments
|
||||||
- uni-lab::ros-humble-unilabos-msgs
|
# - ros-humble-unilabos-msgs
|
||||||
- pip:
|
- pip:
|
||||||
- paho-mqtt
|
- paho-mqtt
|
||||||
- opentrons_shared_data
|
- opentrons_shared_data
|
||||||
- git+https://github.com/Xuwznln/pylabrobot
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
name: unilab
|
name: unilab
|
||||||
channels:
|
channels:
|
||||||
- unilab
|
|
||||||
- robostack
|
- robostack
|
||||||
- robostack-staging
|
- robostack-staging
|
||||||
- conda-forge
|
- conda-forge
|
||||||
@@ -61,8 +60,7 @@ dependencies:
|
|||||||
- transforms3d
|
- transforms3d
|
||||||
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
||||||
# ilab equipments
|
# ilab equipments
|
||||||
- uni-lab::ros-humble-unilabos-msgs
|
# - ros-humble-unilabos-msgs
|
||||||
- pip:
|
- pip:
|
||||||
- paho-mqtt
|
- paho-mqtt
|
||||||
- opentrons_shared_data
|
- opentrons_shared_data
|
||||||
- git+https://github.com/Xuwznln/pylabrobot
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
name: unilab
|
name: unilab
|
||||||
channels:
|
channels:
|
||||||
- unilab
|
|
||||||
- robostack
|
- robostack
|
||||||
- robostack-staging
|
- robostack-staging
|
||||||
- conda-forge
|
- conda-forge
|
||||||
@@ -64,8 +63,7 @@ dependencies:
|
|||||||
- transforms3d
|
- transforms3d
|
||||||
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
||||||
# ilab equipments
|
# ilab equipments
|
||||||
- uni-lab::ros-humble-unilabos-msgs
|
# - ros-humble-unilabos-msgs
|
||||||
- pip:
|
- pip:
|
||||||
- paho-mqtt
|
- paho-mqtt
|
||||||
- opentrons_shared_data
|
- opentrons_shared_data
|
||||||
- git+https://github.com/Xuwznln/pylabrobot
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
name: unilab
|
name: unilab
|
||||||
channels:
|
channels:
|
||||||
- unilab
|
|
||||||
- robostack
|
- robostack
|
||||||
- robostack-staging
|
- robostack-staging
|
||||||
- conda-forge
|
- conda-forge
|
||||||
@@ -62,13 +61,12 @@ dependencies:
|
|||||||
- transforms3d
|
- transforms3d
|
||||||
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
||||||
# ilab equipments
|
# ilab equipments
|
||||||
- uni-lab::ros-humble-unilabos-msgs
|
# ros-humble-unilabos-msgs
|
||||||
# driver
|
# driver
|
||||||
#- crcmod
|
#- crcmod
|
||||||
- pip:
|
- pip:
|
||||||
- paho-mqtt
|
- paho-mqtt
|
||||||
- opentrons_shared_data
|
- opentrons_shared_data
|
||||||
- git+https://github.com/Xuwznln/pylabrobot
|
|
||||||
# driver
|
# driver
|
||||||
#- ur-rtde # set PYTHONUTF8=1
|
#- ur-rtde # set PYTHONUTF8=1
|
||||||
#- pyautogui
|
#- pyautogui
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
@@ -10,7 +10,7 @@ from copy import deepcopy
|
|||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from unilabos.resources.graphio import modify_to_backend_format
|
from unilabos.resources.graphio import tree_to_list, modify_to_backend_format
|
||||||
|
|
||||||
# 首先添加项目根目录到路径
|
# 首先添加项目根目录到路径
|
||||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
@@ -18,11 +18,11 @@ unilabos_dir = os.path.dirname(os.path.dirname(current_dir))
|
|||||||
if unilabos_dir not in sys.path:
|
if unilabos_dir not in sys.path:
|
||||||
sys.path.append(unilabos_dir)
|
sys.path.append(unilabos_dir)
|
||||||
|
|
||||||
from unilabos.config.config import load_config, BasicConfig
|
from unilabos.config.config import load_config, BasicConfig, _update_config_from_env
|
||||||
from unilabos.utils.banner_print import print_status, print_unilab_banner
|
from unilabos.utils.banner_print import print_status, print_unilab_banner
|
||||||
|
|
||||||
|
|
||||||
def load_config_from_file(config_path, override_labid=None):
|
def load_config_from_file(config_path):
|
||||||
if config_path is None:
|
if config_path is None:
|
||||||
config_path = os.environ.get("UNILABOS.BASICCONFIG.CONFIG_PATH", None)
|
config_path = os.environ.get("UNILABOS.BASICCONFIG.CONFIG_PATH", None)
|
||||||
if config_path:
|
if config_path:
|
||||||
@@ -31,28 +31,18 @@ def load_config_from_file(config_path, override_labid=None):
|
|||||||
elif not config_path.endswith(".py"):
|
elif not config_path.endswith(".py"):
|
||||||
print_status(f"配置文件 {config_path} 不是Python文件,必须以.py结尾", "error")
|
print_status(f"配置文件 {config_path} 不是Python文件,必须以.py结尾", "error")
|
||||||
else:
|
else:
|
||||||
load_config(config_path, override_labid)
|
load_config(config_path)
|
||||||
else:
|
else:
|
||||||
print_status(f"启动 UniLab-OS时,配置文件参数未正确传入 --config '{config_path}' 尝试本地配置...", "warning")
|
print_status(f"启动 UniLab-OS时,配置文件参数未正确传入 --config '{config_path}' 尝试本地配置...", "warning")
|
||||||
load_config(config_path, override_labid)
|
load_config(config_path)
|
||||||
|
|
||||||
|
|
||||||
def convert_argv_dashes_to_underscores(args: argparse.ArgumentParser):
|
|
||||||
# easier for user input, easier for dev search code
|
|
||||||
option_strings = list(args._option_string_actions.keys())
|
|
||||||
for i, arg in enumerate(sys.argv):
|
|
||||||
for option_string in option_strings:
|
|
||||||
if arg.startswith(option_string):
|
|
||||||
new_arg = arg[:2] + arg[2:len(option_string)].replace("-", "_") + arg[len(option_string):]
|
|
||||||
sys.argv[i] = new_arg
|
|
||||||
break
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
"""解析命令行参数"""
|
"""解析命令行参数"""
|
||||||
parser = argparse.ArgumentParser(description="Start Uni-Lab Edge server.")
|
parser = argparse.ArgumentParser(description="Start Uni-Lab Edge server.")
|
||||||
parser.add_argument("-g", "--graph", help="Physical setup graph.")
|
parser.add_argument("-g", "--graph", help="Physical setup graph.")
|
||||||
# parser.add_argument("-d", "--devices", help="Devices config file.")
|
parser.add_argument("-d", "--devices", help="Devices config file.")
|
||||||
# parser.add_argument("-r", "--resources", help="Resources config file.")
|
parser.add_argument("-r", "--resources", help="Resources config file.")
|
||||||
parser.add_argument("-c", "--controllers", default=None, help="Controllers config file.")
|
parser.add_argument("-c", "--controllers", default=None, help="Controllers config file.")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--registry_path",
|
"--registry_path",
|
||||||
@@ -61,12 +51,6 @@ def parse_args():
|
|||||||
action="append",
|
action="append",
|
||||||
help="Path to the registry",
|
help="Path to the registry",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
|
||||||
"--working_dir",
|
|
||||||
type=str,
|
|
||||||
default=None,
|
|
||||||
help="Path to the working directory",
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--backend",
|
"--backend",
|
||||||
choices=["ros", "simple", "automancer"],
|
choices=["ros", "simple", "automancer"],
|
||||||
@@ -108,12 +92,12 @@ def parse_args():
|
|||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--disable_browser",
|
"--disable_browser",
|
||||||
action="store_true",
|
action='store_true',
|
||||||
help="是否在启动时关闭信息页",
|
help="是否在启动时关闭信息页",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--2d_vis",
|
"--2d_vis",
|
||||||
action="store_true",
|
action='store_true',
|
||||||
help="是否在pylabrobot实例启动时,同时启动可视化",
|
help="是否在pylabrobot实例启动时,同时启动可视化",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@@ -122,51 +106,20 @@ def parse_args():
|
|||||||
default="disable",
|
default="disable",
|
||||||
help="选择可视化工具: rviz, web",
|
help="选择可视化工具: rviz, web",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
return parser.parse_args()
|
||||||
"--labid",
|
|
||||||
type=str,
|
|
||||||
default="",
|
|
||||||
help="实验室唯一ID,也可通过环境变量 UNILABOS.MQCONFIG.LABID 设置或传入--config设置",
|
|
||||||
)
|
|
||||||
return parser
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""主函数"""
|
"""主函数"""
|
||||||
# 解析命令行参数
|
# 解析命令行参数
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
convert_argv_dashes_to_underscores(args)
|
args_dict = vars(args)
|
||||||
args_dict = vars(args.parse_args())
|
|
||||||
|
|
||||||
# 加载配置文件,优先加载config,然后从env读取
|
# 加载配置文件,优先加载config,然后从env读取
|
||||||
config_path = args_dict.get("config")
|
config_path = args_dict.get("config")
|
||||||
working_dir = os.path.abspath(os.path.join(os.getcwd(), "unilabos_data"))
|
load_config_from_file(config_path)
|
||||||
if not config_path and (not os.path.exists(working_dir) or not os.path.exists(os.path.join(working_dir, "local_config.py"))):
|
|
||||||
print_status(f"当前未指定config路径,非第一次使用请通过 --config 传入 local_config.py 文件路径", "info")
|
|
||||||
print_status(f"您是否为第一次使用?并将当前文件路径 {working_dir} 作为工作目录? (Y/n)", "info")
|
|
||||||
if input() != "n":
|
|
||||||
os.makedirs(working_dir, exist_ok=True)
|
|
||||||
config_path = os.path.join(working_dir, "local_config.py")
|
|
||||||
shutil.copy(os.path.join(os.path.dirname(os.path.dirname(__file__)), "config", "example_config.py"), config_path)
|
|
||||||
print_status(f"已创建 local_config.py 路径: {config_path}", "info")
|
|
||||||
print_status(f"请在文件夹中配置lab_id,放入下载的CA.crt、lab.crt、lab.key重新启动本程序", "info")
|
|
||||||
os._exit(1)
|
|
||||||
else:
|
|
||||||
os._exit(1)
|
|
||||||
else:
|
|
||||||
working_dir = args_dict.get("working_dir") or os.path.abspath(os.path.join(os.getcwd(), "unilabos_data"))
|
|
||||||
if working_dir:
|
|
||||||
if config_path and not os.path.exists(config_path):
|
|
||||||
config_path = os.path.join(working_dir, "local_config.py")
|
|
||||||
if not os.path.exists(config_path):
|
|
||||||
print_status(f"当前工作目录 {working_dir} 未找到local_config.py,请通过 --config 传入 local_config.py 文件路径", "error")
|
|
||||||
os._exit(1)
|
|
||||||
print_status(f"当前工作目录为 {working_dir}", "info")
|
|
||||||
# 加载配置文件
|
|
||||||
load_config_from_file(config_path, args_dict["labid"])
|
|
||||||
|
|
||||||
# 设置BasicConfig参数
|
# 设置BasicConfig参数
|
||||||
BasicConfig.working_dir = working_dir
|
|
||||||
BasicConfig.is_host_mode = not args_dict.get("without_host", False)
|
BasicConfig.is_host_mode = not args_dict.get("without_host", False)
|
||||||
BasicConfig.slave_no_host = args_dict.get("slave_no_host", False)
|
BasicConfig.slave_no_host = args_dict.get("slave_no_host", False)
|
||||||
BasicConfig.upload_registry = args_dict.get("upload_registry", False)
|
BasicConfig.upload_registry = args_dict.get("upload_registry", False)
|
||||||
@@ -193,23 +146,14 @@ def main():
|
|||||||
|
|
||||||
# 注册表
|
# 注册表
|
||||||
build_registry(args_dict["registry_path"])
|
build_registry(args_dict["registry_path"])
|
||||||
if args_dict["graph"] is None:
|
resource_edge_info = []
|
||||||
request_startup_json = http_client.request_startup_json()
|
devices_and_resources = None
|
||||||
if not request_startup_json:
|
if args_dict["graph"] is not None:
|
||||||
print_status(
|
import unilabos.resources.graphio as graph_res
|
||||||
"未指定设备加载文件路径,尝试从HTTP获取失败,请检查网络或者使用-g参数指定设备加载文件路径", "error"
|
|
||||||
)
|
|
||||||
os._exit(1)
|
|
||||||
else:
|
|
||||||
print_status("联网获取设备加载文件成功", "info")
|
|
||||||
graph, data = read_node_link_json(request_startup_json)
|
|
||||||
else:
|
|
||||||
if args_dict["graph"].endswith(".json"):
|
if args_dict["graph"].endswith(".json"):
|
||||||
graph, data = read_node_link_json(args_dict["graph"])
|
graph, data = read_node_link_json(args_dict["graph"])
|
||||||
else:
|
else:
|
||||||
graph, data = read_graphml(args_dict["graph"])
|
graph, data = read_graphml(args_dict["graph"])
|
||||||
import unilabos.resources.graphio as graph_res
|
|
||||||
|
|
||||||
graph_res.physical_setup_graph = graph
|
graph_res.physical_setup_graph = graph
|
||||||
resource_edge_info = modify_to_backend_format(data["links"])
|
resource_edge_info = modify_to_backend_format(data["links"])
|
||||||
devices_and_resources = dict_from_graph(graph_res.physical_setup_graph)
|
devices_and_resources = dict_from_graph(graph_res.physical_setup_graph)
|
||||||
@@ -217,6 +161,15 @@ def main():
|
|||||||
args_dict["resources_config"] = list(devices_and_resources.values())
|
args_dict["resources_config"] = list(devices_and_resources.values())
|
||||||
args_dict["devices_config"] = dict_to_nested_dict(deepcopy(devices_and_resources), devices_only=False)
|
args_dict["devices_config"] = dict_to_nested_dict(deepcopy(devices_and_resources), devices_only=False)
|
||||||
args_dict["graph"] = graph_res.physical_setup_graph
|
args_dict["graph"] = graph_res.physical_setup_graph
|
||||||
|
else:
|
||||||
|
if args_dict["devices"] is None or args_dict["resources"] is None:
|
||||||
|
print_status("Either graph or devices and resources must be provided.", "error")
|
||||||
|
sys.exit(1)
|
||||||
|
args_dict["devices_config"] = json.load(open(args_dict["devices"], encoding="utf-8"))
|
||||||
|
# args_dict["resources_config"] = initialize_resources(
|
||||||
|
# list(json.load(open(args_dict["resources"], encoding="utf-8")).values())
|
||||||
|
# )
|
||||||
|
args_dict["resources_config"] = list(json.load(open(args_dict["resources"], encoding="utf-8")).values())
|
||||||
|
|
||||||
print_status(f"{len(args_dict['resources_config'])} Resources loaded:", "info")
|
print_status(f"{len(args_dict['resources_config'])} Resources loaded:", "info")
|
||||||
for i in args_dict["resources_config"]:
|
for i in args_dict["resources_config"]:
|
||||||
@@ -248,22 +201,13 @@ def main():
|
|||||||
if args_dict["visual"] != "disable":
|
if args_dict["visual"] != "disable":
|
||||||
enable_rviz = args_dict["visual"] == "rviz"
|
enable_rviz = args_dict["visual"] == "rviz"
|
||||||
if devices_and_resources is not None:
|
if devices_and_resources is not None:
|
||||||
from unilabos.device_mesh.resource_visalization import (
|
from unilabos.device_mesh.resource_visalization import ResourceVisualization # 此处开启后,logger会变更为INFO,有需要请调整
|
||||||
ResourceVisualization,
|
resource_visualization = ResourceVisualization(devices_and_resources, args_dict["resources_config"] ,enable_rviz=enable_rviz)
|
||||||
) # 此处开启后,logger会变更为INFO,有需要请调整
|
|
||||||
|
|
||||||
resource_visualization = ResourceVisualization(
|
|
||||||
devices_and_resources, args_dict["resources_config"], enable_rviz=enable_rviz
|
|
||||||
)
|
|
||||||
args_dict["resources_mesh_config"] = resource_visualization.resource_model
|
args_dict["resources_mesh_config"] = resource_visualization.resource_model
|
||||||
start_backend(**args_dict)
|
start_backend(**args_dict)
|
||||||
server_thread = threading.Thread(
|
server_thread = threading.Thread(target=start_server, kwargs=dict(
|
||||||
target=start_server,
|
open_browser=not args_dict["disable_browser"], port=args_dict["port"],
|
||||||
kwargs=dict(
|
))
|
||||||
open_browser=not args_dict["disable_browser"],
|
|
||||||
port=args_dict["port"],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
server_thread.start()
|
server_thread.start()
|
||||||
asyncio.set_event_loop(asyncio.new_event_loop())
|
asyncio.set_event_loop(asyncio.new_event_loop())
|
||||||
resource_visualization.start()
|
resource_visualization.start()
|
||||||
@@ -271,16 +215,10 @@ def main():
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
else:
|
else:
|
||||||
start_backend(**args_dict)
|
start_backend(**args_dict)
|
||||||
start_server(
|
start_server(open_browser=not args_dict["disable_browser"], port=args_dict["port"],)
|
||||||
open_browser=not args_dict["disable_browser"],
|
|
||||||
port=args_dict["port"],
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
start_backend(**args_dict)
|
start_backend(**args_dict)
|
||||||
start_server(
|
start_server(open_browser=not args_dict["disable_browser"], port=args_dict["port"],)
|
||||||
open_browser=not args_dict["disable_browser"],
|
|
||||||
port=args_dict["port"],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ class MQTTClient:
|
|||||||
status = {"data": device_status.get(device_id, {}), "device_id": device_id, "timestamp": time.time()}
|
status = {"data": device_status.get(device_id, {}), "device_id": device_id, "timestamp": time.time()}
|
||||||
address = f"labs/{MQConfig.lab_id}/devices/"
|
address = f"labs/{MQConfig.lab_id}/devices/"
|
||||||
self.client.publish(address, json.dumps(status), qos=2)
|
self.client.publish(address, json.dumps(status), qos=2)
|
||||||
logger.info(f"Device {device_id} status published: address: {address}, {status}")
|
logger.debug(f"Device status published: address: {address}, {status}")
|
||||||
|
|
||||||
def publish_job_status(self, feedback_data: dict, job_id: str, status: str, return_info: Optional[str] = None):
|
def publish_job_status(self, feedback_data: dict, job_id: str, status: str, return_info: Optional[str] = None):
|
||||||
if self.mqtt_disable:
|
if self.mqtt_disable:
|
||||||
|
|||||||
@@ -18,22 +18,13 @@ def register_devices_and_resources(mqtt_client, lab_registry):
|
|||||||
mqtt_client.publish_registry(device_info["id"], device_info, False)
|
mqtt_client.publish_registry(device_info["id"], device_info, False)
|
||||||
logger.debug(f"[UniLab Register] 注册设备: {device_info['id']}")
|
logger.debug(f"[UniLab Register] 注册设备: {device_info['id']}")
|
||||||
|
|
||||||
# 注册资源信息 - 使用HTTP方式
|
# 注册资源信息
|
||||||
from unilabos.app.web.client import http_client
|
|
||||||
|
|
||||||
resources_to_register = {}
|
|
||||||
for resource_info in lab_registry.obtain_registry_resource_info():
|
for resource_info in lab_registry.obtain_registry_resource_info():
|
||||||
resources_to_register[resource_info["id"]] = resource_info
|
mqtt_client.publish_registry(resource_info["id"], resource_info, False)
|
||||||
logger.debug(f"[UniLab Register] 准备注册资源: {resource_info['id']}")
|
logger.debug(f"[UniLab Register] 注册资源: {resource_info['id']}")
|
||||||
|
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
if resources_to_register:
|
|
||||||
start_time = time.time()
|
|
||||||
response = http_client.resource_registry(resources_to_register)
|
|
||||||
cost_time = time.time() - start_time
|
|
||||||
if response.status_code in [200, 201]:
|
|
||||||
logger.info(f"[UniLab Register] 成功通过HTTP注册 {len(resources_to_register)} 个资源 {cost_time}ms")
|
|
||||||
else:
|
|
||||||
logger.error(f"[UniLab Register] HTTP注册资源失败: {response.status_code}, {response.text} {cost_time}ms")
|
|
||||||
logger.info("[UniLab Register] 设备和资源注册完成.")
|
logger.info("[UniLab Register] 设备和资源注册完成.")
|
||||||
|
|
||||||
|
|
||||||
@@ -62,9 +53,11 @@ def main():
|
|||||||
help="是否补全注册表",
|
help="是否补全注册表",
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
load_config_from_file(args.config)
|
|
||||||
# 构建注册表
|
# 构建注册表
|
||||||
build_registry(args.registry, args.complete_registry)
|
build_registry(args.registry, args.complete_registry)
|
||||||
|
load_config_from_file(args.config)
|
||||||
|
|
||||||
from unilabos.app.mq import mqtt_client
|
from unilabos.app.mq import mqtt_client
|
||||||
|
|
||||||
# 连接mqtt
|
# 连接mqtt
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ HTTP客户端模块
|
|||||||
|
|
||||||
提供与远程服务器通信的客户端功能,只有host需要用
|
提供与远程服务器通信的客户端功能,只有host需要用
|
||||||
"""
|
"""
|
||||||
import json
|
|
||||||
from typing import List, Dict, Any, Optional
|
from typing import List, Dict, Any, Optional
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
@@ -40,9 +40,8 @@ class HTTPClient:
|
|||||||
Returns:
|
Returns:
|
||||||
Response: API响应对象
|
Response: API响应对象
|
||||||
"""
|
"""
|
||||||
database_param = 1 if database_process_later else 0
|
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
f"{self.remote_addr}/lab/resource/edge/batch_create/?database_process_later={database_param}",
|
f"{self.remote_addr}/lab/resource/edge/batch_create/?database_process_later={1 if database_process_later else 0}",
|
||||||
json=resources,
|
json=resources,
|
||||||
headers={"Authorization": f"lab {self.auth}"},
|
headers={"Authorization": f"lab {self.auth}"},
|
||||||
timeout=100,
|
timeout=100,
|
||||||
@@ -150,56 +149,6 @@ class HTTPClient:
|
|||||||
)
|
)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def resource_registry(self, registry_data: Dict[str, Any]) -> requests.Response:
|
|
||||||
"""
|
|
||||||
注册资源到服务器
|
|
||||||
|
|
||||||
Args:
|
|
||||||
registry_data: 注册表数据,格式为 {resource_id: resource_info}
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Response: API响应对象
|
|
||||||
"""
|
|
||||||
response = requests.post(
|
|
||||||
f"{self.remote_addr}/lab/registry/",
|
|
||||||
json=registry_data,
|
|
||||||
headers={"Authorization": f"lab {self.auth}"},
|
|
||||||
timeout=30,
|
|
||||||
)
|
|
||||||
if response.status_code not in [200, 201]:
|
|
||||||
logger.error(f"注册资源失败: {response.status_code}, {response.text}")
|
|
||||||
return response
|
|
||||||
|
|
||||||
def request_startup_json(self) -> Optional[Dict[str, Any]]:
|
|
||||||
"""
|
|
||||||
请求启动配置
|
|
||||||
|
|
||||||
Args:
|
|
||||||
startup_json: 启动配置JSON数据
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Response: API响应对象
|
|
||||||
"""
|
|
||||||
response = requests.get(
|
|
||||||
f"{self.remote_addr}/lab/resource/graph_info/",
|
|
||||||
headers={"Authorization": f"lab {self.auth}"},
|
|
||||||
timeout=(3, 30),
|
|
||||||
)
|
|
||||||
if response.status_code != 200:
|
|
||||||
logger.error(f"请求启动配置失败: {response.status_code}, {response.text}")
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
with open("startup_config.json", "w", encoding="utf-8") as f:
|
|
||||||
f.write(response.text)
|
|
||||||
target_dict = json.loads(response.text)
|
|
||||||
if "data" in target_dict:
|
|
||||||
target_dict = target_dict["data"]
|
|
||||||
return target_dict
|
|
||||||
except json.JSONDecodeError as e:
|
|
||||||
logger.error(f"解析启动配置JSON失败: {str(e.args)}\n响应内容: {response.text}")
|
|
||||||
logger.error(f"响应内容: {response.text}")
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
# 创建默认客户端实例
|
# 创建默认客户端实例
|
||||||
http_client = HTTPClient()
|
http_client = HTTPClient()
|
||||||
|
|||||||
@@ -346,16 +346,7 @@ def generate_add_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
# 🔧 修改:更新容器的液体体积(假设有 liquid_volume 字段)
|
# 🔧 修改:更新容器的液体体积(假设有 liquid_volume 字段)
|
||||||
if "data" in vessel and "liquid_volume" in vessel["data"]:
|
if "data" in vessel and "liquid_volume" in vessel["data"]:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import networkx as nx
|
import networkx as nx
|
||||||
import logging
|
import logging
|
||||||
from typing import List, Dict, Any, Union
|
from typing import List, Dict, Any
|
||||||
from .pump_protocol import generate_pump_protocol_with_rinsing
|
from .pump_protocol import generate_pump_protocol_with_rinsing
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -216,7 +216,7 @@ def calculate_reagent_volume(target_ph_value: float, reagent: str, vessel_volume
|
|||||||
|
|
||||||
def generate_adjust_ph_protocol(
|
def generate_adjust_ph_protocol(
|
||||||
G: nx.DiGraph,
|
G: nx.DiGraph,
|
||||||
vessel:Union[dict,str], # 🔧 修改:从字符串改为字典类型
|
vessel: dict, # 🔧 修改:从字符串改为字典类型
|
||||||
ph_value: float,
|
ph_value: float,
|
||||||
reagent: str,
|
reagent: str,
|
||||||
**kwargs
|
**kwargs
|
||||||
@@ -235,20 +235,8 @@ def generate_adjust_ph_protocol(
|
|||||||
List[Dict[str, Any]]: 动作序列
|
List[Dict[str, Any]]: 动作序列
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# 统一处理vessel参数
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
if isinstance(vessel, dict):
|
vessel_id = vessel["id"]
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
if not vessel_id:
|
|
||||||
debug_print(f"❌ vessel 参数无效,必须包含id字段或直接提供容器ID. vessel: {vessel}")
|
|
||||||
raise ValueError("vessel 参数无效,必须包含id字段或直接提供容器ID")
|
|
||||||
|
|
||||||
debug_print("=" * 60)
|
debug_print("=" * 60)
|
||||||
debug_print("🧪 开始生成pH调节协议")
|
debug_print("🧪 开始生成pH调节协议")
|
||||||
|
|||||||
@@ -181,16 +181,7 @@ def generate_clean_vessel_protocol(
|
|||||||
clean_protocol = generate_clean_vessel_protocol(G, {"id": "main_reactor"}, "water", 100.0, 60.0, 2)
|
clean_protocol = generate_clean_vessel_protocol(G, {"id": "main_reactor"}, "water", 100.0, 60.0, 2)
|
||||||
"""
|
"""
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
action_sequence = []
|
action_sequence = []
|
||||||
|
|
||||||
|
|||||||
@@ -288,16 +288,7 @@ def generate_evacuateandrefill_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
# 硬编码重复次数为 3
|
# 硬编码重复次数为 3
|
||||||
repeats = 3
|
repeats = 3
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ def parse_time_input(time_input: Union[str, float]) -> float:
|
|||||||
"""
|
"""
|
||||||
if isinstance(time_input, (int, float)):
|
if isinstance(time_input, (int, float)):
|
||||||
debug_print(f"⏱️ 时间输入为数字: {time_input}s ✨")
|
debug_print(f"⏱️ 时间输入为数字: {time_input}s ✨")
|
||||||
return float(time_input) # 🔧 确保返回float
|
return float(time_input)
|
||||||
|
|
||||||
if not time_input or not str(time_input).strip():
|
if not time_input or not str(time_input).strip():
|
||||||
debug_print(f"⚠️ 时间输入为空,使用默认值: 180s (3分钟) 🕐")
|
debug_print(f"⚠️ 时间输入为空,使用默认值: 180s (3分钟) 🕐")
|
||||||
@@ -48,7 +48,7 @@ def parse_time_input(time_input: Union[str, float]) -> float:
|
|||||||
try:
|
try:
|
||||||
value = float(time_str)
|
value = float(time_str)
|
||||||
debug_print(f"✅ 时间解析成功: {time_str} → {value}s(无单位,默认秒)⏰")
|
debug_print(f"✅ 时间解析成功: {time_str} → {value}s(无单位,默认秒)⏰")
|
||||||
return float(value) # 🔧 确保返回float
|
return value
|
||||||
except ValueError:
|
except ValueError:
|
||||||
debug_print(f"❌ 无法解析时间: '{time_str}',使用默认值180s (3分钟) 😅")
|
debug_print(f"❌ 无法解析时间: '{time_str}',使用默认值180s (3分钟) 😅")
|
||||||
return 180.0
|
return 180.0
|
||||||
@@ -70,7 +70,7 @@ def parse_time_input(time_input: Union[str, float]) -> float:
|
|||||||
time_sec = value # 已经是s
|
time_sec = value # 已经是s
|
||||||
debug_print(f"🕐 时间转换: {value}s → {time_sec}s (已是秒) ⏰")
|
debug_print(f"🕐 时间转换: {value}s → {time_sec}s (已是秒) ⏰")
|
||||||
|
|
||||||
return float(time_sec) # 🔧 确保返回float
|
return time_sec
|
||||||
|
|
||||||
def find_rotavap_device(G: nx.DiGraph, vessel: str = None) -> Optional[str]:
|
def find_rotavap_device(G: nx.DiGraph, vessel: str = None) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
@@ -201,16 +201,7 @@ def generate_evaporate_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
debug_print("🌟" * 20)
|
debug_print("🌟" * 20)
|
||||||
debug_print("🌪️ 开始生成蒸发协议(支持单位和体积运算)✨")
|
debug_print("🌪️ 开始生成蒸发协议(支持单位和体积运算)✨")
|
||||||
@@ -398,12 +389,12 @@ def generate_evaporate_protocol(
|
|||||||
"device_id": rotavap_device,
|
"device_id": rotavap_device,
|
||||||
"action_name": "evaporate",
|
"action_name": "evaporate",
|
||||||
"action_kwargs": {
|
"action_kwargs": {
|
||||||
"vessel": target_vessel,
|
"vessel": target_vessel, # 使用 target_vessel
|
||||||
"pressure": float(pressure),
|
"pressure": pressure,
|
||||||
"temp": float(temp),
|
"temp": temp,
|
||||||
"time": float(final_time), # 🔧 强制转换为float类型
|
"time": final_time,
|
||||||
"stir_speed": float(stir_speed),
|
"stir_speed": stir_speed,
|
||||||
"solvent": str(solvent)
|
"solvent": solvent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
action_sequence.append(evaporate_action)
|
action_sequence.append(evaporate_action)
|
||||||
|
|||||||
@@ -68,16 +68,7 @@ def generate_filter_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
debug_print("🌊" * 20)
|
debug_print("🌊" * 20)
|
||||||
debug_print("🚀 开始生成过滤协议(支持体积运算)✨")
|
debug_print("🚀 开始生成过滤协议(支持体积运算)✨")
|
||||||
|
|||||||
@@ -217,16 +217,7 @@ def generate_heat_chill_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
debug_print("🌡️" * 20)
|
debug_print("🌡️" * 20)
|
||||||
debug_print("🚀 开始生成加热冷却协议(支持vessel字典)✨")
|
debug_print("🚀 开始生成加热冷却协议(支持vessel字典)✨")
|
||||||
|
|||||||
@@ -170,16 +170,7 @@ def generate_hydrogenate_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
action_sequence = []
|
action_sequence = []
|
||||||
|
|
||||||
|
|||||||
@@ -170,94 +170,33 @@ def find_solvent_vessel(G: nx.DiGraph, solvent: str) -> str:
|
|||||||
debug_print(f" 🎉 通过名称匹配找到容器: {vessel_name} ✨")
|
debug_print(f" 🎉 通过名称匹配找到容器: {vessel_name} ✨")
|
||||||
return vessel_name
|
return vessel_name
|
||||||
|
|
||||||
# 第二步:通过模糊匹配(节点ID和名称)
|
# 第二步:通过模糊匹配
|
||||||
debug_print(" 🔍 步骤2: 模糊名称匹配...")
|
debug_print(" 🔍 步骤2: 模糊名称匹配...")
|
||||||
for node_id in G.nodes():
|
for node_id in G.nodes():
|
||||||
if G.nodes[node_id].get('type') == 'container':
|
if G.nodes[node_id].get('type') == 'container':
|
||||||
node_name = G.nodes[node_id].get('name', '').lower()
|
node_name = G.nodes[node_id].get('name', '').lower()
|
||||||
|
|
||||||
if solvent.lower() in node_id.lower() or solvent.lower() in node_name:
|
if solvent.lower() in node_id.lower() or solvent.lower() in node_name:
|
||||||
debug_print(f" 🎉 通过模糊匹配找到容器: {node_id} (名称: {node_name}) ✨")
|
debug_print(f" 🎉 通过模糊匹配找到容器: {node_id} ✨")
|
||||||
return node_id
|
return node_id
|
||||||
|
|
||||||
# 第三步:通过配置中的试剂信息匹配
|
# 第三步:通过液体类型匹配
|
||||||
debug_print(" 🧪 步骤3: 配置试剂信息匹配...")
|
debug_print(" 🧪 步骤3: 液体类型匹配...")
|
||||||
for node_id in G.nodes():
|
|
||||||
if G.nodes[node_id].get('type') == 'container':
|
|
||||||
# 检查 config 中的 reagent 字段
|
|
||||||
node_config = G.nodes[node_id].get('config', {})
|
|
||||||
config_reagent = node_config.get('reagent', '').lower()
|
|
||||||
|
|
||||||
if config_reagent and solvent.lower() == config_reagent:
|
|
||||||
debug_print(f" 🎉 通过config.reagent匹配找到容器: {node_id} (试剂: {config_reagent}) ✨")
|
|
||||||
return node_id
|
|
||||||
|
|
||||||
# 第四步:通过数据中的试剂信息匹配
|
|
||||||
debug_print(" 🧪 步骤4: 数据试剂信息匹配...")
|
|
||||||
for node_id in G.nodes():
|
for node_id in G.nodes():
|
||||||
if G.nodes[node_id].get('type') == 'container':
|
if G.nodes[node_id].get('type') == 'container':
|
||||||
vessel_data = G.nodes[node_id].get('data', {})
|
vessel_data = G.nodes[node_id].get('data', {})
|
||||||
|
|
||||||
# 检查 data 中的 reagent_name 字段
|
|
||||||
reagent_name = vessel_data.get('reagent_name', '').lower()
|
|
||||||
if reagent_name and solvent.lower() == reagent_name:
|
|
||||||
debug_print(f" 🎉 通过data.reagent_name匹配找到容器: {node_id} (试剂: {reagent_name}) ✨")
|
|
||||||
return node_id
|
|
||||||
|
|
||||||
# 检查 data 中的液体信息
|
|
||||||
liquids = vessel_data.get('liquid', [])
|
liquids = vessel_data.get('liquid', [])
|
||||||
|
|
||||||
for liquid in liquids:
|
for liquid in liquids:
|
||||||
if isinstance(liquid, dict):
|
if isinstance(liquid, dict):
|
||||||
liquid_type = (liquid.get('liquid_type') or liquid.get('name', '')).lower()
|
liquid_type = (liquid.get('liquid_type') or liquid.get('name', '')).lower()
|
||||||
|
reagent_name = vessel_data.get('reagent_name', '').lower()
|
||||||
|
|
||||||
if solvent.lower() in liquid_type:
|
if solvent.lower() in liquid_type or solvent.lower() in reagent_name:
|
||||||
debug_print(f" 🎉 通过液体类型匹配找到容器: {node_id} (液体类型: {liquid_type}) ✨")
|
debug_print(f" 🎉 通过液体类型匹配找到容器: {node_id} ✨")
|
||||||
return node_id
|
return node_id
|
||||||
|
|
||||||
# 第五步:部分匹配(如果前面都没找到)
|
|
||||||
debug_print(" 🔍 步骤5: 部分匹配...")
|
|
||||||
for node_id in G.nodes():
|
|
||||||
if G.nodes[node_id].get('type') == 'container':
|
|
||||||
node_config = G.nodes[node_id].get('config', {})
|
|
||||||
node_data = G.nodes[node_id].get('data', {})
|
|
||||||
node_name = G.nodes[node_id].get('name', '').lower()
|
|
||||||
|
|
||||||
config_reagent = node_config.get('reagent', '').lower()
|
|
||||||
data_reagent = node_data.get('reagent_name', '').lower()
|
|
||||||
|
|
||||||
# 检查是否包含溶剂名称
|
|
||||||
if (solvent.lower() in config_reagent or
|
|
||||||
solvent.lower() in data_reagent or
|
|
||||||
solvent.lower() in node_name or
|
|
||||||
solvent.lower() in node_id.lower()):
|
|
||||||
debug_print(f" 🎉 通过部分匹配找到容器: {node_id} ✨")
|
|
||||||
debug_print(f" - 节点名称: {node_name}")
|
|
||||||
debug_print(f" - 配置试剂: {config_reagent}")
|
|
||||||
debug_print(f" - 数据试剂: {data_reagent}")
|
|
||||||
return node_id
|
|
||||||
|
|
||||||
# 调试信息:列出所有容器
|
|
||||||
debug_print(" 🔎 调试信息:列出所有容器...")
|
|
||||||
container_list = []
|
|
||||||
for node_id in G.nodes():
|
|
||||||
if G.nodes[node_id].get('type') == 'container':
|
|
||||||
node_config = G.nodes[node_id].get('config', {})
|
|
||||||
node_data = G.nodes[node_id].get('data', {})
|
|
||||||
node_name = G.nodes[node_id].get('name', '')
|
|
||||||
|
|
||||||
container_info = {
|
|
||||||
'id': node_id,
|
|
||||||
'name': node_name,
|
|
||||||
'config_reagent': node_config.get('reagent', ''),
|
|
||||||
'data_reagent': node_data.get('reagent_name', '')
|
|
||||||
}
|
|
||||||
container_list.append(container_info)
|
|
||||||
debug_print(f" - 容器: {node_id}, 名称: {node_name}, config试剂: {node_config.get('reagent', '')}, data试剂: {node_data.get('reagent_name', '')}")
|
|
||||||
|
|
||||||
debug_print(f"❌ 找不到溶剂 '{solvent}' 对应的容器 😭")
|
debug_print(f"❌ 找不到溶剂 '{solvent}' 对应的容器 😭")
|
||||||
debug_print(f"🔍 查找的溶剂: '{solvent}' (小写: '{solvent.lower()}')")
|
|
||||||
debug_print(f"📊 总共发现 {len(container_list)} 个容器")
|
|
||||||
|
|
||||||
raise ValueError(f"找不到溶剂 '{solvent}' 对应的容器")
|
raise ValueError(f"找不到溶剂 '{solvent}' 对应的容器")
|
||||||
|
|
||||||
|
|
||||||
@@ -287,16 +226,7 @@ def generate_recrystallize_protocol(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
action_sequence = []
|
action_sequence = []
|
||||||
|
|
||||||
|
|||||||
@@ -418,16 +418,7 @@ def generate_separate_protocol(
|
|||||||
raise ValueError("必须提供vessel字典参数")
|
raise ValueError("必须提供vessel字典参数")
|
||||||
|
|
||||||
# 🔧 核心修改:从字典中提取容器ID
|
# 🔧 核心修改:从字典中提取容器ID
|
||||||
# 统一处理vessel参数
|
vessel_id = vessel["id"]
|
||||||
if isinstance(vessel, dict):
|
|
||||||
if "id" not in vessel:
|
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
|
||||||
else:
|
|
||||||
vessel_id = vessel.get("id", "")
|
|
||||||
vessel_data = vessel.get("data", {})
|
|
||||||
else:
|
|
||||||
vessel_id = str(vessel)
|
|
||||||
vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {}
|
|
||||||
|
|
||||||
debug_print("🌀" * 20)
|
debug_print("🌀" * 20)
|
||||||
debug_print("🚀 开始生成分离协议(支持vessel字典和体积运算)✨")
|
debug_print("🚀 开始生成分离协议(支持vessel字典和体积运算)✨")
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ def extract_vessel_id(vessel: Union[str, dict]) -> str:
|
|||||||
str: vessel_id
|
str: vessel_id
|
||||||
"""
|
"""
|
||||||
if isinstance(vessel, dict):
|
if isinstance(vessel, dict):
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
vessel_id = vessel.get("id", "")
|
||||||
debug_print(f"🔧 从vessel字典提取ID: {vessel_id}")
|
debug_print(f"🔧 从vessel字典提取ID: {vessel_id}")
|
||||||
return vessel_id
|
return vessel_id
|
||||||
elif isinstance(vessel, str):
|
elif isinstance(vessel, str):
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ def extract_vessel_id(vessel: Union[str, dict]) -> str:
|
|||||||
str: vessel_id
|
str: vessel_id
|
||||||
"""
|
"""
|
||||||
if isinstance(vessel, dict):
|
if isinstance(vessel, dict):
|
||||||
vessel_id = list(vessel.values())[0].get("id", "")
|
vessel_id = vessel.get("id", "")
|
||||||
debug_print(f"🔧 从vessel字典提取ID: {vessel_id}")
|
debug_print(f"🔧 从vessel字典提取ID: {vessel_id}")
|
||||||
return vessel_id
|
return vessel_id
|
||||||
elif isinstance(vessel, str):
|
elif isinstance(vessel, str):
|
||||||
|
|||||||
@@ -9,14 +9,12 @@ from unilabos.utils import logger
|
|||||||
|
|
||||||
class BasicConfig:
|
class BasicConfig:
|
||||||
ENV = "pro" # 'test'
|
ENV = "pro" # 'test'
|
||||||
working_dir = ""
|
|
||||||
config_path = ""
|
config_path = ""
|
||||||
is_host_mode = True
|
is_host_mode = True
|
||||||
slave_no_host = False # 是否跳过rclient.wait_for_service()
|
slave_no_host = False # 是否跳过rclient.wait_for_service()
|
||||||
upload_registry = False
|
upload_registry = False
|
||||||
machine_name = "undefined"
|
machine_name = "undefined"
|
||||||
vis_2d_enable = False
|
vis_2d_enable = False
|
||||||
enable_resource_load = True
|
|
||||||
|
|
||||||
|
|
||||||
# MQTT配置
|
# MQTT配置
|
||||||
@@ -65,7 +63,7 @@ class ROSConfig:
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def _update_config_from_module(module, override_labid: str):
|
def _update_config_from_module(module):
|
||||||
for name, obj in globals().items():
|
for name, obj in globals().items():
|
||||||
if isinstance(obj, type) and name.endswith("Config"):
|
if isinstance(obj, type) and name.endswith("Config"):
|
||||||
if hasattr(module, name) and isinstance(getattr(module, name), type):
|
if hasattr(module, name) and isinstance(getattr(module, name), type):
|
||||||
@@ -76,9 +74,6 @@ def _update_config_from_module(module, override_labid: str):
|
|||||||
if len(OSSUploadConfig.authorization) == 0:
|
if len(OSSUploadConfig.authorization) == 0:
|
||||||
OSSUploadConfig.authorization = f"lab {MQConfig.lab_id}"
|
OSSUploadConfig.authorization = f"lab {MQConfig.lab_id}"
|
||||||
# 对 ca_file cert_file key_file 进行初始化
|
# 对 ca_file cert_file key_file 进行初始化
|
||||||
if override_labid:
|
|
||||||
MQConfig.lab_id = override_labid
|
|
||||||
logger.warning(f"[ENV] 当前实验室启动的ID被设置为:{override_labid}")
|
|
||||||
if len(MQConfig.ca_content) == 0:
|
if len(MQConfig.ca_content) == 0:
|
||||||
# 需要先判断是否为相对路径
|
# 需要先判断是否为相对路径
|
||||||
if MQConfig.ca_file.startswith("."):
|
if MQConfig.ca_file.startswith("."):
|
||||||
@@ -160,7 +155,7 @@ def _update_config_from_env():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def load_config(config_path=None, override_labid=None):
|
def load_config(config_path=None):
|
||||||
# 如果提供了配置文件路径,从该文件导入配置
|
# 如果提供了配置文件路径,从该文件导入配置
|
||||||
if config_path:
|
if config_path:
|
||||||
_update_config_from_env() # 允许config_path被env设定后读取
|
_update_config_from_env() # 允许config_path被env设定后读取
|
||||||
@@ -177,7 +172,7 @@ def load_config(config_path=None, override_labid=None):
|
|||||||
return
|
return
|
||||||
module = importlib.util.module_from_spec(spec)
|
module = importlib.util.module_from_spec(spec)
|
||||||
spec.loader.exec_module(module) # type: ignore
|
spec.loader.exec_module(module) # type: ignore
|
||||||
_update_config_from_module(module, override_labid)
|
_update_config_from_module(module)
|
||||||
logger.info(f"[ENV] 配置文件 {config_path} 加载成功")
|
logger.info(f"[ENV] 配置文件 {config_path} 加载成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[ENV] 加载配置文件 {config_path} 失败")
|
logger.error(f"[ENV] 加载配置文件 {config_path} 失败")
|
||||||
@@ -185,4 +180,4 @@ def load_config(config_path=None, override_labid=None):
|
|||||||
exit(1)
|
exit(1)
|
||||||
else:
|
else:
|
||||||
config_path = os.path.join(os.path.dirname(__file__), "local_config.py")
|
config_path = os.path.join(os.path.dirname(__file__), "local_config.py")
|
||||||
load_config(config_path, override_labid)
|
load_config(config_path)
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
# MQTT配置
|
|
||||||
class MQConfig:
|
|
||||||
lab_id = ""
|
|
||||||
instance_id = ""
|
|
||||||
access_key = ""
|
|
||||||
secret_key = ""
|
|
||||||
group_id = ""
|
|
||||||
broker_url = ""
|
|
||||||
port = 1883
|
|
||||||
|
|
||||||
ca_file = "CA.crt"
|
|
||||||
cert_file = "lab.crt"
|
|
||||||
key_file = "lab.key"
|
|
||||||
|
|
||||||
# HTTP配置
|
|
||||||
class HTTPConfig:
|
|
||||||
remote_addr = "https://uni-lab.bohrium.com/api/v1"
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Default initial positions for full_dev's ros2_control fake system
|
||||||
|
|
||||||
|
initial_positions:
|
||||||
|
arm_base_joint: 0
|
||||||
|
arm_link_1_joint: 0
|
||||||
|
arm_link_2_joint: 0
|
||||||
|
arm_link_3_joint: 0
|
||||||
|
gripper_base_joint: 0
|
||||||
|
gripper_right_joint: 0.03
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
|
||||||
|
|
||||||
|
# For beginners, we downscale velocity and acceleration limits.
|
||||||
|
# You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed.
|
||||||
|
default_velocity_scaling_factor: 0.1
|
||||||
|
default_acceleration_scaling_factor: 0.1
|
||||||
|
|
||||||
|
# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
|
||||||
|
# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
|
||||||
|
joint_limits:
|
||||||
|
arm_base_joint:
|
||||||
|
has_velocity_limits: true
|
||||||
|
max_velocity: 0
|
||||||
|
has_acceleration_limits: false
|
||||||
|
max_acceleration: 0
|
||||||
|
arm_link_1_joint:
|
||||||
|
has_velocity_limits: true
|
||||||
|
max_velocity: 0
|
||||||
|
has_acceleration_limits: false
|
||||||
|
max_acceleration: 0
|
||||||
|
arm_link_2_joint:
|
||||||
|
has_velocity_limits: true
|
||||||
|
max_velocity: 0
|
||||||
|
has_acceleration_limits: false
|
||||||
|
max_acceleration: 0
|
||||||
|
arm_link_3_joint:
|
||||||
|
has_velocity_limits: true
|
||||||
|
max_velocity: 0
|
||||||
|
has_acceleration_limits: false
|
||||||
|
max_acceleration: 0
|
||||||
|
gripper_base_joint:
|
||||||
|
has_velocity_limits: true
|
||||||
|
max_velocity: 0
|
||||||
|
has_acceleration_limits: false
|
||||||
|
max_acceleration: 0
|
||||||
|
gripper_right_joint:
|
||||||
|
has_velocity_limits: true
|
||||||
|
max_velocity: 0
|
||||||
|
has_acceleration_limits: false
|
||||||
|
max_acceleration: 0
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
arm:
|
||||||
|
kinematics_solver: lma_kinematics_plugin/LMAKinematicsPlugin
|
||||||
|
kinematics_solver_search_resolution: 0.0050000000000000001
|
||||||
|
kinematics_solver_timeout: 0.0050000000000000001
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||||
|
<xacro:macro name="benyao_arm_ros2_control" params="device_name mesh_path">
|
||||||
|
<xacro:property name="initial_positions" value="${load_yaml(mesh_path + '/devices/benyao_arm/config/initial_positions.yaml')['initial_positions']}"/>
|
||||||
|
|
||||||
|
<ros2_control name="${device_name}benyao_arm" type="system">
|
||||||
|
<hardware>
|
||||||
|
<!-- By default, set up controllers for simulation. This won't work on real hardware -->
|
||||||
|
<plugin>mock_components/GenericSystem</plugin>
|
||||||
|
</hardware>
|
||||||
|
<joint name="${device_name}arm_base_joint">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_positions['arm_base_joint']}</param>
|
||||||
|
</state_interface>
|
||||||
|
<state_interface name="velocity"/>
|
||||||
|
</joint>
|
||||||
|
<joint name="${device_name}arm_link_1_joint">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_positions['arm_link_1_joint']}</param>
|
||||||
|
</state_interface>
|
||||||
|
<state_interface name="velocity"/>
|
||||||
|
</joint>
|
||||||
|
<joint name="${device_name}arm_link_2_joint">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_positions['arm_link_2_joint']}</param>
|
||||||
|
</state_interface>
|
||||||
|
<state_interface name="velocity"/>
|
||||||
|
</joint>
|
||||||
|
<joint name="${device_name}arm_link_3_joint">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_positions['arm_link_3_joint']}</param>
|
||||||
|
</state_interface>
|
||||||
|
<state_interface name="velocity"/>
|
||||||
|
</joint>
|
||||||
|
<joint name="${device_name}gripper_base_joint">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_positions['gripper_base_joint']}</param>
|
||||||
|
</state_interface>
|
||||||
|
<state_interface name="velocity"/>
|
||||||
|
</joint>
|
||||||
|
<joint name="${device_name}gripper_right_joint">
|
||||||
|
<command_interface name="position"/>
|
||||||
|
<state_interface name="position">
|
||||||
|
<param name="initial_value">${initial_positions['gripper_right_joint']}</param>
|
||||||
|
</state_interface>
|
||||||
|
<state_interface name="velocity"/>
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
</ros2_control>
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--This does not replace URDF, and is not an extension of URDF.
|
||||||
|
This is a format for representing semantic information about the robot structure.
|
||||||
|
A URDF file must exist for this robot as well, where the joints and the links that are referenced are defined
|
||||||
|
-->
|
||||||
|
<robot xmlns:xacro="http://ros.org/wiki/xacro">
|
||||||
|
<xacro:macro name="benyao_arm_srdf" params="device_name">
|
||||||
|
<!--GROUPS: Representation of a set of joints and links. This can be useful for specifying DOF to plan for, defining arms, end effectors, etc-->
|
||||||
|
<!--LINKS: When a link is specified, the parent joint of that link (if it exists) is automatically included-->
|
||||||
|
<!--JOINTS: When a joint is specified, the child link of that joint (which will always exist) is automatically included-->
|
||||||
|
<!--CHAINS: When a chain is specified, all the links along the chain (including endpoints) are included in the group. Additionally, all the joints that are parents to included links are also included. This means that joints along the chain and the parent joint of the base link are included in the group-->
|
||||||
|
<!--SUBGROUPS: Groups can also be formed by referencing to already defined group names-->
|
||||||
|
<group name="${device_name}arm">
|
||||||
|
<chain base_link="${device_name}arm_slideway" tip_link="${device_name}gripper_base"/>
|
||||||
|
</group>
|
||||||
|
<group name="${device_name}arm_gripper">
|
||||||
|
<joint name="${device_name}gripper_right_joint"/>
|
||||||
|
</group>
|
||||||
|
<!--DISABLE COLLISIONS: By default it is assumed that any link of the robot could potentially come into collision with any other link in the robot. This tag disables collision checking between a specified pair of links. -->
|
||||||
|
<disable_collisions link1="${device_name}arm_base" link2="${device_name}arm_link_2" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_base" link2="${device_name}arm_link_1" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_base" link2="${device_name}arm_link_3" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_base" link2="${device_name}arm_slideway" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_1" link2="${device_name}arm_link_2" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_1" link2="${device_name}arm_link_3" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_1" link2="${device_name}arm_slideway" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_1" link2="${device_name}gripper_base" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_1" link2="${device_name}gripper_left" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_1" link2="${device_name}gripper_right" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_2" link2="${device_name}arm_link_3" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_2" link2="${device_name}arm_slideway" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_2" link2="${device_name}gripper_base" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_2" link2="${device_name}gripper_left" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_2" link2="${device_name}gripper_right" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_3" link2="${device_name}arm_slideway" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_3" link2="${device_name}gripper_base" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_3" link2="${device_name}gripper_left" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_link_3" link2="${device_name}gripper_right" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_slideway" link2="${device_name}gripper_base" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_slideway" link2="${device_name}gripper_left" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}arm_slideway" link2="${device_name}gripper_right" reason="Never"/>
|
||||||
|
<disable_collisions link1="${device_name}gripper_base" link2="${device_name}gripper_left" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}gripper_base" link2="${device_name}gripper_right" reason="Adjacent"/>
|
||||||
|
<disable_collisions link1="${device_name}gripper_left" link2="${device_name}gripper_right" reason="Never"/>
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"arm":
|
||||||
|
{
|
||||||
|
"joint_names": [
|
||||||
|
"arm_base_joint",
|
||||||
|
"arm_link_1_joint",
|
||||||
|
"arm_link_2_joint",
|
||||||
|
"arm_link_3_joint",
|
||||||
|
"gripper_base_joint"
|
||||||
|
],
|
||||||
|
"base_link_name": "device_link",
|
||||||
|
"end_effector_name": "gripper_base"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# MoveIt uses this configuration for controller management
|
||||||
|
|
||||||
|
moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager
|
||||||
|
|
||||||
|
moveit_simple_controller_manager:
|
||||||
|
controller_names:
|
||||||
|
- arm_controller
|
||||||
|
- gripper_controller
|
||||||
|
|
||||||
|
arm_controller:
|
||||||
|
type: FollowJointTrajectory
|
||||||
|
action_ns: follow_joint_trajectory
|
||||||
|
default: true
|
||||||
|
joints:
|
||||||
|
- arm_base_joint
|
||||||
|
- arm_link_1_joint
|
||||||
|
- arm_link_2_joint
|
||||||
|
- arm_link_3_joint
|
||||||
|
- gripper_base_joint
|
||||||
|
action_ns: follow_joint_trajectory
|
||||||
|
default: true
|
||||||
|
gripper_controller:
|
||||||
|
type: FollowJointTrajectory
|
||||||
|
action_ns: follow_joint_trajectory
|
||||||
|
default: true
|
||||||
|
joints:
|
||||||
|
- gripper_right_joint
|
||||||
|
action_ns: follow_joint_trajectory
|
||||||
|
default: true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
planner_configs:
|
||||||
|
- ompl_interface/OMPLPlanner
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Limits for the Pilz planner
|
||||||
|
cartesian_limits:
|
||||||
|
max_trans_vel: 1.0
|
||||||
|
max_trans_acc: 2.25
|
||||||
|
max_trans_dec: -5.0
|
||||||
|
max_rot_vel: 1.57
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# This config file is used by ros2_control
|
||||||
|
controller_manager:
|
||||||
|
ros__parameters:
|
||||||
|
update_rate: 100 # Hz
|
||||||
|
|
||||||
|
arm_controller:
|
||||||
|
type: joint_trajectory_controller/JointTrajectoryController
|
||||||
|
|
||||||
|
|
||||||
|
gripper_controller:
|
||||||
|
type: joint_trajectory_controller/JointTrajectoryController
|
||||||
|
|
||||||
|
|
||||||
|
joint_state_broadcaster:
|
||||||
|
type: joint_state_broadcaster/JointStateBroadcaster
|
||||||
|
|
||||||
|
arm_controller:
|
||||||
|
ros__parameters:
|
||||||
|
joints:
|
||||||
|
- arm_base_joint
|
||||||
|
- arm_link_1_joint
|
||||||
|
- arm_link_2_joint
|
||||||
|
- arm_link_3_joint
|
||||||
|
- gripper_base_joint
|
||||||
|
command_interfaces:
|
||||||
|
- position
|
||||||
|
state_interfaces:
|
||||||
|
- position
|
||||||
|
- velocity
|
||||||
|
|
||||||
|
gripper_controller:
|
||||||
|
ros__parameters:
|
||||||
|
joints:
|
||||||
|
- gripper_right_joint
|
||||||
|
command_interfaces:
|
||||||
|
- position
|
||||||
|
state_interfaces:
|
||||||
|
- position
|
||||||
|
- velocity
|
||||||
44
unilabos/device_mesh/devices/benyao_arm/joint_limit.yaml
Normal file
44
unilabos/device_mesh/devices/benyao_arm/joint_limit.yaml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
joint_limits:
|
||||||
|
|
||||||
|
arm_base_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: 0
|
||||||
|
upper: 1.5
|
||||||
|
|
||||||
|
arm_link_1_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: 0
|
||||||
|
upper: 0.6
|
||||||
|
|
||||||
|
arm_link_2_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: !degrees -95
|
||||||
|
upper: !degrees 95
|
||||||
|
|
||||||
|
arm_link_3_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: !degrees -195
|
||||||
|
upper: !degrees 195
|
||||||
|
|
||||||
|
gripper_base_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: !degrees -95
|
||||||
|
upper: !degrees 95
|
||||||
|
|
||||||
|
|
||||||
|
gripper_right_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: 0
|
||||||
|
upper: 0.03
|
||||||
|
|
||||||
|
gripper_left_joint:
|
||||||
|
effort: 50
|
||||||
|
velocity: 1.0
|
||||||
|
lower: 0
|
||||||
|
upper: 0.03
|
||||||
293
unilabos/device_mesh/devices/benyao_arm/macro_device.xacro
Normal file
293
unilabos/device_mesh/devices/benyao_arm/macro_device.xacro
Normal file
@@ -0,0 +1,293 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<robot xmlns:xacro="http://ros.org/wiki/xacro" name="benyao_arm">
|
||||||
|
|
||||||
|
<xacro:macro name="benyao_arm" params="mesh_path:='' parent_link:='' station_name:='' device_name:='' x:=0 y:=0 z:=0 rx:=0 ry:=0 r:=0">
|
||||||
|
<!-- Read .yaml files from disk, load content into properties -->
|
||||||
|
<xacro:property name= "joint_limit_parameters" value="${xacro.load_yaml(mesh_path + '/devices/benyao_arm/joint_limit.yaml')}"/>
|
||||||
|
|
||||||
|
<!-- Extract subsections from yaml dictionaries -->
|
||||||
|
<xacro:property name= "sec_limits" value="${joint_limit_parameters['joint_limits']}"/>
|
||||||
|
|
||||||
|
<joint name="${station_name}${device_name}base_link_joint" type="fixed">
|
||||||
|
<origin xyz="${x} ${y} ${z}" rpy="${rx} ${ry} ${r}" />
|
||||||
|
<parent link="${parent_link}"/>
|
||||||
|
<child link="${station_name}${device_name}device_link"/>
|
||||||
|
<axis xyz="0 0 0"/>
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<link name="${station_name}${device_name}device_link"/>
|
||||||
|
<joint name="${station_name}${device_name}device_link_joint" type="fixed">
|
||||||
|
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||||
|
<parent link="${station_name}${device_name}device_link"/>
|
||||||
|
<child link="${station_name}${device_name}arm_slideway"/>
|
||||||
|
<axis xyz="0 0 0"/>
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<!-- JOINTS LIMIT PARAMETERS -->
|
||||||
|
<xacro:property name="limit_arm_base_joint" value="${sec_limits['arm_base_joint']}" />
|
||||||
|
<xacro:property name="limit_arm_link_1_joint" value="${sec_limits['arm_link_1_joint']}" />
|
||||||
|
<xacro:property name="limit_arm_link_2_joint" value="${sec_limits['arm_link_2_joint']}" />
|
||||||
|
<xacro:property name="limit_arm_link_3_joint" value="${sec_limits['arm_link_3_joint']}" />
|
||||||
|
<xacro:property name="limit_gripper_base_joint" value="${sec_limits['gripper_base_joint']}" />
|
||||||
|
<xacro:property name="limit_gripper_right_joint" value="${sec_limits['gripper_right_joint']}"/>
|
||||||
|
<xacro:property name="limit_gripper_left_joint" value="${sec_limits['gripper_left_joint']}" />
|
||||||
|
<link name="${station_name}${device_name}arm_slideway">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="-0.913122246354019 -0.00141851388483838 0.0416079172839272"/>
|
||||||
|
<mass value="13.6578107753627"/>
|
||||||
|
<inertia ixx="0.0507627640890578" ixy="0.0245166532634714" ixz="-0.0112656803168519" iyy="5.2550852314372" iyz="0.000302974193920367" izz="5.26892263696439"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_slideway.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="0.752941176470588 0.752941176470588 0.752941176470588 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_slideway.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<joint name="${station_name}${device_name}arm_base_joint" type="prismatic">
|
||||||
|
<origin rpy="0 0 0" xyz="0.307 0 0.1225"/>
|
||||||
|
<parent link="${station_name}${device_name}arm_slideway"/>
|
||||||
|
<child link="${station_name}${device_name}arm_base"/>
|
||||||
|
<axis xyz="1 0 0"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_arm_base_joint['effort']}"
|
||||||
|
lower="${limit_arm_base_joint['lower']}"
|
||||||
|
upper="${limit_arm_base_joint['upper']}"
|
||||||
|
velocity="${limit_arm_base_joint['velocity']}"/>
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
<link name="${station_name}${device_name}arm_base">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="1.48458338655733E-06 -0.00831873687136486 0.351728466012153"/>
|
||||||
|
<mass value="16.1341586205194"/>
|
||||||
|
<inertia ixx="0.54871651759045" ixy="7.65476367433116E-07" ixz="2.0515139488158E-07" iyy="0.55113098995396" iyz="-5.13261457726806E-07" izz="0.0619081867727048"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_base.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_base.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link name="${station_name}${device_name}arm_link_1">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="0 -0.0102223856758559 0.0348505130779933"/>
|
||||||
|
<mass value="0.828629227096429"/>
|
||||||
|
<inertia ixx="0.00119703598787112" ixy="-2.46083048832131E-19" ixz="1.43864352731199E-19" iyy="0.00108355785790042" iyz="1.88092240278693E-06" izz="0.00160914803816438"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_link_1.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_link_1.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
<joint name="${station_name}${device_name}arm_link_1_joint" type="prismatic">
|
||||||
|
<origin rpy="0 0 0" xyz="0 0.1249 0.15"/>
|
||||||
|
<parent link="${station_name}${device_name}arm_base"/>
|
||||||
|
<child link="${station_name}${device_name}arm_link_1"/>
|
||||||
|
<axis xyz="0 0 1"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_arm_link_1_joint['effort']}"
|
||||||
|
lower="${limit_arm_link_1_joint['lower']}"
|
||||||
|
upper="${limit_arm_link_1_joint['upper']}"
|
||||||
|
velocity="${limit_arm_link_1_joint['velocity']}"/>
|
||||||
|
</joint>
|
||||||
|
<link name="${station_name}${device_name}arm_link_2">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="-3.33066907387547E-16 0.100000000000003 -0.0325000000000004"/>
|
||||||
|
<mass value="2.04764861029349"/>
|
||||||
|
<inertia ixx="0.0150150059448827" ixy="-1.28113733272213E-17" ixz="6.7561418872754E-19" iyy="0.00262980501315445" iyz="7.44451536320152E-18" izz="0.0162030186138787"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_link_2.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_link_2.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
<joint name="${station_name}${device_name}arm_link_2_joint" type="revolute">
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<parent link="${station_name}${device_name}arm_link_1"/>
|
||||||
|
<child link="${station_name}${device_name}arm_link_2"/>
|
||||||
|
<axis xyz="0 0 1"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_arm_link_2_joint['effort']}"
|
||||||
|
lower="${limit_arm_link_2_joint['lower']}"
|
||||||
|
upper="${limit_arm_link_2_joint['upper']}"
|
||||||
|
velocity="${limit_arm_link_2_joint['velocity']}"/>
|
||||||
|
</joint>
|
||||||
|
<link name="${station_name}${device_name}arm_link_3">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="4.77395900588817E-15 0.0861257730831348 -0.0227999999999999"/>
|
||||||
|
<mass value="1.19870202871083"/>
|
||||||
|
<inertia ixx="0.00780783223764428" ixy="7.26567379579506E-18" ixz="1.02766851352053E-18" iyy="0.00109642607170081" iyz="-9.73775385060067E-18" izz="0.0084997384510058"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_link_3.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/arm_link_3.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
<joint name="${station_name}${device_name}arm_link_3_joint" type="revolute">
|
||||||
|
<origin rpy="0 0 0" xyz="0 0.2 -0.0647"/>
|
||||||
|
<parent link="${station_name}${device_name}arm_link_2"/>
|
||||||
|
<child link="${station_name}${device_name}arm_link_3"/>
|
||||||
|
<axis xyz="0 0 1"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_arm_link_3_joint['effort']}"
|
||||||
|
lower="${limit_arm_link_3_joint['lower']}"
|
||||||
|
upper="${limit_arm_link_3_joint['upper']}"
|
||||||
|
velocity="${limit_arm_link_3_joint['velocity']}"/>
|
||||||
|
</joint>
|
||||||
|
<link name="${station_name}${device_name}gripper_base">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="-6.05365748571618E-05 0.0373027483464434 -0.0264392017534612"/>
|
||||||
|
<mass value="0.511925198394943"/>
|
||||||
|
<inertia ixx="0.000640463815051467" ixy="1.08132229596356E-06" ixz="7.165124649009E-07" iyy="0.000552164156414554" iyz="9.80000237347941E-06" izz="0.00103553457812823"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/gripper_base.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/gripper_base.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
<joint name="${station_name}${device_name}gripper_base_joint" type="revolute">
|
||||||
|
<origin rpy="0 0 0" xyz="0 0.2 -0.045"/>
|
||||||
|
<parent link="${station_name}${device_name}arm_link_3"/>
|
||||||
|
<child link="${station_name}${device_name}gripper_base"/>
|
||||||
|
<axis xyz="0 0 1"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_gripper_base_joint['effort']}"
|
||||||
|
lower="${limit_gripper_base_joint['lower']}"
|
||||||
|
upper="${limit_gripper_base_joint['upper']}"
|
||||||
|
velocity="${limit_gripper_base_joint['velocity']}"/>
|
||||||
|
</joint>
|
||||||
|
<link name="${station_name}${device_name}gripper_right">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 0 0" xyz="0.0340005471193899 0.0339655085140826 -0.0325252119823062"/>
|
||||||
|
<mass value="0.013337481136229"/>
|
||||||
|
<inertia ixx="2.02427962974094E-05" ixy="1.78442722292145E-06" ixz="-4.36485961300289E-07" iyy="1.4816483393622E-06" iyz="2.60539468115799E-06" izz="1.96629693098755E-05"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/gripper_right.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/gripper_right.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
<joint name="${station_name}${device_name}gripper_right_joint" type="prismatic">
|
||||||
|
<origin rpy="0 0 0" xyz="0 0.0942 -0.022277"/>
|
||||||
|
<parent link="${station_name}${device_name}gripper_base"/>
|
||||||
|
<child link="${station_name}${device_name}gripper_right"/>
|
||||||
|
<axis xyz="1 0 0"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_gripper_right_joint['effort']}"
|
||||||
|
lower="${limit_gripper_right_joint['lower']}"
|
||||||
|
upper="${limit_gripper_right_joint['upper']}"
|
||||||
|
velocity="${limit_gripper_right_joint['velocity']}"/>
|
||||||
|
</joint>
|
||||||
|
<link name="${station_name}${device_name}gripper_left">
|
||||||
|
<inertial>
|
||||||
|
<origin rpy="0 3.1416 0" xyz="-0.0340005471193521 0.0339655081029604 -0.0325252119827364"/>
|
||||||
|
<mass value="0.0133374811362292"/>
|
||||||
|
<inertia ixx="2.02427962974094E-05" ixy="-1.78442720812615E-06" ixz="4.36485961300305E-07" iyy="1.48164833936224E-06" iyz="2.6053946859901E-06" izz="1.96629693098755E-05"/>
|
||||||
|
</inertial>
|
||||||
|
<visual>
|
||||||
|
<origin rpy="0 3.1416 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/gripper_left.STL"/>
|
||||||
|
</geometry>
|
||||||
|
<material name="">
|
||||||
|
<color rgba="1 1 1 1"/>
|
||||||
|
</material>
|
||||||
|
</visual>
|
||||||
|
<collision>
|
||||||
|
<origin rpy="0 3.1416 0" xyz="0 0 0"/>
|
||||||
|
<geometry>
|
||||||
|
<mesh filename="file://${mesh_path}/devices/benyao_arm/meshes/gripper_left.STL"/>
|
||||||
|
</geometry>
|
||||||
|
</collision>
|
||||||
|
</link>
|
||||||
|
<joint name="${station_name}${device_name}gripper_left_joint" type="prismatic">
|
||||||
|
<origin rpy="0 3.1416 0" xyz="0 0.0942 -0.022277"/>
|
||||||
|
<parent link="${station_name}${device_name}gripper_base"/>
|
||||||
|
<child link="${station_name}${device_name}gripper_left"/>
|
||||||
|
<axis xyz="1 0 0"/>
|
||||||
|
<limit
|
||||||
|
effort="${limit_gripper_left_joint['effort']}"
|
||||||
|
lower="${limit_gripper_left_joint['lower']}"
|
||||||
|
upper="${limit_gripper_left_joint['upper']}"
|
||||||
|
velocity="${limit_gripper_left_joint['velocity']}"/>
|
||||||
|
<mimic joint="${station_name}${device_name}gripper_right_joint" multiplier="1" />
|
||||||
|
</joint>
|
||||||
|
|
||||||
|
</xacro:macro>
|
||||||
|
</robot>
|
||||||
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_base.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_base.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_link_1.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_link_1.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_link_2.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_link_2.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_link_3.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_link_3.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_slideway.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/arm_slideway.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/gripper_base.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/gripper_base.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/gripper_left.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/gripper_left.STL
Normal file
Binary file not shown.
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/gripper_right.STL
Normal file
BIN
unilabos/device_mesh/devices/benyao_arm/meshes/gripper_right.STL
Normal file
Binary file not shown.
@@ -1,43 +0,0 @@
|
|||||||
kinematics:
|
|
||||||
shoulder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0.1930
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
upperarm:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
forearm:
|
|
||||||
x: -0.6150
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_1:
|
|
||||||
x: -0.5710
|
|
||||||
y: 0
|
|
||||||
z: 0.1775
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_2:
|
|
||||||
x: 0
|
|
||||||
y: -0.1180
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_3:
|
|
||||||
x: 0
|
|
||||||
y: 0.1103
|
|
||||||
z: 0
|
|
||||||
roll: -1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
joint_limits:
|
|
||||||
shoulder_pan_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 330.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
shoulder_lift_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 330.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
elbow_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 150.0
|
|
||||||
max_position: !degrees 180.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -180.0
|
|
||||||
wrist_1_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_2_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_3_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Physical parameters
|
|
||||||
|
|
||||||
dh_parameters:
|
|
||||||
d1: 0.1930
|
|
||||||
a2: -0.6150
|
|
||||||
a3: -0.5710
|
|
||||||
d4: 0.1775
|
|
||||||
d5: 0.1180
|
|
||||||
d6: 0.1103
|
|
||||||
|
|
||||||
inertia_parameters:
|
|
||||||
base_mass: 0.94888 # base mass, base inertia, base cog might be incorrect
|
|
||||||
shoulder_mass: 6.83
|
|
||||||
upperarm_mass: 13.037
|
|
||||||
forearm_mass: 4.827
|
|
||||||
wrist_1_mass: 2.315
|
|
||||||
wrist_2_mass: 2.195
|
|
||||||
wrist_3_mass: 0.616
|
|
||||||
|
|
||||||
inertia:
|
|
||||||
base:
|
|
||||||
ixx: 0.0029607
|
|
||||||
ixy: -1.019E-06
|
|
||||||
ixz: 5.2685E-06
|
|
||||||
iyy: 0.0026222
|
|
||||||
iyz: -2.8951E-06
|
|
||||||
izz: 0.0039906
|
|
||||||
shoulder:
|
|
||||||
ixx: 0.039228
|
|
||||||
ixy: -2.8388E-05
|
|
||||||
ixz: 3.9289E-05
|
|
||||||
iyy: 0.025078
|
|
||||||
iyz: -0.00028825
|
|
||||||
izz: 0.037499
|
|
||||||
upperarm:
|
|
||||||
ixx: 0.3734
|
|
||||||
ixy: -5.985E-05
|
|
||||||
ixz: -0.5014
|
|
||||||
iyy: 2.0187
|
|
||||||
iyz: -0.00013287
|
|
||||||
izz: 1.681
|
|
||||||
forearm:
|
|
||||||
ixx: 0.030106
|
|
||||||
ixy: -1.25E-05
|
|
||||||
ixz: -0.076554
|
|
||||||
iyy: 0.76404
|
|
||||||
iyz: 1.326E-06
|
|
||||||
izz: 0.7421
|
|
||||||
wrist_1:
|
|
||||||
ixx: 0.0060891
|
|
||||||
ixy: 1.219E-06
|
|
||||||
ixz: -4.067E-06
|
|
||||||
iyy: 0.0049703
|
|
||||||
iyz: -1.2747E-05
|
|
||||||
izz: 0.0033067
|
|
||||||
wrist_2:
|
|
||||||
ixx: 0.004638045
|
|
||||||
ixy: 1.311E-06
|
|
||||||
ixz: 3.829E-06
|
|
||||||
iyy: 0.003507337
|
|
||||||
iyz: 1.4183E-05
|
|
||||||
izz: 0.003129668
|
|
||||||
wrist_3:
|
|
||||||
ixx: 0.0016942
|
|
||||||
ixy: 1.27E-07
|
|
||||||
ixz: 1.9782E-05
|
|
||||||
iyy: 0.0017123
|
|
||||||
iyz: 7.7E-06
|
|
||||||
izz: 0.0005701
|
|
||||||
|
|
||||||
center_of_mass:
|
|
||||||
base_cog:
|
|
||||||
x: 5.6715E-05
|
|
||||||
y: -0.00010524
|
|
||||||
z: 0.065979
|
|
||||||
shoulder_cog:
|
|
||||||
x: 9.3E-05
|
|
||||||
y: -0.02697
|
|
||||||
z: -0.02115
|
|
||||||
upperarm_cog:
|
|
||||||
x: -0.2304
|
|
||||||
y: -3.9E-05
|
|
||||||
z: 0.16068
|
|
||||||
forearm_cog:
|
|
||||||
x: -0.2998
|
|
||||||
y: 1.3E-05
|
|
||||||
z: 0.06176
|
|
||||||
wrist_1_cog:
|
|
||||||
x: 1.0E-05
|
|
||||||
y: -0.0148
|
|
||||||
z: -0.01682
|
|
||||||
wrist_2_cog:
|
|
||||||
x: -1.3E-05
|
|
||||||
y: 0.015559
|
|
||||||
z: -0.011803
|
|
||||||
wrist_3_cog:
|
|
||||||
x: -0.001704
|
|
||||||
y: -0.000705
|
|
||||||
z: -0.039231
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
mesh_files:
|
|
||||||
base:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/base.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/base.stl
|
|
||||||
|
|
||||||
shoulder:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/shoulder.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/shoulder.stl
|
|
||||||
|
|
||||||
upperarm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/upperarm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/upperarm.stl
|
|
||||||
mesh_files:
|
|
||||||
|
|
||||||
forearm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/forearm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/forearm.stl
|
|
||||||
|
|
||||||
wrist_1:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/wrist1.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/wrist1.stl
|
|
||||||
|
|
||||||
wrist_2:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/wrist2.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/wrist2.stl
|
|
||||||
|
|
||||||
wrist_3:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/visual/wrist3.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs612/collision/wrist3.stl
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
kinematics:
|
|
||||||
shoulder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0.1930
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
upperarm:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
forearm:
|
|
||||||
x: -0.5520
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_1:
|
|
||||||
x: -0.4300
|
|
||||||
y: 0
|
|
||||||
z: 0.1775
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_2:
|
|
||||||
x: 0
|
|
||||||
y: -0.1180
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_3:
|
|
||||||
x: 0
|
|
||||||
y: 0.1103
|
|
||||||
z: 0
|
|
||||||
roll: -1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
joint_limits:
|
|
||||||
shoulder_pan_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 330.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
shoulder_lift_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 330.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
elbow_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 150.0
|
|
||||||
max_position: !degrees 180.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -180.0
|
|
||||||
wrist_1_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_2_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_3_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Physical parameters
|
|
||||||
|
|
||||||
dh_parameters:
|
|
||||||
d1: 0.1930
|
|
||||||
a2: -0.5520
|
|
||||||
a3: -0.4300
|
|
||||||
d4: 0.1775
|
|
||||||
d5: 0.1180
|
|
||||||
d6: 0.1103
|
|
||||||
|
|
||||||
inertia_parameters:
|
|
||||||
base_mass: 0.94888 # base mass, base inertia, base cog might be incorrect
|
|
||||||
shoulder_mass: 6.83
|
|
||||||
upperarm_mass: 13.00
|
|
||||||
forearm_mass: 4.700
|
|
||||||
wrist_1_mass: 2.315
|
|
||||||
wrist_2_mass: 2.195
|
|
||||||
wrist_3_mass: 0.616
|
|
||||||
|
|
||||||
inertia:
|
|
||||||
base:
|
|
||||||
ixx: 0.0029607
|
|
||||||
ixy: -1.019E-06
|
|
||||||
ixz: 5.2685E-06
|
|
||||||
iyy: 0.0026222
|
|
||||||
iyz: -2.8951E-06
|
|
||||||
izz: 0.0039906
|
|
||||||
shoulder:
|
|
||||||
ixx: 0.039229834
|
|
||||||
ixy: -2.8388E-05
|
|
||||||
ixz: 3.9289E-05
|
|
||||||
iyy: 0.025077817
|
|
||||||
iyz: -0.000288247
|
|
||||||
izz: 0.03749924
|
|
||||||
upperarm:
|
|
||||||
ixx: 0.373432462
|
|
||||||
ixy: -5.5512E-05
|
|
||||||
ixz: -0.451785393
|
|
||||||
iyy: 1.696418762
|
|
||||||
iyz: -0.000133438
|
|
||||||
izz: 1.358657204
|
|
||||||
forearm:
|
|
||||||
ixx: 0.030213183
|
|
||||||
ixy: -8.368E-06
|
|
||||||
ixz: -0.056600087
|
|
||||||
iyy: 0.434775735
|
|
||||||
iyz: 1.585E-06
|
|
||||||
izz: 0.412836422
|
|
||||||
wrist_1:
|
|
||||||
ixx: 0.006091086
|
|
||||||
ixy: 1.256E-06
|
|
||||||
ixz: -4.067E-06
|
|
||||||
iyy: 0.004972529
|
|
||||||
iyz: -1.2709E-05
|
|
||||||
izz: 0.003307235
|
|
||||||
wrist_2:
|
|
||||||
ixx: 0.004639166
|
|
||||||
ixy: 1.311E-06
|
|
||||||
ixz: 3.829E-06
|
|
||||||
iyy: 0.003508643
|
|
||||||
iyz: 1.4183E-05
|
|
||||||
izz: 0.003130199
|
|
||||||
wrist_3:
|
|
||||||
ixx: 0.001695059
|
|
||||||
ixy: 1.27E-07
|
|
||||||
ixz: 1.9782E-05
|
|
||||||
iyy: 0.001713327
|
|
||||||
iyz: 7.7E-06
|
|
||||||
izz: 0.000570629
|
|
||||||
|
|
||||||
center_of_mass:
|
|
||||||
base_cog:
|
|
||||||
x: 5.6715E-05
|
|
||||||
y: -0.00010524
|
|
||||||
z: 0.065979
|
|
||||||
shoulder_cog:
|
|
||||||
x: 9.3E-05
|
|
||||||
y: -0.02697
|
|
||||||
z: -0.02115
|
|
||||||
upperarm_cog:
|
|
||||||
x: -0.2069
|
|
||||||
y: -4.4E-05
|
|
||||||
z: 0.16068
|
|
||||||
forearm_cog:
|
|
||||||
x: -0.2303
|
|
||||||
y: 1.5E-05
|
|
||||||
z: 0.06220
|
|
||||||
wrist_1_cog:
|
|
||||||
x: 1.0E-05
|
|
||||||
y: -0.0148
|
|
||||||
z: -0.01682
|
|
||||||
wrist_2_cog:
|
|
||||||
x: -1.3E-05
|
|
||||||
y: 0.015559
|
|
||||||
z: -0.011803
|
|
||||||
wrist_3_cog:
|
|
||||||
x: -0.001704
|
|
||||||
y: -0.000705
|
|
||||||
z: -0.039231
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
mesh_files:
|
|
||||||
base:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/base.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/base.stl
|
|
||||||
|
|
||||||
shoulder:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/shoulder.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/shoulder.stl
|
|
||||||
|
|
||||||
upperarm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/upperarm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/upperarm.stl
|
|
||||||
mesh_files:
|
|
||||||
|
|
||||||
forearm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/forearm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/forearm.stl
|
|
||||||
|
|
||||||
wrist_1:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/wrist1.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/wrist1.stl
|
|
||||||
|
|
||||||
wrist_2:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/wrist2.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/wrist2.stl
|
|
||||||
|
|
||||||
wrist_3:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/visual/wrist3.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs616/collision/wrist3.stl
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
kinematics:
|
|
||||||
shoulder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0.2350
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
upperarm:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
forearm:
|
|
||||||
x: -0.9000
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_1:
|
|
||||||
x: -0.7720
|
|
||||||
y: 0
|
|
||||||
z: 0.1725
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_2:
|
|
||||||
x: 0
|
|
||||||
y: -0.1280
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_3:
|
|
||||||
x: 0
|
|
||||||
y: 0.1250
|
|
||||||
z: 0
|
|
||||||
roll: -1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
joint_limits:
|
|
||||||
shoulder_pan_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 730.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
shoulder_lift_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 730.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
elbow_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 430.0
|
|
||||||
max_position: !degrees 180.0
|
|
||||||
max_velocity: !degrees 150.0
|
|
||||||
min_position: !degrees -180.0
|
|
||||||
wrist_1_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 100.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 210.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_2_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 100.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 210.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_3_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 100.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 210.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Physical parameters
|
|
||||||
|
|
||||||
dh_parameters:
|
|
||||||
d1: 0.2350
|
|
||||||
a2: -0.9000
|
|
||||||
a3: -0.7720
|
|
||||||
d4: 0.1725
|
|
||||||
d5: 0.1280
|
|
||||||
d6: 0.1250
|
|
||||||
|
|
||||||
inertia_parameters:
|
|
||||||
base_mass: 1.5056 # base mass, base inertia, base cog might be incorrect
|
|
||||||
shoulder_mass: 17.04
|
|
||||||
upperarm_mass: 26.927
|
|
||||||
forearm_mass: 8.386
|
|
||||||
wrist_1_mass: 3.095
|
|
||||||
wrist_2_mass: 3.095
|
|
||||||
wrist_3_mass: 0.879
|
|
||||||
|
|
||||||
inertia:
|
|
||||||
base:
|
|
||||||
ixx: 0.0067829
|
|
||||||
ixy: 2.6762E-07
|
|
||||||
ixz: -2.569E-06
|
|
||||||
iyy: 0.0068523
|
|
||||||
iyz: 9.4263E-05
|
|
||||||
izz: 0.010044
|
|
||||||
shoulder:
|
|
||||||
ixx: 0.130294671
|
|
||||||
ixy: -8.271E-05
|
|
||||||
ixz: 0.000106701
|
|
||||||
iyy: 0.085215288
|
|
||||||
iyz: -0.000663345
|
|
||||||
izz: 0.113859158
|
|
||||||
upperarm:
|
|
||||||
ixx: 1.204318595
|
|
||||||
ixy: -0.000466936
|
|
||||||
ixz: -1.78878432
|
|
||||||
iyy: 8.073725654
|
|
||||||
iyz: -0.000305158
|
|
||||||
izz: 6.980457042
|
|
||||||
forearm:
|
|
||||||
ixx: 0.070042956
|
|
||||||
ixy: 9.0183E-05
|
|
||||||
ixz: -0.165661846
|
|
||||||
iyy: 2.160436707
|
|
||||||
iyz: 1.3854E-05
|
|
||||||
izz: 2.109199584
|
|
||||||
wrist_1:
|
|
||||||
ixx: 0.007958413
|
|
||||||
ixy: -3.024E-06
|
|
||||||
ixz: -5.734E-06
|
|
||||||
iyy: 0.006686348
|
|
||||||
iyz: -1.766E-05
|
|
||||||
izz: 0.004840671
|
|
||||||
wrist_2:
|
|
||||||
ixx: 0.007958413
|
|
||||||
ixy: -3.024E-06
|
|
||||||
ixz: 5.734E-06
|
|
||||||
iyy: 0.006686348
|
|
||||||
iyz: 1.766E-05
|
|
||||||
izz: 0.004840671
|
|
||||||
wrist_3:
|
|
||||||
ixx: 0.004065851
|
|
||||||
ixy: 1.5185E-05
|
|
||||||
ixz: -1.1453E-05
|
|
||||||
iyy: 0.004060372
|
|
||||||
iyz: 4.2152E-05
|
|
||||||
izz: 0.001170392
|
|
||||||
|
|
||||||
center_of_mass:
|
|
||||||
base_cog:
|
|
||||||
x: -2.4009E-05
|
|
||||||
y: 0.0011775
|
|
||||||
z: 0.076293
|
|
||||||
shoulder_cog:
|
|
||||||
x: 9.9E-05
|
|
||||||
y: -0.026311
|
|
||||||
z: -0.026723
|
|
||||||
upperarm_cog:
|
|
||||||
x: -0.323686
|
|
||||||
y: -3.9E-05
|
|
||||||
z: 0.200968
|
|
||||||
forearm_cog:
|
|
||||||
x: -0.376841
|
|
||||||
y: 1.5E-05
|
|
||||||
z: 0.070311
|
|
||||||
wrist_1_cog:
|
|
||||||
x: -3.7E-05
|
|
||||||
y: -0.01051
|
|
||||||
z: -0.014865
|
|
||||||
wrist_2_cog:
|
|
||||||
x: 3.7E-05
|
|
||||||
y: 0.01051
|
|
||||||
z: -0.014865
|
|
||||||
wrist_3_cog:
|
|
||||||
x: 0.000242
|
|
||||||
y: -0.001192
|
|
||||||
z: -0.050422
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
mesh_files:
|
|
||||||
base:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/base.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/base.stl
|
|
||||||
|
|
||||||
shoulder:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/shoulder.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/shoulder.stl
|
|
||||||
|
|
||||||
upperarm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/upperarm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/upperarm.stl
|
|
||||||
mesh_files:
|
|
||||||
|
|
||||||
forearm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/forearm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/forearm.stl
|
|
||||||
|
|
||||||
wrist_1:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/wrist1.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/wrist1.stl
|
|
||||||
|
|
||||||
wrist_2:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/wrist2.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/wrist2.stl
|
|
||||||
|
|
||||||
wrist_3:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/visual/wrist3.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs620/collision/wrist3.stl
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
kinematics:
|
|
||||||
shoulder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0.2350
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
upperarm:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
forearm:
|
|
||||||
x: -0.7500
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_1:
|
|
||||||
x: -0.6220
|
|
||||||
y: 0
|
|
||||||
z: 0.1725
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_2:
|
|
||||||
x: 0
|
|
||||||
y: -0.1280
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_3:
|
|
||||||
x: 0
|
|
||||||
y: 0.1250
|
|
||||||
z: 0
|
|
||||||
roll: -1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
joint_limits:
|
|
||||||
shoulder_pan_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 730.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
shoulder_lift_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 730.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 120.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
elbow_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 430.0
|
|
||||||
max_position: !degrees 180.0
|
|
||||||
max_velocity: !degrees 150.0
|
|
||||||
min_position: !degrees -180.0
|
|
||||||
wrist_1_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 100.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 210.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_2_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 100.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 210.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_3_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 100.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 210.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Physical parameters
|
|
||||||
|
|
||||||
dh_parameters:
|
|
||||||
d1: 0.2350
|
|
||||||
a2: -0.7500
|
|
||||||
a3: -0.6220
|
|
||||||
d4: 0.1725
|
|
||||||
d5: 0.1280
|
|
||||||
d6: 0.1250
|
|
||||||
|
|
||||||
inertia_parameters:
|
|
||||||
base_mass: 1.50561968754018 # base mass, base inertia, base cog might be incorrect
|
|
||||||
shoulder_mass: 17.04
|
|
||||||
upperarm_mass: 26.543
|
|
||||||
forearm_mass: 7.816
|
|
||||||
wrist_1_mass: 3.095
|
|
||||||
wrist_2_mass: 3.095
|
|
||||||
wrist_3_mass: 0.879
|
|
||||||
|
|
||||||
inertia:
|
|
||||||
base:
|
|
||||||
ixx: 0.00678289120631133
|
|
||||||
ixy: 2.67618063769984E-07
|
|
||||||
ixz: -2.56895564177072E-06
|
|
||||||
iyy: 0.00685230321535615
|
|
||||||
iyz: 9.42628790478668E-05
|
|
||||||
izz: 0.0100437671447022
|
|
||||||
shoulder:
|
|
||||||
ixx: 0.13029
|
|
||||||
ixy: -8.271E-05
|
|
||||||
ixz: 0.0001067
|
|
||||||
iyy: 0.085215
|
|
||||||
iyz: -0.00066335
|
|
||||||
izz: 0.11386
|
|
||||||
upperarm:
|
|
||||||
ixx: 1.197
|
|
||||||
ixy: -0.00083272
|
|
||||||
ixz: -1.5396
|
|
||||||
iyy: 6.1117
|
|
||||||
iyz: -0.00015496
|
|
||||||
izz: 5.022
|
|
||||||
forearm:
|
|
||||||
ixx: 0.067797
|
|
||||||
ixy: 4.4997E-05
|
|
||||||
ixz: -0.12636
|
|
||||||
iyy: 1.3409
|
|
||||||
iyz: 1.45E-05
|
|
||||||
izz: 1.2908
|
|
||||||
wrist_1:
|
|
||||||
ixx: 0.0079584
|
|
||||||
ixy: -3.024E-06
|
|
||||||
ixz: 5.734E-06
|
|
||||||
iyy: 0.0066863
|
|
||||||
iyz: 1.766E-05
|
|
||||||
izz: 0.0048407
|
|
||||||
wrist_2:
|
|
||||||
ixx: 0.007958413
|
|
||||||
ixy: -3.024E-06
|
|
||||||
ixz: 5.734E-06
|
|
||||||
iyy: 0.006686348
|
|
||||||
iyz: 1.766E-05
|
|
||||||
izz: 0.004840671
|
|
||||||
wrist_3:
|
|
||||||
ixx: 0.004065851
|
|
||||||
ixy: 1.5185E-05
|
|
||||||
ixz: -1.1453E-05
|
|
||||||
iyy: 0.004060372
|
|
||||||
iyz: 4.2152E-05
|
|
||||||
izz: 0.001170392
|
|
||||||
|
|
||||||
center_of_mass:
|
|
||||||
base_cog:
|
|
||||||
x: -2.4008693014781E-05
|
|
||||||
y: 0.00117748953656619
|
|
||||||
z: 0.0762927770474629
|
|
||||||
shoulder_cog:
|
|
||||||
x: 9.9E-05
|
|
||||||
y: -0.026311
|
|
||||||
z: -0.026723
|
|
||||||
upperarm_cog:
|
|
||||||
x: -0.27762
|
|
||||||
y: -1.7E-05
|
|
||||||
z: 0.20184
|
|
||||||
forearm_cog:
|
|
||||||
x: -0.30259
|
|
||||||
y: 2.1E-05
|
|
||||||
z: 0.07237
|
|
||||||
wrist_1_cog:
|
|
||||||
x: -3.7E-05
|
|
||||||
y: -0.01051
|
|
||||||
z: -0.014865
|
|
||||||
wrist_2_cog:
|
|
||||||
x: 3.7E-05
|
|
||||||
y: 0.01051
|
|
||||||
z: -0.014865
|
|
||||||
wrist_3_cog:
|
|
||||||
x: 0.000242
|
|
||||||
y: -0.001192
|
|
||||||
z: -0.050422
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
mesh_files:
|
|
||||||
base:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/base.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/base.stl
|
|
||||||
|
|
||||||
shoulder:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/shoulder.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/shoulder.stl
|
|
||||||
|
|
||||||
upperarm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/upperarm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/upperarm.stl
|
|
||||||
mesh_files:
|
|
||||||
|
|
||||||
forearm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/forearm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/forearm.stl
|
|
||||||
|
|
||||||
wrist_1:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/wrist1.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/wrist1.stl
|
|
||||||
|
|
||||||
wrist_2:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/wrist2.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/wrist2.stl
|
|
||||||
|
|
||||||
wrist_3:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/visual/wrist3.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs625/collision/wrist3.stl
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
kinematics:
|
|
||||||
shoulder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0.1530
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
upperarm:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
forearm:
|
|
||||||
x: -0.2700
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_1:
|
|
||||||
x: -0.2575
|
|
||||||
y: 0
|
|
||||||
z: 0.1445
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_2:
|
|
||||||
x: 0
|
|
||||||
y: -0.0965
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_3:
|
|
||||||
x: 0
|
|
||||||
y: 0.0920
|
|
||||||
z: 0
|
|
||||||
roll: -1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
joint_limits:
|
|
||||||
shoulder_pan_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
shoulder_lift_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 56.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
elbow_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 28.0
|
|
||||||
max_position: !degrees 180.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -180.0
|
|
||||||
wrist_1_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 12.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 360.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_2_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 12.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 360.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_3_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 12.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 360.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Physical parameters
|
|
||||||
|
|
||||||
dh_parameters:
|
|
||||||
d1: 0.1530
|
|
||||||
a2: -0.2700
|
|
||||||
a3: -0.2575
|
|
||||||
d4: 0.1445
|
|
||||||
d5: 0.0965
|
|
||||||
d6: 0.0920
|
|
||||||
|
|
||||||
inertia_parameters:
|
|
||||||
base_mass: 0.358193760044688 # base mass, base inertia, base cog might be incorrect
|
|
||||||
shoulder_mass: 3.095
|
|
||||||
upperarm_mass: 5.073
|
|
||||||
forearm_mass: 2.425
|
|
||||||
wrist_1_mass: 1.559
|
|
||||||
wrist_2_mass: 1.447
|
|
||||||
wrist_3_mass: 0.500
|
|
||||||
|
|
||||||
inertia:
|
|
||||||
base:
|
|
||||||
ixx: 0.000549739542527148
|
|
||||||
ixy: 8.03741216179988E-08
|
|
||||||
ixz: -9.14780809458034E-06
|
|
||||||
iyy: 0.000533024165382036
|
|
||||||
iyz: 3.46908903534662E-07
|
|
||||||
izz: 0.000655188839052244
|
|
||||||
shoulder:
|
|
||||||
ixx: 0.007958
|
|
||||||
ixy: 5.734E-06
|
|
||||||
ixz: 3.024E-06
|
|
||||||
iyy: 0.00484
|
|
||||||
iyz: -1.77E-05
|
|
||||||
izz: 0.006686
|
|
||||||
upperarm:
|
|
||||||
ixx: 0.074168
|
|
||||||
ixy: -7.5E-06
|
|
||||||
ixz: -0.065579
|
|
||||||
iyy: 0.21937
|
|
||||||
iyz: -2.19E-05
|
|
||||||
izz: 0.15104
|
|
||||||
forearm:
|
|
||||||
ixx: 0.005082
|
|
||||||
ixy: -2.7E-06
|
|
||||||
ixz: -0.0056236
|
|
||||||
iyy: 0.0924207
|
|
||||||
iyz: -1.726E-06
|
|
||||||
izz: 0.0897559
|
|
||||||
wrist_1:
|
|
||||||
ixx: 0.0045009
|
|
||||||
ixy: 1.96E-06
|
|
||||||
ixz: -2.646E-06
|
|
||||||
iyy: 0.0042164
|
|
||||||
iyz: -3.58E-07
|
|
||||||
izz: 0.0014538
|
|
||||||
wrist_2:
|
|
||||||
ixx: 0.0023787
|
|
||||||
ixy: 1.953E-06
|
|
||||||
ixz: 2.643E-06
|
|
||||||
iyy: 0.0020859
|
|
||||||
iyz: 5.584E-06
|
|
||||||
izz: 0.0013191
|
|
||||||
wrist_3:
|
|
||||||
ixx: 0.001431
|
|
||||||
ixy: -2.32E-07
|
|
||||||
ixz: 7.955E-06
|
|
||||||
iyy: 0.0014299
|
|
||||||
iyz: 1.266E-06
|
|
||||||
izz: 0.0003265
|
|
||||||
|
|
||||||
center_of_mass:
|
|
||||||
base_cog:
|
|
||||||
x: -0.000721181367009438
|
|
||||||
y: 1.78114684963572E-05
|
|
||||||
z: 0.0546249293265112
|
|
||||||
shoulder_cog:
|
|
||||||
x: 3.7E-05
|
|
||||||
y: -0.0149
|
|
||||||
z: -0.0105
|
|
||||||
upperarm_cog:
|
|
||||||
x: -0.11596
|
|
||||||
y: -2.6E-05
|
|
||||||
z: 0.1148
|
|
||||||
forearm_cog:
|
|
||||||
x: -0.1542
|
|
||||||
y: 1.4E-05
|
|
||||||
z: 0.0238
|
|
||||||
wrist_1_cog:
|
|
||||||
x: 1.3E-05
|
|
||||||
y: -0.00479
|
|
||||||
z: -0.02274
|
|
||||||
wrist_2_cog:
|
|
||||||
x: -1.4E-05
|
|
||||||
y: 0.0051
|
|
||||||
z: -0.0127
|
|
||||||
wrist_3_cog:
|
|
||||||
x: -0.000684
|
|
||||||
y: -0.000175
|
|
||||||
z: -0.0423
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
mesh_files:
|
|
||||||
base:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/base.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/base.stl
|
|
||||||
|
|
||||||
shoulder:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/shoulder.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/shoulder.stl
|
|
||||||
|
|
||||||
upperarm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/upperarm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/upperarm.stl
|
|
||||||
mesh_files:
|
|
||||||
|
|
||||||
forearm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/forearm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/forearm.stl
|
|
||||||
|
|
||||||
wrist_1:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/wrist1.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/wrist1.stl
|
|
||||||
|
|
||||||
wrist_2:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/wrist2.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/wrist2.stl
|
|
||||||
|
|
||||||
wrist_3:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/visual/wrist3.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs63/collision/wrist3.stl
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
kinematics:
|
|
||||||
shoulder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0.1625
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: -0.16
|
|
||||||
upperarm:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
forearm:
|
|
||||||
x: -0.4270
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_1:
|
|
||||||
x: -0.3905
|
|
||||||
y: 0
|
|
||||||
z: 0.1475
|
|
||||||
roll: 0
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0.04
|
|
||||||
wrist_2:
|
|
||||||
x: 0
|
|
||||||
y: -0.0965
|
|
||||||
z: 0
|
|
||||||
roll: 1.570796326589793
|
|
||||||
pitch: 0
|
|
||||||
yaw: 0
|
|
||||||
wrist_3:
|
|
||||||
x: 0
|
|
||||||
y: 0.0920
|
|
||||||
z: 0
|
|
||||||
roll: -1.570796326589793
|
|
||||||
pitch: -0.59
|
|
||||||
yaw: 0
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
joint_limits:
|
|
||||||
shoulder_pan_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 150.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
shoulder_lift_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 150.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
elbow_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 150.0
|
|
||||||
max_position: !degrees 180.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -180.0
|
|
||||||
wrist_1_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 28.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_2_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 28.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
wrist_3_joint:
|
|
||||||
# acceleration limits are not publicly available
|
|
||||||
has_acceleration_limits: false
|
|
||||||
has_effort_limits: true
|
|
||||||
has_position_limits: true
|
|
||||||
has_velocity_limits: true
|
|
||||||
max_effort: 28.0
|
|
||||||
max_position: !degrees 360.0
|
|
||||||
max_velocity: !degrees 180.0
|
|
||||||
min_position: !degrees -360.0
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Physical parameters
|
|
||||||
|
|
||||||
dh_parameters:
|
|
||||||
d1: 0.1625
|
|
||||||
a2: -0.4270
|
|
||||||
a3: -0.3905
|
|
||||||
d4: 0.1475
|
|
||||||
d5: 0.0965
|
|
||||||
d6: 0.0920
|
|
||||||
|
|
||||||
inertia_parameters:
|
|
||||||
base_mass: 0.57127 # base mass, base inertia, base cog might be incorrect
|
|
||||||
shoulder_mass: 4.521
|
|
||||||
upperarm_mass: 7.533
|
|
||||||
forearm_mass: 3.009
|
|
||||||
wrist_1_mass: 1.559
|
|
||||||
wrist_2_mass: 1.447
|
|
||||||
wrist_3_mass: 0.500
|
|
||||||
|
|
||||||
inertia:
|
|
||||||
base:
|
|
||||||
ixx: 0.0010759
|
|
||||||
ixy: 7.8337E-08
|
|
||||||
ixz: -1.3213E-05
|
|
||||||
iyy: 0.0010109
|
|
||||||
iyz: 4.5992E-07
|
|
||||||
izz: 0.001408
|
|
||||||
shoulder:
|
|
||||||
ixx: 0.014192
|
|
||||||
ixy: 1.7839E-05
|
|
||||||
ixz: -1.027E-06
|
|
||||||
iyy: 0.0091982
|
|
||||||
iyz: -4.6778E-05
|
|
||||||
izz: 0.012777
|
|
||||||
upperarm:
|
|
||||||
ixx: 0.13719
|
|
||||||
ixy: -7.5676E-05
|
|
||||||
ixz: -0.17551
|
|
||||||
iyy: 0.6614
|
|
||||||
iyz: 7.59E-06
|
|
||||||
izz: 0.53649
|
|
||||||
forearm:
|
|
||||||
ixx: 0.0087604
|
|
||||||
ixy: 1.7762E-05
|
|
||||||
ixz: -0.010765
|
|
||||||
iyy: 0.22281
|
|
||||||
iyz: -4.13E-07
|
|
||||||
izz: 0.2176
|
|
||||||
wrist_1:
|
|
||||||
ixx: 0.0045009
|
|
||||||
ixy: 1.961E-06
|
|
||||||
ixz: -2.646E-06
|
|
||||||
iyy: 0.0042164
|
|
||||||
iyz: -3.58E-07
|
|
||||||
izz: 0.0014539
|
|
||||||
wrist_2:
|
|
||||||
ixx: 0.0023787
|
|
||||||
ixy: 1.953E-06
|
|
||||||
ixz: 2.643E-06
|
|
||||||
iyy: 0.0020859
|
|
||||||
iyz: 5.584E-06
|
|
||||||
izz: 0.0013191
|
|
||||||
wrist_3:
|
|
||||||
ixx: 0.0014314
|
|
||||||
ixy: -2.32E-07
|
|
||||||
ixz: 7.955E-06
|
|
||||||
iyy: 0.0014299
|
|
||||||
iyz: 1.266E-06
|
|
||||||
izz: 0.0003265
|
|
||||||
|
|
||||||
center_of_mass:
|
|
||||||
base_cog:
|
|
||||||
x: -0.00060346
|
|
||||||
y: 1.4311E-05
|
|
||||||
z: 0.060221
|
|
||||||
shoulder_cog:
|
|
||||||
x: 2.2E-05
|
|
||||||
y: -0.016526
|
|
||||||
z: -0.014442
|
|
||||||
upperarm_cog:
|
|
||||||
x: -0.17828
|
|
||||||
y: 4.0E-06
|
|
||||||
z: 0.12803
|
|
||||||
forearm_cog:
|
|
||||||
x: -0.20416
|
|
||||||
y: -7.0E-06
|
|
||||||
z: 0.03064
|
|
||||||
wrist_1_cog:
|
|
||||||
x: 1.3E-05
|
|
||||||
y: -0.00479
|
|
||||||
z: -0.02274
|
|
||||||
wrist_2_cog:
|
|
||||||
x: -1.4E-05
|
|
||||||
y: 0.005107
|
|
||||||
z: -0.012702
|
|
||||||
wrist_3_cog:
|
|
||||||
x: -0.000684
|
|
||||||
y: -0.000175
|
|
||||||
z: -0.04234
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
mesh_files:
|
|
||||||
base:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/base.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/base.stl
|
|
||||||
|
|
||||||
shoulder:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/shoulder.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/shoulder.stl
|
|
||||||
|
|
||||||
upperarm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/upperarm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/upperarm.stl
|
|
||||||
mesh_files:
|
|
||||||
|
|
||||||
forearm:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/forearm.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/forearm.stl
|
|
||||||
|
|
||||||
wrist_1:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/wrist1.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/wrist1.stl
|
|
||||||
|
|
||||||
wrist_2:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/wrist2.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/wrist2.stl
|
|
||||||
|
|
||||||
wrist_3:
|
|
||||||
visual:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/visual/wrist3.dae
|
|
||||||
material:
|
|
||||||
name: "LightGrey"
|
|
||||||
color: "0.7 0.7 0.7 1.0"
|
|
||||||
collision:
|
|
||||||
mesh:
|
|
||||||
package: eli_cs_robot_description
|
|
||||||
path: meshes/cs66/collision/wrist3.stl
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
shoulder_pan_joint: 0.0
|
|
||||||
shoulder_lift_joint: -1.57
|
|
||||||
elbow_joint: 0.0
|
|
||||||
wrist_1_joint: -1.57
|
|
||||||
wrist_2_joint: 1.57
|
|
||||||
wrist_3_joint: 0.0
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<robot xmlns:xacro="http://wiki.ros.org/xacro" name="elite_robot">
|
|
||||||
<xacro:macro name="elite_robot" params="mesh_path:='' parent_link:='' station_name:='' device_name:='' cs_type:='cs66' fake_dev:='true' x:=0 y:=0 z:=0 rx:=0 ry:=0 r:=0" >
|
|
||||||
<!-- robot name parameter -->
|
|
||||||
<xacro:arg name="name" default="cs"/>
|
|
||||||
<!-- import main macro -->
|
|
||||||
<xacro:include filename="${mesh_path}/devices/elite_robot/urdf/cs_macro.xacro"/>
|
|
||||||
|
|
||||||
<!-- possible 'cs_type' values: cs63, cs66, cs612, cs616, cs620, cs625 -->
|
|
||||||
<!-- the default value should raise an error in case this was called without defining the type -->
|
|
||||||
<xacro:arg name="cs_type" default="${cs_type}"/>
|
|
||||||
|
|
||||||
<!-- parameters -->
|
|
||||||
<xacro:arg name="tf_prefix" default="${station_name}${device_name}" />
|
|
||||||
<xacro:arg name="joint_limit_params" default="${mesh_path}/devices/elite_robot/config/$(arg cs_type)/joint_limits.yaml"/>
|
|
||||||
<xacro:arg name="kinematics_params" default="${mesh_path}/devices/elite_robot/config/$(arg cs_type)/default_kinematics.yaml"/>
|
|
||||||
<xacro:arg name="physical_params" default="${mesh_path}/devices/elite_robot/config/$(arg cs_type)/physical_parameters.yaml"/>
|
|
||||||
<xacro:arg name="visual_params" default="${mesh_path}/devices/elite_robot/config/$(arg cs_type)/visual_parameters.yaml"/>
|
|
||||||
<xacro:arg name="transmission_hw_interface" default=""/>
|
|
||||||
<xacro:arg name="safety_limits" default="false"/>
|
|
||||||
<xacro:arg name="safety_pos_margin" default="0.15"/>
|
|
||||||
<xacro:arg name="safety_k_position" default="20"/>
|
|
||||||
<!-- ros2_control related parameters -->
|
|
||||||
<xacro:arg name="headless_mode" default="false" />
|
|
||||||
<xacro:arg name="robot_ip" default="0.0.0.0" />
|
|
||||||
<xacro:arg name="script_filename" default=""/>
|
|
||||||
<xacro:arg name="output_recipe_filename" default=""/>
|
|
||||||
<xacro:arg name="input_recipe_filename" default=""/>
|
|
||||||
<xacro:arg name="local_ip" default="0.0.0.0"/>
|
|
||||||
<xacro:arg name="script_command_port" default="50004"/>
|
|
||||||
<xacro:arg name="reverse_port" default="50001"/>
|
|
||||||
<xacro:arg name="script_sender_port" default="50002"/>
|
|
||||||
<xacro:arg name="trajectory_port" default="50003"/>
|
|
||||||
<!-- tool communication related parameters-->
|
|
||||||
<xacro:arg name="use_tool_communication" default="false" />
|
|
||||||
<xacro:arg name="tool_voltage" default="0" />
|
|
||||||
<xacro:arg name="tool_parity" default="0" />
|
|
||||||
<xacro:arg name="tool_baud_rate" default="115200" />
|
|
||||||
<xacro:arg name="tool_stop_bits" default="1" />
|
|
||||||
<xacro:arg name="tool_tcp_port" default="54321" />
|
|
||||||
|
|
||||||
<!-- Simulation parameters -->
|
|
||||||
<xacro:arg name="use_fake_hardware" default="${fake_dev}" />
|
|
||||||
<xacro:arg name="fake_sensor_commands" default="${fake_dev}" />
|
|
||||||
<xacro:arg name="sim_gazebo" default="false" />
|
|
||||||
<xacro:arg name="sim_ignition" default="false" />
|
|
||||||
<xacro:arg name="simulation_controllers" default="" />
|
|
||||||
|
|
||||||
<!-- initial position for simulations (Fake Hardware, Gazebo, Ignition) -->
|
|
||||||
<xacro:arg name="initial_positions_file" default="${mesh_path}/devices/elite_robot/config/initial_positions.yaml"/>
|
|
||||||
|
|
||||||
<!-- convert to property to use substitution in function -->
|
|
||||||
<xacro:property name="initial_positions_file" default="$(arg initial_positions_file)"/>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<joint name="${station_name}${device_name}base_link_joint" type="fixed">
|
|
||||||
<origin xyz="${x} ${y} ${z}" rpy="${rx} ${ry} ${r}" />
|
|
||||||
<parent link="${parent_link}"/>
|
|
||||||
<child link="${station_name}${device_name}device_link"/>
|
|
||||||
<axis xyz="0 0 0"/>
|
|
||||||
</joint>
|
|
||||||
|
|
||||||
<link name="${station_name}${device_name}device_link"/>
|
|
||||||
|
|
||||||
<!-- arm -->
|
|
||||||
<xacro:cs_robot
|
|
||||||
name="$(arg name)"
|
|
||||||
tf_prefix="$(arg tf_prefix)"
|
|
||||||
parent="${station_name}${device_name}device_link"
|
|
||||||
joint_limits_parameters_file="$(arg joint_limit_params)"
|
|
||||||
kinematics_parameters_file="$(arg kinematics_params)"
|
|
||||||
physical_parameters_file="$(arg physical_params)"
|
|
||||||
visual_parameters_file="$(arg visual_params)"
|
|
||||||
transmission_hw_interface="$(arg transmission_hw_interface)"
|
|
||||||
safety_limits="$(arg safety_limits)"
|
|
||||||
safety_pos_margin="$(arg safety_pos_margin)"
|
|
||||||
safety_k_position="$(arg safety_k_position)"
|
|
||||||
use_fake_hardware="$(arg use_fake_hardware)"
|
|
||||||
fake_sensor_commands="$(arg fake_sensor_commands)"
|
|
||||||
sim_gazebo="$(arg sim_gazebo)"
|
|
||||||
sim_ignition="$(arg sim_ignition)"
|
|
||||||
headless_mode="$(arg headless_mode)"
|
|
||||||
initial_positions="${xacro.load_yaml(initial_positions_file)}"
|
|
||||||
use_tool_communication="$(arg use_tool_communication)"
|
|
||||||
tool_voltage="$(arg tool_voltage)"
|
|
||||||
tool_parity="$(arg tool_parity)"
|
|
||||||
tool_baud_rate="$(arg tool_baud_rate)"
|
|
||||||
tool_stop_bits="$(arg tool_stop_bits)"
|
|
||||||
tool_tcp_port="$(arg tool_tcp_port)"
|
|
||||||
robot_ip="$(arg robot_ip)"
|
|
||||||
script_filename="$(arg script_filename)"
|
|
||||||
output_recipe_filename="$(arg output_recipe_filename)"
|
|
||||||
input_recipe_filename="$(arg input_recipe_filename)"
|
|
||||||
local_ip="$(arg local_ip)"
|
|
||||||
script_command_port="$(arg script_command_port)"
|
|
||||||
reverse_port="$(arg reverse_port)"
|
|
||||||
script_sender_port="$(arg script_sender_port)"
|
|
||||||
trajectory_port="$(arg trajectory_port)"
|
|
||||||
mesh_path="${mesh_path}"
|
|
||||||
>
|
|
||||||
<origin xyz="0 0 0" rpy="0 0 0" /> <!-- position robot in the world -->
|
|
||||||
</xacro:cs_robot>
|
|
||||||
|
|
||||||
<link name="${station_name}${device_name}gripper">
|
|
||||||
<inertial>
|
|
||||||
<origin
|
|
||||||
xyz="-2.76718112539598E-05 0.0255270141715087 0.0270559267296449"
|
|
||||||
rpy="0 0 0" />
|
|
||||||
<mass
|
|
||||||
value="0.2571510360664" />
|
|
||||||
<inertia
|
|
||||||
ixx="0.000164806957167171"
|
|
||||||
ixy="1.52519074989277E-08"
|
|
||||||
ixz="9.6332716899636E-08"
|
|
||||||
iyy="8.72759579414916E-05"
|
|
||||||
iyz="-5.40735277087457E-07"
|
|
||||||
izz="0.000196871100878503" />
|
|
||||||
</inertial>
|
|
||||||
<visual>
|
|
||||||
<origin
|
|
||||||
xyz="0 0 0"
|
|
||||||
rpy="0 0 0" />
|
|
||||||
<geometry>
|
|
||||||
<mesh
|
|
||||||
filename="file://${mesh_path}/devices/elite_robot/meshes/gripper.STL" />
|
|
||||||
</geometry>
|
|
||||||
<material
|
|
||||||
name="">
|
|
||||||
<color
|
|
||||||
rgba="0.749019607843137 0.749019607843137 0.749019607843137 1" />
|
|
||||||
</material>
|
|
||||||
</visual>
|
|
||||||
<collision>
|
|
||||||
<origin
|
|
||||||
xyz="0 0 0"
|
|
||||||
rpy="0 0 0" />
|
|
||||||
<geometry>
|
|
||||||
<mesh
|
|
||||||
filename="file://${mesh_path}/devices/elite_robot/meshes/gripper.STL" />
|
|
||||||
</geometry>
|
|
||||||
</collision>
|
|
||||||
</link>
|
|
||||||
<joint name="${station_name}${device_name}gripper_joint"
|
|
||||||
type="fixed">
|
|
||||||
<origin
|
|
||||||
xyz="0 0 -0.003"
|
|
||||||
rpy="0 0 -1.570796326589793" />
|
|
||||||
<parent
|
|
||||||
link="${station_name}${device_name}tool0" />
|
|
||||||
<child
|
|
||||||
link="${station_name}${device_name}gripper" />
|
|
||||||
<axis
|
|
||||||
xyz="0 0 0" />
|
|
||||||
</joint>
|
|
||||||
|
|
||||||
</xacro:macro>
|
|
||||||
|
|
||||||
</robot>
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user