banner logo
Updates Blog Support Contact Links
Programming JdiWeb JdiMOO JdiBoy JdiMail JdiMOOpp NetCheck Tutorials
Gaming AVR Othello

Archive for January, 2009

Robot Project Update

Wednesday, January 28th, 2009

I haven’t forgotten my robot project I mentioned a while back. It’s still on, and I thought I’d take this opportunity to talk about it in more detail.

First, a review. For my senior project, I have to work in a team to design and create something involving hardware and software. There is a fairly tight budget, and very very limited time. After much discussion, my partner and I decided to create swarming robots. We decided to do so with RC cars and wireless routers. More on why latter. I talked a while ago about some of that, but some final plans are being set now.

So, basically, we are going to have 4 RC cars that have wireless routers inside, along with some sensors and they are going to talk to each other and work together. It took us a while, but we determined that we are going to have them act as a convoy, following a lead car around in some course. That could be a pre-programmed thing, or random, or even something manual. The lead car will send out it’s change in location frequenly, and the other cars will recieve it, and determine how to follow it. If one gets kicked out of line, it can let the others know, and they can stop and let it get back in place.

We are doing all of this though several different subsystems. First, our car is a simple, 5 function car that can go foward, back, and turn left and right, rather much like a real car, but without variable speed or turning radii. The control system runs though a simple decoding chip that we found has output for these 4 functions, and, if we override the chip, then the car won’t know the difference and drive how we tell it to.

Secondly, we have a whole sensor system. There’s an accelerometer to use to calculate distance traveled, as well as a digital compass that will tell us in what direction we are facing. With those two bits of info, finding a relitive location should be easy. All that information will get fed into a small microcontroller that will do some pre-processing and feed it to the router via a serial interface.

Finally, there’s the router. Linksys WRT54g routers serve as the brains of the car. They where cheep, and had wireless, and could run our own code. That’s all we needed. Everything else was expensive and didn’t have wireless. They have two serial ports (not rs232 like what most people think of, but they can be converted to that), as well as plenty of GPIO pins, usually used for the LEDs on front, but here used for the car control. The router will calcualte it’s current location and where it needs to go, then how to get there and will do it. A constant stream of updates adjust how to drive.

We figure that the robots could then drive around by themselves, or we could take the controls of the lead car and drive it and have the others follow, or we could put the lead car in a backpack and walk around campus with 3 other cars following our heels like bizarre dogs ;)

All this has to be done rather quickly, in a few months, so I am going to be very busy.

On a side note, I saw an article about AI’s earlier. Apparently they managed to create a fairly good one for a robot reciently, even recognizing natural language (IT”S POSSIBLE!) but they said that they needed some gernal way to store memories. All I have to say is LOOK HERE! It also said that the human brain associates “airplane” closer to “train” than to something like “boat”, suggesting some kind of associatve mapping like my AI project. Hurray for comming up with something like this completly independly!

Computer Limitations

Monday, January 26th, 2009

Continuing on the vein of AIs and computers, lets take a look at some precautions. Last time I said that we do need to find some kind of ethic in regards to how we as people treat AIs. But, being realistic, we also need to find some way to prevent some of the problems that show up in sci-fi stories.

Many stories assume that, left to their own devices, an AI would grow too inteligent and turn on it’s maker. We don’t want another HAL, Skynet, or what happened in the movie version of I, Robot (which, I will caution you, is not how the book goes). Running with this, we need to establish right and wrong and what the AI can do. As a people, we tend to view some things as bad, and some as good. Killing someone is bad, and helping someone is good. The specifics break down in various cultures, but there there is still an idea of what is right and wrong embedded in humans. Computers do not have this, and, thus, we need to program it.

The usual way would be to use Asimov’s 3 laws of robotics. Briefly, they say that: 1) A robot cannot knowingly harm a human, or, though inaction, allow a human to come to harm, 2) A robot must obey orders given by a human, unless that order would conflict with the first law, and 3) A robot must protect it’s own existence, except where this would conflict with the first 2 laws.

Asimov wrote tons of books centered around robots, all trying to find flaws with them. Some versions had robots caught in a loop when 2 laws conflicted. Some pushed the limits of what the laws could mean. Some developed contridictions where, no matter what the robot did (or did not do), it would break one of the laws. On the surface, they are fine. We don’t want a robot harming us. But that second clause, about inaction, can mean that the robots need to save humanity by taking over. This lead, at one point, to a zeroth law, that placed Humanity over that of the human of the first law. If that was the case, then not only could they take over, but they could do so forcefully. And without the inaction clause, robots could just stand by and watch you be killed despite the fact that it could help. Or, worse, allow some accident to happen because it didn’t care enough to warn anyone.

So his three laws are insufficient. They are a good start, but they might push things too far in the not-so-helpful direction. If we assume no hardcoded rules, then they would only be driven to do what they are programmed to do. But, again, robots could take it too far and assume that that space mission they are to assist with is more important than the people that are to conduct it.

What would be needed is to add a sense of caring and respect. If the AI cares and respects humans, then there won’t be an issue. When given an order to kill, it won’t, because it knows that will harm humans. When faced with an accident waiting to happen, it steps in to fix it to keep people safe. When seeing people fighting people, it would offer help, but respect refusals.

But that’s not quite possible, either. So, maybe, if we take the 3 laws and adjust them somewhat. Lets put the Action clause of the first law as immutable, followed by the second law, followed by the Inaction clause of the first law, followed by the third law. This would mean that the robot would still try to help as much as possible, but would be prevented by a direct order to the contrary. It isn’t perfect, but it allows people to refuse help. The catch is that a robot could be ordered to stand by and watch. But, I suppose that would be more like turning off the alarm before murdering. So don’t use robots as body guards.

But on the topic of computer rights, what right do we have to put an AI’s existance below that of our own? By the three laws (even the revised ones here), someone could order a robot to destroy itself, or it would to save someone. It would have to be willing to. That makes all the robots very brave and courageous, but could also be seen as short circuiting free will. What do you think? Are the 3 laws (orginal, or these revised ones) enough, too much, bad, good? Is hard coding brave and courageous behavior limiting the AI’s free will?

Computer Rights

Thursday, January 22nd, 2009

In continuation of some of the previous posts, lets say for a minute that this AI project works out and we actually create an AI, that I will here after refer to as Joshua. It is now a learning AI that is apparently intelligent by the methods set forth by computer scientists, such as the Turing Test. Something that grand is unlikely, but lets say for a minute that it happens. Then what?

Lets start with what it means to be intelligent. Wikipedia says that intelligence is “the capacities to reason, to plan, to solve problems, to think abstractly, to comprehend ideas, to use language, and to learn.” All of those points are things that are goals of AI design. We want to create an AI to solve abstract problems quickly and easily for us. We want to use them as tools. But ability to learn and comprehend and such usually carry with it some rights or at least respect. We praise animals when they show intelligence. Think how smart we see dogs and cats. They might be viewed as less than humans, but they are more than ants or tosters, even more than our computers. So, obviously, an intelligent program should be treated at least as well as a pet.

But how smart is our program? We see that it is at least intelligent. But there is another concept that frequently shows up in the context of AIs. Sentience, according to Wikipedi, means having “will, desire, consciousness, ethics, personality, intelligence, insight, and so on. Sentience is being used in this context to describe an essential human property that brings all these other qualities with it. An entity that it is “sentient” will be treated as completely human character, with similar rights, capabilities and desires as any other character.”

By the time that we reach the point that we are intelligent enough to solve the kins of problems that we want, we might have accidentally added these other qualities. And if so, does that mean that our program deserves the same rights as people? Did our tool suddenly become out of our control, even if it doesn’t have the homicide tendencies of the famous AI HAL 9000.

This idea of how to treat intelligent and sentient computers has been batted around for a long while. Asimov created his 3 Laws of Robotics to govern how the computers treated people. This would protect the people from the robots. HAL 9000 put the value of the mission above all else, and decided that the human crew was unnecessary and where actually a hindrance. The crew had to disable HAL to save themselves. WOPR from WarGames thought World War III was a game to win and nearly caused the real thing, until they taught it futility and how it couldn’t win. In Prey, swarms of nanobots worked mearly to preserve themselves, but saw humans as containing them and started killing them. As a culture, we tend to fear what the AIs will do to us. But what can we do to them?

How would a program feel about being turned off? How about being wiped? How about being used for it’s original purpose? We created  the program and we could take the God approach and say that we can do whatever we want to what we created. But that goes counter with our sense of ethics. We can’t really have a computer always be active to run the AI, so it is necessary to be able to shut the AI down from time to time, but it would almost be like putting a person into a coma, where they have no control over if they wake back up. As we cannot tell what will happen with the AI once it gets going, there are possibilities where we would have to reset it, and reprogram it, like when HAL went nuts. But do we really have that right? If we had the technology, would we wipe the memory of even the worse criminals on the grounds that they are out of line?

I know I’ve asked a lot of questions and probably brought up more, but I have no real answers. It’s a hairy issue, and I’d like to hear your input. How do you think we should treat intelligent programs? What kind of rights do they deserve?

Deep Thought

Tuesday, January 20th, 2009

If you’ve read the past few posts, and some of the comments I’ve made on them, then you know that this AI idea is growing in popularity in interest. Therefore, a Wiki has been setup to help keep track of the project. Project updates will be posted there, with some overflow to this blog, but don’t expect too much. Maybe some more musings like the past 2 posts.

We decided to call the AI Joshua, after the AI in the 1983 movie WarGames. It is also normal enough of a name that you wouldn’t feel weird talking to it… if we get that far and we are that awesome. The actual project name is called Deep Thought, after the supercomputer that brought us The Answer to the Ultimate Question of Life the Universe and Everything. That, and the system is mostly focused on how to store memories and such. The idea would be that Deep Thought, as the memory module, could be used in any AI that would want to, but we would call our AI (as we’d have to develop that, too) Joshua.

So, without further ado, I give you the Wiki! Alright, I admit it, it’s not impressive. In fact, you’ve probably already read all of it. But so what? It’s a work in progress. With all you interested people, especially those already involved, there shoudl be much more to add.

With school started and all that entails, I don’t know how much I can contribute to the actual coding of an AI. However, I will definatly do what I can, including throwing in more ideas, guiding things, and programming where I can. But I can’t do this by myself. So get going!

AI Data Issues

Friday, January 16th, 2009

Well, I got thinking again about AI designs and issues. As I mentioned in the last post, the major issue I see with designing a good AI is how to store and represent concepts that are inherent in our own understanding. The problem is that no matter how we store the data, it doesn’t have real meaning to the computer.

Take, for example, a car. Anyone can hear the word, see the word, or the object of the word, and immidiatly know what it’s refering to. You get the idea of a vehicle with 4 wheels, room for normally 5 people, able to drive on a road, and so forth. You know how it sounds, what it does, and lots of other information about what a car is. Images flash through your head, and other emotions.

But what can the computer know. It can store pictures, and to some extent, identify what is in them (which happens to be another AI system that does that), but it doesn’t know what a car is anymore than the parameters it takes to find one in a picture. The computer can store words, but doesn’t know what they are. And if you card code some so it can recognize the words, it doesn’t know what they mean. The string “car” isn’t much different than “sock” to the computer. They won’t be confused, but as far as meaning, they are equlivant.

So how can we add some sense of understanding? He’s what I think can happen. I will add a disclaimer, in that I have no real experience with AIs, and only know a little from movies, Wikipedia, and my own drawn out musings. We can approximate our memory recollection process by creating a web of interconnecting concepts. Each concept would be represented by a word, a deffinition, and weighted links to other concepts. So when the computer comes across the word “car”it would see links to things like “wheel”, “drive”, “transportation”, “road”, and to lesser extents thinks like “company”, “new”, “mirror” and so forth. The idea being that words that most closly relate to the given word will have a higher priority in the list and can be found faster. This also gives the computer some idea of if the linked concept is relevant, or even necessary for it to look down.

Note that never in this process would the computer actually know what a “car” is, but it would know that it is strongly related to the words “transportation” “wheel” and “drive”. With this information, the computer could reasonably construct some meaning out of the words.

The computer would be coded to parse a sentence, and determine a word’s part of speech, and determine the conjugation of verbs (so that “drive” “driving” “drives” and such aren’t separate concepts). Some common word would also be coded, like “a” and “the” and “of” as to how to deal with them, as they are difficult to understand and define, and they are so common, it would be difficult for the computer to handle them like other words. It could then take a sentence and determine some approximate meaning of various words. And appropriate response could then be made by dredging the map again.

The map would be created initially by feeding the program the dictionary, or at least some subset of it. Taking the definitions, it would be able to determine the parts of speech for each word, and include it’s definition. The definition would also be a string of words that would need to be handled, but if a word comes up, the program can parse the definition for a meaning of a single word, giving a clearer understanding, especially with the other words that relate to it. Some links would be created in this process, especially those related to the definition. But some of the weights and such would need to be refined latter, through further reading material.

I think that creating a useable memory map like this would lay the ground work for more complex memory systems when they are developed. I don’t even know if it is possible to programatically parse a sentence reliably yet. But if they can teach 1st graders how to, surely we can program it. At least for simple things. Add some concept of curiosity, like wanting to fill in gaps in the map by asking questions, and things really get moving.

What are your thoughts? How can we represent and store concepts for a computer to understand? How would you do it? Can we do it? Should we do it?