airo-ugent / airo-ugent/airo-mono
`PositionManipulator` support for using a different base/world frame to express TCP poses.
- Linguagem predominante
- Python
- Estrelas
- 32
- Forks
- 8
- Merge médio
- 8min
- PRs com merge (30d)
- 4
Descrição
**Describe the feature you'd like**
I would like the `PositionManipulator` class to have an optional constructor argument: `arm_base_in_world` (`X_W_B`). This would then internally be used by the class to transform all given TCP poses (expressed in `world`) to the frame the control box of the robot expects.
**Use cases**
For anyone not working in the base frame defined by the UR control box, this would save the effort of multiplying each `X_W_TCP` by `np.linalg.inv(X_W_B)` before calling e.g. `move_to_tcp_pose(X_W_TCP)`.
When using ROS-industrial compliant URDFs, you almost immediately run into this issue, because the URDFs define +X to be the direction the robot points towards with all-zero joints, while for the control box (and the stickers we've put on the bases) that is the -X direction. See the screenshot below for the difference.

Also, if we get a different brand robot in the future, we can easily reuse TCP poses by changing only the `X_W_B` in the constructors.
**Possible implementation**
We could add this functionality in a backward-compatible way by setting the default value of `robot_base_in_world` to `np.identity(4)`. Additionally we could add a similar helper functions as the `DualArmPositionManipulator` called `.transform_pose_to_arm_base()`.
We should probably also adapt the `DualArmPositionManipulator` class/constructor, because after this change, conversion from world to arm base is handled by each arm individually.
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Avaliação
Esta issue ainda não foi avaliada.