Here's my input.
1. I agree with some of the others, that people tend to work better when they feel that they are responsible for a certain part of the robot. Not only robot, but sponsorships, volunteer, community outreach. When team members feel like they don't mean much, they tend to slack off. kinda like communism.
2. Work with the person's interest. Why put a non programmer on the programming team? If someone is interested in building, then he/she should build, not do something else. Same thing for chairman's, spirit, PR, etc.
3. Break people up. If you notice that two people are starting to joke around, break them up. Large groups do have fun, but people are more focused in smaller groups. So, get people working together, but in smaller groups.
4. Maybe the inevitable, sometimes, it is necessary to ask people to leave. There has been many a times, when the programmers have work, and the builders show up and goof off. Thus, if someone is not needed, or if someone's not taking the initiative to work, ask them to leave. It may be harsh, but if it's necessary, it's got to be done.