ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

MoveIt moving goal support

asked 2023-03-07 04:34:16 -0500

mdg gravatar image

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

edit retag flag offensive close merge delete

Comments

1

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-07 14:52:55 -0500 )edit

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!

mdg gravatar image mdg  ( 2023-03-07 15:17:13 -0500 )edit

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-08 05:10:21 -0500 )edit

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-08 05:13:03 -0500 )edit

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!

mdg gravatar image mdg  ( 2023-03-09 01:21:37 -0500 )edit

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-09 07:15:56 -0500 )edit

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

mdg gravatar image mdg  ( 2023-03-09 07:42:09 -0500 )edit

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-09 07:43:23 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2023-03-08 07:25:00 -0500

AndyZe gravatar image

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

https://moveit.picknik.ai/humble/doc/...

edit flag offensive delete link more

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-08 14:02:28 -0500 )edit

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.

mdg gravatar image mdg  ( 2023-03-09 02:16:08 -0500 )edit
1

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.

AndyZe gravatar image AndyZe  ( 2023-03-09 06:49:00 -0500 )edit

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

AndyZe gravatar image AndyZe  ( 2023-03-09 06:59:28 -0500 )edit

Thanks for the help!

mdg gravatar image mdg  ( 2023-03-09 07:10:17 -0500 )edit
1

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.

gvdhoorn gravatar image gvdhoorn  ( 2023-03-09 07:17:21 -0500 )edit

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 ...(more)

mdg gravatar image mdg  ( 2023-05-17 02:19:12 -0500 )edit

Question Tools

1 follower

Stats

Asked: 2023-03-07 04:34:16 -0500

Seen: 140 times

Last updated: Mar 08 '23