Dynamic object tracking on ABB IRC5.
shobhit
✭
I am trying to execute a pick and place task for an object moving on a conveyor. The challenge is the presence of slip on the conveyor and which renders the conveyor tracking in the traditional sense ineffective. In other words, the object moving on the conveyor can have a random direction with respect to (w.r.t) the robot base and with the help of computer vision, we can obtain the velocity and orientation of the object. Now, we want to use this information.
The task is to follow the object and execute linear motions w.r.t. the moving object frame. The following image further clarifies the problem:
I tried to implement something on the lines of conveyor tracking (in x-y plane) by discretizing each linear motion into n-steps (wherein the origin of the moving object frame obviously moving @ each step), thus leading to very jerky motion. I also tried to use a virtual axis (external axis) that could define the conveyor and a moving reference frame i.e. the 7th joint (independent axis) for the robot_task. Then, I attached a wobj_frame to this moving object. I could make the object frame attached to the work (the cylinder in the image above) move, but the data fetched using this variable (moving wobjdata) is always the initial value i.e. it does not adapt to the real-time position. This makes it impossible to execute motion w.r.t. this moving frame.
The following video might further aid to better define the problem. Note: the bottle is not necessarily moving parallel to the conveyor, it can have some drift:
https://streamable.com/agpry
I look forward for the support from the community.
Email me @: shobhit.yadav@mail.polimi.it
The task is to follow the object and execute linear motions w.r.t. the moving object frame. The following image further clarifies the problem:
I tried to implement something on the lines of conveyor tracking (in x-y plane) by discretizing each linear motion into n-steps (wherein the origin of the moving object frame obviously moving @ each step), thus leading to very jerky motion. I also tried to use a virtual axis (external axis) that could define the conveyor and a moving reference frame i.e. the 7th joint (independent axis) for the robot_task. Then, I attached a wobj_frame to this moving object. I could make the object frame attached to the work (the cylinder in the image above) move, but the data fetched using this variable (moving wobjdata) is always the initial value i.e. it does not adapt to the real-time position. This makes it impossible to execute motion w.r.t. this moving frame.
The following video might further aid to better define the problem. Note: the bottle is not necessarily moving parallel to the conveyor, it can have some drift:
https://streamable.com/agpry
I look forward for the support from the community.
Email me @: shobhit.yadav@mail.polimi.it
Tagged:
0
Comments
-
Maybe it helps to calculate the future position of the object after one second for example and move the robot there in one second.
0 -
At present, I am sending the trajectories from ROS and the motion is not very smooth and with large latency that prevents this tracking at the intended speed of 300mm/second. I though a better way could be using EGMrunpose with (offset) so that I do not occlude the moving object (i.e. screening it from the camera) and finally perform the task with conditional movements.
I tried to implement by creating a station with some virtual sensors (position sensor for real-time position of the moving object & line-sensor to detect when to start the robot motion). I don't know why the robot moves very slow, extremely slow to catch the moving object.
Please find the code below: (I intend to move the object, when it is detected by the line sensor, the robot moves by EGM, just y-coordinate of the object is changing right now, the object moves with 300mm/second) --> outcome: robot moves very very slow.
PROC testAI()
EGMGetId egmID1;
EGMSetupAI ROB_1,egmID1,"EGMsetting"\Pose\aiR1x:=x\aiR2y:=y\aiR3z:=z\aiR4rx:=ai_RotX\aiR5ry:=ai_RotY\aiR6rz:=ai_RotZ;
MoveL p_init,v1000,fine,Servo\WObj:=wobj0;
EGMActPose egmID1\Tool:=Servo\WObj:=wobj0,posecor0,EGM_FRAME_WORLD,posesen0,EGM_FRAME_WORLD\x:=egm_minmax_lin1\y:=egm_minmax_lin1\z:=egm_minmax_lin1\rx:=egm_minmax_rot1\ry:=egm_minmax_rot1\rz:=egm_minmax_rot1\LpFilter:=10\SampleRate:=4\MaxPosDeviation:=1000;WaitTime 3;
SetDO DO_start_bottle,1;
WaitDI det_obj_ls,1;
!EGMRunPose egmID1,EGM_STOP_HOLD\y\CondTime:=0.005\RampInTime:=0.002\PosCorrGain:=1;
EGMRunPose egmID1,EGM_STOP_HOLD\NoWaitCond\y;
WaitTime 5;
EGMStop egmID1,EGM_STOP_HOLD;
!EGMReset egmID1;
! Move to the starting point - fine point is needed
MoveL p20,v1000,fine,Servo\WObj:=wobj0;
SetDO DO_start_bottle,0;
ENDPROC0 -
Can't help you with EGM. There are some threads about it. I think you can try to change some parameters to get it working faster. Something with a filter.
0
Categories
- All Categories
- 5.5K RobotStudio
- 394 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 249 ScreenMaker
- 2.7K Robot Controller
- 309 IRC5
- 59 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 783 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 4 Job listings