Showing posts with label project. Show all posts
Showing posts with label project. Show all posts

Thursday, 17 November 2011

NXT Robots

So you know how I did a project on swarm robotics and I said I would have some video of it all working, well I forgot and deleted the codes. Rageragerage. The only thing I can find is a screen shot of some early development in my collision avoidance, shown below. The robots are the small boxes and the blue is the line of sight. Trails are on to show the movement path. The yellow one (only one moving) was going to hit the blue one so swerved violently to the right, where he saw he was about to hit the brown so swerved left, then corrected once seeing he had passed the blue robot.



Any who, I now have a summer research project working with Lego. That's right. My summer job is playing with Lego. Jelly? I thought so.



The Lego MindStorm NXT is a robot is a small computer that can support 4 input devices and 3 output devices. Included in our pack are 3 motors (outputs) and 2 touch sensors, 1 ultrasound sensor, and 1 colour sensor. The NXT also supports Bluetooth so I am considering making a controller using my Android. Woot! Here are some existing projects.

 Find and grab a ball
 Solve a Rubik's cube. Epic.
 Fire balls at target.
 Solve a Sudoku
Follow a path.

I am part of a group of 4 people looking at doing some project with these robots. We are looking to have 3 of them and have them interact in some way. The exact specifications of the project are really vague. But we are looking at a warehouse simulation with automated forklifts. Still undecided but this is sounding most likely. This is something that has been done before but not completely autonomous with multiple robots.

We are to program it in Java using LeJOS (Lego Java OS), which is fantastic because I love Java. But terrible because no one on my team has used it before. We will see how this goes.

Epic post about a great Android app coming out soon.

That's all for now.

Cheers,
Milk

Friday, 6 May 2011

C Four, miGame, Part 3

Got back from hospital. Turns out the stone was 8mm. But had it blasted and feeling fine now.

I have little to no memory of how to make a C program. Lol...



Because I am using my old code this is going to be a very very poor example of good programming. I've noticed so so many little tweeks I could make. Blarg I haven't even started and I'm disliking C again... Such a tedious language. Luckily the two methods I'm going to use from the old program are set up well enough that I won't need to change anything.



First step: Create a new file for AI code.
From what I can find anywhere it is the same as in Java. Just do it. Examples didn't have 'include' or some other way for it to tell what file it is coming from so that makes things a bit easier. Except every method



Second Step: Allow AI's in the program.
I'm sure there is a much better way to do this but I'm going to hard code in an array of size two with either an h or a c to determine if the player is computer or human. Then add a check in the main loop and if it is a 'c' then call the computer MakeMove method.



Crap it's taken me 30 minutes to get the compiler to work again... Completely forgot everything. Now that I that done I can actually write some code. Woo!



Third Step: Write some code.
Create the AI using recursion to find the best possible move and go there. This is the fun part. Each time the computer is to make a move it will create a copy of the board and make it choose the first column then make the opponent go in the first column and so on and so forth until that column is full, then it moves to the next column and alternatively fills that. As soon as a win is detected the number of empty spaces on the board is the amount of points that win is worth. Then it starts again but places the its first move in the second column and then opponent in the first and it in the first. And so on and so on. This sounds like terrible way to do this. But computers are fast.To those that do program I'm going to be using recursion and so this SHOULD involve minimal code on my part. Which is the plan.

Going to start this now. [Start timer] 201105061147
[Pause timer] 201105061316
[Back again] 201105061650

Wednesday, 4 May 2011

C Four, miGame, Part 2

I've noticed a lot of searches hitting my blog with my C Four program I made, here. So I'm going to go into a bit of depth about the game now. A lot of the searches say 'Program that proves Connect 4 is a draw'. This got me curious.


Wikipedia says "The game was solved mathematically by James D. Allen (Oct 1, 1988), and independently by Victor Allis (Oct 16, 1988). With perfect play, the first player can force a win by starting in the middle column. By starting in the two adjacent columns, the first player allows the second player to reach a draw; by starting with the four outer columns, the first player allows the second player to force a win."
It also has a couple links to freeware you can download that plays the perfect game. But I'd rather solve it myself.

Lulz


Initial thoughts: So we know the concept, get four in a row either diagonally, horizontally or vertically. The board is 7 long and 6 high. This means that we must use the middle column to get a diagonal or horizontal win. Also a diagonal or vertical win needs the two middle rows. As the board is filled row by row, it become immediately clear that middle board dominance is essential.

More lulz


Could do: I know how to model turn based games on a graph with nodes representing game state and then use logic to determine from what states a player can force a win. But that's boring and very time consuming to do by hand. See xkcd has done this for tic-tac-toe.

Will do: So what I'm going to do instead is alter my old version of C Four (get it? Connect Four but it's written in C so I called it C Four...) and create an AI that uses a depth first recursive search to find the optimum position for the next piece. I could have it build a graph at run time and then traverse the graph with each move made but computers are fast enough to handle what I'm trying to achieve here.
Basic: Make a program that looks at every possible move and picks the best one. 


What I will need:
Time. I'm back from University holidays and my memory is terrible so will have to go back and learn C.
Visual Studio or something similar to develop in. I'm posting at work so will download this to my flash drive and play with the idea from there.
Money. Not for this project but it's always good to have money, am I right?

Even more lulz


Akin to my original C Four program the game is going to be in ASCII. If I am able I will keep C Four as it is and simply add the option to verse a computer player or even watch a computer player verse another computer player. This is where the money is at.

[Connect Flour image. Sorry I lost this one. But it is funny]

If it works correctly we should see the two computer players play the exact same game every time. And hopefully player 1 will always win. That would be pretty cool.

I'm going back into hospital tomorrow for my kidney stones again, but workload from University has lessened so will work on it in my downtime.

Cheers,