Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Method to send Robot to location and get read-back upon completion #12

Open
yck011522 opened this issue Apr 1, 2021 · 5 comments
Open
Labels
enhancement New feature or request

Comments

@yck011522
Copy link

Summary

As a user who send motion commands to ABB, I want to know the actual position/joint value of the robot after each motion command so that I can monitor the error/deviation.

Details

I would in essence like to have a combined version of rrc.MoveToJoints with rrc.GetJoints. The use case for this is that I send motion commands that came from JointTrajectory, each JointTrajectoryPoint creates one rrc.MoveToJoints. At each point, I use a Zone.Z5 so that motion is not jagged and at the same time I would like to monitor the deviation within this Zone. This deviation comes also from the fact that I'm using the soft move function in ABB.

I have tried to weave rrc.MoveToJoints and rrc.GetJoints. But this produces a start and stop jagged motion for every point in a trajectory. It is not practical. I believe the RAPID code / controller side motion planner do not tween motion commands when they are separated by the GetJoints command.

@gonzalocasas
Copy link
Contributor

Do you need this to monitor single commands or to generally monitor and track position during a longer process? If it's the latter, then that could be achieved already with a send_and_subscribe to get readings of the current position/joint values during a process.

The thing thou, is that this method does not have correlation to other individual commands sent at the same time, say you activate this, start receiving updates of current pose, then send multiple MoveToJoints, keep receiving updates while it moves, but all updates are in a sequence, at a fixed rate, so, you have no way -other than timestamp- to know exactly what was the pose after each of the individual commands finished. Would this be enough?

@yck011522
Copy link
Author

@gonzalocasas What do you mean by longer 'process'? and during a process.

I would like to monitor the location right after each motion command when ABB controller thinks its done with a motion command.

I don't think it will be a modal command , so not like "activate this option". It is more like modifying rrc.MoveToJoints to have a return value. So this returned value will have a 1 to 1 relationship with that specific Motion.

@gonzalocasas
Copy link
Contributor

longer process, for example, a full run of a script doing a bunch of stuff with the robot, not just a single command.

I'm trying to understand the purpose of the request, because you say "monitor the deviation", but is that monitoring deviation of a single move command after the command has finished, or monitoring a whole path? The two are very different in that, if you want to monitor single commands, you can already do it with a GetJoints triggered after the MoveToJoints has completed, and monitoring a whole path could be done with the option mention above (send_and_subscribe). But you seem to suggest you are really interested in knowing the robot pose after each motion command DURING a longer path (ie. multiple motion commands). And I don't get the point/purpose of that... ;)

@gonzalocasas gonzalocasas added the enhancement New feature or request label Apr 1, 2021
@yck011522
Copy link
Author

Yea, I can do GetJoints after the MoveToJoints for 1 single move. But if I loop through them for a trajectory, it will be a start and stop jagged motion.

The purpose for this is because the actual position of the robot is not the same as where I sent it to go using MoveToJoints. The difference comes from the size of the Zone and also because I use soft move function to allow deviation to occur. The robot controller decide for itself when a command is considered to be completed, when actual joints are 'close enough'. However this information is not knowable upstream.

I need to know this information because I'm synchronizing other robots upstream. My 'other' robot need to follow the exact location of where the ABB robot is. And this need to happen during a 'long-ish' motion with 20 to 30 points.

@yck011522
Copy link
Author

Maybe I bring an analogy from the CNC control community, it is common to have motion codes precomputed before running a CNC job. These are usually a list of G-Code read to be sent to the controller from some sort of steaming device (sometimes this is a computer, sometimes this is integrated into the controller directly). And all of these streaming UI allows direct monitor of the instantaneous location / speed / state of the machine. For example below is Universal G-Code sender UI, you can see the machine position displayed on the left.

05582f2a7a8f2946ba01891ede06499a

I'm developing similar UI for sending my rrc commands, and it would be really nice to be able to display my exact current position after each command. One use of this information is for debugging, especially because planned trajectories are pretty black box like.

Another use of the function is to monitor deviation of a trajectory during assembly (especially during soft move), this is used for my sync operations upstream but also for scientific data collection to know what had actually happened.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants