<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JakeWare</id>
	<title>Mech - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JakeWare"/>
	<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php/Special:Contributions/JakeWare"/>
	<updated>2026-05-19T10:46:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17902</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17902"/>
		<updated>2010-03-19T02:03:38Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Electrical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
===Mechanical Goals===&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
===Software Goals===&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
===Video Summary===&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals, the code&#039;s final form needed to be in the form of a library that a future user can include and easily interface with.  As such, the download file below contains three files.  One is the main file that does little more than include the project code&#039;s header file and call one function in an infinite loop.  The second file is a header file that contains the necessary function definitions.  The third is the source code that contains all the code written for this project.  This includes the interrupt routines, communication, motor control, odometry, and other smaller support functions.&lt;br /&gt;
&lt;br /&gt;
Another goal of the software was to give the user access to three modes of control.  These include wheel speed, position in (x,y,theta), and velocity vector control.  Wheel speed control allows the user to directly specify each of the wheel speeds at a rate determined by their communication speed.  This is the mode of control that the Wiimote code uses.  (Also, for reference, it takes the current version of code 133ms of every second to decode these strings if they are being sent at 120Hz.)  Position control allows the user to specify the robots position in a global frame relative to its starting position.  Velocity vector control allows the user to give the robot a velocity vector stemming from the center of the front face that it must follow.&lt;br /&gt;
&lt;br /&gt;
All of these modes of control support wireless communication through the XBee wireless chip.  Furthermore, with 120Hz communication, and all else considered to be worst case scenario, this version of the code will only take about 30% of the available computation time.&lt;br /&gt;
&lt;br /&gt;
===Code Download===&lt;br /&gt;
&lt;br /&gt;
The fully documented code used in this project can be downloaded [[Media:Mobile_Robot_-_Code.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17901</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17901"/>
		<updated>2010-03-19T02:03:27Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Electrical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
===Mechanical Goals===&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
===Software Goals===&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
===Video Summary===&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals, the code&#039;s final form needed to be in the form of a library that a future user can include and easily interface with.  As such, the download file below contains three files.  One is the main file that does little more than include the project code&#039;s header file and call one function in an infinite loop.  The second file is a header file that contains the necessary function definitions.  The third is the source code that contains all the code written for this project.  This includes the interrupt routines, communication, motor control, odometry, and other smaller support functions.&lt;br /&gt;
&lt;br /&gt;
Another goal of the software was to give the user access to three modes of control.  These include wheel speed, position in (x,y,theta), and velocity vector control.  Wheel speed control allows the user to directly specify each of the wheel speeds at a rate determined by their communication speed.  This is the mode of control that the Wiimote code uses.  (Also, for reference, it takes the current version of code 133ms of every second to decode these strings if they are being sent at 120Hz.)  Position control allows the user to specify the robots position in a global frame relative to its starting position.  Velocity vector control allows the user to give the robot a velocity vector stemming from the center of the front face that it must follow.&lt;br /&gt;
&lt;br /&gt;
All of these modes of control support wireless communication through the XBee wireless chip.  Furthermore, with 120Hz communication, and all else considered to be worst case scenario, this version of the code will only take about 30% of the available computation time.&lt;br /&gt;
&lt;br /&gt;
===Code Download===&lt;br /&gt;
&lt;br /&gt;
The fully documented code used in this project can be downloaded [[Media:Mobile_Robot_-_Code.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17900</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17900"/>
		<updated>2010-03-19T02:03:08Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
===Mechanical Goals===&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
===Software Goals===&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
===Video Summary===&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals, the code&#039;s final form needed to be in the form of a library that a future user can include and easily interface with.  As such, the download file below contains three files.  One is the main file that does little more than include the project code&#039;s header file and call one function in an infinite loop.  The second file is a header file that contains the necessary function definitions.  The third is the source code that contains all the code written for this project.  This includes the interrupt routines, communication, motor control, odometry, and other smaller support functions.&lt;br /&gt;
&lt;br /&gt;
Another goal of the software was to give the user access to three modes of control.  These include wheel speed, position in (x,y,theta), and velocity vector control.  Wheel speed control allows the user to directly specify each of the wheel speeds at a rate determined by their communication speed.  This is the mode of control that the Wiimote code uses.  (Also, for reference, it takes the current version of code 133ms of every second to decode these strings if they are being sent at 120Hz.)  Position control allows the user to specify the robots position in a global frame relative to its starting position.  Velocity vector control allows the user to give the robot a velocity vector stemming from the center of the front face that it must follow.&lt;br /&gt;
&lt;br /&gt;
All of these modes of control support wireless communication through the XBee wireless chip.  Furthermore, with 120Hz communication, and all else considered to be worst case scenario, this version of the code will only take about 30% of the available computation time.&lt;br /&gt;
&lt;br /&gt;
===Code Download===&lt;br /&gt;
&lt;br /&gt;
The fully documented code used in this project can be downloaded [[Media:Mobile_Robot_-_Code.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17899</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17899"/>
		<updated>2010-03-19T02:02:40Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Mechanical Goals===&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
===Software Goals===&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Video Summary===&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals, the code&#039;s final form needed to be in the form of a library that a future user can include and easily interface with.  As such, the download file below contains three files.  One is the main file that does little more than include the project code&#039;s header file and call one function in an infinite loop.  The second file is a header file that contains the necessary function definitions.  The third is the source code that contains all the code written for this project.  This includes the interrupt routines, communication, motor control, odometry, and other smaller support functions.&lt;br /&gt;
&lt;br /&gt;
Another goal of the software was to give the user access to three modes of control.  These include wheel speed, position in (x,y,theta), and velocity vector control.  Wheel speed control allows the user to directly specify each of the wheel speeds at a rate determined by their communication speed.  This is the mode of control that the Wiimote code uses.  (Also, for reference, it takes the current version of code 133ms of every second to decode these strings if they are being sent at 120Hz.)  Position control allows the user to specify the robots position in a global frame relative to its starting position.  Velocity vector control allows the user to give the robot a velocity vector stemming from the center of the front face that it must follow.&lt;br /&gt;
&lt;br /&gt;
All of these modes of control support wireless communication through the XBee wireless chip.  Furthermore, with 120Hz communication, and all else considered to be worst case scenario, this version of the code will only take about 30% of the available computation time.&lt;br /&gt;
&lt;br /&gt;
===Code Download===&lt;br /&gt;
&lt;br /&gt;
The fully documented code used in this project can be downloaded [[Media:Mobile_Robot_-_Code.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17890</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17890"/>
		<updated>2010-03-19T01:47:53Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Mechanical Goals===&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
===Software Goals===&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Video Summary===&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Code.zip&amp;diff=17889</id>
		<title>File:Mobile Robot - Code.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Code.zip&amp;diff=17889"/>
		<updated>2010-03-19T01:44:51Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17888</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17888"/>
		<updated>2010-03-19T01:43:34Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17887</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17887"/>
		<updated>2010-03-19T01:43:20Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A video summary can be viewed [http://www.youtube.com/watch?v=5kB0zCvFP-g here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17886</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17886"/>
		<updated>2010-03-19T01:42:21Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
The control software for this project was written for the PIC32 with Microchip&#039;s MPLab IDE and C32 compiler.  As stated in the original project goals&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17876</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17876"/>
		<updated>2010-03-19T01:34:14Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
:Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
*Casters&lt;br /&gt;
&lt;br /&gt;
:Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
:Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17873</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17873"/>
		<updated>2010-03-19T01:32:38Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
===Motors===&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
===Chassis===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
===CAD Download===&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
===Circuit===&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
===Batteries===&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
===Wireless===&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
===Modes of Operation===&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
===Processing Download===&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
===Wii Download===&lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17871</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17871"/>
		<updated>2010-03-19T01:27:53Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17870</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17870"/>
		<updated>2010-03-19T01:27:04Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039;&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_333_final_projects&amp;diff=17869</id>
		<title>ME 333 final projects</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_333_final_projects&amp;diff=17869"/>
		<updated>2010-03-19T01:24:31Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the &#039;&#039;&#039;[[ME 333 end of course schedule]]&#039;&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
Final projects for ME 333 in years 2000-2007 can be found&lt;br /&gt;
&#039;&#039;&#039;[http://lims.mech.northwestern.edu/~design/mechatronics/ here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ME 333 Final Projects 2010 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Sample Project Title]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Persistence of Vison Display|thumb|150px|Project photo caption.|right]]&lt;br /&gt;
&lt;br /&gt;
You can copy and paste this wiki code to start your wiki page (but don&#039;t erase this code).  Then replace this text with your own.  A few sentences describing what your project does, with a link to a youtube video.  Look at other final project wiki pages for ideas, but see [[ME 333 end of course schedule]] for more information on what should be included on your wiki page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Furuta Pendulum]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Picture 1.png|thumb|150px|Furuta Pendulum|right]]&lt;br /&gt;
&lt;br /&gt;
The Furuta pendulum, so named because it was first developed by Katsuhisa Furuta, is a rotational inverted pendulum.  In other words, the horizontal arm, which rotates in the horizontal plane, drives the movement of the vertical arm, which is free to rotate in the vertical plane.  Out objective was to build a Furuta pendulum that would hold the vertical arm up, as you can see from the [http://www.youtube.com/watch?v=7DtFLKgNUk4 demonstration video].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Music from the Heart -- Music Suit]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Music from the heart overview.jpg|thumb|150px|The &amp;quot;music suit&amp;quot; on James, with heart rate detector on his finger.|right]]&lt;br /&gt;
&lt;br /&gt;
This project attempted to create a natural form of musical expression by connecting sensors to the body. Six tilt switches were attached to the wrist, ankles, and shoulders, each controlling a single pitch from the [http://en.wikipedia.org/wiki/Pentatonic_scale pentatonic scale]. The heart beat was obtained using [http://en.wikipedia.org/wiki/Photoplethysmograph photoplethysmography] on the user&#039;s finger, and this signal was used to strike a drum in sync with the heart beat.&lt;br /&gt;
&lt;br /&gt;
For a video demonstration, click [http://www.youtube.com/watch?v=YyipByy7m6I here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Conservation of Angular Momentum Locomotion Robot (Fluffbot)]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Isometric view of Fluffbot guts.jpg|thumb|150px|The Fluffbot without Fluff.|right]]&lt;br /&gt;
&lt;br /&gt;
Cute fluffy robot that uses conservation of angular momentum to move forward and backward. The robot&#039;s momentum wheel accelerates in the floor-plane. The robot&#039;s net angular momentum must remain zero-- a steering wheel guides the Fluffbot to accelerate in the opposite direction. This moves the robot forward in a curved path. The momentum wheel and steering wheel then change direction of acceleration. This repeated process moves the Fluffbot forward in a sinusoidal path.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Differential Drive Mobile Robot]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Parametric_-_Small.jpg|thumb|150px|Mobile Robot|right]]&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a small differential drive mobile robot that would act as a low cost replacement for the popular E-Puck Robot.  The robot uses hybrid stepper motors to allow it to track its position through odometry, has a laser cut acrylic chassis for easy replication and replacement, and a 1500 mAh, 13.2V battery pack for long run time.  The robot also uses the NU32 board for its control logic and a XBee chip for communication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Ferrofluid Art Display]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Persistence of Vison Display|thumb|150px|Place holder text for caption .|right]]&lt;br /&gt;
&lt;br /&gt;
A little blurb about our Ferrofluid Art Display will go here. Just a few sentences talking about blah blah lkasjdfal hfalsdjh.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Can Launching Fridge]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:27_Fridge.jpg|thumb|150px|Project photo caption.|right]]&lt;br /&gt;
&lt;br /&gt;
The goal of the can launching fridge was to create a fridge that would, when initiated by either a remote control or a wired push button, automatically load, aim, and fire a can to multiple predetermined locations. The fridge uses a combination of stepper motors, a DC motor, and solenoids to create the ultimate mix of convenience, fun, and refreshment. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[High Speed Motor Control]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:2dofArmSetUp.jpg|thumb|150px|Project photo caption.|right]]&lt;br /&gt;
The project suggested was to design a system for high speed motor control using the PIC 32. To demonstrate the motor control, a two degree of freedom (2-DOF) parallelogram robot arm was designed to follow paths specified in a MATLAB gui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Variable Frequency Electrosense]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:TR_JP_PP-sensor.jpg|thumb|150px|Variable Frequency Electrosense|right]]&lt;br /&gt;
&lt;br /&gt;
Our objective was to build upon existing research being done at Northwestern utilizing Electrosense technology by testing if information can be derived from varying the emitter frequency. We sought to send sinusoidal waves at discrete frequencies between 100 Hz and 10 kHz and to read in the sensed wave using a PIC 32’s ADC. We then sent the gathered information to a PC for plotting and analysis. By mounting the sensor on a one dimensional linear actuator we are able to gather additional data about objects and perform object detection and identification algorithms. While our initial results have revealed exciting trends, farther research is necessary before any significant conclusions can be made. A [http://www.youtube.com/watch?v=PJY097L2m1M video] of the project is available on YouTube.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Remote Controlled Wiitar]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Wiitar.jpg|thumb|150px|Guitar Controlled by a wiimote: The Wiitar!|right]]&lt;br /&gt;
This project uses an array of solenoids to depress stings on the neck of a guitar.  A motor over the strings of the guitar turns an arm which strums the instrument, playing the chord depressed by the solenoids.  The system is controlled by a Wii Remote.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[6-DOF PPOD]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Jd-cr-Assembly.jpg|thumb|150px|Project photo caption.|right]]&lt;br /&gt;
The PPOD-mini is a miniaturized version of the Programmable Part-feeding Oscillatory Device ([http://lims.mech.northwestern.edu/projects/frictioninducedforcefields/index.htm PPOD]) found in the Laboratory for Intelligent Mechanical Systems (LIMS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Butterfly Rolling Manipulation]] ===&lt;br /&gt;
[[Image:Butterflyteampic.jpg|right|upright=1.3|thumb|Butterfly Project at Mechatronics Fair]]&lt;br /&gt;
The Butterfly emulates contact juggling by the stabilization of dynamic rolling.  The apparatus rolls a cylinder by rotating the &amp;quot;hand&amp;quot; using a specific trajectory and is able to move the cylinder from one side to the other without losing contact. A video of the Butterfly captured in high speed can be found [http://www.youtube.com/watch?v=dtYv3qNz_LI here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Haptic Gaming System]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Haptikos.jpg|thumb|150px|Haptic Robot.|right]]&lt;br /&gt;
&lt;br /&gt;
An interactive gaming system  that allows the user to physically feel a virtual world. The player controls the cursor by moving the red joystick. Two games were created to test the feedback system. The first is a side-scroller in which you avoid hitting moving blocks. The second involves feeling out the virtual shape with nothing other than a blue position dot and a blank screen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ME 333 Final Projects 2009 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Mozart&#039;s Right Hand]] ===&lt;br /&gt;
[[Image:mrh_box.JPG|thumb|150px|Mozart&#039;s Right Hand|right]]&lt;br /&gt;
Mozart&#039;s Right Hand is a musical instrument capable of playing two full octaves of the [http://en.wikipedia.org/wiki/Diatonic_scale Diatonic Scale.]  The user wears a glove on his right hand and uses motions of the hand and fingers to create different notes that are played with a speaker.  The pitch of the note is controlled by the orientation of the user&#039;s hand as he rotates it ether from the wrist, the elbow, or the shoulder.  The LCD on the front of the box tells the user the pitch that corresponds to his or her current hand orientation.  When the user touches together his thumb and index finger, the speaker plays the tone.  A [http://www.youtube.com/watch?v=vec-W4QeHQU video] of Mozart&#039;s Right Hand in action is available on YouTube.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chosen the OUTSTANDING PROJECT by the students of ME 333.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Persistence-of-Vision Display]] ===&lt;br /&gt;
[[Image:Persistence of Vison Display|right|thumb|150px]]&lt;br /&gt;
This is a fully customizable display implemented using the concept of Persistence of Vision. User-specified images (and even moving images) were displayed by rotating a column of LEDs at speeds faster than 300rpm. Each individual LED was modeled as a row of pixels. Conversely, the rotational position of the panel of LEDs represented the pixel columns of the display; the time interval and rotational speed determined the width of the pixel columns. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Rock Paper Scissors Machine]] ===&lt;br /&gt;
[[Image:rps whole thing.JPG|thumb|150px|Rock Paper Scissors Machine|right]]&lt;br /&gt;
A machine that will play a fully functioning, intuitive game of [http://en.wikipedia.org/wiki/Rock-paper-scissors Rock/Paper/Scissors] (abbreviated as RPS) with a user. The machine is represented by a human-like hand, capable of seperate and independant wrist, arm, finger and thumb motion. The players&#039; hand goes into a glove equipped with flex sensors, which wirelessly transmits data to the machine based on what the player chose. The machine then reads this data, randomly chooses a throw of its own, and displays what the machine threw, what the human threw, total win/loss/tie info, and winner/loser both on an [http://en.wikipedia.org/wiki/Lcd LCD] screen and in the form of a thumbs up/down/side motion. Video of the machine in action can be found [http://www.youtube.com/watch?v=xbLNBSTTrcE here.]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Three-speaker Chladni Patterns]] ===&lt;br /&gt;
[[Image:chladni_660hz|right|thumb|150px]]&lt;br /&gt;
This project uses three speakers to generate shapes on a circular aluminum plate depending on which frequency the speakers are playing at. Once the speakers hit a resonant frequency of the plate, salt migrates to the nodes (zero amplitude) regions of the plate to form distinct patterns.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Basketball]] ===&lt;br /&gt;
[[Image:Mechatronics2009Bball|right|thumb|150px]]&lt;br /&gt;
This project consists of a throwing arm propelled by a Pittman motor is mounted on a turntable and throws the ball into the &amp;quot;hoop.&amp;quot; The hoop is wrapped in reflective tape and an IR emitter, receiver pair is used to sense where the IR is reflected most (the hoop with highly reflective tape). An ultrasonic sensor then pings the hoop for the distance of the hoop. With this information, the arm is able to &amp;quot;make a basket.&amp;quot; A video can be found [http://www.youtube.com/watch?v=Y466dzP-qiY here].&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Robot Drummer]] ===&lt;br /&gt;
[[Image:Robot_Drummer.jpg|thumb|400pix|right|Robot Drummer]]&lt;br /&gt;
The Robot Drummer is a device that demonstrates high-speed motor control by being able to drum when given commands.  Through an RS232 cable, Matlab sends commands to a &amp;quot;master&amp;quot; PIC.  The master then sends the commands to two &amp;quot;slave&amp;quot; PICs through I2C communication.  The slaves take the commands and implement PID control of the motors.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Automated Fish Refuge]] ===&lt;br /&gt;
[[Image:Entire Fish Refuge|right|thumb|200px]]&lt;br /&gt;
The automated fish refuge allows for the controlled movement of a fish refuge with the goal of recording specific behavior.  The mechanical design is completely adjustable and allows adjustable degrees of oscillating movement and orientation of the refuge.  The program is primarily in MATLAB for ease of use and the velocity profile can be a sine, square, triangle, or any function that the user inputs. [http://www.youtube.com/watch?v=wGOKujMhN88 Check out the video!]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Marionette]] ===&lt;br /&gt;
[[Image: MarionettePicForIntro.JPG|right|thumb]] The Marionette Project focused on using RC Servos to make a puppet that would do a dance with the press of a button.  There were 5 different dances programmed for the marionette, showcasing different styles of movement.  The movement had 2 degrees of freedom thanks to using 5 bar linkages and 2 RC servos for each arm.  Two more RC Servos were used on the back of the marionette to create the appearance of leg movement.  The movements included a Hula dance, Jumping Jacks, and even some moves right out of Saturday Night Fever.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Monkeybot]] ===&lt;br /&gt;
[[Image:monkeybot_pic|thumb|right|200px|Monkeybot]]&lt;br /&gt;
The monkeybot is a swinging robot capable of moving side to side and climbing.  It consists of a two link, double pendulum system with an electro-magnet on each end.  At the pivot is a DC motor, which provides an input torque and allows the swinging system to gain energy and climb.  Check out the video of the monkeybot climbing [http://www.youtube.com/watch?v=TA2VcH_GDJ0 here] and a later brachiation video [http://www.youtube.com/watch?v=0hfwJEVQyeQ&amp;amp;feature=related here].&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[PPOD-mini:  6-DOF Shaker]] ===&lt;br /&gt;
[[Image:PPOD_mini.JPG|thumb|200x200 px|right|PPOD-mini 6-DOF Shaker]]&lt;br /&gt;
The PPOD-mini is a miniaturized version of the Programmable Part-feeding Oscillatory Device ([http://lims.mech.northwestern.edu/projects/frictioninducedforcefields/index.htm PPOD]) found in the Laboratory for Intelligent Mechanical Systems (LIMS) at Northwestern. The PPOD-mini utilizes six speakers that act like actuators. The speakers are connected to a acrylic plate via flexures of tygon and iron. In its current implementation, the phase of the speakers can be controlled independently, giving the device six degrees of freedom. The movement of objects placed on the acrylic plate can be controlled by changing the phases of the speakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Automated Xylophone]] ===&lt;br /&gt;
[[Image:AutomatedXylophonePicture1.jpg|thumb|200x200 px|right|Automated Xylophone]]&lt;br /&gt;
The Automated Xylophone controls several solenoids which hit various pitches on an actual xylophone based on the note selected.  The device has two main modes: using the keypad, a user can choose to either play notes in real time or store songs to be played back later.  A video of the Automated Xylophone playing in real time mode can be found [http://www.youtube.com/watch?v=_ubpAEyq9kg here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Vision-based Cannon]] ===&lt;br /&gt;
[[Image:SM_Gun_Camera_PIC_Setup.JPG|thumb|200x200 px|right|Vision-based Cannon]]&lt;br /&gt;
This project uses a webcam and Matlab to analyze an image and direct a modified USB Missile Launcher to fire at targets found in the image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ME 333 Final Projects 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== [[IR Tracker]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:IR_Tracker_Main.jpg|right|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
The IR Tracker (aka &amp;quot;Spot&amp;quot;) is a device that follows a moving infrared light. It continuously detects the position of an infrared emitter in two axes, and then tracks the emitter with a laser. [[Media:MT_MS_AZ_TrackerVideo.mp4|See Spot Run.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chosen the OUTSTANDING PROJECT by the students of ME 333.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Robot Snake]] ===&lt;br /&gt;
[[Image:HLSSnakeMain.jpg|right|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
This remote control robotic snake uses servo motors with a traveling sine wave motion profile to mimic serpentine motion.  The robotic snake is capable of moving forward, left, right and in reverse.   &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake]&lt;br /&gt;
&lt;br /&gt;
Featured on [http://blog.makezine.com/archive/2009/03/well_documented_robotic_snake.html Makezine.com].&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Programmable Stiffness Joint]] === &lt;br /&gt;
&lt;br /&gt;
[[Image:SteelToePic2.jpg|thumb|200px|The &#039;Steel Toe&#039; programmable stiffness joint|right]]&lt;br /&gt;
&lt;br /&gt;
The Programmable Stiffness Joint varies rotational stiffness as desired by the user.  It is the first step in modeling the mechanical impedance of the human ankle joint (both stiffness and damping) for the purpose of determining the respective breakdown of the two properties over the gait cycle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Magnetic based sample purification]] ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Continuously Variable Transmission]] ===&lt;br /&gt;
&lt;br /&gt;
[[image:CVT_system.JPG|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
This prototype is a proof of concept model of a variable ratio transmission to be implemented in the 2008-2009 Formula SAE competition vehicle.  The gear ratio is determined by the distances between the pulley halves which are controllable electronically.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Granular Flow Rotating Sphere]] ===&lt;br /&gt;
[[Image:Team-21-main-picture.JPG|right|thumb|200px]]&lt;br /&gt;
This device will be used to study the granular flow of particles within a rotating sphere. The sphere is filled with grains of varying size and then rotated about two different axes according to a series of position and angular velocity inputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Vibratory Clock]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Vibratory_Clock.jpg|right|thumb|Vibratory Clock|200px]]&lt;br /&gt;
&lt;br /&gt;
The Vibratory Clock allows a small object to act as an hour &amp;quot;hand&amp;quot; on a horizontal circular platform that is actuated from underneath by three speakers.  The object slides around the circular platform, impelled by friction forces due to the vibration.  [http://www.youtube.com/watch?v=KhgTNCfdwZw Check it out!]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[WiiMouse]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:HPIM1027.jpg|right|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
The WiiMouse is a handheld remote that can be used to move a cursor on a windows-based PC, via accelerometer input captured through device movement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Intelligent Oscillation Controller]] ===&lt;br /&gt;
&lt;br /&gt;
[[image:ME333_learning_oscillator.jpg|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
This device &amp;quot;learns&amp;quot; a forcing function that is applied to a spring and mass system to match an arbitrary, periodic acceleration profile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Baseball]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Baseball_Playfield.jpg|Sweet Baseball Game|right|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
An interactive baseball game inspired by pinball, featuring pitching, batting, light up bases and a scoreboard to keep track of the game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Ball Balancing Challenge]] ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ballbalancechallenge.JPG|right|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
An interactive game involving ball balancing on a touchscreen with touchscreen feedback and joystick action. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Parametric_-_Small.jpg&amp;diff=17868</id>
		<title>File:Mobile Robot - Parametric - Small.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Parametric_-_Small.jpg&amp;diff=17868"/>
		<updated>2010-03-19T01:23:17Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17867</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17867"/>
		<updated>2010-03-19T01:21:58Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
*Wheels:&lt;br /&gt;
&lt;br /&gt;
:Although the final version of the robot performed well, there are several things that could be improved.  One of the major factors for any imprecision in our odometry is the relatively low quality wheels that were used.  During the prototyping phase of the project, it was very beneficial to have acrylic wheels so that new ones could be cut at any time.  Unfortunately, the laser cutter does not do the best job of cutting a perfect circle and also tends to taper the edges of the wheels.  Also, while it was convenient to make the wheels out of the same thickness acrylic as the body, thinner wheels would allow the robot to be more precise.  Finally, rubber bands were used to increase traction between the wheel and the driving surface, but, after experimenting with the E-Puck, it is clear that far more traction could be generated with a carefully chosen rubber o-ring.  All of this being said, it is our recommendation that before any further work is put into making this robot more precise, the wheels be replaced with something to [http://www.e-puck.org/images/epuck-look.jpg those] found on an E-Puck&lt;br /&gt;
&lt;br /&gt;
*Chassis and PCB:&lt;br /&gt;
&lt;br /&gt;
:Another significant improvement that could be made would be to reduce the size of the robot.  This could be done by designing a pcb specifically for this application, and doing a redesign of the chassis.  If both of these measures were done in tandem, the robot could be made significantly smaller and lighter.&lt;br /&gt;
&lt;br /&gt;
*Motors:&lt;br /&gt;
&lt;br /&gt;
:As far as weight goes, however, the main problem is the motor choice.  As a proof of concept, the $12 stepper motors were a perfect choice.  They had plenty of torque and were very physically robust.  As the robot is refined, however, a top priority will likely be to make it lighter.  If the motor price is increased to something closer to $40, there are a range of hybrid NEMA stepper motors that are still capable of producing the necessary torque, but are smaller and lighter.  Some excellent resources to check are [http://www.anaheimautomation.com/ Anaheim Automation], [http://www.nmbtc.com/ NMB], and [http://www.linengineering.com/LinE/ Lin Engineering].&lt;br /&gt;
&lt;br /&gt;
*Code:&lt;br /&gt;
&lt;br /&gt;
:There are a few ways the code could be improved.  At the moment, it uses two timers to perform its motor control functions.  There are ways to do this with only one timer, and implementing these would free up one timer for the user.  An example of this can be found in the E-Puck&#039;s motor control code.  Another improvement would be the addition of some basic functions like forward(speed), reverse(speed), rotate_left(speed), etc...  Although the functionality would be identical, changing the current convention of using two SetSpeed() commands to a single function call would both shorten the code and make it more readable.  This could also be extended to other tasks performed in the current code that are done frequently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17863</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17863"/>
		<updated>2010-03-19T00:59:42Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Electrical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].  The charger for this battery pack can also be found [http://www.batteryspace.com/smartcharger15afor128vlifepo4batterypack4cells152vcut-offwith55mmx21mmmalebarrelplug.aspx here]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17862</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17862"/>
		<updated>2010-03-19T00:56:22Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17861</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17861"/>
		<updated>2010-03-19T00:55:02Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
*Use stepper motors&lt;br /&gt;
&lt;br /&gt;
*Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
*Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
*Support wireless communication&lt;br /&gt;
&lt;br /&gt;
*Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
*Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
*Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17860</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17860"/>
		<updated>2010-03-19T00:53:42Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Graphical User Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg|thumb|150px|Processing window|right]]&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
An image of the GUI as it appears when it is first opened can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17859</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17859"/>
		<updated>2010-03-19T00:52:14Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The 6mm [http://www.mcmaster.com/#8560K354 acrylic] used came from McMaster-Carr.  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17858</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17858"/>
		<updated>2010-03-19T00:51:01Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html NMB&#039;s website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  These [http://www.mcmaster.com/#57485K65 shaft collars] were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17857</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17857"/>
		<updated>2010-03-19T00:49:57Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  These [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 casters] were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17855</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17855"/>
		<updated>2010-03-19T00:49:10Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Hybrid Stepper Motor|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg|thumb|150px|SolidWorks assembly of the robot|right]]&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17854</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17854"/>
		<updated>2010-03-19T00:47:35Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 hybrid stepper].  An image of this can be seen on the right.&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17853</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17853"/>
		<updated>2010-03-19T00:45:33Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Electrical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Breadboard_-_Small.jpg|thumb|150px|Initial breadboard version of the circuit|right]]&lt;br /&gt;
[[Image:Mobile_Robot_-_Proto_-_Small.jpg|thumb|150px|Final proto-board version of the circuit|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Circuit:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The circuit for the robot consists of the [[Introduction_to_the_PIC32|NU32 board]], two [http://www.st.com/stonline/books/pdf/docs/1330.pdf L293D h-bridges] (Digi-Key part number 497-2936-5-ND), an [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 XBee wireless chip], connectors for the motors, and a power jack.  A circuit diagram of the final version can be found to the right, as well as pictures of the initial breadboard version and final proto-board version.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Batteries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This project used Lithium Iron Phosphate (LiFePO4) batteries.  These are essentially the next generation of Li-Ion batteries.  Like Li-Ion cells, they have a high discharging current, but they are also non-explosive when charged improperly.  A drawback is that their energy density is slightly less than a good Li-Ion cell.  More information about this type of battery can be found [http://www.batteryspace.com/prod-specs/HLCF18650PLi-ion.ppt here]&lt;br /&gt;
&lt;br /&gt;
For this project we used a battery pack that consisted of 4 3.2V A123Systems cells with its own integrated management circuit that prevents the user from charging/discharging the cells past a safe level and regulates the output current above a certain point.&lt;br /&gt;
&lt;br /&gt;
Specifically, we used a 12.8V, 1500mAh, 4A max battery pack that can be purchased [http://www.batteryspace.com/lifepo418650battery128v1350mahflat1728wh4aratewithpcb.aspx here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wireless:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the main goals of the robot was to have the ability to communicate wirelessly.  The XBee wireless chip was used to fill this requirement.  The XBee is a device that allows simple serial communication over a 2.4 GHz connection.  By connecting the chip to ground, power, a transmit pin, and a receive pin, one is able to perform standard serial communication between two properly configured XBee chips.  More information about the XBee can be found [http://www.sparkfun.com/commerce/product_info.php?products_id=8665 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Proto_-_Small.jpg&amp;diff=17847</id>
		<title>File:Mobile Robot - Proto - Small.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Proto_-_Small.jpg&amp;diff=17847"/>
		<updated>2010-03-19T00:14:49Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Breadboard_-_Small.jpg&amp;diff=17846</id>
		<title>File:Mobile Robot - Breadboard - Small.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Breadboard_-_Small.jpg&amp;diff=17846"/>
		<updated>2010-03-19T00:13:10Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17845</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=17845"/>
		<updated>2010-03-19T00:00:43Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Electrical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s configuration, (x,y,θ), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
*Standard Size:&lt;br /&gt;
&lt;br /&gt;
:Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
*Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
:Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
*Bipolar:&lt;br /&gt;
&lt;br /&gt;
:Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
*No Gearhead:&lt;br /&gt;
&lt;br /&gt;
:The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
*Cost:&lt;br /&gt;
&lt;br /&gt;
:An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Circuit.png|thumb|150px|Circuit Schematic|right]]&lt;br /&gt;
&lt;br /&gt;
circuit diagram&lt;br /&gt;
&lt;br /&gt;
NU32 board&lt;br /&gt;
&lt;br /&gt;
H-bridges L293D&lt;br /&gt;
&lt;br /&gt;
batteries&lt;br /&gt;
&lt;br /&gt;
XBee&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wii Demonstration==&lt;br /&gt;
This demo involved allowing a user to drive the robot using a Nintendo Wii remote (Wiimote).  The user holds the Wiimote sideways in both hands such that the four arrows of the d-pad are in the left hand.  This grip is similar to one used for many Wii games (and a lot like the original Nintendo Entertainment System controller).  Holding different combinations of the &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; buttons then change how fast the robot moves when arrows are also being held.  At any point in time, the user can hold the home button to send the robot back to its initial configuration.  More details on this operation can be found in the WiiMain.c code included below.&lt;br /&gt;
&lt;br /&gt;
The software relies on the [http://wiiuse.net/ wiiuse] library.  The file linked below includes the important files from the wiiuse package (a header file, a lib file, and a dll file).  The Wiimote is connected to a PC (must be running Windows) via bluetooth, and the wiiuse library is used to interpret the data sent to the PC.  Once the data has been interpreted, it is sent to the robot over XBee.&lt;br /&gt;
&lt;br /&gt;
In the file below, there is also an exe file of the WiiMain.c code.  In order to execute this file, the wiiuse.dll must be in either the same directory as the executable, or in another directory that is included in Window&#039;s search path.  To see Window&#039;s search path, simply type &amp;quot;echo %PATH%&amp;quot; into a command prompt.  Additionally, this executable is assuming that the XBee chip is connected to the computer via &amp;quot;COM3&amp;quot;.  If a different port must be used, the exe file will need to be re-compiled after editing the pertinent lines in WiiMain.c. &lt;br /&gt;
&lt;br /&gt;
A zip file with the necessary components to run this demo can be found [[Media:JS_JW_Wii_Demo.zip | here]].  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Schultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Circuit.png&amp;diff=17844</id>
		<title>File:Mobile Robot - Circuit.png</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Circuit.png&amp;diff=17844"/>
		<updated>2010-03-18T23:59:13Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16848</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16848"/>
		<updated>2010-03-15T20:54:43Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎ | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram&lt;br /&gt;
&lt;br /&gt;
NU32 board&lt;br /&gt;
&lt;br /&gt;
H-bridges L293D&lt;br /&gt;
&lt;br /&gt;
batteries&lt;br /&gt;
&lt;br /&gt;
XBee&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16847</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16847"/>
		<updated>2010-03-15T20:53:47Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎| here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram&lt;br /&gt;
&lt;br /&gt;
NU32 board&lt;br /&gt;
&lt;br /&gt;
H-bridges L293D&lt;br /&gt;
&lt;br /&gt;
batteries&lt;br /&gt;
&lt;br /&gt;
XBee&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can download the processing project [[Media:Mobile_Robot_Processing.zip | here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_Processing.zip&amp;diff=16846</id>
		<title>File:Mobile Robot Processing.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_Processing.zip&amp;diff=16846"/>
		<updated>2010-03-15T20:52:38Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16814</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16814"/>
		<updated>2010-03-15T05:02:48Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎| here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram&lt;br /&gt;
&lt;br /&gt;
NU32 board&lt;br /&gt;
&lt;br /&gt;
H-bridges L293D&lt;br /&gt;
&lt;br /&gt;
batteries&lt;br /&gt;
&lt;br /&gt;
XBee&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parts List==&lt;br /&gt;
&lt;br /&gt;
Insert List here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16813</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16813"/>
		<updated>2010-03-15T05:01:09Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Electrical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎| here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram&lt;br /&gt;
&lt;br /&gt;
NU32 board&lt;br /&gt;
&lt;br /&gt;
H-bridges L293D&lt;br /&gt;
&lt;br /&gt;
batteries&lt;br /&gt;
&lt;br /&gt;
XBee&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16812</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16812"/>
		<updated>2010-03-15T04:57:33Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎| here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16811</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16811"/>
		<updated>2010-03-15T04:57:08Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
The SolidWorks CAD files can be found [[Media:Mobile_Robot_-_CAD_Files.zip‎| here]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_CAD_Files.zip&amp;diff=16809</id>
		<title>File:Mobile Robot - CAD Files.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_CAD_Files.zip&amp;diff=16809"/>
		<updated>2010-03-15T04:48:57Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16808</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16808"/>
		<updated>2010-03-15T04:48:17Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The focus of the chassis design was ease of manufacture.  In order to achieve this, the chassis (and wheels) was designed so that it could be cut out of a single sheet of acrylic and simply glued together.  The acrylic used came from McMaster-Carr and can be found [http://www.mcmaster.com/#8560K354 here].  In order to minimize the amount of acrylic needed, it was assumed that the circuit board would act as the top of the robot and the front and back were left as short as possible without compromising strength.  The final chassis dimensions are W:90mm, L:90mm, H:75mm.  As can be seen below, the batteries rest on the motors themselves, and, therefore, do not require any additional mounting structure.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
Insert link to CAD files here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16807</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16807"/>
		<updated>2010-03-15T04:34:19Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to allow for wheel size adjustments throughout the design and development process, the robot&#039;s wheels were made out of acrylic and cut on the laser cutter.  The center hole was cut to have a 0.005&amp;quot; clearance so that the motor shaft would fit snugly and act to center the wheel.  [http://www.mcmaster.com/#57485K65 These] shaft collars were super glued to the acrylic wheel and used to fix the wheel to the shaft.&lt;br /&gt;
&lt;br /&gt;
Note: If you are going to cut your own wheels on the laser cutter be mindful that the laser has a tendency to taper the edges of the wheels and does not cut a perfectly round circle due to the resolution of the carriage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because the robot has two wheels, it needed supports on both the front and back to prevent it from rocking back and forth or scraping the chassis on the floor.  [http://www.sparkfun.com/commerce/product_info.php?products_id=8909 These] casters were used in order to reduce friction and allow for simple shim height adjustment.&lt;br /&gt;
&lt;br /&gt;
Note: Although the stainless steel ball in these casters will last longer, they make quite a bit of noise rattling around in their cage.  The solution to this would be either to have them perfectly shimmed so they no longer are able to move, or order the equivalent caster with a plastic bearing.&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16806</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16806"/>
		<updated>2010-03-15T04:19:18Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16805</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16805"/>
		<updated>2010-03-15T04:19:09Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16804</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16804"/>
		<updated>2010-03-15T04:19:00Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Be of a similar size to the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Be significantly less expensive than the E-Puck&lt;br /&gt;
&lt;br /&gt;
-Use stepper motors&lt;br /&gt;
&lt;br /&gt;
-Be easy to manufacture&lt;br /&gt;
&lt;br /&gt;
-Have an approximate run time of 1 hour&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-Use the NU32 board for control logic&lt;br /&gt;
&lt;br /&gt;
-Support wireless communication&lt;br /&gt;
&lt;br /&gt;
-Develop a control library that can easily be included in a users code&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
&lt;br /&gt;
-Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
&lt;br /&gt;
-Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16803</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16803"/>
		<updated>2010-03-15T04:17:09Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Be of a similar size to the E-Puck&lt;br /&gt;
  -Be significantly less expensive than the E-Puck&lt;br /&gt;
  -Use stepper motors&lt;br /&gt;
  -Be easy to manufacture&lt;br /&gt;
  -Have an approximate run time of 1 hour&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Use the NU32 board for control logic&lt;br /&gt;
  -Support wireless communication&lt;br /&gt;
  -Develop a control library that can easily be included in a users code&lt;br /&gt;
  -Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
  -Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
  -Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with.  The stepper motor used in this project is a NEMA 17, bipolar (4 wire), hybrid stepper [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Stepper_Motor.jpg]]&lt;br /&gt;
&lt;br /&gt;
Standard Size:&lt;br /&gt;
&lt;br /&gt;
Very early in the motor search, it was decided that because this project was to be the foundation of future work, finding a motor that was readily available was a top priority.  It quickly became clear that using a stepper motor that followed NEMA&#039;s motor standards would accomplish this.  In doing so, any future project or research group that decides to use this project as a starting point will not need to locate the exact motor used here, but only a size 17 NEMA stepper motor.&lt;br /&gt;
&lt;br /&gt;
Hybrid Stepper:&lt;br /&gt;
&lt;br /&gt;
Although there are many types of stepper motors, we decided to use the hybrid stepper motor for this project.  Aside from the fact that hybrid stepper motors are the most common type, they also have a higher resolution compared to a standard permanent magnet stepper motor.  Both [http://en.wikipedia.org/wiki/Stepper_motor wikipedia] and NMB&#039;s [http://www.nmbtc.com/motors/hybrid-step/engineering/basic-introduction-of-step-motors.html website] have some good resources on stepper motor theory and operation.&lt;br /&gt;
&lt;br /&gt;
Bipolar:&lt;br /&gt;
&lt;br /&gt;
Although there are several possible winding configurations stepper motors can take, we chose a bipolar motor.  This configuration demands the use of an H-bridge in the driving circuit, but allows for higher torque than a unipolar configuration.&lt;br /&gt;
&lt;br /&gt;
No Gearhead:&lt;br /&gt;
&lt;br /&gt;
The decision not to use a gearhead was a significant departure from the design of the E-puck.  Although a gearhead allows for lower current draw, smaller motors (lighter robot) for any given torque, the gearheads themselves are often composed of fragile plastic components that break easily.  Another drawback of geared stepper motors is their higher cost.  The benefits and drawbacks of our decision are evident in the final design through its significantly higher weight and improved top speed.  &lt;br /&gt;
&lt;br /&gt;
Cost:&lt;br /&gt;
&lt;br /&gt;
An average hybrid stepper motor from an established supplier like NMB, Lin Engineering, or Annaheim Automation costs around $40.  Although the motors purchased from these companies may provide superior performance, the motors used in this project were purchased from SparkFun for $13 each and provide enough torque to propel our hefty robot at four times the speed of an E-Puck.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Stepper_Motor.jpg&amp;diff=16794</id>
		<title>File:Mobile Robot - Stepper Motor.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_Stepper_Motor.jpg&amp;diff=16794"/>
		<updated>2010-03-15T03:25:47Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16792</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16792"/>
		<updated>2010-03-15T03:21:26Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Mechanical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Be of a similar size to the E-Puck&lt;br /&gt;
  -Be significantly less expensive than the E-Puck&lt;br /&gt;
  -Use stepper motors&lt;br /&gt;
  -Be easy to manufacture&lt;br /&gt;
  -Have an approximate run time of 1 hour&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Use the NU32 board for control logic&lt;br /&gt;
  -Support wireless communication&lt;br /&gt;
  -Develop a control library that can easily be included in a users code&lt;br /&gt;
  -Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
  -Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
  -Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
As previously stated, the robot needed to be easy to manufacture, inexpensive to make, and relatively small.  These three goals guided each decision made in the mechanical design.  The following sections will outline the design process for each mechanical component.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motors:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The motor choice was the most significant design decision in this project.  Accordingly, much thought and research went into picking the hybrid stepper motors we ended up with [[http://www.sparkfun.com/commerce/product_info.php?products_id=9238 link]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chassis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wheels:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Casters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following is an image of the SolidWorks assembly of the robot:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_CAD.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_CAD.jpg&amp;diff=16789</id>
		<title>File:Mobile Robot - CAD.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Mobile_Robot_-_CAD.jpg&amp;diff=16789"/>
		<updated>2010-03-15T03:01:52Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16787</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16787"/>
		<updated>2010-03-15T02:56:45Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Be of a similar size to the E-Puck&lt;br /&gt;
  -Be significantly less expensive than the E-Puck&lt;br /&gt;
  -Use stepper motors&lt;br /&gt;
  -Be easy to manufacture&lt;br /&gt;
  -Have an approximate run time of 1 hour&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Use the NU32 board for control logic&lt;br /&gt;
  -Support wireless communication&lt;br /&gt;
  -Develop a control library that can easily be included in a users code&lt;br /&gt;
  -Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
  -Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
  -Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
CAD drawings and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
new wheels&lt;br /&gt;
&lt;br /&gt;
pcb&lt;br /&gt;
&lt;br /&gt;
1 timer motor control&lt;br /&gt;
&lt;br /&gt;
forward, reverse, rotate functions&lt;br /&gt;
&lt;br /&gt;
other functions to shorten code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16786</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16786"/>
		<updated>2010-03-15T02:55:43Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Graphical User Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Be of a similar size to the E-Puck&lt;br /&gt;
  -Be significantly less expensive than the E-Puck&lt;br /&gt;
  -Use stepper motors&lt;br /&gt;
  -Be easy to manufacture&lt;br /&gt;
  -Have an approximate run time of 1 hour&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Use the NU32 board for control logic&lt;br /&gt;
  -Support wireless communication&lt;br /&gt;
  -Develop a control library that can easily be included in a users code&lt;br /&gt;
  -Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
  -Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
  -Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
CAD drawings and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  &lt;br /&gt;
&lt;br /&gt;
The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
suggested improvements&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16785</id>
		<title>Differential Drive Mobile Robot</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Differential_Drive_Mobile_Robot&amp;diff=16785"/>
		<updated>2010-03-15T02:55:30Z</updated>

		<summary type="html">&lt;p&gt;JakeWare: /* Graphical User Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The goal of this project was to create a low cost replacement for the popular E-Puck robot that was better suited to the needs of the current research projects here at Northwestern.  The project also entailed developing a control library that would allow future users to easily interface with the robot and integrate it into their research.  Specifically, the robot was to meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mechanical Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Be of a similar size to the E-Puck&lt;br /&gt;
  -Be significantly less expensive than the E-Puck&lt;br /&gt;
  -Use stepper motors&lt;br /&gt;
  -Be easy to manufacture&lt;br /&gt;
  -Have an approximate run time of 1 hour&lt;br /&gt;
&#039;&#039;&#039;Software Goals:&#039;&#039;&#039;&lt;br /&gt;
  -Use the NU32 board for control logic&lt;br /&gt;
  -Support wireless communication&lt;br /&gt;
  -Develop a control library that can easily be included in a users code&lt;br /&gt;
  -Allow the user to specify a velocity vector for the robot to follow&lt;br /&gt;
  -Allow the user to specify the robot&#039;s position, (x,y,theta), in a global frame&lt;br /&gt;
  -Allow the user to directly control the robot&#039;s wheel speeds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mechanical==&lt;br /&gt;
&lt;br /&gt;
CAD drawings and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electrical==&lt;br /&gt;
&lt;br /&gt;
circuit diagram and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
code and description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Graphical User Interface==&lt;br /&gt;
&lt;br /&gt;
A GUI was created in processing in order to demonstrate the functionality of the control software and facilitate testing.  The following is an image of the GUI as it appears when it is first opened:&lt;br /&gt;
&lt;br /&gt;
[[Image:Mobile_Robot_-_Processing_GUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Modes of Operation:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The program has two modes of operation that can be selected with the &amp;quot;mode&amp;quot; button.  &lt;br /&gt;
&lt;br /&gt;
Note: The current mode can be discerned by looking at the white/black box next to the mode button and comparing with the legend at the bottom of the GUI&lt;br /&gt;
&lt;br /&gt;
First, there is a position control mode that allows the user to send the robot to a point in a global frame.  This is done by clicking in the white box that takes up the majority of the screen space.  Once designated, the new position will appear with a number above it which marks its order relative to all the other requested positions.  The white area maps to the surface that the robot is sitting on, and the x-axis, which the robot is aligned with, goes to the right of the screen from the origin at the center.  The y-axis originates from the same location and goes upward.  Both the location of the origin on the screen and the physical dimensions of the space that the screen area maps to are easily adjustable in the code.&lt;br /&gt;
&lt;br /&gt;
Second, there is a velocity control mode that allows you to specify a velocity vector that the center of the front face of the robot must follow.  As before, this vector is created by clicking in the white box at the center of the GUI.  The robot is, once again aligned along the x-axis, and the magnitude of the velocity vector is specified by the distance from the origin to the point clicked.&lt;br /&gt;
&lt;br /&gt;
Some other features include the ability to:&lt;br /&gt;
&lt;br /&gt;
-stop the robot with the &amp;quot;stop&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-move the origin to the robot&#039;s current position with the &amp;quot;reset&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-send the robot back to its starting position with the &amp;quot;home&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
-specify the robot&#039;s wheel speed with the &amp;quot;speed&amp;quot; textbox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
insert link to file here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
suggested improvements&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
This project was created by John (Jake) Ware and Jarvis Shultz.  Both are mechanical engineering PhD students at Northwestern University.&lt;br /&gt;
&lt;br /&gt;
Contact:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Jarvis Schultz&amp;quot; &amp;lt;jarvisschultz2012@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;John Ware&amp;quot; &amp;lt;johnware2015@u.northwestern.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>JakeWare</name></author>
	</entry>
</feed>