Robotics StackExchange | Archived questions

MoveIt moving goal support

Does moveit have support for a moving goal by - for example - constantly replanning? Or is the planning too slow for this?

Asked by mdg on 2023-03-07 05:34:16 UTC

Comments

Are you thinking of something like conveyor tracking, like is used / supported in industrial robotics?

If so: no, MoveIt is not fast enough for that in my experience. Or at least, not without resorting to something like MoveIt Servo -- but I don't consider that to be "typical" MoveIt.

Asked by gvdhoorn on 2023-03-07 15:52:55 UTC

Hi, Thanks for the reply. Would MoveIt Servo be able to do it? And why is that not "typical" MoveIt? I'm sorry I'm not greatly familiar MoveIt.

Thanks!

Asked by mdg on 2023-03-07 16:17:13 UTC

It's not typical as it doesn't do any planning (as in: taking an environment into account, a (set of) pose goal(s) and planning a collision free trajectory while taking care of one or several optimisation goals into account). It's "just" (and in quotes, as it's still quite nice work by @AndyZe et al.) a tele-operation / real-time jogging tool. Still related to / built on-top of MoveIt, but the pipelines are different.

You could potentially look at fzi-forschungszentrum-informatik/cartesian_controllers, specifically the "cartesian compliance controller".

Refer to the presentation and recording of that presentation mentioned in the readme for more information about them.

Note that those cannot (easily) be used with MoveIt though.

Asked by gvdhoorn on 2023-03-08 06:10:21 UTC

So just to clarify: you were looking for something like conveyor tracking?

MoveIt does support re-planning and fast back-to-back planning, it's just not going to be as fast (ie: reach the required update rates) as the built-in tracking capabilities of industrial robot controllers. But I also don't believe that would be possible, given the limited interfaces those controllers provide.

Asked by gvdhoorn on 2023-03-08 06:13:03 UTC

Hi, Yes I'm looking for conveyor tracking. However it would probably be just as easy to measure the speed of the conveyor and predict where the object will be in the future. I'll probably be trying that. I'm still trying to decide between using Python or C++. In your opinion, what would be best?

Thanks!

Asked by mdg on 2023-03-09 02:21:37 UTC

Picking up a ciabatta probably doesn't require mm precision, but even then 'predicting' where something will be is really a poor-man's solution.

If your robot + controller support it, I'd definitely recommend just using conveyor tracking.

It will be much more robust, performant and accurate.

Asked by gvdhoorn on 2023-03-09 08:15:56 UTC

@gvdhoorn, incidenteel werk ik met een Staubli TX90L. Ik zag dat je de maintainer bent van de ROS1 staubli package :).

Asked by mdg on 2023-03-09 08:42:09 UTC

Indeed.

STAUBLI has support for conveyor tracking afaik. I believe you can even download it from their support website. I don't remember whether you need a license for it, but there should be at least a trial available.

It's up to you to still use MoveIt, but I don't believe the staubli_val3_driver would have the required performance to really make it work nicely in your case.

Asked by gvdhoorn on 2023-03-09 08:43:23 UTC

I'm currently graduating on this subject. Would you mind if I send you an email?

Asked by mdg on 2023-03-09 08:47:43 UTC

If it's about staubli_val3_driver, or any of the staubli packages, I'd recommend to post on the Discussion fora associated with those repositories. For general ROS questions, ROS Answers would be the best venue.

For anything else, you can certainly send me an email. I might not immediately respond though.

Asked by gvdhoorn on 2023-03-09 09:04:30 UTC

Answers

If you can upgrade to ROS 2, hybrid planning could achieve what you want.

https://moveit.picknik.ai/humble/doc/concepts/hybrid_planning/hybrid_planning.html

Asked by AndyZe on 2023-03-08 08:25:00 UTC

Comments

The hybrid planner is nice, but afaik, performance will not be similar to built-in conveyor tracking or coordinated motion capabilities of industrial motion planners.

Whether that'd be a problem would of course be something only the OP can determine.

Asked by gvdhoorn on 2023-03-08 15:02:28 UTC

The situation is that the robotic arm needs to pick up a ciabatta bread which is on a moving conveyor belt. In your opinion: would the hybrid planner be able to deal with this? Another option would be to predict where the piece of bread will be in the future and just pick it up there.

Asked by mdg on 2023-03-09 03:16:08 UTC

This is tough. There may be additional complicating factors you haven't told me about yet.

If you use regular MoveIt planning, the planning time is usually about 100ms. The time required to execute won't be known in advance. This seems like a problem.

Hybrid planning will be even worse in terms of unpredictable planning and execution times.

MoveIt Servo that gavanderhoorn mentioned is fine for short ranges of motion where you won't encounter joint limits, collisions, or singularities.

I think your best bet is to interpolate to a pre-solved IK state with TOTG computeTimestamps(). That will be fast, reliable to execute, and reliable from a timing perspective. You may want to build up a database of IK solutions in advance.

I would definitely recommend C++ over Python.

Asked by AndyZe on 2023-03-09 07:49:00 UTC

Send an email to hello@picknik.ai if you're interested in more detailed consulting.

Asked by AndyZe on 2023-03-09 07:59:28 UTC

Thanks for the help!

Asked by mdg on 2023-03-09 08:10:17 UTC

As I wrote above, this just may not be something you want to do "with ROS" or "with MoveIt", but just the regular, built-in and supported conveyor tracking of your robot OEM.

You could take a look at the FZI controllers I linked in my earlier comment, they have been used for a primitive form of conveyor tracking by FZI. But it'd still be not like real conveyor tracking.

Asked by gvdhoorn on 2023-03-09 08:17:21 UTC

Hi @AndyZe @gvdhoorn, it's been a while but coming back to this. To elaborate more about the goal: it is to build an abstraction layer around robotic arm control such that given an environment with a bunch of obstacles in it, the best robotic arm for a specific use-case can be chosen. Ideally this would also support some type of object on a conveyor of which the position is known at all times. What I would like to do is to move the robotic arm and have it hover over this moving object so that it can eventually be picked up.

@gvdhoorn was kind enough to link me fzi-forschungszentrum-informatik/cartesian_controllers but from what I understand I would then not be able to use MoveIt anymore. Furthermore because the idea is to build an abstraction layer, commanding robotic arms only by their GetJoint and SetJoint interfaces (read and write in ros2_control), using OEM conveyor tracking is out. Lastly, pre-solved IK state is also out because of the abstraction layer (i think).

Asked by mdg on 2023-05-17 02:19:12 UTC