moveit / moveit

:robot: The MoveIt motion planning framework
http://moveit.ros.org
BSD 3-Clause "New" or "Revised" License
1.66k stars 947 forks source link

Adding new functionalities to MoveIt: End effector's cartesian speed control, synchronized dual-arm cartesian motion, Automatic Tool Changing #3381

Open pablomalvido opened 1 year ago

pablomalvido commented 1 year ago

In the European Project REMODEL of the H2020 program (https://remodel-project.eu/), we have analyzed the current status of MoveIt. From this study, we have identified some of its main gaps: Automatic Tool Changing, a complete solution for motion planning with cartesian speed control on the robot’s end effectors, and the multi-arm synchronized motion. To address these three gaps, we have developed some functions that can be integrated with MoveIt. The research behind these developments and the analysis of their performance have been published in this paper: https://authors.elsevier.com/sd/article/S0736-5845(23)00035-2. Additionally, a video showing the experimental evaluation of these functions for an SDA10F dual-arm Yaskawa robot (https://www.youtube.com/watch?v=DJXKWWmBquM) and the repository (https://github.com/pablomalvido/Advanced_manipulation_moveit) are publicly available. The developed functions are generic and can be used for any robot compatible with MoveIt with minor modifications (indicated in the journal article). If there is interest, we would be happy to work on making these functions completely hardware-agnostic and adding them to the MoveGroupCommander class. These functions add the following functionalities:

welcome[bot] commented 1 year ago

Thanks for reporting an issue. Because we're a volunteer community, providing a pull request with suggested changes is always welcomed.

gavanderhoorn commented 1 year ago

:+1: on the work.

Some comments:

for an SDA10F dual-arm Yaskawa robot

as one of the maintainers of the driver you appear to be using: why did you not use a fork? Disconnecting the history like this makes it rather difficult to merge improvements. It also makes it difficult to compare the base-line driver and your work.

As to MoveIt: same question. If you have a fork, I'd suggest opening a couple of PRs. Manually comparing code in different repositories is not a very efficient use of time (neither yours nor that of the maintainers here).

pablomalvido commented 1 year ago

Thanks for your prompt response and for the comments. You are right, a fork would be the best way to compare code. Initially, our goal was just to develop custom solutions for our robot, as we were not able to perform some manipulations with the current functionalities of MoveIt. After that, we decided to make the functions generic, as we found many issues and questions in forums asking for the functionalities we had developed. Due to this, we extended our custom code instead of starting to work on a fork.

I have just made a fork of the repository and I will start working on it as soon as I have time, as I’m quite busy at the moment. I was analyzing the repository and my suggestion is to do the following for each of the new functions:

Please, let me know if this implementation would be correct.

As I said, this will take some time as our code is in Python and it should be translated to C++. In the meantime, I suggest leaving this issue open. This way, if someone needs to use any of the developed functionalities, they can still check and implement our solution.

rhaschke commented 1 year ago

I will comment on the three contributions individually:

AndyZe commented 1 year ago

Automatic tool changing This is a often requested feature and I am very curious how you implemented it.

I'm watching this. I think we should (at least!) review what you've done. I'll try to find time to do this

pablomalvido commented 1 year ago

Thanks for your comments. I will reply to these three points:

If you need more detailed information about any of the functions, you can check the paper (the link is in the first message of the issue), and if you have any questions, don’t hesitate to ask. Please, let me know how to proceed if you are interested in incorporating any of these functions in the MoveIt repository.

yurirocha15 commented 1 year ago

Thank you for sharing your work :+1:

(...) However, the approach has been later extended and now this is possible, as can be seen in this video: https://www.youtube.com/watch?v=59j7i5tLQl4. In this case, the method presented in the paper is used to consider collisions and update the planning frames, but now, each tool is added in the robot_description parameter under different namespaces, and we can modify their parent frames using tf broadcasters (detaching or attaching them to the robot).

I am curious if the solution you mentioned for dynamically changing the TF is also open-source (I could not find it in the original work's repo). I am also interested in this feature, but being able to attach/detach tools with moving parts is paramount for my application (and for most of the pick-and-place applications, I believe).

pablomalvido commented 1 year ago

Thank you for your question and curiosity @yurirocha15. The ATC functionality with moving parts is not available yet in the repository. We are currently working on a new version of the code, including this functionality. I’ll let you know when this new version is pushed.