Welcome to Synthiam!

Program robots using technologies created from industry experts. ARC is our free-to-use robot programming software that makes features like vision recognition, navigation and artificial intelligence easy.

Get Started
Asked — Edited
Resolved Resolved by thetechguru!

Polar Coordinate Steering

Thanks to everyone for helping me get up and going! I've learned how to connect hardware, download projects and learning ez scripting. I have never been one to reinvent the wheel so here goes....

I am looking to build a robot that will steer using polar coordinates. Is there an easy way to do this?

Castle

#2  
ARC has built in support for the sure dc-ss503 I2C compass sensor. It populates a variable called $direction which you can use in scripts.

Alan
#3  
If you have an iPhone or iPod touch to spare that you can mount on your robot, you can also get an app called SensorStreamer that is supported by EZ-B and will also populate variables with compass direction and anything else the iPhone can sense (acceleration, gravity, GPS, etc....).

Alan
#4  
@Alan... I did a cursory google search for the dc-ss503 I2C compass sensor.... Couldn't find anyone who sells them... Do you have a link?

How does your iPhone connect to the ezb in order to stream position sensor data to the ezb? Serial? I2C? Or does it connect to ARC via your network? Just curious?
#5  
I think you guys are barking down the wrong tree. Instead of going forward and right (rectangular coordinates) to something from an angle and distance from a center point to another angle and distance from the same center point.
#6  
LOL... you mean barking "up" the wrong tree... So if it is not a compass or GPS then what type of direction finding are you looking for? I get what math your trying to use (I used to fly)... The ezb can also do advanced math... However, you will need to feed the ezb with this data in order for it to calculated and navigate. Doesn't matter if it is left, right angular or not, it can't navigate from point a to point b without some sort of positioning feedback... So what did you have in mind to attached to your robot to provide positioning?
#7  
Nice! Basically, I am looking to rotate an arm to an angle (this could be using a servo and rotating to an angle), then another servo attached to that servo would extend an arm out another angle. This would then define a point in space. I then want to navigate a rectangular expanding search. It is going to be indoors so I can't use GPS (I don't think).

Is this helping?
#8  
I missed part of your response about feedback. Good question. It is probably all going to be angular feedback from the servos. Eventually, if I can make this prototype work then it would be some kind of encoder feeding back on each angle.
#9  
@Richard R
here is one on eBay in from a UK seller http://www.ebay.com/itm/Dual-axis-Magnetic-Sensor-Module-UART-I-2-c-Interface-/230643656408

There are probably plenty of choices now that we have UART, but they would all require scripting just to get the data, where this one has a control built in.

For iPhone, it communicates over Wifi. You put the SensorStream app on it, and then in the Misc controls, add a iPhone Sensor Stream Server object, and it creates a bunch of variables for everything the iPhone can detect. I don't use it. I have asked DJ to please create an object for one of the many Android sensor stream type apps available, but it is low on his priority list (if on it at all). The developer of Sensor Stream doesn't make an Android version of the app, but there are half a dozen similar for Android.

@castlephelps Richard is right, your robot needs to have something to compare to in order to give a specific offset direction. the other way to do it is with encoders on your wheel motors so it always knows how far each wheel has spun and can calculate from there, but that is imperfect since wheels can slip on different surfaces. Compass is the easiest solution (GPS doesn't well work inside and doesn't give direction if you are moving at less than 1km/hour).
#10  
Oh... I was typing while you were answering.

Servos (other than 360 rotation servos) are easy because they move to specific positions. You can use relative servos or actions and frames to achieve what you want. Very easy to move to specific points in space using preprogrammed actions.

Alan
#11  
@Castlephelps... You can do this easily if you're ok with just "relative" position... A good quality servo can swing 90 degrees in either direction in 1 deg increments... For "absolute" position you will need something like a magnetic compass (maybe two, one for each arm) I think the one Alan mentioned would work... Either way, the ezb can do the math no problem...

@Alan, thanks for the link...
#12  
Definitely! I am looking for relative positioning. My robot is going to sit in the middle of the room, bolted down - I am not navigating across any surfaces. But I want the robot arm to be able to reach anywhere in the room - so I am looking as rotation and extension - probably with an arm with an elbow - all done with non 360 degree rotation servos.
#14  
So, imagine a stationary robot in the middle of the room. I want to eventually be able to have the arm with a camera to be able to search the entire room for an object and then pick up that object from the floor and put it on a shelf in the room. I want it to pick up my tools and put them away when I finish in the room basically...
I think that this will take polar coordinate positioning to have the arm travel in a search pattern covering the entire floor. When it finds a tool, it interrupts the search pattern, picks up the tool, puts it in a specific place on a shelf (this would take object recognition and then database look up) and then returns to where it was in the search and continues picking up tools and putting them away until the entire floor is covered.
#15  
I get what you are trying to do. Pointing in the direction of the functions that will get you there. Multiple auto-positions that are executed based on what the camera sees are going to be the solution.

@bhouston is working on a similar concept (on a smaller scale) so you might get some inspiration from this thread too: http://www.ez-robot.com/Community/Forum/Thread?threadId=6909

Alan
#16  
Interesting - I need to learn more about auto-positioning. The thread you provided is very inspirational. But I am thinking more about executing a search pattern with the camera on the end of the arm searching for objects and then picking them up and putting them away. I am considering using RFID tags on the tools for identification and put away location. It is the execution of the systematic search of the room with the arm a given distance from the floor over the entire floor looking for tools with RFID tags that I am currently interested in.
#17  
I have been working on something like this. So far I have the arm so it will scan the area around it and when it see's a red object, it stops, picks up the object and hands it to me. I have not played with "object" recognition yet but that's next. I also want to play with QR codes on objects. With QR codes it should be possible for the robot to identify an object and do something specific with it (maybe).
Anyway, here's the code I/we have come up with so far. If anyone has any comments on how to improve it, I am all ears.

Code:


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

servo(D0,55)
servospeed(D0,3)
sleep(2000)



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


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

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

sleep(500)
ControlCommand("Camera", CameraServoTrackEnable)
ControlCommand("Camera", CameraColorTracking, "red")

Waitfor($cameraverticalquadrant = "middle" and $camerahorizontalquadrant = "middle",1000)
Sayezb("I see a red object")
ControlCommand("Script Manager", ScriptStop, "Scan table")
sleep(1000)

ControlCommand("Auto Position 2", AutoPositionFrame, "object pick up 1", 25,7,7)

#ControlCommand("Auto Position 2", AutoPositionFrame, "Object pickup", 50,10,10)
#ControlCommand("Camera", CameraServoTrackDisable)

ControlCommand("Camera", CameraColorTracking, "red")
Waitfor($cameraverticalquadrant = "middle" and $camerahorizontalquadrant = "middle",1000)
sleep(1500)
ControlCommand("Auto Position 2", AutoPositionFrame, "Object pickup", 50,10,10)

sleep(5000)
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)
Sayezb("i am amazing")
ControlCommand("Auto Position", AutoPositionFrame, "Rest", 25,3,4,)
#18  
QR codes are an interesting idea / but the tool has to be lying QR up - with RFID that would not be an issue / the trick would be to scan the floor in a pattern until an RFID is detected, query the DB for any pick up information an darling space and the pick up and park and then return to continue the search...
#19  
I was hoping for some more feedback but I guess I will close this thread / study someone and them ask again...