Strider Camera Robot

13,572

149

21

Introduction: Strider Camera Robot

About: Make it yourself if you cannot buy one!

This Instructables show how to use ESP32-CAM and 3D printed parts build a Strider Camera Robot.

Supplies

ESP32-CAM-MB:

https://www.aliexpress.com/wholesale?SearchText=es...

LiFePO4 14500 Battery with charger:

https://www.aliexpress.com/wholesale?SearchText=li...

N20 3V 200RPM Motor:

https://www.aliexpress.com/wholesale?SearchText=n2...

DRV8833 2 Channel DC Motor Driver Module Board:

https://www.aliexpress.com/wholesale?SearchText=dr...

2 pieces of 8 pins pin header female:

https://www.aliexpress.com/wholesale?SearchText=pi...

8 pieces of 6702ZZ bearing:

https://www.aliexpress.com/wholesale?SearchText=67...

100 pieces of 6mm long M2 Flat Head Screw:

https://www.aliexpress.com/wholesale?SearchText=m2...

2 pieces of 155mm long 2mm diameter rod:

6 pieces of 15mm long 2mm diameter rod:

https://www.aliexpress.com/wholesale?SearchText=2m...

Step 1: What Is Strider?

Strider is a mechanical walker developed by Wade Vagle. Strider is evolved from many design iterations, so it walks (runs) very well.

When I post the insructables Lego Trotbot at 2018, Wade Vagle suggest me try Strider. Finally I have time to build this :P

You can find many valuable information about mechanical walker design at diywalkers.com.

Ref.:

https://www.diywalkers.com/walker-abcs.html

https://www.diywalkers.com/strider-linkage-plans.h...

Step 2: Strandbeest Vs Strider

How Strider walks well? let's compare with a Strandbeest I assembly few years before.

Strandbeest only can walk on a very flat surface, it even cannot walk through a mat; In contrast, a smaller size Strider can walk through same mat very well.

This reminded me someone taught me when I am little: you should lift the toes to avoid tripping.

Step 3: Battery

This walker design have two 14500 (AA size) battery slots.

Here are the voltage requirement:

  • ESP32-CAM requires 3.3 V power, the on board voltage regulator (AMS1117) accept maximum 15 V.
  • N20 motors can powered from 3 - 12 V, higher voltage can runs faster.
  • DRV8833 motor driver accept 2.7 - 10.8 V.

14500 Battery evaluation:

  • NiMH battery, 2 x 1.0 - 1.25 V = 2 - 2.5 V, not enough power
  • Li-Ion battery, 2 x 2.5 - 4.35 V = 5 - 8.7 V, it can fulfill the power requirements
  • LiFePO4 battery, 2 x 2.0–3.65 = 4.0 - 7.3 V, it can fulfill the power requirements and have a better battery safety

So you can use two 14500 Li-Ion or LiFePO4 batteries. LiFePO4 battery is preferred. If you select Li-Ion battery, remember select the battery have built-in protection board or insert a protection circuit in the middle.

Ref.:

https://en.wikipedia.org/wiki/Nickel–metal_hydride_battery

https://en.wikipedia.org/wiki/Lithium-ion_battery

https://en.wikipedia.org/wiki/Lithium_iron_phosphate_battery

Step 4: Motor

This Strider use 2 tiny N20 gear motors. This gear motor has many gear ratio available. I have tested 3 ratio from 3V 100RPM, 200 RPM to 500RPM. 3V 500RPM can run very fast, but camera robot requires a steady walk for a better camera live view, so I recommend 3V 200 RPM.

Note:

The operation voltage and rotation speed is in linear ratio, 3V 100RPM means 6V 200RPM.

Step 5: Thin Wall Ball Bearing

Strider or other walkers require pass rotation movement from motor to few pairs of legs. However, the rotation cannot direct drive by a straight axis, so I use some thin wall ball bearing build a stable crankshaft to pass the rotation movement.

8 pieces of 6702ZZ bearing required, the inner diameter is 15mm, outer diameter is 21mm and the width is 4mm.

Step 6: Screws

Screws is very important for connect everything together, leg joints, body parts, battery holders and electronics components.

For simplicity, all connections designed use same screw size. It is 6mm long M2 flat head screws, this robot requires 72 pieces for assembly. More spares is always welcome, I think 100 pieces is a reasonable quantity.

Step 7: 2mm Diameter Rod

It is not easy direct order a 155mm long 2mm diameter rod, but you can cut it yourself. E.g. order two 200mm long rod can cut into two 155mm and six 15mm long rod.

Step 8: 3D Printed Parts

Download and 3D print all the parts at thingiverse: https://www.thingiverse.com/thing:4917588

Note:

The file name tail with "_x2" means print 2 copies ... "_x12" means print 12 copies.

Step 9: Hole Patching

3D printed parts may not print prefect round holes, a 2.1 mm drill bit can help patch the holes to a better shape.

Step 10: Core Assembly

Use 4 screws combine core1, core2a and core2b together.

Step 11: Install Motors

Please note 2 motors aligned in 90 degree to avoid the motor terminals contacted unexpectedly.

Step 12: Motor Axis & Body Assembly

  1. Push thin wall ball bearing into body2
  2. Push the axis3 into the thin wall ball bearing
  3. Repeat step 1-2 once to make 2 copies

Step 13: Install Motor Axis

Align the D shape motor axis to axis3 and push it in.

Step 14: Install Cover

Use 8 screws fix cover1 and cover2 to the core body.

Step 15: Install 155mm Rods

Pass pair of the 155mm long 2mm diameter rods through the body hole.

Step 16: Legs Assembly

  1. Use 1 screw connect leg2, leg3 and leg1 together
  2. Use 1 screw connect leg3 and leg4 together
  3. Repeat step 1-2 once to make second leg
  4. Mirror second leg to the right
  5. Use 2 screws connect two leg2 and leg4 together
  6. Repeat step 1-5 to make 6 pair of legs

Step 17: Install Legs

  1. Install 15mm rod into the axis3
  2. Let both leg1 holes pass through the 155mm rods
  3. Let both leg2 middle holes pass through the 15mm rod

Step 18: Axis & Body Assembly

  1. Push thin wall ball bearing into body2
  2. Push the axis2 into the thin wall ball bearing
  3. Repeat step 1-2 3 times to make 4 copies

Step 19: Install Axis Body

  1. Let the body2 holes pass through the 155mm rods
  2. Align the axis hole and pass through the 15mm rod
  3. Use 2 screws fix the axis body

Step 20: Repeat Leg Installation

Each side have 3 pairs of legs; each pair of legs shift crankshaft in 60 degrees.

Step 21: Edge Axis & Body Assembly

  1. Push thin wall ball bearing into body1
  2. Push the axis1 into the thin wall ball bearing
  3. Repeat step 1-2 once to make 2 copies

Step 22: Install Body Edge

  1. Align axis1 hole and pass through the 15mm rod
  2. Use 2 screws fix the body edge

Step 23: Connect Battery Holder

Connect Battery Holder in series with Wires. It is highly recommended use red and blue wire to indicate battery positive and negative pole.

Step 24: Arrange Battery Wires

Arrange battery holder red and blue wires and pass through Core2b hole.

Step 25: Fix Battery Holder

Use 8 screws fix 2 battery holders to the core2a and core2b.

Step 26: Software Preparation

Arduino IDE

Download and install Arduino IDE if you are not yet do it:

https://www.arduino.cc/en/main/software

ESP32 Support

Follow the Installation Instructions to add ESP32 support if you are not yet do it:

https://github.com/espressif/arduino-esp32

Arduino ESP32 filesystem uploader

Follow the installation steps to install Arduino ESP32 filesystem uploader if you are not yet do it:

https://github.com/lorol/arduino-esp32fs-plugin

FSBrowserPlus

Download FSBrowserPlus: (press "Clone or Download" -> "Download ZIP")

https://github.com/moononournation/FSBrowserPlus

Import libraries in Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add .ZIP Library" -> select downloaded ZIP file)

ESP Async Web Server Library

Download latest ESPAsyncWebServer libraries: (press "Clone or Download" -> "Download ZIP")

https://github.com/arjenhiemstra/ESPAsyncWebServer

Import libraries in Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add .ZIP Library" -> select downloaded ZIP file)

Step 27: Configuration

Camera Type

In "FSBrowserPlus.ino", uncomment your camera model at around line 28 and comment out all others. E.g. CAMERA_MODEL_ESP32_CAM_ROBOT for this Strider Camera Robot.

// Select camera model
// #define CAMERA_MODEL_WROVER_KIT // Has PSRAM
// #define CAMERA_MODEL_ESP_EYE // Has PSRAM
// #define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
// #define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
// #define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
// #define CAMERA_MODEL_ESP32_CAM // Has PSRAM
#define CAMERA_MODEL_ESP32_CAM_ROBOT // Has PSRAM
// #define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
// #define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
// #define CAMERA_MODEL_JSZWY_CYIS
#include "cameraAPI.h"

Motor Pins

CAMERA_MODEL_ESP32_CAM_ROBOT also defined motor pins in "camera_pins.h":

#define MOTOR
#define MotorL_A_Pin 13
#define MotorL_B_Pin 12
#define MotorR_A_Pin 2
#define MotorR_B_Pin 14

LED Light Pin

The LED is direct controlled by web GPIO API. Currently it is GPIO 4, you can alter the LED pin at around line 616 of "camerarobot.htm":

const query = `${baseHost}/gpio?pin=4&val=${value}`;

Step 28: Compile & Upload

  1. Connect the ESP32-CAM to USB Serial Dock
  2. Open Arduino IDE
  3. Open FSBrowserPlus.ino
  4. Edit the ssid and password to your own WiFi AP credential
  5. Select Board to "ESP32 Dev Module" in "Tools" menu
  6. Select Partition Scheme to "Default 4MB with fat (1.2MB APP/1.5MB FATFS)" in "Tools" menu
  7. Press Arduino IDE "Upload" button
  8. Select "ESP32 Sketch Data Upload" in "Tools" menu
  9. Select FS Type to "FatFS" and press "OK" button

Step 29: Prepare PCB

  1. Cut a PCB to 10 x 10 holes
  2. Drill 4 holes at C3, H3, C8 and H8 (fit for core1 hole positions)

Step 30: Soldering Work

ESP32-CAM not built-in USB serial chip, it is better use pin headers to help detach and reprogram easier.

Here are the connection summary:

Battery  -> Switch -> ESP32-CAM -> DRV8833  -> Motor
+ve pole -> Pin 1
            Pin 2  -> 5V        -> Vcc
-ve pole ->           GND       -> GND
                      GPIO 12   -> IN1
                      GPIO 13   -> IN2
                      GPIO 14   -> IN3
                      GPIO 2    -> IN4
                                   OUT1     -> LEFT +ve
                                   OUT2     -> LEFT -ve
                                   OUT3     -> RIGHT -ve
                                   OUT4     -> RIGHT +ve
                                   short J2

Step 31: Fix PCB

Use 4 screws fix PCB on core1.

Step 32: Arrange & Connect Wires

Connect battery and motors pins to PCB.

Step 33: Install ESP32-CAM

  1. Plug the ESP32-CAM to pin header
  2. Stick a heatsink on SD card reader
  3. Stick the camera module on the heatsink

Step 34: Install Battery

Remind the battery pole is correct before install or it will burnt the chips. Thats why I highly recommended use red and blue wires in battery holders.

Step 35: Connect & Play

FSBrowserPlus is running in AP+STA dual mode.

If you have inputted your WiFi AP and password, you can direct browse to http://fsbrowserplus.local access the FSBrowserPlus, but it is limited to the WiFi AP coverage area.

If you have bring the camera robot outside and out of WiFi AP coverage area, simply search WiFi AP called "fsbrowserplus" and input predefined password in the code to connect. Once it is connected, a Captive Portal web page will pop up.

Then select the Camera Robot shortcut.

Step 36: Enjoy!

Wade Vagle comments in Youtube this is tiniest Strider. But it is still too wide in size for remote control, now it is very easy block by the obstacle outside the camera view.

I will try to fix it in next iteration. Follow my Twitter (陳亮手痕定律) for the latest news:

https://twitter.com/moononournation

Step 37: Optional External Antenna

Some vendor can provide ESP32-CAM in different antenna options. External antenna can improve the camera video streaming performance.

Make it Move Challenge

Grand Prize in the
Make it Move Challenge

Be the First to Share

    Recommendations

    • Eggs Challenge

      Eggs Challenge
    • Build a Tool Contest

      Build a Tool Contest
    • First Time Author Contest

      First Time Author Contest

    21 Comments

    0
    auguststraughn
    auguststraughn

    Question 3 months ago

    When I use the sketch data uploader and choose FatFS and click "ok" I get this error...
    FatFS Error: mkfatfsnot found!

    What am I doing wrong? Also should the serial monitor be readable? Mine just reads gibberish so I'm not sure if I have the baud rate right.

    0
    陳亮
    陳亮

    Answer 3 months ago

    mkfatfs is not built-in command, you may comment out all FFat code and uncomment all LittleFS code to switch to LittleFS instead.

    0
    auguststraughn
    auguststraughn

    Reply 3 months ago

    Ended up getting that working. Thanks! When I compile and upload to the ESP it's successful but I don't think I've got everything right. No webserver shows up when I look for it. And also when I use my breadboard to test everything and power up the ESP one servo just spins uncontrollably. What exactly should be before and in the void setup and void loop.

    0
    陳亮
    陳亮

    Reply 3 months ago

    before ESP32 enter the program, some gpio boot up in high state and some are low. so the motor spin means not yet enter the gpio init code.

    0
    gmo_de
    gmo_de

    Question 9 months ago

    Thank you for this beautiful project !!!

    We have build it with enthusiasm.

    Building the software and programming the ESP was not easy, but in principle it worked.
    Unfortunately, the software does not seem to work completely for us.
    We used the ESP32-CAM as described in the manual. Unfortunately, we do not get a picture of the camera in the web interface. We have already tried both camera models: CAMERA_MODEL_ESP32_CAM_ROBOT and CAMERA_MODEL_ESP32_CAM, but unfortunately none of them worked. (see camera capture fails message below)
    We also have continuous reboots with the controller.

    It seems maybe that we still have something incorrect when building the software?

    Is there a possibility to get a ready ESP32-CAM bin file ?
    Or does anyone have a hint what we could check ?

    My RS232 Log output:

    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0030,len:1240
    load:0x40078000,len:13012
    load:0x40080400,len:3648
    entry 0x400805f8
    FS File: arrows.svg.gz, size: 1.56KB
    FS File: wstester.htm, size: 3.75KB
    FS File: ov2640.htm, size: 25.41KB
    FS File: mode-html.js.gz, size: 16.64KB
    FS File: camerarobot.htm, size: 30.15KB
    FS File: touchremote.htm, size: 5.53KB
    FS File: mode-css.js.gz, size: 5.96KB
    FS File: ext-searchbox.js.gz, size: 3.06KB
    FS File: index.htm, size: 999B
    FS File: mode-javascript.js.gz, size: 6.17KB
    FS File: graphs.htm, size: 3.19KB
    FS File: favicon.ico.gz, size: 2.29KB
    FS File: graphs.js.gz, size: 1.92KB
    FS File: ace.js.gz, size: 96.62KB
    FS File: worker-html.js.gz, size: 48.85KB
    FS File: pose.htm, size: 6.40KB

    STA: Failed!
    ESP Async Web Server started.
    E (15005) cam_hal: cam_dma_config(271): frame buffer malloc failed
    E (15005) cam_hal: cam_config(355): cam_dma_config failed
    E (15006) camera: Camera config failed with error 0xffffffff
    Camera capture failed
    Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.


    Many greetings
    Gunther

    0
    陳亮
    陳亮

    Answer 9 months ago

    I also encountered this problem with latest arduino-esp32 2.0.1. Please use arduino-esp32 1.0.6 instrad.

    0
    gmo_de
    gmo_de

    Reply 8 months ago

    Thanks a lot !!!
    With Ver 1.0.6 it look likes much better

    The camera is now working !
    If we not use the motor control the connection is stable.

    But if we use the remote control in "touch remote" or in "camera robot" , the ESP reboots directly.
    We tests a lot of different configuration.
    We also updated to your last commit from 27.Nov but always the same result.
    :-(

    Any idea what we can improve is very welcome

    Log from reboot:
    ===============
    rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:1216
    ho 0 tail 12 room 4
    load:0x40078000,len:10944
    load:0x40080400,len:6388
    entry 0x400806b4
    FS File: /arrows.svg.gz, size: 1.56KB
    FS File: /wstester.htm, size: 3.75KB
    FS File: /ov2640.htm, size: 25.48KB
    FS File: /mode-html.js.gz, size: 16.64KB
    FS File: /ov3660.htm, size: 26.05KB
    FS File: /camerarobot.htm, size: 30.17KB
    FS File: /touchremote.htm, size: 5.53KB
    FS File: /mode-css.js.gz, size: 5.96KB
    FS File: /ext-searchbox.js.gz, size: 3.06KB
    FS File: /index.htm, size: 1020B
    FS File: /mode-javascript.js.gz, size: 6.17KB
    FS File: /graphs.htm, size: 3.19KB
    FS File: /favicon.ico.gz, size: 2.29KB
    FS File: /graphs.js.gz, size: 1.92KB
    FS File: /ace.js.gz, size: 96.62KB
    FS File: /worker-html.js.gz, size: 48.85KB
    FS File: /pose.htm, size: 6.40KB

    Connect WiFi
    Retry WiFi connection
    Starting stream server on port: 81/32769
    ESP Async Web Server started.
    ws[/ws][1] connect
    ws[/ws][1] pong[0]:
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] frame[1701536623] start[0]
    ws[/ws][1] frame[1701536623] binary[0 - 0]:
    ws[/ws][1] frame[1701536623] end[0]
    ws[/ws][1] error(44474): ;�?<<�?
    Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
    Core 1 register dump:
    PC : 0x4008f7bf PS : 0x00060133 A0 : 0x8008fd9b A1 : 0x3fff64d0
    A2 : 0x3ffe0440 A3 : 0x00000064 A4 : 0x3ffe37d8 A5 : 0x00000000
    A6 : 0x00000000 A7 : 0x00000004 A8 : 0x00000001 A9 : 0xe1536a44
    A10 : 0x3ffe3ac0 A11 : 0x00000000 A12 : 0x3ffe3ac4 A13 : 0x3ffe377c
    A14 : 0x000000e8 A15 : 0x00000000 SAR : 0x00000004 EXCCAUSE: 0x0000001c
    EXCVADDR: 0xe1536a44 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xfffffffd

    ELF file SHA256: 0000000000000000

    Backtrace: 0x4008f7bf:0x3fff64d0 0x4008fd98:0x3fff64f0 0x40082bf5:0x3fff6510 0x40082c26:0x3fff6530 0x4008846d:0x3fff6550 0x4000beaf:0x3fff6570 0x400d592b:0x3fff6590 0x400d68c8:0x3fff65b0 0x400d6935:0x3fff65f0 0x400e1a95:0x3fff6610 0x400e1b29:0x3fff6650 0x400e213a:0x3fff6670 0x4008c6e2:0x3fff66a0

    Rebooting...



    0
    Hey Jude
    Hey Jude

    Tip 10 months ago

    Shout out to Theo Jansen: https://amzn.to/2Zveikx
    A great book for anyone interested in the origins of these 'walkers'.
    (Saw him once in Norway - well worth watching his talks on YT also!).

    0
    Hey Jude
    Hey Jude

    10 months ago

    Great project - and love the aesthetic/black background!

    0
    Ax0l0tl
    Ax0l0tl

    11 months ago

    Wish there was a no soldering version, I don't have one. Love that it Connects to your Phone though.

    0
    陳亮
    陳亮

    Reply 11 months ago

    Wish someone develop a student STEAM kit version

    0
    askjerry
    askjerry

    11 months ago

    This project is definitely in the category of AWESOME! I will be forwarding it to my students so that they can learn from it. thank you for such a detailed project!

    0
    Raghu09
    Raghu09

    11 months ago

    Awesome project.
    Sir can you please send/add circuit diagram as I'm a student /beginner so its little difficult to trace your circuit commands.
    Thank you

    0
    wadevag
    wadevag

    11 months ago

    Amazing work! I love the tiny size, but perhaps if you doubled the scale you could maintain the same width, and only double the height and length?

    0
    陳亮
    陳亮

    Reply 11 months ago

    Yes, I am working on it…

    0
    Ghloo
    Ghloo

    11 months ago

    Looks awesome ... and neater than motorizing an eBay walker! Thanks a lot, cannot wait now for my 3d printer to come!

    0
    masoud256
    masoud256

    11 months ago

    Very Nice!