Canada
Asked — Edited
Resolved Resolved by DJ Sures!

True Autonomous Find, Pick Up And Movemovement

Rich mentioned today that it would be great to see a robot autonomously find an object, pick it up and move it. I agree! How the heck do you do that? I've been looking around at old posts but can't find anything to get me started.

I would like to do something like this with the robotic arm I just completed and eventually with my InMoov.

I suppose that a place to start would be to have it find an object (camera), then to navigate to the object, moving it would be the easiest part. Anyway, just blue skying here.

This, of course, would be a great feature for a robot to have to assist a person with limited mobility. Anyone have any thoughts on this.

Edit, Sorry about the title of this post. Why can't I edit that?


ARC Pro

Upgrade to ARC Pro

Unleash your robot's full potential with the cutting-edge features and intuitive programming offered by Synthiam ARC Pro.

PRO
Synthiam
#25  

The middle of the frame should always be the same position, no?

The idea of having the robot center the object in the middle of the camera. From that point, the robot arm now simply needs to use an Auto Position to move to a position that would be the center of the frame.

#26  

Here's my code so far for this, It finds the object but then whatever Auto Position I have for it to go to, it does but it won't keep the object centered in the camera frame. I need it to keep the object centered in the camera frame.


#Step1

ControlCommand("Script Manager", ScriptStart, "Scan table")

servo(D0,47)
servospeed(D0,3)
sleep(500)

sleep(1500)

:Step 2
ControlCommand("Camera", CameraServoTrackEnable)
ControlCommand("Camera", CameraColorTracking, "red")
#step 3
sleep(1000)

#step 4
If($Cameraistracking = 1)
sleep(500)
Goto(step 5)
else 
ControlCommand("Camera", CameraServoTrackDisable)
sleep(500)
ServoDown(d4,10)
servospeed(d4,3)
sleep(1000)
Goto(step 2)
endif

:step 5
ControlCommand("Script Manager", ScriptStop, "Scan table")

sleep(500)
Waitfor($cameraverticalquadrant = "middle" and $camerahorizontalquadrant = "middle",1000)

ControlCommand("Script Manager", ScriptStop, "Scan table")
sleep(2000)
#Step 6

ControlCommand("Camera", CameraDisableTraacking)

#step 7
ControlCommand("Auto Position 2", AutoPositionFrame, "Object pickup", 25,3,5)
sleep(4000)
Servo(d0,105)
sleep(2000)

ControlCommand("Auto Position", AutoPositionFrame, "Hand to me", 25,3,3,)
ControlCommand("Camera", CameraColorTrackingdisable, "red")

sleep(4000)
servo(d0,50)
sleep(3000)
ControlCommand("Auto Position", AutoPositionFrame, "Rest", 25,3,4,)


PRO
Synthiam
#27  

The middle of the frame will always be the same position. The idea of having the robot center the object in the middle of the camera. From that point, the robot arm now simply needs to use an Auto Position to move to a position that would be the center of the frame.

Perhaps your AutoPosition is also moving the base? It only needs to move the arm servos to guide to the center of the camera frame.

#28  

The Auto Position only moves 2 servos in the arm, the base servo and the servo that the camera is on is run by the camera tracking. I have tried several different Auto Positions but if the object is not within the ARC of that AP it can't keep the object in the centre even though the camera and base servos are still trying to keep it there.

PRO
Synthiam
#29  

Disable camera tracking while the Auto Position bends down to pick it up.

Once the object is in the center of the camera, it no longer needs to track. It simply needs to execute an Auto Position to pick up an object that "should be where the center is"

#30  

Here's a short video of the arm searching for and picking up an object. It's working pretty good but as I explain in the video if the object is outside of the ARC that the Auto Position is set to go to, then it will miss it. Is it possible to set the grid lines of the camera in a Script so they adjust automatically to the settings I need? Is it possible to the $CameraObjectCenterY and the $CameraObjectCenterX variables to direct the claw to the object once it has been found?

PRO
Synthiam
#31  

As you can see from your video, there is no need to continue scanning for the object. When it finds the object, disable the servo Tracking. Then the Auto Position merely needs to bend down to pick up what is in the center.

You do not want to adjust the grid lines - I can make a ControlCommand() for that, but that's not what you need to do. Once you have too much of the object on the camera, the tracking is useless because it fills up most of the screen and only parts of the color are detected due to shadows.

When the AutoPosition begins heading down to pick up the object, disable servo Tracking.

#32  

Thanks for all your help DJ. Just tried that didn't make a difference. I'll work on it again tomorrow