Let's Make Robots!

Robotic Arm Control

I have built a robotic arm. You can see it in the robot section. It is called IPTUPED.

Now that it is built i can only prgram it to pick up something that is in the same time. I need a new control method.

Due to the fact that i am pretty new to this i need some ideas. Basically i am asking you guys if you can help me find a good method. I have seen wii and arduino, nd rc. I need a good tutorial online somewhere that can help me control it. So far i have only been able to find a method that can control 2 servos. I am using 4 and maybe 5 in the future. Thanks for any help.

 

By the way. Can you view the videos, i cant on this browser???

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Jaryd's picture

sorry this is edited*** This is wat i downloaded but it didnt seem to work right, it kind of just shook around.

----------------------------------------------------------------------------------------------

symbol Current1=b1
symbol Current2=b2
symbol current3=b3
symbol requested1=b4
symbol requested2=b5
symbol requested3=b6

''*****  From now on anytime we say "current1" it is the same as saying "b1"  ****
''*****  From now on anytime we say "requested3" it is the same as saying "b6" ****
''*****                  etc.        etc.           etc.                       *****

current1=150
current2=150
current3=150
requested1=150
requested2=150
requested3=150
servo 0,current1
servo 1,current2
servo 2,current3
pause 1000

''***** now all the servo numbers are centered and the servos themselves are centered  *****

Main: 
             
Requested1= 150 'i am requesting the servos all to go to the center position
Requested2= 150 ''You are correct --but they are already centered, it will basically skip this
Requested3= 150
Gosub Moveservos
Requested1=100
requested2=100 'i am reuesting servos to move to 100 position
requested3=100
gosub Moveservos
requested1=200
requested2=200 ' i am reuqesting servos to move to 200  position
requested3=200
gosub Moveservos

goto Main


Moveservos:

 

If Requested1>Current1 then let Current1=Current1+1
endif
if Requested1<current1 then let current1=current1-1
endif
if Requested2>current2 then let current2=current2+1
endif
if Requested2<current2 then let current2=current2-1
endif
if Requested3>current2 then let current2=current2+1
endif
if Requested3<current2 then let current2=current2-1
endif

servo 0,current1
servo 1,current2
servo 2,current3

pause 100

'loop until current1=Requested1 and current2=Requested2 and current3=Requested3

return

Chris the Carpenter's picture

yeah, I thought you did. :)

--Gotta be sure so we can get the basics outta the way.

Let me know if it compiles and works --It did on my end.

Shorten the pause 100 to speed it up --lengthen to slow it down.

If you want to try to go with bigger steps (current=current+2 or +3 etc.) we gotta change some stuff --if you try this and it doesn't work, don't worry --I know how to fix it.

Just lemme know if you get it going.

You owe me a video when it does.

 

Jaryd's picture
Thank you so much I really appreciate it... Btw I knew the whole comment part and I will be back in a couple minutes to let you know
Chris the Carpenter's picture

Alright --I need a refresher in picaxe Basic --I missed a bunch of endif's and a bunch of let's too. I have fixed it all now and it seems to compile. It will probably work right out of the box... I hope.

HERE is the file to download. Don't click the big button when you get there, it is an ad. Look around and download "Servo Move Sample.bas".

--or--

Cut and paste from here.

symbol Current1=b1
symbol Current2=b2
symbol current3=b3
symbol requested1=b4
symbol requested2=b5
symbol requested3=b6

''*****  From now on anytime we say "current1" it is the same as saying "b1"  ****
''*****  From now on anytime we say "requested3" it is the same as saying "b6" ****
''*****                  etc.        etc.           etc.                       *****

current1=150
current2=150
current3=150
requested1=150
requested2=150
requested3=150

servo 0,current1
servo 1,current2
servo 2,current3

pause 1000

''***** now all the servo numbers are centered and the servos themselves are centered  *****

Main: 
             
Requested1= 150 'i am requesting the servos all to go to the center position
Requested2= 150 ''You are correct --but they are already centered, it will basically skip this
Requested3= 150
Gosub Moveservos
Requested1=100
requested2=100 'i am reuesting servos to move to 100 position
requested3=100
gosub Moveservos
requested1=200
requested2=200 ' i am reuqesting servos to move to 200  position
requested3=200
gosub Moveservos

goto Main


Moveservos:

Do

If Requested1>Current1 then let Current1=Current1+1
endif
if Requested1<current1 then let current1=current1-1
endif
if Requested2>current2 then let current2=current2+1
endif
if Requested2<current2 then let current2=current2-1
endif
if Requested3>current2 then let current2=current2+1
endif
if Requested3<current2 then let current2=current2-1
endif

servo 0,current1
servo 1,current2
servo 2,current3

pause 100

loop until current1=Requested1 and current2=Requested2 and current3=Requested3

return

Chris the Carpenter's picture

A little more clean up and a little more explaining.

First off, all the comments (anything after a ' ) is just a comment for yourself --not the computer so you can write anything you want. The notes you have written all seem to be correct.  Tell you what, gimme an hour and I will write the code for you. --You have put in a lot of work already, lets just get this working.

Be right back.

Jaryd's picture

I Symbol Current1=b1
symbol Current2=b2
symbol current3=b3
symbol requested1=b4
symbol requested2=b5
symbol requested3=b6

Main:                
Requested1= 150 'i am requesting the servos all to go to the center position
Requested2= 150
Requested3= 150
Gosub Moveservos
Requested1=100
requested2=100 'i am reuesting servos to move to 100 position
requested3=100
gosub Moveservos
requested1=200
requested2=200 ' i am reuqesting servos to move to 200  position
requested3=200
gosub Moveservos
goto Main

Moveservos:

do

If b4>b1 then b1=b1+1 'if requested posititon is greater than current position then current should move +1

if b4<b1 then b1=b1-1 'if requested posititon is less than current position then current should move -1

if b5>b2 then b2=b2+1 'if requested posititon is greater than current position then current should move +1

if b5<b2 then b2=b2-1 'if requested posititon is less than current position then current should move -1

if b6>b3 then b3=b3+1 'if requested posititon is greater than current position then current should move +1

if b6<b3 then b3=b3-1 'if requested posititon less than current position then current should move -1

servo 0,current1

servo 1,current2

servo 2,current3

wait 2

loop until b1=b4 and b2=b5 and b3=b6 'when everything matches, we are where we want to go

return

 

this is what i think i should write but it doesnt work it says...

If b4>b1 then b1=b1+1 'if requested posititon is greater than current position then current should move +1

                          ^

                          ^

            b1 should be a label not a variable

what does that mean??????

Chris the Carpenter's picture

Yup. That is how you should start your program.

Jaryd's picture

I get the basics. So if i have...

symbolCurrent1=b1
symbolCurrent2=b2
symbolcurrent3=b3

....do i have

symbol requested1=b4
symbol requested2=b5
symbol requested3=b6

Chris the Carpenter's picture

I didn't know you were quite so new...

Current and Requested are not variables according to picaxe. You need to substitute say, b1,b2,b3 for current1,current2,current3 within the program or "declare" them at the start of your program. I think it is symbol Current1 = b1, Symbol Current2 = b2 etc. You will need to do this with variable you want to "name". The rest of the code I put in the post above was not really intended to work... It sorta needs to be cleaned up a bit. For instance, "pause a little to control speed" is not really a command. In addition, it has been a while since I have programmed in picaxe so for example, the do/loop until command might be set-up wrong and need a little cleaning up.

You will also need a main routine to "call" on the moveservos subroutine. The main could be like:

main:

requested1=whatever

requested2=whatever

requested3=whatever

gosub moveservos

requested1=whatever

requested2=whatever

requested3=whatever

gosub moveservos

requested1=whatever

requested2=whatever

requested3=whatever

gosub moveservos

goto main

 

--Something like that. You do get the whole concept here, right? Can you see in the "moveservos" loop how each servo gets "stepped" (one "click" at a time) until it matches the "requested" value? Also, do you get the whole "if all the currents = all the requested" thing? Let me know where you are stuck. Remember! All the commands you need are in the manual. How routines and subroutines work, do/loop commands, etc.

 

Jaryd's picture

Below is what i have. Like i said i am very new to prgramming but it doesnt recognized the Current 1 as a variable? Whate should i do??

 

 

 

Servo 0, 150
Servo 1, 150
Servo 2, 150
Servo 3, 150

Current1=150
Current2=150
current3=150
requested1=150
requested2=150
requested3=150

Moveservos:

do

If requested1>current1 then current1=current1+1

if requested1<current1 then current1=current1-1

if requested2>current2 then current2=current2+1

if requested2<current2 then current2=current2-1

if requested3>current3 then current3=current3+1

if requested3<current3 then current3=current3-1

servo 0,current1

servo 1,current2

servo 2,current3

pause a little to control overall speed

loop until current1=requested1 and current2=requested2 and current3=requested3 '<--when everything matches, we are where we want to go

return