eduMIP is a highly extensible low-cost open platform for learning Embedded Control & Robotics. It works with the BleagleBone Blue, or with the BeagleBoard.org Robotics Cape coupled with a BeagleBone Black or Black Wireless. EduMIP was developed in a research and teaching setting in the UCSD Coordinated Robotics Lab. It is a kit for building an extensible, open-standards-compliant, Linux-based, mobile inverted pendulum (MIP) prototype. Hardware-focused massively-open online courses (MOOCs) are currently being developed which leverage these kits, targeting both introductory STEM courses (advanced high-school / college freshmen), and professional robotics courses (college senior, graduate, and beyond). eduMIP is a comprehensive and robust platform for learning:
- Dynamic modeling and feedback control (classical, state-space, adaptive, etc.) of unstable systems
- Robot motion planning and collision avoidance
- DC motor control via (built-in) H-bridges and encoder counters
- Attitude estimation via (built-in) IMU, magnetometer, and barometer
- Communication via (built-in) WiFi (802.11b/g/n) and Bluetooth (4.1/BLE)
- Charging, balancing, protection, and monitoring of 2-cell LiPo (included)
- Multi-threaded event-driven C programming in Debian Linux
- Multi-threaded Graphical System Design for embedded applications
eduMIP is compatible with Python, ROS, MATLAB® & Simulink®, and LabVIEW®. (Matlab® and Simulink® are trademarks of The Mathworks, Inc. LabVIEW® is a trademark of National Instruments, Inc.) eduMIP's robust, consumer-grade chassis was developed in collaboration WowWee®, and several extensions are being developed in collaboration with Texas Instruments®. eduMIP is easy to extend via custom CAD/3D printing and custom PCB design/fab, and can interface easily, via the available JST connectors and its extensive built-in software library, to millions of industry-standard sensors and actuators communicating over: USB, I2C, SPI, CAN, UART (GPS, DSM2), PWM (servos, ESCs), GPIO, ADC. CAD designs for the hardware in the eduMIP kit are available under the Creative Commons CC-BY-V4 License. Source code for all software in the associated codebase, down to the low-level libraries, are available under the 3-Clause BSD License.
Included in the eduMIP kit are all of the components necessary to assemble your eduMIP and make it balance, except for the BeagleBone itself (as mentioned above, eduMIP works with the BleagleBone Blue, or with the BeagleBoard.org Robotics Cape coupled with a BeagleBone Black or Black Wireless, all of which are available separately).
To begin, power up your BeagleBone and make sure it works correctly and is flashed to the latest stable image. It is possible to insert an SD card to flash your BeagleBone after the EduMIP has been assembled, but it is easier to flash first.
Next, open your EduMIP kit and identify/inspect the following components, as identified in the picture below:
- Drivetrain Assembly With Motors & Encoders
- Wheels (qty 2)
- 2-Pin JST ZH Pigtails (qty 2)
- 4-Pin JST SH Cables (qty 2)
- 2-Cell LiPo Battery
- 12v 1A DC Power Supply
- M3x10mm Self Tapping Screws (qty 2)
- M2.6x8mm Self Tapping Screws (qty 2)
- M2.6x6mm Self Tapping Screws (qty 6)
- 4-40 x 5/8" Machine Screws (qty 2)
- Lower Front Bumper
- Left and Right Skids
- Lower Bulkhead
- Battery Retainer
- Barrel Jack Plug
- Adhesive-Backed Foam (qty3)
Note that two extra screws might be included in the eduMIP kit; use a ruler to measure the length of the screws, and be careful to use the right screws in the right places in the assembly instructions below.
Use a small (P1) Philips screwdriver to remove the 8 screws holding the drivetrain assembly together. These screws are highlighted in red below.
Solder the 2-pin JST ZH pigtails to the motors in the exact orientation shown below. The pigtails come stripped, tinned, and cut to length. Double check that the red wires go to the positive(+) terminals of the motors.
Put the drivetrain assembly back together reusing the 8 screws you just removed. Tuck the motor wires in the drivetrain assembly exactly as shown below. Be careful not to trap or pinch the wires when reassembling, particularly when tightening the two larger screws.
Plug the 4-pin JST SH cables into the encoders boards and hold them in place by placing the bulkhead on top of the drivetrain assembly. The two bosses protruding from the top of the drivetrain unit should mate into the two holes on the bottom of the lower bulkhead. Take your time and make the wires sit neatly just like the pictures below. When you are satisfied with the wire routing, secure the lower bulkhead with the two 4-40 x 3/8" machine screws.
(scroll down and follow Step 5b if using a BB Blue.) Fasten your BeagleBone Black onto the lower bulkhead with two of the six M2.6x6mm screws. Insert the (provided) barrel jack plug into the 5V barrel jack on the BeagleBone Black. This is to protect the BeagleBone from accidentally plugging the included 12V power supply into the BeagleBone instead of the Robotics Cape.
Next, seat the Robotics Cape fully onto the BeagleBone's stackable headers. Be careful not to bend any of the pins and make sure the headers are seated completely. Apply force to the headers themselves and NOT to the center of the boards. Insert the 4 JST connectors as follows. If you routed the wires neatly in Step 4 there will be plenty of slack to do this step. Do not force the connectors in, they are fragile.
- Encoder lead from the front (cape side) of the EduMIP to header E3.
- Encoder lead from the back (battery side) of the EduMIP to header E2.
- Motor lead from the front (cape side) motor to header M2.
- Motor lead from the back (battery side) motor to header M3.
Use the remaining four M2.6x6mm screws to fasten the lower front bumper and upper skids to the cape. The rear holes on the upper skids will be used in a later step. Only use the four M2.6x6mm screws in the four holes in the Robotics Cape for now.
(scroll up and follow Step 5a if using a BB Black + Robotics Cape.) Instructions/pictures coming soon.
Attach the three adhesive-backed foam pads to the battery and battery retainer as shown below.
Now, slide the battery in place with the foam facing the back side of the BeagleBone and the wires facing the left side of the EduMIP as shown below. Secure in place by sliding the battery retainer down on top and fasten it with the two M2.6x8mm self-tapping screws.
Attach the two wheels with the two M3x10mm self-tapping screws. A larger P2 sized Philips screwdriver is ideal for these larger screws but a smaller P1 Philips screwdriver may also be used if you are careful not to strip the head. Finally plug the battery into the BeagleBone Blue (or, to the Robotics Cape).
Plug the 12V power supply into the Blue (or, to the Cape - but never to the Black!) and let the battery charge. Once it charges, you are ready to go. Read the balance example for software instructions.
You can drive your eduMiP around with any DSM2 or DSMX radio and satellite receiver. We suggest attaching the satellite receiver to the battery retainer with velcro as shown below.
Follow the DSM instructions for how to use the rc_bind_dsm and rc_calibrate_dsm example programs to get your transmitter and receiver working. When you have gotten the rc_test_dsm example to confirm the transmitter and receiver are functioning properly, start the rc_balance example and try driving with the right joystick (channels 2&3) of the transmitter.
Pressing the MODE button on the Robotics Cape while the rc_balance example is running will toggle between 'easy' and 'fast' modes. The default 'easy' mode only allows very slow motion and is suitable for driving on a table top. 'Fast' mode is for driving around on the floor and is great fun.
Many different methods exist for programming the EduMIP to supplement the C examples provided above. Below are some links to some of the various alternative approaches:
The eduMIP kit and other components are available here: https://www.renaissancerobotics.com/eduMIP.html
eduMIP design files
BeagleBone Blue source
eduMIP control software
Did you replicate this project? Share it!I made one
Love this project? Think it could be improved? Tell us what you think!