An extensible low-cost open platform for learning embedded control & robotics in multithreaded Linux. Runs ROS, Python, Simulink, LabVIEW.


Categories: Beginner

What is eduMIP?


is a highly extensible low-cost open platform for learning Embedded Control & Robotics. It works with the
BleagleBone Blue
, or with the Robotics Cape
coupled with a
BeagleBone Black
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.

eduMIP Assembly Instructions

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 Robotics Cape
coupled with a
BeagleBone Black
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

Step 1 – Disassemble the drivetrain

Use a small (P1) Philips screwdriver to remove the 8 screws holding the drivetrain assembly together. These screws are highlighted in red below.

Step 2 – Wire up the motors

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.

Step 3 – Reassemble the drivetrain

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.

Step 4 – Attach the bulkhead

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.

Step 5a: Attach a BB Black + Robotics Cape

(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.

Step 5b: Attach a BB Blue

(scroll up and follow Step 5a if using a BB Black + Robotics Cape.) Instructions/pictures coming soon.

Step 6 – Batteries

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.

Step 7 – Wheels

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).

Step 8 – Charge & Balance!

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.

Optional Step 9 – DSM2 Radio

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.

OrangeRx Satellite Receiver
OrangeRx 6-channel Transmitter
are inexpensive and work quite well. Spectrum and JR products also work well.

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.

Additional software approaches

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:

Where to buy?

The eduMIP kit and other components are available here:

Comments are not currently available for this post.