[{Image src='attach/KD01/KD01-side.jpg' link='attach/KD01/KD01-side.jpg' width='400' caption='KD01 side view (click to enlarge)' align='right' class='imgFloatRight'}]

This page describes the __[KD01]__ robot, a 2 wheel (plus caster) __differential drive__ robot. It shares the same software, chassis components, basic drive train, motor encoders and controllers as the [KR01].

! Description

The [KR01] robot is still under development, and as an experimental platform it is performing admirably. 

[{Image src='https://robots.org.nz/wp-content/uploads/2021/02/kd01-plan-1881.jpg' link='https://robots.org.nz/wp-content/uploads/2021/02/kd01-plan-1881.jpg' width='400' caption='KD01 planning (click to enlarge)' align='right' class='imgFloatRight'}]

As it has no rotational steering like a car (i.e., its wheels are always facing perpendicular to the central axis of the robot), turning involves creating a difference in speed of either its port or starboard motors. Turning therefore requires wheel slippage. At an extreme, if the robot's wheels where so sticky that it couldn't slip over the surface of the ground, the robot couldn't turn at all. When the robot is on, say, a wooden floor, there is a noticeable shudder as its wheels alternately and unpredictably stick and un-stick from the surface, whereas on a dry wooden deck, on grass or dirt this wouldn't much of a problem.

So one limitation with its four wheel design — where the two motors on each side of the robot are wired in parallel to the motor controller — is that it has difficulty rotating in place when on any surface that provides significant friction for its silicon tires. When attempting to perform precise navigation on smooth indoor floors the KR01 is not really very well suited.

Hence the desire to build a differential drive robot.

...more later.


!! Available Media

There's not much online yet about the robot but there is a blog entry and three YouTube videos:

* [Differential Drive|https://robots.org.nz/2021/02/03/differential-drive/] (NZPRG blog entry)
* [KD01 Moth Behaviour|https://youtu.be/uoozN5BdepA]
* [KD01 Rotate in Place Test|https://youtu.be/HICrQzAZPow]
* [KD01 Rotate in Place|https://youtu.be/HFRrQuXLtvk] (first try)




!! I2C Bus

Things change all the time, but here's a sample of what's on the robot:

{{% i2cdetect -y 1}}
{{{
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- 15 -- -- 18 -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- 4a -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- 74 -- -- 77  
}}}
* 0x15 : ThunderBorg motor controller
* 0x18 : RGB Encoder breakout
* 0x38 : HT0740 Switch (wired to cooling fan)
* 0x48 : ADS1015 AD converter
* 0x4A : BNO085 IMU
* 0x74 : starboard RGBMatrix5x5
* 0x77 : port RGBMatrix5x5



!! GPIO Pin Usage

[{Image src='https://service.robots.org.nz/wiki/attach/GPIO/raspberry-pi-pinout.png' width='900' caption='GPIO pins on a Raspberry Pi A+' align='center'}]

%%small
|| PIN                                 || PIN
| %%org 3V3 %%                         | %%red +5V %%
| __02__: SDA (I2C)                    | %%red +5V %%
| __03__: SCL (I2C)                    | %%grn GND %%
| __04__                               | __14__: TXD0
| %%grn GND %%                         | __15__: RXD0
| __17__: %%prp ENCODER A2 STBD %% (white)  | __18__: %%prp ENCODER B2 STBD %% %%gry (PCM_CLK) %% (violet)
| __27__: GPIO 27 (unused) | %%grn GND %%
| __22__: %%prp ENCODER A1 PORT %% (grey)  | __23__: %%prp ENCODER B1 PORT %% (blue) %%sup † %%
| %%org 3V3 %% %%sup † %%              | __24__: GPIO 24%%sup † %% __Button B on 1.14" Mini Pi TFT Display__
| __10__: MOSI%%sup † %%               | %%grn GND %% %%sup † %%
| __9__: MISO%%sup † %%                | __25__: GPIO 25%%sup † %% 
| __11__: SCLK%%sup † %%               | __8__: CE0%%sup † %% 
| %%grn GND %%                         | __7__: CE1  
| %%gry ID_SD %%                       | %%gry ID_SC %%
| __5__: ext clock (grey, from Itsy Bitsy) | %%grn GND %%
| __6__: rosd toggle switch (orange)   | __12__: PWM IRQ (TEMP)
| __13__:                              | %%grn GND %%
| __19__:                              | __16__: __Button A on 1.14" Mini Pi TFT Display__ (white/blue)
| __26__: (unused: conflict with SPI)  | __20__: __Mast IR__
| %%grn GND %%                         | __21__: 
%%
 
%%small
†   part of cable assembly connecting to [Adafruit 2.0" 320x240 Color IPS TFT Display|https://www.adafruit.com/product/4311] \\
‡   part of cable assembly connecting to [Adafruit 1.14" Mini Pi TFT Display|https://www.adafruit.com/product/4393]
%%
For sensor wires, wire markings are orange or red for port, green for starboard (just like on a boat).

! Links

* [Differential Wheeled Robot|https://en.wikipedia.org/wiki/Differential_wheeled_robot] on Wikipedia


----

[{Tag KD01 Robot Prototype}]