Browse files


  • Loading branch information...
AndreaCensi committed Jun 22, 2018
1 parent 77e96e7 commit 39aa6ead4f8d7c11ed6ae5382801b758af87174f
Showing 313 changed files with 7,141 additions and 0 deletions.
@@ -0,0 +1,3 @@
# Duckiebot operation manual {#book:opmanual_duckiebot status=ready}
Maintainer: Jacopo Tani
@@ -0,0 +1,3 @@
# Operation manual - Duckiebot {#part:building-duckiebot-c0}
In this section you will find information to obtain the necessary equipment for Duckietowns and different Duckiebot configurations.
@@ -0,0 +1,37 @@
# Duckiebot configurations {#duckiebot-configurations status=ready}
Note: We are currently revising the Duckiebot configurations for the upcoming semester, when Duckietown 1.0 will be officially released. Stay tuned!
TODO for Jacopo Tani: update configurations
<div class='requirements' markdown="1">
Requires: nothing
Results: Knowledge of Duckiebot configuration naming conventions and their respective functionalities.
We define different Duckiebot configurations depending on their time of use and hardware components. This is a good starting point if you are wondering what parts you should obtain to get started.
Once you have decided which configuration best suits your needs, you can proceed to the detailed descriptions for [`DB17-wjd`](#acquiring-parts-c0) or [`DB17-wjdlc`](#acquiring-parts-c1) Duckiebot.
The configurations are defined with a root: `DB17-`, indicating the "bare bones" Duckiebot used in the Fall 2017 synchronized course, and an appendix `y` which can be the union (in any order) of any or all of the elements of the optional hardware set $\aset{O} = \{$`w`, `j`, `d`, `p`, `l`, `c`$\}$.
A `DB17` Duckiebot can navigate autonomously in a Duckietown, but cannot communicate with other Duckiebots.
The elements of $\aset{O}$ are labels identifying optional hardware that aids in the development phase and enables the Duckiebot to talk to other Duckiebots. The labels stand for:
- `w`: 5 GHz **w**ireless adapter to facilitate streaming of images;
- `j`: wireless **j**oypad that facilitates manual remote control;
- `d`: USB **d**rive for additional storage space;
- `c`: a different **c**astor wheel to _replace_ the preexisting omni-directional wheel;
- `p`: **P**WM hat for convenient powering of the DC motor hat;
- `l`: includes **L**EDs, LED hat, bumpers and the necessary mechanical bits to set the bumpers in place. Note that the installation of the bumpers induces the _replacement_ of a few `DB17` components;
Note: During the Fall 2017 course, three Duckietown Engineering Co. branches (Zurich, Montreal, Chicago) are using these configuration naming conventions. Moreover, all institutions release hardware to their Engineers in training in two phases.
@@ -0,0 +1,265 @@
# Acquiring the parts (`DB17-jwd`) {#acquiring-parts-c0 status=ready}
Note: We are currently revising the Duckiebot configurations for the upcoming semester, when Duckietown 1.0 will be officially released. Stay tuned!
TODO for Jacopo Tani: update configurations
The trip begins with acquiring the parts. Here, we provide a link to all bits and pieces that are needed to build a Duckiebot, along with their price tag. If you are wondering what is the difference between different Duckiebot configurations, read [this](#duckiebot-configurations).
In general, keep in mind that:
- The links might expire, or the prices might vary.
- Shipping times and fees vary, and are not included in the prices shown below.
- Substitutions are OK for the mechanical components,
and not OK for all the electronics, unless you are OK in writing
some software.
- Buying the parts for more than one Duckiebot makes each one cheaper than buying only one.
- For some components, the links we provide contain more bits than actually needed.
<div class='requirements' markdown="1">
Requires: Cost: USD 174 + Shipping Fees (minimal configuration `DB17`)
Requires: Time: 15 days (average shipping for cheapest choice of components)
Results: A kit of parts ready to be assembled in a `DB17` or `DB17-wjd` configuration.
Next steps: After receiving these components, you are ready to do some [soldering](#soldering-boards-c0) before [assembling](#assembling-duckiebot-db17-ttic) your `DB17` or `DB17-wjd` Duckiebot.
## Bill of materials
(<s>[4 Spacers (M3x5)](</s><s>USD</s>)
(<s>[4 Screws (M3x10)](</s><s>USD</s>)
(We can make the minimal configuration cheaper by USD20 removing the 16GB Class 10 MicroSD Card and stick with default)
<div markdown="1">
<col2 id='materials' figure-id="tab:materials" figure-caption="Bill of materials">
<s>[Chassis](</s> <s>USD 20</s>
<s>[Camera with 160-FOV Fisheye Lens](</s> <s>USD 22</s>
<s>[Camera Mount](</s> <s>USD 8.50</s>
<s>[300mm Camera Cable](</s> <s>USD 2</s>
<s>[Raspberry Pi 3 - Model B](</s> <s>USD 35</s>
<s>[Heat Sinks](</s> <s>USD 2.90</s>
<s>[Power supply for Raspberry Pi](</s> <s>USD 7.50</s>
<s>[16 GB Class 10 MicroSD Card](</s> <s>USD 10</s>
<s>[Mirco SD card reader](</s><s>USD 6 </s>
<s>[DC Motor HAT](</s> <s>USD 22.50</s>
<s>[2 Stacking Headers](</s><s>USD 2.50/piece</s>
<s>[Battery](</s> <s>USD 20</s>
<s>[16 Nylon Standoffs (M2.5 12mm F 6mm M)](</s> <s>USD 0.05/piece</s>
<s>[4 Nylon Hex Nuts (M2.5)](</s> <s>USD 0.02/piece</s>
<s>[4 Nylon Screws (M2.5x10)](</s> <s>USD 0.05/piece</s>
<s>[2 Zip Ties (300x5mm)](</s> <s>USD 9</s>
<s>[Wireless Adapter (5 GHz)]( (`DB17-w`)</s><s>USD 20</s>
<s>[Joypad]( (`DB17-j`)</s> <s>USD 10.50</s>
<s>[Tiny 32GB USB Flash Drive]( (`DB17-d`)</s> <s>USD 12.50</s>
<s>Total for `DB17` configuration</s> <s>USD 173.6</s>
<s>Total for `DB17-w` configuration</s> <s>USD 193.6</s>
<s>Total for `DB17-j` configuration</s> <s>USD 184.1</s>
<s>Total for `DB17-d` configuration</s> <s>USD 186.1</s>
<s>Total for `DB17-wjd` configuration</s> <s>USD 216.6</s>
<col2 figure-id="tab:materials-optionals" figure-caption="Bill of optional materials">
<span>USD 6.55/4 pieces</span>
<span>[4 Standoffs (M3.5 12mm F-F)](</span>
<span>USD 0.63/piece</span>
<span>[8 Screws (M3.5x8mm)](</span>
<span>USD 4.58/100 pieces</span>
<span>[8 Split washer lock](</span>
<span>USD 1.59/100 pieces</span>
<col2 id='materials-optionals' figure-id="tab:materials-optional" figure-caption="Bill of optional materials">
<s>[Caster](</s> <s>USD 6.55/4 pieces</s>
<s>[4 Standoffs (M3.5 12mm F-F)](</s> <s>USD 0.63/piece</s>
<s>[8 Screws (M3.5x8mm)](</s> <s>USD 4.58/100 pieces</s>
<s>[8 Split washer lock](</s> <s>USD 1.59/100 pieces</s>
#materials {
font-size: 80%;
#materials TD {
text-align: left;
## Chassis
We selected the Magician Chassis as the basic chassis for the robot ([](#fig:magician_chassis)).
We chose it because it has a double-decker configuration, and so we can put the battery in the lower part.
The chassis pack includes 2 DC motors and wheels as well as the structural part, in addition to a screwdriver and several necessary mechanical bits (standoffs, screws and nuts).
<div figure-id="fig:magician_chassis" figure-caption="The Magician Chassis">
<img src="magician_chassis.jpg" style='width: 15em'/>
## Raspberry Pi 3 - Model B
The Raspberry Pi is the central computer of the Duckiebot. Duckiebots use Model B ([](#fig:rpi3b)) ( A 1.2GHz 64-bit quad-core ARMv8 CPU, 1GB RAM), a small but powerful computer.
<div figure-id="fig:rpi3b" figure-caption="The Raspberry Pi 3 Model B">
<img src="rpi3b.png" style='width: 15em'/>
### Power Supply
We want a hard-wired power source (5VDC, 2.4A, Micro USB) to supply the Raspberry Pi ([](#fig:power_supply)) while not driving. This charger can double down as battery charger as well.
<div figure-id="fig:power_supply" figure-caption="The Power Supply">
<img src="power_supply.png" style='width: 15em'/>
Note: Students in the ETHZ-Fall 2017 course will receive a converter for US to CH plug.
### Heat Sinks
The Raspberry Pi will heat up significantly during use. It is warmly recommended to add heat sinks, as in [](#fig:heat_sinks). Since we will be stacking HATs on top of the Raspberry Pi with 15 mm standoffs, the maximum height of the heat sinks should be well below 15 mm. The chip dimensions are 15x15mm and 10x10mm.
<div figure-id="fig:heat_sinks" figure-caption="The Heat Sinks">
<img src="heat-sinks.jpg" style='width: 15em'/>
### Class 10 MicroSD Card
The MicroSD card ([](#fig:SDcard)) is the hard disk of the Raspberry Pi. 16 GB of capacity are sufficient for the system image.
<div figure-id="fig:SDcard" figure-caption="The MicroSD card">
<img src="SDcard.png" style='width: 15em'/>
### Mirco SD card reader
A microSD card reader ([](#fig:microsd-reader)) is useful to copy the system image to a Duckiebot from a computer to the Raspberry Pi microSD card, when the computer does not have a native SD card slot.
<div figure-id="fig:microsd-reader" figure-caption="The Mirco SD card reader">
<img src="microsd-reader.png" style='width: 15em'/>
## Camera
The Camera is the main sensor of the Duckiebot. All versions equip a 5 Mega Pixels 1080p camera with wide field of view ($160^\circ$) fisheye lens ([](#fig:camera)).
<div figure-id="fig:camera" figure-caption="The Camera with Fisheye Lens">
<img src="camera.png" style='width: 15em'/>
### Camera Mount
The camera mount ([](#fig:camera_mount)) serves to keep the camera looking forward at the right angle to the road (looking slightly down). The front cover is not essential.
<div figure-id="fig:camera_mount" figure-caption="The Camera Mount">
<img src="camera-mount.jpg" style='width: 15em'/>
The assembled camera (without camera cable), is shown in ([](#fig:mounted-camera)).
<div figure-id="fig:mounted-camera" figure-caption="The Camera on its mount">
<img src="mounted-camera.jpg" style='width: 15em'/>
### 300mm Camera Cable
A longer (300 mm) camera cable [](#fig:long_camera_cable) makes assembling the Duckiebot easier, allowing for more freedom in the relative positioning of camera and computational stack.
<div figure-id="fig:long_camera_cable" figure-caption="A 300 mm camera cable for the Raspberry Pi">
<img src="long_camera_cable.png" style='width: 15em'/>
## DC Motor HAT
We use the DC Stepper motor HAT ([](#fig:motor_hat)) to control the DC motors that drive the wheels. This item will require [soldering]( to be functional. This HAT has dedicate PWM and H-bridge for driving the motors.
<div figure-id="fig:motor_hat" figure-caption="The Stepper Motor HAT">
<img src="motor_hat.png" style='width: 15em'/>
### Stacking Headers
We use a long 20x2 GPIO stacking header ([](#figure:stacking_header)) to connect the Raspberry Pi with the DC Motor HAT. This item will require [soldering](#soldering-boards-c0) to be functional.
<div figure-id="fig:stacking_header" figure-caption="The Stacking Headers">
<img src="stacking_header.png" style='width: 15em'/>
## Battery
The battery ([](#fig:battery)) provides power to the Duckiebot.
We choose this battery because it has a good combination of size (to fit in the lower deck of the Magician Chassis), high output amperage (2.4A and 2.1A at 5V DC) over two USB outputs, a good capacity (10400 mAh) at an affordable price. The battery linked in the table above comes with two USB to microUSB cables.
<div figure-id="fig:battery" figure-caption="The Battery">
<img src="battery-and-cables.jpg" style='width: 15em'/>
## Standoffs, Nuts and Screws
We use non electrically conductive standoffs (M2.5 12mm F 6mm M), nuts (M2.5), and screws (M2.5x10mm) to hold the Raspberry Pi to the chassis and the HATs stacked on top of the Raspberry Pi.
The Duckiebot requires 8 standoffs, 4 nuts and 4 screws.
<div figure-id="fig:stands_nuts_screws" figure-caption="Standoffs, Nuts and Screws">
<img src="mech-bits.jpg" style='width: 15em'/>
## Zip Tie
Two 300x5mm zip ties are needed to keep the battery at the lower deck from moving around.
<div figure-id="fig:zipties" figure-caption="The zip ties">
<img src="zipties.png" style='width: 15em'/>
## Configuration `DB17-w`
### Wireless Adapter (5 GHz)
The Edimax AC1200 EW-7822ULC 5 GHz wireless adapter ([](#fig:edimax)) boosts the connectivity of the Duckiebot, especially useful in busy Duckietowns (e.g., classroom). This additional network allows easy streaming of images.
<div figure-id="fig:edimax" figure-caption="The Edimax AC1200 EW-7822ULC wifi adapter">
<img src="edimax.png" style='width: 15em'/>
## Configuration `DB17-j`
### Joypad
The joypad is used to manually remote control the Duckiebot. Any 2.4 GHz wireless controller (with a _tiny_ USB dongle) will do.
The model linked in the table ([](#fig:joystick)) does not include batteries.
<div figure-id="fig:joystick" figure-caption="A Wireless Joypad">
<img src="joystick.png" style='width: 15em'/>
Requires: 2 AA 1.5V batteries ([](#fig:batteries)).
<div figure-id="fig:batteries" figure-caption="A Wireless Joypad">
<img src="batteries.jpg" style='width: 15em'/>
## Configuration `DB17-d`
### Tiny 32GB USB Flash Drive
In configuration `DB17-d`, the Duckiebot is equipped with an "external" hard drive ([](#fig:USBdrive)). This add-on is very convenient to store logs during experiments and later port them to a workstation for analysis. It provides storage capacity and faster data transfer than the MicroSD card.
<div figure-id="fig:USBdrive" figure-caption="The Tiny 32GB USB Flash Drive">
<img src="USBdrive.png" style='width: 15em'/>
@@ -0,0 +1,80 @@
# Soldering boards (`DB17`) {#soldering-boards-c0 status=deprecated}
Assigned: Shiying Li
Shiying: how long does it take to solder the stuff described in this chapter? (I guessed 30 mins, change it with the real number)
<div class='requirements' markdown="1">
Requires: Parts: Duckiebot `DB17` parts. The acquisition process is explained in [](#acquiring-parts-c0). The configurations are described in [](#duckiebot-configurations). In particular:
- [GPIO Stacking Header](
- [DC and Stepper Motor HAT for Raspberry Pi](
Requires: Tools: Solderer
Requires: Experience: some novice-level experience with soldering.
Requires: Time: 30 minutes
Results: Soldered DC Motor HAT
Note: It is better to be safe than sorry. Soldering is a potentially hazardous activity. There is a fire hazard as well as the risk of inhaling toxic fumes. Stop a second and make sure you are addressing the safety standards for soldering when following these instructions. If you have never soldered before, seek advice.
## General tips
Note: There is a general rule in soldering: solder the components according to their height, from lowest to highest.
In this instruction set we will assume you have soldered something before and are acquainted with the soldering fundamentals. If not, before proceeding, read this great tutorial on soldering:
See: [Alternative instructions: how to solder on Headers and Terminal Block](
### Preparing the components
Take the GPIO stacking header [](#fig:GPIO_Stacking_Header) out of Duckiebox and sort the following components from DC motor HAT package:
- Adafruit DC/Stepper Motor HAT for Raspberry Pi
- 2-pin terminal block (2x), 3-pin terminal block (1x)
<div figure-id="fig:GPIO_Stacking_Header" figure-caption="GPIO_Stacking_Header">
<img src="GPIO_Stacking_Header.jpg" style='width: 30ex; height: auto'/>
<div figure-id="fig:DC/Stepper_HAT" figure-caption="DC/Stepper Motor HAT and solder components">
<img src="DC_stepper_HAT.jpg" style='width: 30ex; height: auto'/>
### Soldering instructions
1) Make a 5 pin terminal block by sliding the included 2 pin and 3 pin terminal blocks into each other [](#fig:terminal_block).
<div figure-id="fig:terminal_block" figure-caption="5 pin terminal_block">
<img src="terminal_block.jpg" style='width: 30ex; height: auto'/>
2) Slide this 5 pin block through the holes just under "M1 GND M2" on the board. Solder it on (we only use two motors and do not need connect anything at the "M3 GND M4" location) ([](#figure:upview_Stepper_Motor));
3) Slide a 2 pin terminal block into the corner for power. Solder it on. ([](#figure:sideview_terminal));
4) Slide in the GPIO Stacking Header onto the 2x20 grid of holes on the edge opposite the terminal blocks and with vice versa direction ([](#figure:GPIO_HAT_orientation)). Solder it on.
Note: stick the GPIO Stacking Header from bottom to top, different orientation than terminal blocks (from top to bottom).
<div figure-id="fig:GPIO_HAT_orientation" figure-caption=" ">
<img src="GPIO_HAT_orientation.jpg" style='width: 30ex; height: auto'/>
<div figure-id="fig:sideview_terminal" figure-caption="Side view of finished soldering DC/Stepper Motor HAT">
<img src="sideview_Stepper_HAT.jpg" style='width: 30ex; height: auto'/>
<div figure-id="fig:upview_Stepper_Motor" figure-caption="upside view of finished soldering DC/Stepper Motor HAT">
<img src="upview_stepper_Motor.jpg" style='width: 30ex; height: auto'/>
Oops, something went wrong.

0 comments on commit 39aa6ea

Please sign in to comment.