You are the RC Car controller with the Kinect/RC project
- Posted: Oct 05, 2012 at 6:00 AM
- 7,042 Views
- 2 Comments
Loading User Information from Channel 9
Something went wrong getting user information from Channel 9
Loading User Information from MSDN
Something went wrong getting user information from MSDN
Loading Visual Studio Achievements
Something went wrong getting the Visual Studio Achievements
Devin reached out to us about his project when we asked for help finding Kinect for Windows SDK based projects, Help! Let us know about your Windows and Kinect for Windows SDK Projects... and I thought this so cool that I'm also stealing it... err... um... I mean... um... highlighting it here too! Come on, a RC car with a wireless web cam, coded with Unity, Prism and the Kinect? Talk about a Hardware Friday post!
This is the code for my Master Project. It allows you to control a remote control car with the Microsoft Kinect.
The program was written in C# using VS2010 Ultimate. You should be able to use any other version of VS2010, only the Modeling project probably won't load. I haven't tried loading this in Visual C# Express, but I don't see why it won't work.
In order to use the software, you need to have a remote control car that the program is able to interface to. To do this you must use a hardware solution that interfaces between the remote control car's transmitter and the computer. You must then create a plugin DLL the Kinect/RC Car program then uses to communicate with your hardware solution. You can look at my solution in the KinectRC.CarControllerService project which communicates with an mbed microcontroller prototype board which in turn controls an MCP4261.
To make your own plugin DLL:
1. Create a class library project
2. Reference the KinectRCCar.Infrastructure project
3. Reference the Unity IOC Library and the PRISM library from NuGet or download from their respective websites.
4. Create a class that implements the ICarControllerService interface.
5. Write the code in this class that communicates with your hardware solution.
6. Create a Module class that inherits from the PRISM IModule interface.
7. Register your CarControllerService in the Initilization method.
8. Add the following attribute above the class declaration in your Module class: [Module(ModuleName = "CarControllerModule")]
9. Build the project then place the DLL in the Modules folder in the KinectRCCar build folder.
10. Remove the current CarControllerService DLL from the Modules folder.
11. Run the program.
Additional information on how the program was written is in the Project Report...
"Additional information?" I'd say so! We're talking a 66 page PDF!
The objective of this project is to create a program (herein after called Kinect/RC) that allows a user to easily control a remote control car using a natural user interface (NUI), specifically, the Microsoft Kinect. To accomplish this project, various goals need to be met. Video needs to be provided from a camera mounted on the remote control car to allow the user to view the direction in which the car is headed. This is a more natural and easier way to control the car than watching the car directly. Additionally, the program needs to provide telemetry data such as direction and velocity of the car to confirm to the user that their intended hand motions are being recognized the way they wish (Hands in a position that expresses turning left should show that a left turn is being sent to the remote control car). The program should also display the skeletal data that is determined by the Kinect so the user is able to verify they are being recognized correctly. Thus, for example, the user can correct their positioning should part of their body be cut off from the view of the Kinect. The Kinect has an adjustable elevation of ±27°  so the program needs to provide the user the ability to adjust this elevation. This adjustment will allow the placement of the Kinect at any height within its tolerance of 2 ft. to 6 ft.  above the floor. The project also must be written using design patterns and other object-oriented principles to develop a modular and easily maintainable program.
Oh and all the source is available too!
Now check out the video to see it in action.
See, awesome isn't it?