Robot Cat

44,187

360

29

Introduction: Robot Cat

About: Make it yourself if you cannot buy one!

This instructables show somethings about building a robot cat.

Supplies

Step 1: Why Build My Own Robot Cat?

I am playing with the well known Strandbeest many years ago and really love the artificial life. And then I tried Trotbot, but sorry about not yet built Wadevag suggested Strider :P

Two years ago, I start saw many robot cats and dogs projects on the web. They works, walk well and can do some pose. The only shortcoming is it does not look like a cat or dog.

So I try to build my own robot cat. The main target are look like a cat, act like a cat.

Ref.:

https://en.wikipedia.org/wiki/Theo_Jansen#The_str...

https://www.strandbeest.com

https://www.instructables.com/id/Design-Robot-Legs...

https://www.instructables.com/id/Lego-Trotbot/

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

Step 2: Bionics

In order to build a robot look like a cat, we need first study the cat skeleton.

Cat is a digitigrade, that means they stands or walks on its digits, or toes. So cat have noticeable 3 joints for the back legs while human(Plantigrade) only have 2 joints. For the cat front legs, the metacarpals is relatively too short. So it is noticeable 2 joints for the front legs. So the robot cat have 2 joints on the front legs and 3 joints on the back legs, i.e. 10 servos. (most other robot cats and dogs only have 2 joints for the back legs)

Head and neck should have many moving parts, turning, nodding and also ears, eyes and month motions; Tail motion is actual most difficult to imitate, it actually combined by tens of joints and muscles. In first phase, I would like concentrate on the 4 legs movement first. For simplicity, I just use 2 servos for turning and nodding the head and 1 servo to make some simple tail turning. Cat tail normally point to the ground, but I found a long tail pointing up make it look vitality, so it always tail up.

Ref.:

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

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

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

Step 3: 3D Printing

The robot cat 3D print prototype is already at the third iteration and may be more iteration later on.

Please download and print all the parts at thingiverse: https://www.thingiverse.com/thing:4164643

Step 4: Servo Driver Board

The first phase of robot cat reduced many moving parts, but it still requires 13 servos. In my previous experience, direct driver servos with MCU GPIO is not a good choice. The frequency signal may vary while MCU doing another job at the same time and the servo may become unstable or introduce unexpected behavior. Dedicate an individual driver board generate servo signal is much better.

PCA9685 driver board is a common solution, MCU simply use I2C interface communicate with the driver board and it can control 16 servos at the same time continuously.

Step 5: Robot Brain

Various MCU able to control a servo robot, here are some preference when I choose among them:

  • built-in vision sensor for future development
  • small enough to fit in the robot cat head
  • wireless connective
  • I2C interface to communicate with servo driver board

I have a M5Stack Camera Module in hand and it can fulfill all the above requirements.

Step 6: Measure & Adjust DC Regulators

Like most dev device, M5Stack Camera Module operate in 5 V.

Most tiny servo operate in 5-6 V and each servo normal operate can draw 200 mA and more, operate 13 servos at the same time are over 2.6 A. In order to avoid the robot brain affected by power shortage, it is better dedicate an individual DC regulator for the brain and servos.

The output voltage of both DC regulators in hand are adjustable, sticky remember adjust the output voltage to 5V and 6 V respectively before using it or the components may be burn out.

Step 7: Servo Tester

In my experience, servo is very easy to damage. It is better buy few more spares in same order. Before using it, you can use a servo tester to check it can works normal: https://www.instructables.com/id/Servo-Tester-2/

Step 8: FSBrowserPlus

ESP32 have a bundled example called FSBrowser. It is a simple web server that host the web source files copied to SPIFFS, it have a simple web editor for amend the source over WiFi and also it have a simple API to read the GPIO values.

I have enhanced this example to FSBrowserPlus:

  • Added PCA9685 Servo Board API
  • Added a WebSocket server
  • Added Robot Cat Pose Design web page

https://github.com/moononournation/FSBrowserPlus

Step 9: Program

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 re 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/me-no-dev/arduino-esp32fs-plugi...

FSBrowserPlus

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

https://github.com/moononournation/FSBrowserPlus

ESP Async Web Server Library

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

https://github.com/me-no-dev/ESPAsyncWebServer.git

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

Compile & Upload

  1. Connect the M5Stack Camera Module with USB cable
  2. Open Arduino IDE
  3. Open FSBrowserPlus
  4. Edit the ssid and password to your own WiFi AP credential
  5. Press Arduino IDE "Upload" button
  6. Select "Tools" menu -> ESP32 Sketch Data Upload

Step 10: Install Power Circuit

Here are the power connect summary:

Lipo Battery plug
+ve pin -> 5V DC regulator INPUT +ve pin
           6V DC regulator INPUT +ve pin
-ve pin -> 5V DC regulator INPUT -ve pin
           6V DC regulator INPUT -ve pin

PCA9685 Servo Driver Board
GND pin -> 5V DC regulator OUTPUT -ve pin
           6V DC regulator OUTPUT -ve pin
           Grove cable black pin
SCL pin -> Grove cable yellow pin
SDA pin -> Grove cable white pin
VCC pin -> 5V DC regulator OUTPUT +ve pin
           Grove cable red pin
V+  pin -> 6V DC regulator OUTPUT +ve pin

Use M2 screws and double adhesive tape to fix all boards under the robot cat body.

Step 11: Servo Position & Connection

The FSBrowserPlus program have a servo initial process, it will set all the servos to the middle position of the turning range. Before install the servos, it is better connect the servos to the driver board, connect the grove connector to the M5Stack Camera Module and plug in the battery to reset all the servo position to the middle.

Here are the servo connection list:

Port  0: Left Front Leg Joint 1
Port  1: Left Front Leg Joint 2
Port  2: Left Back Leg Joint 1
Port  3: Left Back Leg Joint 2
Port  4: Left Back Leg Joint 3
Port  5: Head Turn
Port  6: Head Nod
Port  7: Not connected
Port  8: Not connected
Port  9: Not connected
Port 10: Tail
Port 11: Right Back Leg Joint 3
Port 12: Right Back Leg Joint 2
Port 13: Right Back Leg Joint 1
Port 14: Right Front Leg Joint 2
Port 15: Right Front Leg Joint 1

Step 12: Paw Friction & Protection

3D printed paws are easy to worn out and not enough friction to the ground. Simply add some rubber band on it can fix these problems.

Step 13: Install Joint

Use a 6 mm M3 screw to connect the joint. Insert a nylon or PET ring in the middle can reduce the friction.

Step 14: Install Servo

There are few type of nylon arm included in the servo package. Insert the shortest nylon arm to the servo, except head turn require a cross arm.

  1. insert the servo into the joint start from the arm side
  2. push the other side in carefully
  3. plug in the battery to ensure the servo position is in the middle of the turning range
  4. unplug the battery
  5. screw up 2 screws on both side
  6. screw up the black screw together with the joint

Repeat Install Joint and servo steps for all 10 leg joints.

Step 15: Install Head & Tail

The head turn servo can install from the upper side or lower side depends on you would like to have a longer or shorter neck.

The head nod servo install method is the same as the leg joint.

Then you can install the M5Stack Camera Module with two 12 mm M4 screws

The tail servo must install from the lower side and then you can use a 8 mm M2 screw to fix the tail.

Step 16: Fix Battery

Fix the Battery on the Robot Cat back with some double adhesive tape.

Step 17: Tidy Up Wires

There are a hole near the head, the battery, Grove and head nod servo wires can pass though this hole to the power or servo board.

There are reserved some rooms between front legs and the servo board, all wires can tidy up to this area.

Step 18: Robot Cat Pose Design

  1. plug in the battery to power on the robot cat
  2. browse to http://fsbrowserplus.local/pose.htm
  3. adjust the slider for each joint
  4. robot cat will have real time response
  5. servos continuous draw the power for keeping the pose, you may press the Rest button to let the robot cat take a rest

Step 19: Gallery

Step 20: What's Next?

This project is started over 2 years, but it still at the beginning. Much more I want to do...

The first phase of hardware just start to work, it's time to work with software part:

Simply edit the HTML and Javscript:

  • add a pose sequence design web page, combine a number of pose in sequence to make some motion

And more for modifying the Arduino program:

  • store motion sequence data to flash
  • vision sensor, add some AI factor to make environment interaction
  • web remote control interface with camera image stream

Hardware part:

  • reduce weight
  • better weight balance design especially when only 2 legs touch the ground
  • add foot touch sensor to ensure touched the ground
  • add balance sensor to avoid unexpected falling (cat should have good balance)
  • add microphone for listening and even response from speech recognition
  • more head and tail joints for more motions
  • add speaker for MEOW!

Follow my twitter for the latest news: https://twitter.com/moononournation

Robots Contest

Second Prize in the
Robots Contest

Be the First to Share

    Recommendations

    • Colors of the Rainbow Contest

      Colors of the Rainbow Contest
    • Furniture Contest

      Furniture Contest
    • Home Decor Challenge

      Home Decor Challenge

    29 Comments

    0
    Skeryboi
    Skeryboi

    17 days ago

    Thanks so much for making this! I 3D printed it out today and it is a great size and seems to be strong.

    0
    williamjewell
    williamjewell

    Tip 4 months ago

    maybe the cat could have some programming to make it move by itself.

    0
    chema.lgr
    chema.lgr

    8 months ago

    Is it possible to exchange the M5Stack PSRAM Camera for an ESP32-Cam Aithinker?
    I have tried it, I have changed the SDA-> 14 and SCL-> 15 pins, fixed my network and password, compiled and uploaded with arduino ide without problems.
    But I can't access the web page, the serial monitor gives me this

    / *
    IP Address: 192.168.1.162
    E (7829) SPIFFS: mount failed, -10025
    ESP Async Web Server started.
    NOT_FOUND: GET http: //fsbrowserplus.local/
    _HEADER [Host]: fsbrowserplus.local
    _HEADER [Connection]: keep-alive
    _HEADER [Cache-Control]: max-age = 0
    _HEADER [Upgrade-Insecure-Requests]: 1
    _HEADER [User-Agent]: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 85.0.4183.121 Safari / 537.36 Edg / 85.0.564.68
    _HEADER [Accept]: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *; q = 0.8, application / signed-exchange; v = b3; q = 0.9
    _HEADER [Accept-Encoding]: gzip, deflate
    _HEADER [Accept-Language]: es, es-ES; q = 0.9, en; q = 0.8, en-GB; q = 0.7, en-US; q = 0.6
    NOT_FOUND: GET http://192.168.1.162/
    _HEADER [Host]: 192.168.1.162
    _HEADER [Connection]: keep-alive
    _HEADER [Upgrade-Insecure-Requests]: 1
    _HEADER [User-Agent]: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 85.0.4183.121 Safari / 537.36 Edg / 85.0.564.68
    _HEADER [Accept]: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *; q = 0.8, application / signed-exchange; v = b3; q = 0.9
    _HEADER [Accept-Encoding]: gzip, deflate
    _HEADER [Accept-Language]: es, es-ES; q = 0.9, en; q = 0.8, en-GB; q = 0.7, en-US; q = 0.6
    NOT_FOUND: GET http: //fsbrowserplus.local/ov2640.htm
    _HEADER [Host]: fsbrowserplus.local
    _HEADER [Connection]: keep-alive
    _HEADER [Upgrade-Insecure-Requests]: 1
    _HEADER [User-Agent]: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 85.0.4183.121 Safari / 537.36 Edg / 85.0.564.68
    _HEADER [Accept]: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *; q = 0.8, application / signed-exchange; v = b3; q = 0.9
    _HEADER [Accept-Encoding]: gzip, deflate
    _HEADER [Accept-Language]: es, es-ES; q = 0.9, en; q = 0.8, en-GB; q = 0.7, en-US; q = 0.6
    [E] [camera.c: 495] i2s_run (): Timeout waiting for VSYNC
    Camera capture failed
    NOT_FOUND: GET http: //fsbrowserplus.local/favicon.ico
    * /

    and more as I try to access other options.

    And another thing, would it be possible to leave the fixed IP?

    Thanks in advance and sorry for the translation ... ;-)

    0
    陳亮
    陳亮

    Reply 6 months ago

    Sorry for the late reply, the key error is 2nd line log:
    E (7829) SPIFFS: mount failed, -10025
    I have omitted the step of upload the SPIFFS data, Step 8 is updated for SPIFFS data upload.

    0
    AnisonKate
    AnisonKate

    Reply 8 months ago

    nice

    0
    Holgerw5
    Holgerw5

    8 months ago on Step 17

    i allways get erros:
    please help!


    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartDetachRx+0x0): undefined reference to `pinMatrixInDetach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartDetachTx+0x0): undefined reference to `pinMatrixOutDetach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartAttachRx+0x0): undefined reference to `pinMatrixInAttach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartAttachTx+0x0): undefined reference to `pinMatrixOutAttach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartEnd+0x4): undefined reference to `removeApbChangeCallback'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartSetBaudRate+0x0): undefined reference to `getApbFrequency'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o):(.literal.uartBegin+0x14): undefined reference to `addApbChangeCallback'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartDetachRx':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixInDetach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartDetachTx':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixOutDetach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartAttachRx':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMode'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixInAttach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartAttachTx':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMode'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `pinMatrixOutAttach'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartEnd':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `removeApbChangeCallback'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartSetBaudRate':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `getApbFrequency'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartBegin':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:411: undefined reference to `addApbChangeCallback'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(esp32-hal-uart.c.o): In function `uartDetectBaudrate':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-uart.c:555: undefined reference to `getApbFrequency'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o):(.literal.camera_fb_init+0xc): undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `camera_fb_init':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:250: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `skip_frame':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:205: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `i2s_run':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:495: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o): In function `camera_probe':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:1036: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(camera.o):/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/camera.c:1120: more undefined references to `pathToFileName' follow
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL10pca9685Offv+0x4): undefined reference to `PCA9685::setChannels(unsigned char, unsigned char, unsigned short)'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL7setGPIOhh+0x4): undefined reference to `pinMode'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL7setGPIOhh+0x8): undefined reference to `digitalWrite'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL10setChannelht+0x4): undefined reference to `PCA9685::setChannel(unsigned char, unsigned short)'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZL10setChannelht+0x8): undefined reference to `delay'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFvP22AsyncEventSourceClientEZ5setupvEUlS1_E3_E9_M_invokeERKSt9_Any_dataOS1_+0x4): undefined reference to `millis'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFvP21AsyncWebServerRequestEZ5setupvEUlS1_E8_E9_M_invokeERKSt9_Any_dataOS1_+0x1c): undefined reference to `analogRead'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFvP21AsyncWebServerRequestEZ5setupvEUlS1_E8_E9_M_invokeERKSt9_Any_dataOS1_+0x20): undefined reference to `digitalRead'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._Z9onWsEventP14AsyncWebSocketP20AsyncWebSocketClient12AwsEventTypePvPhj+0x70): undefined reference to `PCA9685::setChannelsValues(unsigned char, unsigned char, unsigned short*)'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._Z5setupv+0x114): undefined reference to `PCA9685::begin()'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal._Z5setupv+0x118): undefined reference to `PCA9685::setFrequency(unsigned short)'
    sketch\FSBrowserPlus.ino.cpp.o:(.literal.startup._GLOBAL__sub_I_ssid+0xc): undefined reference to `PCA9685::PCA9685(unsigned char)'
    sketch\FSBrowserPlus.ino.cpp.o: In function `pca9685Off()':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:7: undefined reference to `PCA9685::setChannels(unsigned char, unsigned char, unsigned short)'
    sketch\FSBrowserPlus.ino.cpp.o: In function `setGPIO(unsigned char, unsigned char)':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:26: undefined reference to `digitalWrite'
    sketch\FSBrowserPlus.ino.cpp.o: In function `setChannel(unsigned char, unsigned short)':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:24: undefined reference to `PCA9685::setChannel(unsigned char, unsigned short)'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:25: undefined reference to `delay'
    sketch\FSBrowserPlus.ino.cpp.o: In function `std::_Function_handler<void (AsyncEventSourceClient*), setup()::{lambda(AsyncEventSourceClient*)#5}>::_M_invoke(std::_Any_data const&, AsyncEventSourceClient*&&)':
    c:\users\info\documents\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-80-g6c4433a-5.2.0\xtensa-esp32-elf\include\c++\5.2.0/functional:1871: undefined reference to `millis'
    sketch\FSBrowserPlus.ino.cpp.o: In function `std::_Function_handler<void (AsyncWebServerRequest*), setup()::{lambda(AsyncWebServerRequest*)#10}>::_M_invoke(std::_Any_data const&, AsyncWebServerRequest*&&)':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:35: undefined reference to `analogRead'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:41: undefined reference to `digitalRead'
    sketch\FSBrowserPlus.ino.cpp.o: In function `onWsEvent(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int)':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:32: undefined reference to `PCA9685::setChannelsValues(unsigned char, unsigned char, unsigned short*)'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:35: undefined reference to `delay'
    sketch\FSBrowserPlus.ino.cpp.o: In function `setup()':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/gpioAPI.h:6: undefined reference to `pinMode'
    sketch\FSBrowserPlus.ino.cpp.o: In function `setup()':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:12: undefined reference to `PCA9685::begin()'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:13: undefined reference to `PCA9685::setFrequency(unsigned short)'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:15: undefined reference to `PCA9685::setChannels(unsigned char, unsigned char, unsigned short)'
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:16: undefined reference to `delay'
    sketch\FSBrowserPlus.ino.cpp.o: In function `setup()':
    C:\Users\info\Documents\Arduino\FSBrowserPlus/FSBrowserPlus.ino:287: undefined reference to `delay'
    sketch\FSBrowserPlus.ino.cpp.o: In function `_GLOBAL__sub_I_ssid':
    C:\Users\info\Documents\Arduino\libraries\FSBrowserPlus-master/pca9685API.h:3: undefined reference to `PCA9685::PCA9685(unsigned char)'
    libraries\WiFi\WiFiGeneric.cpp.o:(.literal._Z9tcpipInitv+0x1c): undefined reference to `xTaskCreateUniversal'
    libraries\WiFi\WiFiGeneric.cpp.o: In function `tcpipInit()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi\src/WiFiGeneric.cpp:264: undefined reference to `xTaskCreateUniversal'
    libraries\WiFi\WiFiSTA.cpp.o: In function `WiFiSTAClass::waitForConnectResult()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi\src/WiFiSTA.cpp:718: undefined reference to `delay'
    libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest*, AsyncWebSocket*)':
    C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
    libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::ping(unsigned char*, unsigned int)':
    C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
    libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::_onPoll()':
    C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
    libraries\ESPAsyncWebServer-master\AsyncWebSocket.cpp.o: In function `AsyncWebSocketClient::_onAck(unsigned int, unsigned int)':
    C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncWebSocket.cpp:853: undefined reference to `millis'
    libraries\ESPAsyncWebServer-master\SPIFFSEditor.cpp.o: In function `SPIFFSEditor::handleUpload(AsyncWebServerRequest*, String const&, unsigned int, unsigned char*, unsigned int, bool)':
    C:\Users\info\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/ESPAsyncWebServer.h:347: undefined reference to `millis'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Read':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:114: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Write':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:151: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Read16':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:190: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(sccb.o): In function `SCCB_Write16':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/sccb.c:234: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(ov3660.o): In function `set_aec_value':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/sensors/ov3660.c:147: undefined reference to `pathToFileName'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(ov3660.o):/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/sensors/ov3660.c:147: more undefined references to `pathToFileName' follow
    libraries\ArduinoOTA\ArduinoOTA.cpp.o:(.literal._ZN15ArduinoOTAClass5_onRxEv+0x10): undefined reference to `micros'
    libraries\ArduinoOTA\ArduinoOTA.cpp.o: In function `ArduinoOTAClass::_onRx()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:181: undefined reference to `micros'
    libraries\ArduinoOTA\ArduinoOTA.cpp.o: In function `ArduinoOTAClass::_runUpdate()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:271: undefined reference to `delay'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:328: undefined reference to `delay'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:334: undefined reference to `delay'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA\src/ArduinoOTA.cpp:343: undefined reference to `delay'
    libraries\Update\Updater.cpp.o: In function `UpdateClass::_reset()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\Update\src/Updater.cpp:360: undefined reference to `digitalWrite'
    libraries\SPIFFS\SPIFFS.cpp.o:(.literal._ZN2fs8SPIFFSFS6formatEv+0x0): undefined reference to `disableCore0WDT'
    libraries\SPIFFS\SPIFFS.cpp.o:(.literal._ZN2fs8SPIFFSFS6formatEv+0x4): undefined reference to `enableCore0WDT'
    libraries\SPIFFS\SPIFFS.cpp.o: In function `fs::SPIFFSFS::format()':
    c:\users\info\documents\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-80-g6c4433a-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\bits/shared_ptr_base.h:127: undefined reference to `disableCore0WDT'
    c:\users\info\documents\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-80-g6c4433a-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\bits/shared_ptr_base.h:127: undefined reference to `enableCore0WDT'
    libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `_start_async_task()':
    C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `xTaskCreateUniversal'
    libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::send()':
    C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
    libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::AsyncClient(tcp_pcb*)':
    C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
    libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::_sent(tcp_pcb*, unsigned short)':
    C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
    C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
    libraries\AsyncTCP-master\AsyncTCP.cpp.o: In function `AsyncClient::_recv(tcp_pcb*, pbuf*, signed char)':
    C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: undefined reference to `millis'
    libraries\AsyncTCP-master\AsyncTCP.cpp.o:C:\Users\info\Documents\Arduino\libraries\AsyncTCP-master\src/AsyncTCP.cpp:1116: more undefined references to `millis' follow
    libraries\Wire\Wire.cpp.o:(.literal._ZN7TwoWire5flushEv+0x0): undefined reference to `i2cFlush'
    libraries\Wire\Wire.cpp.o:(.literal._ZN7TwoWireD2Ev+0x4): undefined reference to `i2cRelease'
    libraries\Wire\Wire.cpp.o:(.literal._ZN7TwoWire5beginEiij+0x0): undefined reference to `i2cInit'
    libraries\Wire\Wire.cpp.o: In function `TwoWire::flush()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `i2cFlush'
    libraries\Wire\Wire.cpp.o: In function `TwoWire::~TwoWire()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `i2cRelease'
    libraries\Wire\Wire.cpp.o: In function `TwoWire::begin(int, int, unsigned int)':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `i2cInit'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(HardwareSerial.cpp.o):(.literal._ZN14HardwareSerial5beginEmjaabm+0x4): undefined reference to `yield'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(HardwareSerial.cpp.o): In function `HardwareSerial::begin(unsigned long, unsigned int, signed char, signed char, bool, unsigned long)':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `millis'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `millis'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `delay'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.h:104: undefined reference to `yield'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/lib\libesp32-camera.a(xclk.o): In function `camera_enable_out_clock':
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/xclk.c:23: undefined reference to `pathToFileName'
    /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/components/esp32-camera/driver/xclk.c:37: undefined reference to `pathToFileName'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(main.cpp.o):(.literal.app_main+0xc): undefined reference to `initArduino'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(main.cpp.o):(.literal.app_main+0x10): undefined reference to `xTaskCreateUniversal'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(main.cpp.o): In function `app_main':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/main.cpp:26: undefined reference to `initArduino'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/main.cpp:27: undefined reference to `xTaskCreateUniversal'
    C:\Users\info\AppData\Local\Temp\arduino_cache_87931\core\core_881f6d9dafe9d930d52e885a753c1c1b.a(Stream.cpp.o): In function `Stream::timedRead()':
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.cpp:76: undefined reference to `millis'
    C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Stream.cpp:76: undefined reference to `millis'
    collect2.exe: error: ld returned 1 exit status
    Mehrere Bibliotheken wurden für "WiFi.h" gefunden
    Benutzt: C:\Users\info\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
    Nicht benutzt: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\libraries\WiFi
    exit status 1
    Fehler beim Kompilieren für das Board ESP32 Dev Module.
    Ungültige Bibliothek C:\Users\info\Documents\Arduino\libraries\Heltec_ESP32-master in keine Header-Dateien (.h) in C:\Users\info\Documents\Arduino\libraries\Heltec_ESP32-master gefunden gefunden

    0
    陳亮
    陳亮

    Reply 8 months ago

    seems confilict with a old libraries, try remove folder: C:\Users\info\Documents\Arduino\libraries\Heltec_ESP32-master

    2
    abbottanp1369
    abbottanp1369

    9 months ago

    NOTE: URL links given below have been corrected. If they do not work try copy and paste to a url address in your browser. 200926

    Well done. I have not explored the article completely. But it is a "house" version of a squirrel chaser that is briefly discussed at https://create.arduino.cc/projecthub/redbug. Basically, this version is an out-door version of a semi-autonomous cat for chasing small critters. The rendering of the critter chaser is a gampead-arduino/uno-otg-android/tablet-wifi-mega256 vehicle. The strict limitations on the implementation are OpenSource and created with "parts on-hand". The project is described in detail at http://abbottanp.com/table_projects.html. Code artifacts have been loaded to github: https://github.com/trooker/a038_squirrel-chase. The final phase is still evolving. But field trials should begin by the end SEP 2020.

    Once again well done on documenting your "cat". I may be able to leverage a couple of concepts you introduced. Thanks.


    0
    iamsetsetiam
    iamsetsetiam

    Reply 9 months ago

    None of the 3 links you provide work.

    0
    abbottanp1369
    abbottanp1369

    Reply 9 months ago

    I just confirmed what you observed.

    See the attached images. They each have the "proper URL" displayed along the top.

    I can not explain why the addresses provided above failed to link properly. "Instructables" may use some HMTL tag for setting the links of which I am not familiar: <a href="http://abbottanp.com">my-hompage </>. If you need more assistance copy/paste this url and look along the bottom of the webpage that is rendered for a hot link to an email form.

    Mark.

    p004_address3.pngp003_address1.2.pngp002_address1.1_.pngp001_address2.png
    0
    陳亮
    陳亮

    Reply 9 months ago

    any image about your robot design?

    0
    abbottanp1369
    abbottanp1369

    Reply 9 months ago

    Below you shall find a few pictures of the "gamepad", the squirrel chase vehicle, and three others that show the testing of the "gamepad's " joystick and A-Button active. The last three have not yet been uploaded to http://abbottanp.com/artifacts/squirrelChaser/index.html. But that site contains the technical details of the project (current as of SEP 7, 2020).

    p018_btnTest.pngp038_mbot.pngp037_android_app.pngp039_stackSide.pngScreenshot_20200910-163026.pngScreenshot_20200911-135927.pngScreenshot_20200910-163000.png
    1
    wadevag
    wadevag

    9 months ago on Step 20

    Incredible! Forget "Strider", stay on this path! ;)

    0
    陳亮
    陳亮

    Reply 8 months ago

    Strider still on my wish list, I will print a tiny one “once” I have time😉

    0
    vivekg999
    vivekg999

    9 months ago

    How much is the total cost for making it??