init
This commit is contained in:
@@ -0,0 +1,419 @@
|
||||
# 1. LinkerFFG Glove
|
||||
|
||||
## 1.1 Product Introduction
|
||||
For specific product introduction, please refer to the calibration example description contained within
|
||||
Attachment 1: Linker FFG (FFG01) Product Instruction Manual
|
||||
|
||||
## 1.2 Software Usage
|
||||
This product provides ROS1 and ROS2 SDK packages under Ubuntu, working together with Linkerhand's ROS1 SDK and ROS2 SDK to achieve teleoperation actions
|
||||
For specific usage, please jump to Chapter 4: Teleoperation Retargeting System
|
||||
|
||||
## 1.3 Communication Protocol
|
||||
For specific product introduction, please refer to Attachment 2: Linker FFG (FFG01) Communication Protocol
|
||||
|
||||
---
|
||||
|
||||
# 2. Teleoperation SDK System
|
||||
|
||||
## 2.1 System Introduction
|
||||
This system's retargeting program is developed based on the ROS1/ROS2 platform, consisting of one node, four publisher topics, and two subscription topics
|
||||
The Linker FFG glove pushes data to the retargeting program via serial port protocol
|
||||
|
||||
### 2.1.1 Download Address
|
||||
https://github.com/linker-bot/linkerhand-ros-teleo
|
||||
Please contact customer service to obtain the latest SDK
|
||||
|
||||
### 2.1.2 Installing the Teleoperation Retargeting Program
|
||||
The teleoperation retargeting program is provided in src form, therefore requiring users to compile it themselves for use on different platforms. The teleoperation retargeting program provides a ROS2 version; the ROS1 version is still under development
|
||||
|
||||
Copy src to the workspace, then compile
|
||||
```bash
|
||||
colcon build --symlink-install
|
||||
```
|
||||
|
||||
There may be permission issues during the process preventing execution; use the following command
|
||||
```bash
|
||||
chmod 777 -R *
|
||||
```
|
||||
|
||||
### 2.1.3 Program Configuration
|
||||
Enter the ls command in this directory
|
||||
```bash
|
||||
cd src/linkerhand_retarget/linkerhand_retarget/config
|
||||
ls -1
|
||||
```
|
||||
After entering the above command, you should normally enter the config directory. After `ls -1`, you should see the following list
|
||||
```
|
||||
base_config.yml
|
||||
body_custom_pose.yml
|
||||
body_unity_pose.yml
|
||||
hand_config.yml
|
||||
human_hand_info.yml
|
||||
linker_hand_info.yml
|
||||
model_config.yml
|
||||
retarget_config.yml
|
||||
speed_config.yml
|
||||
```
|
||||
|
||||
The only configuration file we need to modify is `base_config.yml`; other configuration files must not be modified.
|
||||
|
||||
The following is an introduction to the configuration content in `base_config.yml`:
|
||||
|
||||
**1. Configure Robot Hand Type**
|
||||
```yaml
|
||||
robotname_r: l10
|
||||
robotname_l: l10
|
||||
```
|
||||
- LinkerHand_L10 series hands should be configured as: `l10`
|
||||
- LinkerHand_L20 series hands should be configured as: `l20`
|
||||
- LinkerHand_O7 series hands should be configured as: `o7`
|
||||
- LinkerHand_T25 series hands should be configured as: `t25`
|
||||
- LinkerHand_L25 series hands should be configured as: `l25`
|
||||
- LinkerHand_L6 series hands should be configured as: `l6`
|
||||
- LinkerHand_O6 series hands should be configured as: `o6`
|
||||
|
||||
**Note:** All the above must be in lowercase; uppercase will not be correctly recognized.
|
||||
|
||||
**2. Configure Data Printing**
|
||||
```yaml
|
||||
debug:
|
||||
joint_pub_debug: false
|
||||
joint_motor_debug_r: true
|
||||
joint_motor_debug_l: false
|
||||
```
|
||||
- `joint_pub_debug`: Set to true to print the content after Topic Pub, refresh rate is slow, can display left and right hands simultaneously
|
||||
- `joint_motor_debug_r`: Set to true to quickly refresh the output data of the right hand, range 255-0, representing the change from open to closed
|
||||
- `joint_motor_debug_l`: Set to true to quickly refresh the output data of the left hand, range 255-0, representing the change from open to closed
|
||||
|
||||
**3. Configure Data Source**
|
||||
```yaml
|
||||
motion_type: linkerforce
|
||||
```
|
||||
- `motion_type`: When using the LinkerFFG glove, set to `linkerforce`, `motion_device` does not need to be set
|
||||
|
||||
### 2.1.4 Program Launch (ROS2 Version)
|
||||
Next, execute the following command to confirm the USB device list on your device. Then insert the 2 force-feedback gloves, execute the command again, and confirm the refreshed USB device numbers. Take `/dev/ttyUSB0` and `/dev/ttyUSB1` as examples:
|
||||
```bash
|
||||
ls /dev/ttyUSB*
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
```
|
||||
|
||||
Then execute
|
||||
```bash
|
||||
# There are two launch modes,
|
||||
# One with calibration. Must be executed for the first time without calibration
|
||||
ros2 run linkerhand_retarget handretarget --ros-args -p calibration := True
|
||||
# One normal launch, calibration not executed by default
|
||||
ros2 run linkerhand_retarget handretarget
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
For customer convenience, a startup script is provided in the same directory as `src`, named `startup_linkerforce.sh`
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# LinkerForce Glove Teleoperation Startup Script
|
||||
|
||||
# Set serial port permissions
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
|
||||
# source ROS workspace (please enter the correct directory)
|
||||
source ~/project/linkerhand_telop_ws/ros2/v2.8.7/install/setup.bash
|
||||
|
||||
# Launch program (forced calibration)
|
||||
ros2 run linkerhand_retarget handretarget --ros-args -p calibration:=True
|
||||
|
||||
# Launch without calibration
|
||||
# ros2 run linkerhand_retarget handretarget
|
||||
```
|
||||
|
||||
After editing, launch it like this
|
||||
```bash
|
||||
./startup_linkerforce.sh
|
||||
# If you encounter Tab not recognized, grant permissions
|
||||
sudo chmod a+x ./startup_linkerforce.sh
|
||||
```
|
||||
|
||||
### 2.1.5 Program Launch (ROS1 Version)
|
||||
Next, execute the following command to confirm the USB device list on your device. Then insert the 2 force-feedback gloves, execute the command again, and confirm the refreshed USB device numbers. Take `/dev/ttyUSB0` and `/dev/ttyUSB1` as examples:
|
||||
```bash
|
||||
ls /dev/ttyUSB*
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
```
|
||||
|
||||
Then execute
|
||||
```bash
|
||||
# There are two launch modes,
|
||||
# One with calibration. Must be executed for the first time without calibration
|
||||
rosrun ros_linkerhand_retarget handretarget.py _calibrate:=true
|
||||
# One normal launch, calibration not executed by default
|
||||
rosrun ros_linkerhand_retarget handretarget.py
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
For customer convenience, a startup script is provided in the same directory as `src`, named `startup_linkerforce.sh`
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# LinkerForce Glove Teleoperation Startup Script
|
||||
|
||||
# Set serial port permissions
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
|
||||
# source ROS workspace (please enter the correct directory)
|
||||
source ~/linkerhand_telop/ros1/v2.8.6/install/setup.bash
|
||||
|
||||
# Launch program (forced calibration)
|
||||
rosrun ros_linkerhand_retarget handretarget.py _calibrate:=true
|
||||
|
||||
# Launch without calibration
|
||||
# rosrun ros_linkerhand_retarget handretarget.py
|
||||
```
|
||||
|
||||
After editing, launch it like this
|
||||
```bash
|
||||
./startup_linkerforce.sh
|
||||
# If you encounter Tab not recognized, grant permissions
|
||||
sudo chmod a+x ./startup_linkerforce.sh
|
||||
```
|
||||
|
||||
## 2.2 Topic Description
|
||||
The working principle of the SDK is to clean and organize the data transmitted from the upper computer, then distribute the data uniformly via Topics. Therefore, Topics are the data transfer stations and an important basis for judging whether the teleoperation is working properly.
|
||||
|
||||
- ROS1 command: `rostopic list`
|
||||
- ROS2 command: `ros2 topic list`
|
||||
|
||||
**1. ROS2 command:**
|
||||
```bash
|
||||
ros2 topic echo /cb_left_hand_control_cmd
|
||||
# or
|
||||
ros2 topic echo /cb_right_hand_control_cmd
|
||||
```
|
||||
|
||||
### Data Description
|
||||
|
||||
#### L25 Robotic Hand (21 DOF)
|
||||
| Joint | Finger | Action | Default Value |
|
||||
|-------|--------|--------|---------------|
|
||||
| joint1 | Thumb | Proximal Flexion | 255 |
|
||||
| joint2 | Index | Proximal Flexion | 255 |
|
||||
| joint3 | Middle | Proximal Flexion | 255 |
|
||||
| joint4 | Ring | Proximal Flexion | 255 |
|
||||
| joint5 | Pinky | Proximal Flexion | 255 |
|
||||
| joint6 | Thumb | Abduction | 255 |
|
||||
| joint7 | Index | Abduction | 128 |
|
||||
| joint8 | Middle | Abduction | 128 |
|
||||
| joint9 | Ring | Abduction | 128 |
|
||||
| joint10 | Pinky | Abduction | 128 |
|
||||
| joint11 | Thumb | Rotation | 255 |
|
||||
| joint12 | Reserved | - | - |
|
||||
| joint13 | Reserved | - | - |
|
||||
| joint14 | Reserved | - | - |
|
||||
| joint15 | Reserved | - | - |
|
||||
| joint16 | Thumb | Distal Flexion | 255 |
|
||||
| joint17 | Index | Distal Flexion | 255 |
|
||||
| joint18 | Middle | Distal Flexion | 255 |
|
||||
| joint19 | Ring | Distal Flexion | 255 |
|
||||
| joint20 | Pinky | Distal Flexion | 255 |
|
||||
| joint21 | Thumb | Tip Flexion | 255 |
|
||||
| joint22 | Index | Tip Flexion | 255 |
|
||||
| joint23 | Middle | Tip Flexion | 255 |
|
||||
| joint24 | Ring | Tip Flexion | 255 |
|
||||
| joint25 | Pinky | Tip Flexion | 255 |
|
||||
|
||||
#### L20 Robotic Hand (16 DOF)
|
||||
| Joint | Finger | Action | Default Value |
|
||||
|-------|--------|--------|---------------|
|
||||
| joint1 | Thumb | Proximal Flexion | 255 |
|
||||
| joint2 | Index | Proximal Flexion | 255 |
|
||||
| joint3 | Middle | Proximal Flexion | 255 |
|
||||
| joint4 | Ring | Proximal Flexion | 255 |
|
||||
| joint5 | Pinky | Proximal Flexion | 255 |
|
||||
| joint6 | Thumb | Abduction | 255 |
|
||||
| joint7 | Index | Abduction | 128 |
|
||||
| joint8 | Middle | Abduction | 128 |
|
||||
| joint9 | Ring | Abduction | 128 |
|
||||
| joint10 | Pinky | Abduction | 128 |
|
||||
| joint11 | Thumb | Rotation | 255 |
|
||||
| joint12 | Reserved | - | - |
|
||||
| joint13 | Reserved | - | - |
|
||||
| joint14 | Reserved | - | - |
|
||||
| joint15 | Reserved | - | - |
|
||||
| joint16 | Thumb | Tip Flexion | 255 |
|
||||
| joint17 | Index | Tip Flexion | 255 |
|
||||
| joint18 | Middle | Tip Flexion | 255 |
|
||||
| joint19 | Ring | Tip Flexion | 255 |
|
||||
| joint20 | Pinky | Tip Flexion | 255 |
|
||||
|
||||
#### L10 Robotic Hand (10 DOF)
|
||||
| Joint | Finger | Action | Default Value |
|
||||
|-------|--------|--------|---------------|
|
||||
| joint1 | Thumb | Proximal Flexion | 255 |
|
||||
| joint2 | Thumb | Abduction | 128 |
|
||||
| joint3 | Index | Proximal Flexion | 255 |
|
||||
| joint4 | Middle | Proximal Flexion | 255 |
|
||||
| joint5 | Ring | Proximal Flexion | 255 |
|
||||
| joint6 | Pinky | Proximal Flexion | 255 |
|
||||
| joint7 | Index | Abduction | 128 |
|
||||
| joint8 | Ring | Abduction | 128 |
|
||||
| joint9 | Pinky | Abduction | 128 |
|
||||
| joint10 | Thumb | Rotation | 255 |
|
||||
|
||||
#### O7 Robotic Hand (7 DOF)
|
||||
| Joint | Finger | Action | Default Value |
|
||||
|-------|--------|--------|---------------|
|
||||
| joint1 | Thumb | Proximal Flexion | 255 |
|
||||
| joint2 | Thumb | Abduction | 128 |
|
||||
| joint3 | Index | Proximal Flexion | 255 |
|
||||
| joint4 | Middle | Proximal Flexion | 255 |
|
||||
| joint5 | Ring | Proximal Flexion | 255 |
|
||||
| joint6 | Pinky | Proximal Flexion | 255 |
|
||||
| joint7 | Thumb | Rotation | 255 |
|
||||
|
||||
#### O6/L6 Robotic Hand (7 DOF)
|
||||
| Joint | Finger | Action | Default Value |
|
||||
|-------|--------|--------|---------------|
|
||||
| joint1 | Thumb | Proximal Flexion | 255 |
|
||||
| joint2 | Thumb | Abduction | 128 |
|
||||
| joint3 | Index | Proximal Flexion | 255 |
|
||||
| joint4 | Middle | Proximal Flexion | 255 |
|
||||
| joint5 | Ring | Proximal Flexion | 255 |
|
||||
| joint6 | Pinky | Proximal Flexion | 255 |
|
||||
|
||||
## 2.3 Troubleshooting Self-Check
|
||||
|
||||
### 2.3.1 Network Issues
|
||||
The teleoperation and control devices are connected via the network. Network abnormalities can cause devices to malfunction. First, check if the network cable connections are correct, ensure that both IPs can ping each other, and confirm that the corresponding ports are open on the firewall.
|
||||
|
||||
### 2.3.2 Topic Anomalies
|
||||
Under normal network conditions, you can confirm whether topics exist on other network devices using commands.
|
||||
Refer to section 2.2 Topic Description for details.
|
||||
|
||||
## 2.4 Mapping Parameter Settings
|
||||
|
||||
### 2.4.1 Principle
|
||||
The mapping system has 3 modes
|
||||
|
||||
| Mapping Mode | English Equivalent | Chinese Equivalent | Applicable Scenario |
|
||||
|--------------|--------------------|--------------------|---------------------|
|
||||
| Three-State Mapping | origin-opose-fist | Open Hand-O Pose-Fist | Aims to balance the maximum range of the robotic hand while satisfying pinch gestures. Suitable for most mapping requirements. |
|
||||
| Dual-End Mapping | origin-fist | Open Hand-Fist | Maximizes the full range of the robotic hand to the greatest extent. |
|
||||
| Pinch Mapping | origin-opose- | Open Hand-O Pose | Targets pinch gestures primarily, aiming to improve granularity for grasping actions. |
|
||||
|
||||
### 2.4.2 Configuration Files
|
||||
This mapping system configures parameter binding for the robotic hand. The mapping configuration directory is located at:
|
||||
```
|
||||
~/src/linkerhand_retarget/linkerhand_retarget/motion/linkerforce/config
|
||||
```
|
||||
|
||||
Currently provided mapping parameter packages are as follows:
|
||||
```
|
||||
g20_config.py
|
||||
l10_config.py
|
||||
l20_config.py
|
||||
l6_config.py
|
||||
o6_config.py
|
||||
o7_config.py
|
||||
```
|
||||
|
||||
### 2.4.3 Configuration Introduction
|
||||
The following uses `l6_config.py` as an example.
|
||||
|
||||
#### 2.4.3.1 Finger Configuration Constant `FINGER_CONFIGS`
|
||||
|
||||
##### 2.4.3.1.1 Common Constant Table
|
||||
(Content omitted)
|
||||
|
||||
##### 2.4.3.1.2 `reverse_motion` Attribute
|
||||
Reverse signal: Default is `False`
|
||||
|
||||
##### 2.4.3.1.3 `dynamic_weight` Attribute
|
||||
Dynamic weight: Used for detailed expression within intervals. Default is `None`, not enabled in this version.
|
||||
|
||||
##### 2.4.3.1.4 `extended_mapping` Attribute
|
||||
Extended mapping configuration
|
||||
```python
|
||||
'extended_mapping': { # New extended mapping configuration
|
||||
'enabled': True,
|
||||
'scale_factor': 1.2, # Scaling factor, default 1.0
|
||||
'extended_exp_factor': 80 # New: Extension index parameter
|
||||
}
|
||||
```
|
||||
- `enabled`: Enabled only for pinch mapping; `False` means disabled.
|
||||
- `scale_factor`: Scaling factor, used to quickly lock onto the O-Pose position.
|
||||
- `extended_exp_factor`: Extension parameter, used for continuation actions after the O-Pose. A smaller value makes it harder to reach the mechanical limits of the robotic hand, allowing for more detailed expression of grasping. A larger value makes it easier to quickly reach the drive joint limit positions.
|
||||
|
||||
#### 2.4.3.2 Mapping Order `MAPPING_ORDER`
|
||||
Taking L6 as an example, indicates the priority order of processed joints
|
||||
```python
|
||||
MAPPING_ORDER = [
|
||||
'thumb_abduction', 'thumb_flexion',
|
||||
'index', 'middle', 'ring', 'pinky'
|
||||
]
|
||||
```
|
||||
|
||||
#### 2.4.3.3 State Configuration `STATE_CONFIG` (Not Enabled)
|
||||
|
||||
#### 2.4.3.4 Robotic Hand OPOSE Calibration Position: `ROBOT_OPOSE_LEFT`
|
||||
Taking the L6 configuration as an example, the following angles correspond to the OPOSE position of the left robotic hand. Note that the following order corresponds to the URDF sequence.
|
||||
```python
|
||||
ROBOT_OPOSE_LEFT = [
|
||||
1.4, 0.54, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0
|
||||
]
|
||||
```
|
||||
|
||||
#### 2.4.3.5 Robotic Hand OPOSE Calibration Position: `ROBOT_OPOSE_RIGHT`
|
||||
Taking the L6 configuration as an example, the following angles correspond to the OPOSE position of the right robotic hand. Note that the following order corresponds to the URDF sequence.
|
||||
```python
|
||||
ROBOT_OPOSE_RIGHT = [
|
||||
1.4, 0.54, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0
|
||||
]
|
||||
```
|
||||
|
||||
### 2.4.4 Robotic Hand Calibration
|
||||
Sections 2.4.3.4 and 2.4.3.5 introduced the OPOSE calibration positions for the left and right robotic hands respectively. These are used to handle discrepancies between the current robotic hand position and the URDF. When using for the first time, modifications need to be made in the following code.
|
||||
|
||||
Path: `./src/linkerhand_retarget/linkerhand_retarget/motion/linkerforce/hand`
|
||||
|
||||
Taking the L6 robotic hand as an example, after opening `linkerforce_l6.py`, around line 149:
|
||||
```python
|
||||
if self.calibrationoriginal is not None
|
||||
and self.calibrationfistpose is not None
|
||||
and self.calibrationopose is not None:
|
||||
# for i in range(20):
|
||||
# self.multi_state_mapper.debug_value[i] = joint_arc[i]
|
||||
# arc_value = self.multi_state_mapper.map_glove_to_robot(joint_arc) # Comment out
|
||||
arc_value = ROBOT_OPOSE_RIGHT # Enable calibration
|
||||
qpos[17] = self.g_jointpositions_arc[1] = arc_value[0]
|
||||
qpos[20] = self.g_jointpositions_arc[0] = arc_value[1]
|
||||
qpos[1] = self.g_jointpositions_arc[2] = arc_value[3]
|
||||
qpos[9] = self.g_jointpositions_arc[3] = arc_value[5]
|
||||
qpos[13] = self.g_jointpositions_arc[4] = arc_value[7]
|
||||
qpos[5] = self.g_jointpositions_arc[5] = arc_value[9]
|
||||
```
|
||||
|
||||
Rewrite it as shown in the example above to enable calibration for the right robotic hand. After launching, the robotic hand will be fixed at the current angle according to the mapped angle.
|
||||
|
||||
The corresponding section for the left hand is around line 360:
|
||||
```python
|
||||
if self.calibrationoriginal is not None and self.calibrationfistpose is not None and self.calibrationopose is not None:
|
||||
# for i in range(20):
|
||||
# self.multi_state_mapper.debug_value[i] = joint_arc[i]
|
||||
# arc_value = self.multi_state_mapper.map_glove_to_robot(joint_arc) # Comment out
|
||||
# Enable calibration
|
||||
arc_value = ROBOT_OPOSE_LEFT
|
||||
qpos[17] = self.g_jointpositions_arc[1] = arc_value[0]
|
||||
qpos[20] = self.g_jointpositions_arc[0] = arc_value[1]
|
||||
qpos[1] = self.g_jointpositions_arc[2] = arc_value[3]
|
||||
qpos[9] = self.g_jointpositions_arc[3] = arc_value[5]
|
||||
qpos[13] = self.g_jointpositions_arc[4] = arc_value[7]
|
||||
qpos[5] = self.g_jointpositions_arc[5] = arc_value[9]
|
||||
```
|
||||
|
||||
Rewrite it as shown in the example above to enable calibration for the right robotic hand. After launching, the robotic hand will be fixed at the current angle according to the mapped angle.
|
||||
|
||||
Once both left and right hands have reached the desired pinch position, you can restore the original state and use the teleoperation system normally.
|
||||
+419
@@ -0,0 +1,419 @@
|
||||
# 1. LinkerFFG手套
|
||||
|
||||
## 1.1 产品介绍
|
||||
本产品的具体介绍参考,内含标定示例说明
|
||||
附件1、Linker FFG(FFG01)产品说明手册
|
||||
|
||||
## 1.2 软件使用
|
||||
本产品提供了Ubuntu下的ROS1和ROS2 SDK包,配合Linkerhand的ROS1 SDK,ROS2 SDK实现遥操作
|
||||
具体使用请跳转到第四章节 遥操重定向系统
|
||||
|
||||
## 1.3 通讯协议
|
||||
本产品的具体介绍参考附件2、Linker FFG(FFG01) 通讯协议
|
||||
|
||||
---
|
||||
|
||||
# 2. 遥操SDK系统
|
||||
|
||||
## 2.1 系统介绍
|
||||
本系统重定向程序是基于ROS1/ROS2平台开发的,由一个节点和四个publisher的话题以及两个subscription的话题组成
|
||||
Linker FFG手套通过串口协议进行数据推送到重定向程序
|
||||
|
||||
### 2.1.1 下载地址
|
||||
https://github.com/linker-bot/linkerhand-ros-teleo
|
||||
请联系客服获取最新SDK
|
||||
|
||||
### 2.1.2 安装遥操重定向程序
|
||||
遥操重定向程序以src的形式提供,因此需要用户自行编译,才可以在多个不同的平台下使用,遥操重定向程序提供了ROS2版本,ROS1版尚在开发中
|
||||
|
||||
将src复制到工作空间中,然后进行编译
|
||||
```bash
|
||||
colcon build --symlink-install
|
||||
```
|
||||
|
||||
过程中可能会存在权限不足的问题导致无法运行,使用以下代码
|
||||
```bash
|
||||
chmod 777 -R *
|
||||
```
|
||||
|
||||
### 2.1.3 程序配置
|
||||
该目录输入ls命令
|
||||
```bash
|
||||
cd src/linkerhand_retarget/linkerhand_retarget/config
|
||||
ls -1
|
||||
```
|
||||
输入以上命令后正常应该进入config的目录,ls -1后即可看到以下清单
|
||||
```
|
||||
base_config.yml
|
||||
body_custom_pose.yml
|
||||
body_unity_pose.yml
|
||||
hand_config.yml
|
||||
human_hand_info.yml
|
||||
linker_hand_info.yml
|
||||
model_config.yml
|
||||
retarget_config.yml
|
||||
speed_config.yml
|
||||
```
|
||||
|
||||
其中我们要唯一修改的配置文件是base_config.yml,其他配置文件均不可修改
|
||||
|
||||
以下是针对base_config.yml的配置内容展开进行介绍:
|
||||
|
||||
**1. 配置机械手类型**
|
||||
```yaml
|
||||
robotname_r: l10
|
||||
robotname_l: l10
|
||||
```
|
||||
- LinkerHand_L10系列的手要配置成:l10
|
||||
- LinkerHand_L20系列的手要配置成:l20
|
||||
- LinkerHand_O7系列的手要配置成:o7
|
||||
- LinkerHand_T25系列的手要配置成:t25
|
||||
- LinkerHand_L25系列的手要配置成:l25
|
||||
- LinkerHand_L6系列的手要配置成:l6
|
||||
- LinkerHand_O6系列的手要配置成:o6
|
||||
|
||||
注意事项:以上均为小写,大写不会被正确识别
|
||||
|
||||
**2. 配置数据打印**
|
||||
```yaml
|
||||
debug:
|
||||
joint_pub_debug: false
|
||||
joint_motor_debug_r: true
|
||||
joint_motor_debug_l: false
|
||||
```
|
||||
- joint_pub_debug:设置为true可打印Topic Pub后的内容,刷新率较慢,可左右手同时显示
|
||||
- joint_motor_debug_r:设置为true可快速刷新右手的输出数据,范围在255-0,代表张开到聚拢的变化幅度
|
||||
- joint_motor_debug_l:设置为true可快速刷新左手的输出数据,范围在255-0,代表张开到聚拢的变化幅度
|
||||
|
||||
**3. 配置数据源**
|
||||
```yaml
|
||||
motion_type: linkerforce
|
||||
```
|
||||
- motion_type:使用LinkerFFG手套要设置为linkerforce,motion_device无需设置
|
||||
|
||||
### 2.1.4 程序启动(ROS2版)
|
||||
之后执行以下代码确认本设备的USB清单,然后分别插入2个力反馈手套,再次执行命令,确认刷新出来的USB设备序号,以/dev/ttyUSB0和/dev/ttyUSB1为例
|
||||
```bash
|
||||
ls /dev/ttyUSB*
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
```
|
||||
|
||||
然后执行
|
||||
```bash
|
||||
# 启动分为两种,
|
||||
# 一种带标定。第一次没标定过必须执行
|
||||
ros2 run linkerhand_retarget handretarget --ros-args -p calibration := True
|
||||
# 一种正常启动,默认不执行标定
|
||||
ros2 run linkerhand_retarget handretarget
|
||||
```
|
||||
|
||||
**注意事项:**
|
||||
为了客户启动方便,提供了一个启动脚本,在src同级目录下,文件名为startup_linkerforce.sh
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# LinkerForce 手套遥操作启动脚本
|
||||
|
||||
# 设置串口权限
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
|
||||
# source ROS 工作空间(请输入正确的目录)
|
||||
source ~/project/linkerhand_telop_ws/ros2/v2.8.7/install/setup.bash
|
||||
|
||||
# 启动程序(强制标定)
|
||||
ros2 run linkerhand_retarget handretarget --ros-args -p calibration:=True
|
||||
|
||||
# 无标定启动
|
||||
# ros2 run linkerhand_retarget handretarget
|
||||
```
|
||||
|
||||
编辑完成后即可这样启动
|
||||
```bash
|
||||
./startup_linkerforce.sh
|
||||
# 如果遇到Tab无法识别的情况,请赋予权限
|
||||
sudo chmod a+x ./startup_linkerforce.sh
|
||||
```
|
||||
|
||||
### 2.1.5 程序启动(ROS1版)
|
||||
之后执行以下代码确认本设备的USB清单,然后分别插入2个力反馈手套,再次执行命令,确认刷新出来的USB设备序号,以/dev/ttyUSB0和/dev/ttyUSB1为例
|
||||
```bash
|
||||
ls /dev/ttyUSB*
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
```
|
||||
|
||||
然后执行
|
||||
```bash
|
||||
# 启动分为两种,
|
||||
# 一种带标定。第一次没标定过必须执行
|
||||
rosrun ros_linkerhand_retarget handretarget.py _calibrate:=true
|
||||
# 一种正常启动,默认不执行标定
|
||||
rosrun ros_linkerhand_retarget handretarget.py
|
||||
```
|
||||
|
||||
**注意事项:**
|
||||
为了客户启动方便,提供了一个启动脚本,在src同级目录下,文件名为startup_linkerforce.sh
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# LinkerForce 手套遥操作启动脚本
|
||||
|
||||
# 设置串口权限
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
sudo chmod 666 /dev/ttyUSB1
|
||||
|
||||
# source ROS 工作空间(请输入正确的目录)
|
||||
source ~/linkerhand_telop/ros1/v2.8.6/install/setup.bash
|
||||
|
||||
# 启动程序(强制标定)
|
||||
rosrun ros_linkerhand_retarget handretarget.py _calibrate:=true
|
||||
|
||||
# 无标定启动
|
||||
# rosrun ros_linkerhand_retarget handretarget.py
|
||||
```
|
||||
|
||||
编辑完成后即可这样启动
|
||||
```bash
|
||||
./startup_linkerforce.sh
|
||||
# 如果遇到Tab无法识别的情况,请赋予权限
|
||||
sudo chmod a+x ./startup_linkerforce.sh
|
||||
```
|
||||
|
||||
## 2.2 Topic话题说明
|
||||
SDK的工作原理是将上位机传输过来的数据经过清洗和整理后,统一通过Topic的方式进行数据分发,因此Topic是数据中转站,也是判断遥操工作是否正常的重要依据
|
||||
|
||||
- ROS1命令:`rostopic list`
|
||||
- ROS2命令:`ros2 topic list`
|
||||
|
||||
**1. ROS2命令:**
|
||||
```bash
|
||||
ros2 topic echo /cb_left_hand_control_cmd
|
||||
# 或
|
||||
ros2 topic echo /cb_right_hand_control_cmd
|
||||
```
|
||||
|
||||
### 数据说明
|
||||
|
||||
#### L25机械手(21个自由度)
|
||||
| 关节 | 手指 | 动作 | 默认值 |
|
||||
|------|------|------|--------|
|
||||
| joint1 | 拇指 | 根部弯曲 | 255 |
|
||||
| joint2 | 食指 | 根部弯曲 | 255 |
|
||||
| joint3 | 中指 | 根部弯曲 | 255 |
|
||||
| joint4 | 无名指 | 根部弯曲 | 255 |
|
||||
| joint5 | 小指 | 根部弯曲 | 255 |
|
||||
| joint6 | 拇指 | 侧摆 | 255 |
|
||||
| joint7 | 食指 | 侧摆 | 128 |
|
||||
| joint8 | 中指 | 侧摆 | 128 |
|
||||
| joint9 | 无名指 | 侧摆 | 128 |
|
||||
| joint10 | 小指 | 侧摆 | 128 |
|
||||
| joint11 | 拇指 | 旋转 | 255 |
|
||||
| joint12 | 预留 | - | - |
|
||||
| joint13 | 预留 | - | - |
|
||||
| joint14 | 预留 | - | - |
|
||||
| joint15 | 预留 | - | - |
|
||||
| joint16 | 拇指 | 第二关节弯曲 | 255 |
|
||||
| joint17 | 食指 | 第二关节弯曲 | 255 |
|
||||
| joint18 | 中指 | 第二关节弯曲 | 255 |
|
||||
| joint19 | 无名指 | 第二关节弯曲 | 255 |
|
||||
| joint20 | 小指 | 第二关节弯曲 | 255 |
|
||||
| joint21 | 拇指 | 末端弯曲 | 255 |
|
||||
| joint22 | 食指 | 末端弯曲 | 255 |
|
||||
| joint23 | 中指 | 末端弯曲 | 255 |
|
||||
| joint24 | 无名指 | 末端弯曲 | 255 |
|
||||
| joint25 | 小指 | 末端弯曲 | 255 |
|
||||
|
||||
#### L20机械手(16个自由度)
|
||||
| 关节 | 手指 | 动作 | 默认值 |
|
||||
|------|------|------|--------|
|
||||
| joint1 | 拇指 | 根部弯曲 | 255 |
|
||||
| joint2 | 食指 | 根部弯曲 | 255 |
|
||||
| joint3 | 中指 | 根部弯曲 | 255 |
|
||||
| joint4 | 无名指 | 根部弯曲 | 255 |
|
||||
| joint5 | 小指 | 根部弯曲 | 255 |
|
||||
| joint6 | 拇指 | 侧摆 | 255 |
|
||||
| joint7 | 食指 | 侧摆 | 128 |
|
||||
| joint8 | 中指 | 侧摆 | 128 |
|
||||
| joint9 | 无名指 | 侧摆 | 128 |
|
||||
| joint10 | 小指 | 侧摆 | 128 |
|
||||
| joint11 | 拇指 | 旋转 | 255 |
|
||||
| joint12 | 预留 | - | - |
|
||||
| joint13 | 预留 | - | - |
|
||||
| joint14 | 预留 | - | - |
|
||||
| joint15 | 预留 | - | - |
|
||||
| joint16 | 拇指 | 末端弯曲 | 255 |
|
||||
| joint17 | 食指 | 末端弯曲 | 255 |
|
||||
| joint18 | 中指 | 末端弯曲 | 255 |
|
||||
| joint19 | 无名指 | 末端弯曲 | 255 |
|
||||
| joint20 | 小指 | 末端弯曲 | 255 |
|
||||
|
||||
#### L10机械手(10个自由度)
|
||||
| 关节 | 手指 | 动作 | 默认值 |
|
||||
|------|------|------|--------|
|
||||
| joint1 | 拇指 | 根部弯曲 | 255 |
|
||||
| joint2 | 拇指 | 侧摆 | 128 |
|
||||
| joint3 | 食指 | 根部弯曲 | 255 |
|
||||
| joint4 | 中指 | 根部弯曲 | 255 |
|
||||
| joint5 | 无名指 | 根部弯曲 | 255 |
|
||||
| joint6 | 小指 | 根部弯曲 | 255 |
|
||||
| joint7 | 食指 | 侧摆 | 128 |
|
||||
| joint8 | 无名指 | 侧摆 | 128 |
|
||||
| joint9 | 小指 | 侧摆 | 128 |
|
||||
| joint10 | 拇指 | 旋转 | 255 |
|
||||
|
||||
#### O7机械手(7个自由度)
|
||||
| 关节 | 手指 | 动作 | 默认值 |
|
||||
|------|------|------|--------|
|
||||
| joint1 | 拇指 | 根部弯曲 | 255 |
|
||||
| joint2 | 拇指 | 侧摆 | 128 |
|
||||
| joint3 | 食指 | 根部弯曲 | 255 |
|
||||
| joint4 | 中指 | 根部弯曲 | 255 |
|
||||
| joint5 | 无名指 | 根部弯曲 | 255 |
|
||||
| joint6 | 小指 | 根部弯曲 | 255 |
|
||||
| joint7 | 拇指 | 旋转 | 255 |
|
||||
|
||||
#### O6/L6机械手(7个自由度)
|
||||
| 关节 | 手指 | 动作 | 默认值 |
|
||||
|------|------|------|--------|
|
||||
| joint1 | 拇指 | 根部弯曲 | 255 |
|
||||
| joint2 | 拇指 | 侧摆 | 128 |
|
||||
| joint3 | 食指 | 根部弯曲 | 255 |
|
||||
| joint4 | 中指 | 根部弯曲 | 255 |
|
||||
| joint5 | 无名指 | 根部弯曲 | 255 |
|
||||
| joint6 | 小指 | 根部弯曲 | 255 |
|
||||
|
||||
## 2.3 故障自检排查
|
||||
|
||||
### 2.3.1 网络故障
|
||||
遥操和控制设备都是通过网络连接的,网络异常会导致彼此设备工作不正常,首先要检查网线的连接是否正确,保证双方的ip相互ping通以及防火墙要确保对应的端口是开放的
|
||||
|
||||
### 2.3.2 话题异常
|
||||
在网络正常的前提下,可以在其他网络的设备上通过命令确认话题是否存在
|
||||
具体细节参考 2.2 Topic话题说明
|
||||
|
||||
## 2.4 映射参数的设置
|
||||
|
||||
### 2.4.1 原理
|
||||
映射系统有3种模式
|
||||
|
||||
| 映射模式 | 对应英文 | 对应中文 | 适用场景 |
|
||||
|----------|----------|----------|----------|
|
||||
| 三态映射 | origin-opose-fist | 张手-O手势-握拳 | 希望能兼顾机械手最大行程,同时能满足对指的,可以满足绝大部分映射要求 |
|
||||
| 双端映射 | origin-fist | 张手-握拳 | 最大限度覆盖机械手的全部行程 |
|
||||
| 对指映射 | origin-opose- | 张手-O手势 | 以对指为主要目标,以抓取为目标,提高抓取的颗粒度 |
|
||||
|
||||
### 2.4.2 配置文件
|
||||
该映射系统配置对机械手进行参数绑定,映射配置目录在
|
||||
```
|
||||
~/src/linkerhand_retarget/linkerhand_retarget/motion/linkerforce/config
|
||||
```
|
||||
|
||||
目前提供的映射参数包如下
|
||||
```
|
||||
g20_config.py
|
||||
l10_config.py
|
||||
l20_config.py
|
||||
l6_config.py
|
||||
o6_config.py
|
||||
o7_config.py
|
||||
```
|
||||
|
||||
### 2.4.3 配置介绍
|
||||
以下以l6_config.py为例
|
||||
|
||||
#### 2.4.3.1 手指配置常量FINGER_CONFIGS
|
||||
|
||||
##### 2.4.3.1.1 公共常量表
|
||||
(内容省略)
|
||||
|
||||
##### 2.4.3.1.2 reverse_motion属性
|
||||
反转信号:默认为False
|
||||
|
||||
##### 2.4.3.1.3 dynamic_weight属性
|
||||
动态权重:用于区间细节表达,默认为None,本版本不启用
|
||||
|
||||
##### 2.4.3.1.4 extended_mapping属性
|
||||
扩展映射配置
|
||||
```python
|
||||
'extended_mapping': { # 新增扩展映射配置
|
||||
'enabled': True,
|
||||
'scale_factor': 1.2, # 缩放因子,默认1.0
|
||||
'extended_exp_factor': 80 # 新增:延伸指数参数
|
||||
}
|
||||
```
|
||||
- enabled:仅在对指映射启用,False为不启用
|
||||
- scale_factor:缩放因子,用于快速锁定在opose的姿态位
|
||||
- extended_exp_factor:延伸参数,用于opose之后的延续动作,越小表示很难达到机械手的机械位置,利于更多的表达抓取细节,数值越大越容易快速达到驱动关节极限位置
|
||||
|
||||
#### 2.4.3.2 映射顺序MAPPING_ORDER
|
||||
以L6为例,表示处理的关节顺序优先级
|
||||
```python
|
||||
MAPPING_ORDER = [
|
||||
'thumb_abduction', 'thumb_flexion',
|
||||
'index', 'middle', 'ring', 'pinky'
|
||||
]
|
||||
```
|
||||
|
||||
#### 2.4.3.3 状态配置STATE_CONFIG(未启用)
|
||||
|
||||
#### 2.4.3.4 机械手OPOSE校准位:ROBOT_OPOSE_LEFT
|
||||
以下以L6的配置为例,以下角度对应左手机械手的OPOSE位置,注意以下顺序对应URDF的序列
|
||||
```python
|
||||
ROBOT_OPOSE_LEFT = [
|
||||
1.4, 0.54, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0
|
||||
]
|
||||
```
|
||||
|
||||
#### 2.4.3.5 机械手OPOSE校准位:ROBOT_OPOSE_RIGHT
|
||||
以下以L6的配置为例,以下角度对应右手机械手的OPOSE位置,注意以下顺序对应URDF的序列
|
||||
```python
|
||||
ROBOT_OPOSE_RIGHT = [
|
||||
1.4, 0.54, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0, 0.38, 0.0
|
||||
]
|
||||
```
|
||||
|
||||
### 2.4.4 机械手校准
|
||||
在2.4.3.4和2.4.3.5章节已经分别介绍了左右机械手OPOSE校准位,用于处理当前机械手位置和URDF之间的差异,第一次使用的时候,需要在以下代码进行改写
|
||||
|
||||
路径:`./src/linkerhand_retarget/linkerhand_retarget/motion/linkerforce/hand`
|
||||
|
||||
以L6机械手为例,在打开linkerforce_l6.py之后,在约计149行
|
||||
```python
|
||||
if self.calibrationoriginal is not None
|
||||
and self.calibrationfistpose is not None
|
||||
and self.calibrationopose is not None:
|
||||
# for i in range(20):
|
||||
# self.multi_state_mapper.debug_value[i] = joint_arc[i]
|
||||
# arc_value = self.multi_state_mapper.map_glove_to_robot(joint_arc) # 注释掉
|
||||
arc_value = ROBOT_OPOSE_RIGHT # 启用校准
|
||||
qpos[17] = self.g_jointpositions_arc[1] = arc_value[0]
|
||||
qpos[20] = self.g_jointpositions_arc[0] = arc_value[1]
|
||||
qpos[1] = self.g_jointpositions_arc[2] = arc_value[3]
|
||||
qpos[9] = self.g_jointpositions_arc[3] = arc_value[5]
|
||||
qpos[13] = self.g_jointpositions_arc[4] = arc_value[7]
|
||||
qpos[5] = self.g_jointpositions_arc[5] = arc_value[9]
|
||||
```
|
||||
|
||||
改写成如上图的示例,即可启用右机械手的校准,启动后就会让机械手按照映射的角度固定在当前角度
|
||||
|
||||
左手对应的在360行
|
||||
```python
|
||||
if self.calibrationoriginal is not None and self.calibrationfistpose is not None and self.calibrationopose is not None:
|
||||
# for i in range(20):
|
||||
# self.multi_state_mapper.debug_value[i] = joint_arc[i]
|
||||
# arc_value = self.multi_state_mapper.map_glove_to_robot(joint_arc) # 注释掉
|
||||
# 启用校准
|
||||
arc_value = ROBOT_OPOSE_LEFT
|
||||
qpos[17] = self.g_jointpositions_arc[1] = arc_value[0]
|
||||
qpos[20] = self.g_jointpositions_arc[0] = arc_value[1]
|
||||
qpos[1] = self.g_jointpositions_arc[2] = arc_value[3]
|
||||
qpos[9] = self.g_jointpositions_arc[3] = arc_value[5]
|
||||
qpos[13] = self.g_jointpositions_arc[4] = arc_value[7]
|
||||
qpos[5] = self.g_jointpositions_arc[5] = arc_value[9]
|
||||
```
|
||||
|
||||
改写成如上图的示例,即可启用右机械手的校准,启动后就会让机械手按照映射的角度固定在当前角度
|
||||
|
||||
当左右两手都达到期望的对指位置后,就可以恢复原状,按正常顺序使用遥操系统
|
||||
@@ -0,0 +1,9 @@
|
||||
colcon build --symlink-install
|
||||
source install/setup.bash
|
||||
|
||||
启动分为两种,
|
||||
一种带标定
|
||||
ros2 run linkerhand_retarget handretarget --ros-args -p calibration := True
|
||||
一种正常启动,默认不执行标定
|
||||
ros2 run linkerhand_retarget handretarget
|
||||
还是这些流程
|
||||
@@ -0,0 +1,19 @@
|
||||
## v1.0.0.1 update,更新日期2025-03-31
|
||||
1. 调整linker_hand_l10_left拇指旋转角不当的问题,子版本号变更为1.0.0.1
|
||||
2. 调整linker_hand_l10_left无名指偏航角的大小,子版本号变更为1.0.0.2
|
||||
3. 调整linker_hand_l10_left小指偏航角的大小,子版本号变更为1.0.0.3
|
||||
4. linker_hand_l10_right的拇指旋转角处于异常状态,需结构重新设定,版本封存
|
||||
5. 调整linker_hand_l20_right拇指旋转角不当的问题,子版本号变更为1.0.0.1
|
||||
6. 调整linker_hand_l20_right拇指偏航角不当的问题,子版本号变更为1.0.0.2
|
||||
7. 调整linker_hand_t25_left四指横滚角不当的问题,子版本号变更为1.0.0.1
|
||||
|
||||
## v1.0.0.0 create
|
||||
1. 版本创建
|
||||
2. 添加linker_hand_l10_left,版本号v1.6.7995.38578
|
||||
3. 添加linker_hand_l10_right,版本号v1.0.0
|
||||
4. 添加linker_hand_l20_left,版本号v1.0.0
|
||||
5. 添加linker_hand_l20_right,版本号v1.0.0
|
||||
6. 添加linker_hand_t25_left,版本号v1.0.0
|
||||
7. 添加linker_hand_t25_right,版本号v1.0.0
|
||||
8. 添加linker_hand_o7_left,版本号v1.0.0
|
||||
9. 添加linker_hand_o7_right,版本号v1.0.0
|
||||
+1285
File diff suppressed because it is too large
Load Diff
+1
@@ -0,0 +1 @@
|
||||
linkerhand_g20_left.urdf
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1285
File diff suppressed because it is too large
Load Diff
+1
@@ -0,0 +1 @@
|
||||
linkerhand_g20_right.urdf
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1247
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1247
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+615
@@ -0,0 +1,615 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<robot name="linkerhand_l10v6_left">
|
||||
<link name="hand_base_link">
|
||||
<inertial>
|
||||
<origin xyz="-0.00286158285153781 0.00291722319245657 0.0777013185993096" rpy="0 0 0" />
|
||||
<mass value="0.3355217742994084" />
|
||||
<inertia ixx="0.0006034278696208162" ixy="2.5945458100222196e-06" ixz="2.583441595747084e-06" iyy="0.0004288896033965287" iyz="1.1495620293769087e-05" izz="0.0002310010108567624" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/hand_base_link.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/hand_base_link.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<link name="thumb_metacarpals_base1">
|
||||
<inertial>
|
||||
<origin xyz="0.0219046715712375 -9.48626705771921E-06 -0.00324883167123877" rpy="0 0 0" />
|
||||
<mass value="0.043216860012087376" />
|
||||
<inertia ixx="1.1574645797577225e-05" ixy="-8.984136000835386e-09" ixz="-1.1766027948925875e-06" iyy="1.6390111626656588e-05" iyz="-4.0710607121916e-09" izz="7.337029980989325e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_metacarpals_base1.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_metacarpals_base1.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="thumb_cmc_roll" type="revolute">
|
||||
<origin xyz="-0.016657 -0.018426 0.057469" rpy="0 0 0" />
|
||||
<parent link="hand_base_link" />
|
||||
<child link="thumb_metacarpals_base1" />
|
||||
<axis xyz="-1 0 0" />
|
||||
<limit lower="-0.785" upper="0.785" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="thumb_metacarpals_base2">
|
||||
<inertial>
|
||||
<origin xyz="0.000798672868012509 -0.00104864337053465 -0.00114043413265499" rpy="0 0 0" />
|
||||
<mass value="0.072754681016976" />
|
||||
<inertia ixx="1.1663371590420262e-05" ixy="-2.6262973173372636e-06" ixz="1.2971095218936713e-07" iyy="9.126098693266464e-06" iyz="-2.0838721326869587e-07" izz="1.0413442973952338e-05" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_metacarpals_base2.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_metacarpals_base2.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="thumb_cmc_yaw" type="revolute">
|
||||
<origin xyz="0.028875 0 0.0020117" rpy="0 0 0" />
|
||||
<parent link="thumb_metacarpals_base1" />
|
||||
<child link="thumb_metacarpals_base2" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="0" upper="1.57" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="thumb_metacarpals">
|
||||
<inertial>
|
||||
<origin xyz="0.00175928374897715 -2.63724449372782E-05 0.0251802708036677" rpy="0 0 0" />
|
||||
<mass value="0.06657094876365299" />
|
||||
<inertia ixx="1.1160759345219712e-05" ixy="6.584642775411337e-10" ixz="-3.3307729548558715e-07" iyy="1.5079484426430938e-05" iyz="1.92880275356271e-09" izz="6.067229952497625e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_metacarpals.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_metacarpals.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="thumb_cmc_pitch" type="revolute">
|
||||
<origin xyz="0.015415 -0.024336 -0.0034929" rpy="0 -1.1075 2.1313" />
|
||||
<parent link="thumb_metacarpals_base2" />
|
||||
<child link="thumb_metacarpals" />
|
||||
<axis xyz="0 1 0" />
|
||||
<limit lower="0" upper="0.5285" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="thumb_proximal">
|
||||
<inertial>
|
||||
<origin xyz="-0.000134514693928799 -2.62245243557585E-05 0.0155657254015052" rpy="0 0 0" />
|
||||
<mass value="0.01958692569086711" />
|
||||
<inertia ixx="3.4697725304988824e-06" ixy="-3.327267347721967e-11" ixz="-4.1853839437128e-07" iyy="3.0873336668433674e-06" iyz="1.54924719843834e-10" izz="1.5346507241899612e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_proximal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_proximal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="thumb_mcp" type="revolute">
|
||||
<origin xyz="0.0049422 -7E-05 0.050268" rpy="0 0 0" />
|
||||
<parent link="thumb_metacarpals" />
|
||||
<child link="thumb_proximal" />
|
||||
<axis xyz="0 1 0" />
|
||||
<limit lower="0" upper="1.186" effort="12" velocity="2.6" />
|
||||
<mimic joint="thumb_cmc_pitch" multiplier="2.24" offset="0" />
|
||||
</joint>
|
||||
<link name="thumb_distal">
|
||||
<inertial>
|
||||
<origin xyz="-0.00128288196550677 -1.13361177393814E-05 0.012129617700597" rpy="0 0 0" />
|
||||
<mass value="0.02247274403982049" />
|
||||
<inertia ixx="1.331154618825e-06" ixy="-8.455169597234325e-10" ixz="-3.851470757664075e-07" iyy="1.3814467104262874e-06" iyz="-2.0836025487603863e-10" izz="1.0508245331573625e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_distal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/thumb_distal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="thumb_ip" type="revolute">
|
||||
<origin xyz="-0.0040391 0 0.036444" rpy="0 0 0" />
|
||||
<parent link="thumb_proximal" />
|
||||
<child link="thumb_distal" />
|
||||
<axis xyz="0 1 0" />
|
||||
<limit lower="0" upper="1.256" effort="12" velocity="2.6" />
|
||||
<mimic joint="thumb_cmc_pitch" multiplier="2.24" offset="0" />
|
||||
</joint>
|
||||
<link name="index_metacarpals">
|
||||
<inertial>
|
||||
<origin xyz="-0.00187934702104134 -4.29029595737547E-06 0.0105055422549738" rpy="0 0 0" />
|
||||
<mass value="0.016224861657086587" />
|
||||
<inertia ixx="8.0558776707687e-07" ixy="1.8377983342295924e-09" ixz="-2.817580054008791e-08" iyy="1.2812078319531976e-06" iyz="1.69041309143604e-09" izz="1.1491271215581225e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_metacarpals.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_metacarpals.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="index_mcp_roll" type="revolute">
|
||||
<origin xyz="-0.0021544 -0.02293 0.12973" rpy="0 0 0" />
|
||||
<parent link="hand_base_link" />
|
||||
<child link="index_metacarpals" />
|
||||
<axis xyz="1 0 0" />
|
||||
<limit lower="0" upper="0.2268" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="index_proximal">
|
||||
<inertial>
|
||||
<origin xyz="-0.00325185842631416 -9.13142378328041E-05 0.019519432098178" rpy="0 0 0" />
|
||||
<mass value="0.011434388445128849" />
|
||||
<inertia ixx="1.0145832356510137e-06" ixy="-1.2541097740821187e-09" ixz="-1.4945477444594324e-07" iyy="9.802611013521527e-07" iyz="-5.5655019976331626e-09" izz="5.3706714356802e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_proximal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_proximal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="index_mcp_pitch" type="revolute">
|
||||
<origin xyz="0.0010315 -3.0579E-05 0.017575" rpy="0 0 0" />
|
||||
<parent link="index_metacarpals" />
|
||||
<child link="index_proximal" />
|
||||
<axis xyz="0 1 0.0017399" />
|
||||
<limit lower="0" upper="1.325" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="index_middle">
|
||||
<inertial>
|
||||
<origin xyz="-0.0022016660809888 0.000323491615300016 0.0115249841516604" rpy="0 0 0" />
|
||||
<mass value="0.012218483381070486" />
|
||||
<inertia ixx="1.0683874793410237e-06" ixy="7.461942934849201e-09" ixz="-1.6732585065956776e-07" iyy="9.760136772745162e-07" iyz="-1.8556885538097564e-08" izz="4.997142729361838e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_middle.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_middle.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="index_pip" type="revolute">
|
||||
<origin xyz="-0.0033727 -5.8304E-05 0.033509" rpy="0 0 0" />
|
||||
<parent link="index_proximal" />
|
||||
<child link="index_middle" />
|
||||
<axis xyz="0 1 0.0017399" />
|
||||
<limit lower="0" upper="1.57" effort="12" velocity="2.6" />
|
||||
<mimic joint="index_mcp_pitch" multiplier="1.18" offset="0" />
|
||||
</joint>
|
||||
<link name="index_distal">
|
||||
<inertial>
|
||||
<origin xyz="0.000205178160330333 2.97745761116885E-05 0.0116641281851965" rpy="0 0 0" />
|
||||
<mass value="0.014509336799106001" />
|
||||
<inertia ixx="7.991034257248725e-07" ixy="1.9464314592614288e-09" ixz="-1.6209871504956675e-07" iyy="7.765077151425788e-07" iyz="-1.1850354848977276e-08" izz="4.5115066690793625e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_distal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/index_distal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="index_dip" type="revolute">
|
||||
<origin xyz="-0.0050438 -4.4805E-05 0.025751" rpy="0 0 0" />
|
||||
<parent link="index_middle" />
|
||||
<child link="index_distal" />
|
||||
<axis xyz="0 1 0.0017399" />
|
||||
<limit lower="0" upper="1" effort="12" velocity="2.6" />
|
||||
<mimic joint="index_mcp_pitch" multiplier="0.7493" offset="0" />
|
||||
</joint>
|
||||
<link name="middle_proximal">
|
||||
<inertial>
|
||||
<origin xyz="-0.00325186288011926 -5.73454604718832E-05 0.0195195889004557" rpy="0 0 0" />
|
||||
<mass value="0.01143437156151015" />
|
||||
<inertia ixx="1.0145776920273975e-06" ixy="-1.51391940486027e-09" ixz="-1.4945172673068563e-07" iyy="9.802739948415826e-07" iyz="-4.79580838155705e-09" izz="5.370488365697888e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/middle_proximal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/middle_proximal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="middle_mcp_pitch" type="revolute">
|
||||
<origin xyz="-0.0031229 -0.0039297 0.1523" rpy="0 0 0" />
|
||||
<parent link="hand_base_link" />
|
||||
<child link="middle_proximal" />
|
||||
<axis xyz="0 1 0" />
|
||||
<limit lower="0" upper="1.325" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="middle_middle">
|
||||
<inertial>
|
||||
<origin xyz="-0.00220166609150478 0.000343543558963093 0.0115244040473821" rpy="0 0 0" />
|
||||
<mass value="0.012218483571112725" />
|
||||
<inertia ixx="1.068387495358361e-06" ixy="7.170795464411775e-09" ixz="-1.6733858218132874e-07" iyy="9.760768097219475e-07" iyz="-1.7728053600423598e-08" izz="4.996511408980763e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/middle_middle.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/middle_middle.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="middle_pip" type="revolute">
|
||||
<origin xyz="-0.0033727 0 0.03351" rpy="0 0 0" />
|
||||
<parent link="middle_proximal" />
|
||||
<child link="middle_middle" />
|
||||
<axis xyz="0 1 0" />
|
||||
<limit lower="0" upper="1.57" effort="12" velocity="2.6" />
|
||||
<mimic joint="middle_mcp_pitch" multiplier="1.18" offset="0" />
|
||||
</joint>
|
||||
<link name="middle_distal">
|
||||
<inertial>
|
||||
<origin xyz="0.000205178002779471 5.00684870747489E-05 0.0116640595818044" rpy="0 0 0" />
|
||||
<mass value="0.014509336060454212" />
|
||||
<inertia ixx="7.99103494186095e-07" ixy="1.6644075854798023e-09" ixz="-1.62101880036297e-07" iyy="7.765480201542825e-07" iyz="-1.1284283654957438e-08" izz="4.511104435724625e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/middle_distal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/middle_distal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="middle_dip" type="revolute">
|
||||
<origin xyz="-0.0050438 0 0.025752" rpy="0 0 0" />
|
||||
<parent link="middle_middle" />
|
||||
<child link="middle_distal" />
|
||||
<axis xyz="0 1 0" />
|
||||
<limit lower="0" upper="1" effort="12" velocity="2.6" />
|
||||
<mimic joint="middle_mcp_pitch" multiplier="0.7493" offset="0" />
|
||||
</joint>
|
||||
<link name="ring_metacarpals">
|
||||
<inertial>
|
||||
<origin xyz="-0.00187934628453409 6.28915481682354E-05 0.01050535483118" rpy="0 0 0" />
|
||||
<mass value="0.016224861826704375" />
|
||||
<inertia ixx="8.0558777445087e-07" ixy="1.6576144109981775e-09" ixz="-2.818699813825459e-08" iyy="1.2811809055950375e-06" iyz="2.5348853775173285e-09" izz="1.149154228484606e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_metacarpals.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_metacarpals.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="ring_mcp_roll" type="revolute">
|
||||
<origin xyz="-0.0021544 0.01507 0.12973" rpy="0 0 0" />
|
||||
<parent link="hand_base_link" />
|
||||
<child link="ring_metacarpals" />
|
||||
<axis xyz="1 0 0" />
|
||||
<limit lower="-0.2093" upper="0" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="ring_proximal">
|
||||
<inertial>
|
||||
<origin xyz="-0.00325187412247893 3.35367654908103E-05 0.0195197185420488" rpy="0 0 0" />
|
||||
<mass value="0.011434328218145325" />
|
||||
<inertia ixx="1.0145627036440988e-06" ixy="-2.208986407970441e-09" ixz="-1.4944134457087498e-07" iyy="9.802951610013824e-07" iyz="-2.7363971232884886e-09" izz="5.370130646189587e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_proximal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_proximal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="ring_mcp_pitch" type="revolute">
|
||||
<origin xyz="0.0010315 8.1812E-05 0.017575" rpy="0 0 0" />
|
||||
<parent link="ring_metacarpals" />
|
||||
<child link="ring_proximal" />
|
||||
<axis xyz="0 0.99999 0.004655" />
|
||||
<limit lower="0" upper="1.325" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="ring_middle">
|
||||
<inertial>
|
||||
<origin xyz="-0.00220166566802396 0.0003971864509561 0.0115226809862077" rpy="0 0 0" />
|
||||
<mass value="0.012218485156099463" />
|
||||
<inertia ixx="1.0683875734537313e-06" ixy="6.3917456478722626e-09" ixz="-1.6737017512398825e-07" iyy="9.76231589018535e-07" iyz="-1.550953559747006e-08" izz="4.994964896570513e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_middle.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_middle.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="ring_pip" type="revolute">
|
||||
<origin xyz="-0.0033727 0.00015599 0.033509" rpy="0 0 0" />
|
||||
<parent link="ring_proximal" />
|
||||
<child link="ring_middle" />
|
||||
<axis xyz="0 0.99999 -0.004655" />
|
||||
<limit lower="0" upper="1.57" effort="12" velocity="2.6" />
|
||||
<mimic joint="ring_mcp_pitch" multiplier="1.18" offset="0" />
|
||||
</joint>
|
||||
<link name="ring_distal">
|
||||
<inertial>
|
||||
<origin xyz="0.00020517760398206 0.000104362588540907 0.0116637013134471" rpy="0 0 0" />
|
||||
<mass value="0.014509335448655588" />
|
||||
<inertia ixx="7.991035897706663e-07" ixy="9.099023825169151e-10" ixz="-1.6210769709474564e-07" iyy="7.766461271067113e-07" iyz="-9.769082387474625e-09" izz="4.5101234324468245e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_distal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/ring_distal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="ring_dip" type="revolute">
|
||||
<origin xyz="-0.0050438 0.00011987 0.025751" rpy="0 0 0" />
|
||||
<parent link="ring_middle" />
|
||||
<child link="ring_distal" />
|
||||
<axis xyz="0 0.99999 0.004655" />
|
||||
<limit lower="0" upper="1" effort="12" velocity="2.6" />
|
||||
<mimic joint="ring_mcp_pitch" multiplier="0.7493" offset="0" />
|
||||
</joint>
|
||||
<link name="pinky_metacarpals">
|
||||
<inertial>
|
||||
<origin xyz="-0.00187934584633366 9.14587641305045E-05 0.0105051449327144" rpy="0 0 0" />
|
||||
<mass value="0.01622486185826846" />
|
||||
<inertia ixx="8.055877760354588e-07" ixy="1.580978999260455e-09" ixz="-2.8191413006936475e-08" iyy="1.2811661928912075e-06" iyz="2.8938639760594312e-09" izz="1.1491690360812113e-06" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_metacarpals.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_metacarpals.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="pinky_mcp_roll" type="revolute">
|
||||
<origin xyz="-0.00015438 0.03407 0.12473" rpy="0 0 0" />
|
||||
<parent link="hand_base_link" />
|
||||
<child link="pinky_metacarpals" />
|
||||
<axis xyz="1 0 0" />
|
||||
<limit lower="-0.3663" upper="0" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="pinky_proximal">
|
||||
<inertial>
|
||||
<origin xyz="-0.00325188069079595 8.66277107426164E-05 0.0195195983618728" rpy="0 0 0" />
|
||||
<mass value="0.011434302908387288" />
|
||||
<inertia ixx="1.0145539577295488e-06" ixy="-2.6149926159884515e-09" ixz="-1.494337859823311e-07" iyy="9.802986867926886e-07" iyz="-1.5332940100896112e-09" izz="5.370010166208637e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_proximal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_proximal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="pinky_mcp_pitch" type="revolute">
|
||||
<origin xyz="0.0010315 0.0001296 0.017575" rpy="0 0 0" />
|
||||
<parent link="pinky_metacarpals" />
|
||||
<child link="pinky_proximal" />
|
||||
<axis xyz="0 0.99997 0.0073743" />
|
||||
<limit lower="0" upper="1.325" effort="12" velocity="2.6" />
|
||||
</joint>
|
||||
<link name="pinky_middle">
|
||||
<inertial>
|
||||
<origin xyz="-0.00220166565850555 0.000428518931293857 0.0115215583189701" rpy="0 0 0" />
|
||||
<mass value="0.012218485199683349" />
|
||||
<inertia ixx="1.0683875758478289e-06" ixy="5.9365875265233376e-09" ixz="-1.6738693800481951e-07" iyy="9.763124152716262e-07" iyz="-1.4212912019423661e-08" izz="4.994156657049562e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_middle.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_middle.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="pinky_pip" type="revolute">
|
||||
<origin xyz="-0.0033727 0.00024711 0.033509" rpy="0 0 0" />
|
||||
<parent link="pinky_proximal" />
|
||||
<child link="pinky_middle" />
|
||||
<axis xyz="0 0.99997 -0.0073743" />
|
||||
<limit lower="0" upper="1.57" effort="12" velocity="2.6" />
|
||||
<mimic joint="pinky_mcp_pitch" multiplier="1.18" offset="0" />
|
||||
</joint>
|
||||
<link name="pinky_distal">
|
||||
<inertial>
|
||||
<origin xyz="0.00020517666108498 0.00013607814642172 0.0116633786905161" rpy="0 0 0" />
|
||||
<mass value="0.014509341713357138" />
|
||||
<inertia ixx="7.991040144036225e-07" ixy="4.6910343585054e-10" ixz="-1.6210978417854824e-07" iyy="7.766972783161012e-07" iyz="-8.883595821726824e-09" izz="4.5096160321433253e-07" />
|
||||
</inertial>
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_distal.STL" />
|
||||
</geometry>
|
||||
<material name="">
|
||||
<color rgba="1 1 1 1" />
|
||||
</material>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
<geometry>
|
||||
<mesh filename="meshes/pinky_distal.STL" />
|
||||
</geometry>
|
||||
</collision>
|
||||
</link>
|
||||
<joint name="pinky_dip" type="revolute">
|
||||
<origin xyz="-0.0050438 0.0001899 0.025751" rpy="0 0 0" />
|
||||
<parent link="pinky_middle" />
|
||||
<child link="pinky_distal" />
|
||||
<axis xyz="0 0.99997 0.0073743" />
|
||||
<limit lower="0" upper="1" effort="12" velocity="2.6" />
|
||||
<mimic joint="pinky_mcp_pitch" multiplier="0.7493" offset="0" />
|
||||
</joint>
|
||||
</robot>
|
||||
BIN
Binary file not shown.
BIN
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