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

Harnessing the power of ARC Pro, your robot can be more than just a simple automated machine.

#17  

Thanks DJ, Ok Ya the camera is moving so I will set it up with the relative servo tracking disabled. I guess now I will need a script to have the camera / arm scan for an object and once detected, move the claw into position to pick it up. Is that how I should proceed?

PRO
Synthiam
#18  

If you are to maintain the camera's mounting to the end of the claw, then Relative servo will not apply to you. Relative servo is for stationary cameras.

Assuming the object that you are picking up is on the table, what you can do is a script that does something like this...



Step 1
Move to highest looking down position. So the arm is up high and the claw (camera) is looking at the table. Use an  AutoPosition Action to move the claw into this position. This will assume the object that you are going to place on the table is within the camera view...

Step 2
Wait for the camera to detect an object
WaitFor($CameraIsTracking)

Step 3
Wait for the arm to move the camera into the center of the quadrants
WaitFor($CameraVerticalQuadrant = "Middle" AND $CameraHorizontalQuadrant = "Middle")

Step 4
Disable the camera tracking

Step 5
Launch an  AutoPosition Action which bends the arm down to what would be the center of screen with the claw open, close the claw, pickup the object, bring it to the viewer and say "look i'm amazing":)


Again, the above logic assumes the item that you are placing on the table is within the camera view. If your goal is to place the object anywhere on the table, then a looping script to rotate the base would be needed, such as...



Step 1
Move to highest looking down position. So the arm is up high and the claw (camera) is looking at the table. Use an  AutoPosition Action to move the claw into this position. *Note: In this version, move the base servo all the way to the LEFT because we will scan across the table looking down.

Step 2
Enable Camera servo Tracking with the ControlCommand()

Step 3
Sleep(1000) to ensure the camera has stabilized and moved into position

Step 4
If ($CAmeraIsTracking = 1) 
  goto Step 5
else
 Disable Camera servo Tracking with ControlCommand()
 Rotate Base a few degrees i.e. ServoUp(d0, 10) 
 Goto Step 2
endif

Step 5
Wait for the arm to move the camera into the center of the quadrants
WaitFor($CameraVerticalQuadrant = "Middle" AND $CameraHorizontalQuadrant = "Middle")

Step 6
Disable the camera tracking

Step 7
Launch an  AutoPosition Action which bends the arm down to what would be the center of screen with the claw open, close the claw, pickup the object, bring it to the viewer and say "look i'm amazing":)


#19  

Thanks DJ, You make it sound so EZ. I'll work on the scripting to do that. Everyone standby, you know I'm gonna need help.

PRO
Synthiam
#20  

Anytime:) Read what I wrote again because I just edited it with a Sleep() and example of using ServoUp() to rotate the servo.

The current WaitFor() command will wait for ever... I have added a new command to be in the next release of ARC which will accept a TimeOut parameter. The new WaitFor() with timeout parameter will be helpful to you. I will release it this evening once I have ran tests at back at the office.

#21  

This is giving me some great ideas for a modification of my Roli with EZ bits I already have on order.

Eventually what I want is for Roli to wander around and pick up the cat's toys and when it has collected a few, bring them to me. I have been trying to work out how to do it by just extending one of the arms, but now I am thinking it might be better to put an arm on top where the pan/tilt camera is and putting the camera on the end of the arm.

Hmmmm.......

PRO
Synthiam
#22  

Alan, with Roi I would recommend keeping the camera on the neck. I recommend using Relative servo Tracking for picking up objects. This is because you will receive accurate co-ordinates of the object's location - which can be translated into servo positions for the arm to reach out and grab the object.

When possible, I prefer to use Relative servo Tracking

With BHoustons configuration, that isn't possible because the camera is not stationary.

#23  

The issue I am currently having is that as Roli approaches an o ject, I need to keep moving the camera position to keep the object in view. I expect in either case my scripting wilk be quite complex as I want to switch from moving Roli to moving the arm as I close on the object, but thought putting the camera on the arm, and having it ride low and in front of Roli might simplify it.

I'll probably try both ways. I do think the pan/tilt gives Roli a cute face and some personality I would lose in the other configuration.

I'll stop hijacking this thread for now and start my own if I need help or to show what I have done after the parts arrive and I have some time to work on it.

Ala

#24  

Update on this project: I have the arm "scanning" the table for a red object and once it finds the object it stops scanning and centers the object in the middle of the camera frame. Thanks DJ for the script outline for that. My challenge now is to come up with a way to direct the claw to the center of the frame to pick up the object. If I use an auto position, It will of course go to that position but that may not be the middle of the frame. I'm thinking I need to use the some sort of variable based on the middle of the frame to move the claw into position but not sure how to do that or if that's the way to accomplish that. Any thoughts?