VexBot 360 Synchronous Driver

This is a module I created in EasyC that prevents the wheels from losing sync with one another - its explained a little more in the video. Once we add some acceleration & quick-stopping features to our motor module we plan on using this in autonomous mode with our node based AI system.

Tell me what you think: (the robot you see in the video is just a demo-bot, our real robot is over at a friends house.) It starts working a lot better near the end of the video.

http://www.youtube.com/watch?v=Qq-qDmSjEpQ

Looks impressive. :slight_smile: Especially for a rookie team. Also, I’d like to hear more about this “node based AI system”.

Ditto.

Is it something like a bitmap of the field, and then the robot decides where to go during auton? Or does it detect where obstacles are? Can it learn based on previous performance?

AI is something I’d like to explore… :slight_smile:

//Andrew

I’d like to know more about this as well. I hope you didn’t mean “mode” instead of “node”. This sounds a lot more interesting.

The great thing about a holonomic drive is that you can move in any direction at any given point in time - regardless on how you got there. Mathematically speaking, it is impossible to determine relativley how much you’ve both rotated and translated where you are given the distance of all four wheels on a holonomic drive. However, we figure that if you can keep your robot going where you need it to, you can assume its location given the wheels do not skid. With the synchronous driver we hope to achieve a great deal of accuracy when it comes to moving or rotating our robot.

If we can assume are relative location on the playing field, we can setup a virtual node-based map much like the AI some FPS\RPG games use. We plan on using a series of nodes, each describing a critical entity on the playing field. Once the robot travels within a particular distance of these logic nodes, the robot will hand over exeuction to one of the routines of the node itself (the Node is a class) - passing information such as where the robot is. In the node’s constructor, the user can pass other information needed for the node to effectivley take control and perform the desired task (such as how the robot needs to be orientated before dropping pawns into the goals.) Obviously, there are different types and nodes, the actual Node object would be an abstract class. Then you would have GoalNode, which inherits Node; or PawnSourceNode, etc…

We could use a our bitmap module to describe a collision map to our robot as well and, if need be, we could always take it a step further and have the robot identify and add entity’s to its virtual map. However I don’t believe easyc gives us any sort of interface to non-volatile memory; so learning from playing experiences isn’t possible as far as I know. However, like I said, the robot can learn things during the autonomous round and insert its newfound entities into the virtual world as logic nodes.

Those who are familiar with path-finding will also be aware that we can assign each node a value - the value of each node is determined by things such as time (so time remaining in autonomous mode), how many pawns are located at a particular source, and how many pawns the robot is currently carrying. The node with the greatest value is the node that the robot begins traveling towards. For example, if there are 5 seconds left, the robot will assign all nodes that involve picking up pawns a value of 0 (because it probably wont make it back in time). In this case, the closest goals will have the greatest values and the robot will begin traveling there.

This is not going to be easy to implement - on a hardware perspective - the logic shouldn’t be too difficult to implement. Fine tuneing it may prove a bit of a challenge though.

This is just something I thought up, whether or not it will actually work I am unsure.

Wow. Just wow. That sounds really, really cool… Let us know when you get it working! :slight_smile: (And please upload your code when you’re done…)

//Andrew

Thanks :slight_smile:

I probably wont see this code participate in any official vex challenges (we started our robotics club the year I am graduating - which is really crap timing because its is something I am very interested in) but I will definitely see it work in the local competitions if I can finish it in time.