|
This repository is archived in the GitHub Arctic Code Vault.
|
ABSTRACT
This is an ESP32 implementation of a six-degree-of-freedom hexapod — also called Stewart Platform, Gough-Stewart Platform or Parallel manipulator.
The actuators are PWM rotary servo motors and the program is written in Arduino C compiled with PlatformIO.
This project is done in the frame of the P19 project at the Microclub.
Currently the platform can be operated:
The calculation of the kinematics is performed in Hexapod_Kinematics.cpp and can be also be compiled in a desktop C++ program to cross-check calculations (i.e. without actuating the servos).
I managed to compile it with g++ on macOS Mojave and macOS Monterey.
See hexapod_desktop_app/hexapod_desktop_app.cpp.
HOME PAGE OF THE PROJECT
The home page is a work in progress, but the video shows what the platform can do.
The original implementation used an analog joystick, but the current version uses a Wii Nunchuck.
The automatic translation in English can be read here:
https://ouilogique-com.translate.goog/posts/2019-03-27-plateforme-de-stewart-esp32/?_x_tr_sl=fr&_x_tr_tl=en&_x_tr_hl=fr&_x_tr_pto=wapp
The original version in French is here:
https://ouilogique.com/posts/2019-03-27-plateforme-de-stewart-esp32/
PREREQUISITES
- Change the default I²C address of the PCA9685 driver from
0x40 to 0x41 by shorting the A0 jumper beside the capacitor.
- Create a file called
src/WifiSettings.h containing:
#pragma once
const char *ssid = ""; // SSID of your WiFi router.
const char *password = ""; // Password of your WiFi router.
const char *ap_ssid = "STEW32-"; // SSID of the ESP32 WiFi network in soft-AP mode (15 char max).
const char *ap_password = ""; // Password of the ESP32 WiFi network in soft-AP mode.
// Must be 8 char min or empty for no password.
GEOMETRY SETTINGS
Geometry settings are defined in
Hexapod_Config_1.h.
The meaning of the parameters is explained in
doc/hexapod-parameters.pdf.
PARTS TO BUILD
Base plates
The two base plates are identical and the DXF file to reproduce them is here (right-click + save as):
doc/hexapod-base-plate.dxf.
Top plate
The top plate is 3D-printed (right-click + save as):
doc/hexapod-top-plate.stl.zip.
PARTS TO BUY
Notes
- ¹ I currently use clones of the Tower Pro MG996R servos, but they are bad and I don’t recommend them.
https://fr.aliexpress.com/item/32636102294.html
I formerly used clones of the Tower Pro MG90s Servos, but they were also bad and too small for this application.
https://www.banggood.com/6X-Towerpro-MG90S-Metal-Gear-RC-Micro-Servo-p-1072260.html
In the future, I will probalbly use Parallax 900-00005 servos.
It seems that these are the one used by fullmotiondynamics in their videos.
https://www.parallax.com/product/900-00005
- ² The Nunchuck cable extension is not mandatory.
The idea is not to have a longer cable but rather to use the extension as an adapter between the Nunchuck and the breadboard, that is to say that it allows to leave the Nunchunk cable uncut.
- ³ This breakout adapter is not mandatory, but it could simplify wiring.
I haven’t used it myself.
WIRING
Nunchuck
The Nunchuck library uses Wire.h and standard I²C connections internaly.
Pins are seen from left to right and top to bottom looking at the Nunchuck connector.
Cut the cable extension to connect to the ESP32.
| color |
signal |
ESP32 pin |
| white |
SCL |
IO22 |
| NC |
|
|
| red |
GND |
GND |
| green |
VCC |
VCC |
| black |
ATT |
IO32 (or connect to 3.3V to force Nunchunk detection) |
| yellow |
SDA |
IO21 |
EXTERNAL LIBRARIES
The external libraries are installed automatically during the first build because they are declared under lib_deps in platformio.ini.
I²C ADDRESSES
By default, the PCA9685 driver and the Nunchuck share the same I²C address 0x40.
Fortunately, the address of the PCA9685 driver can easily be changed to 0x41 by shorting the A0 jumper next to the capacitor.
| Default address |
New address |
Device |
| 0x40 |
0x41 |
PCA9685 |
| 0x70 |
= |
PCA9685 (broadcast) |
| 0x40 |
= |
Nunchuck (IMU) |
| 0x52 |
= |
Nunchuck (joystick) |
| 0x68 |
= |
GY-91 (MPU9250) |
| 0x76 |
= |
GY-91 (BMP280) |
CREDITS
My sources of inspiration
- San-José State University / Full Motion Dynamics:
Kinematics
- Hexapod kinematics of this project was originaly based on 6dof-stewduino, by Philippe Desrosiers, althought I reworked it in depth:
- He derived his implementation from the work of Daniel Waters:
- Kinematics calculation is also explained in this document by an unknown author from the Wokingham U3A Math Group:
- The project memememememememe was also an excellent source of inspiration.
They share the code for RPi and a simulator in the Processing langage:
Serial buffer for G-Code
- Derived from MarginallyClever:
FURTHER READINGS
- The code for this project was used by Jakob Frabosilio for his Master’s thesis, which he presented in September 2024 at Cal Poly (Faculty of California Polytechnic State University), San Luis Obispo.
- PID Control System Analysis and Design, By YUN LI, KIAM HEONG ANG, and GREGORY C.Y. CHONG
- Understanding PID Control, Part 1: What is PID Control?
- Modern Robotics, Chapter 7: Kinematics of Closed Chains
评论