
FEATURES:
- Robust Mechanical Design
- Quadruped Robotics & Kinematic Modeling
- Embedded Systems Development with STM32 Microcontrollers
- Custom I²C Communication Protocol Implementation
- Inertial Measurement Unit (IMU) Sensor Integration & Control
OVERVIEW:
Quadruped robotics has always been a strong area of interest for me. During a recent course, I began the development of my own quadruped system (ARGOS) from the ground up. Given the complexity of such a project and the constraints of a single semester, certain design trade-offs were necessary. However, development is ongoing, and future plans and revisions are extremely exciting.
KINEMATICS:
A basic 12DOF kinematic structure was developed for this system, with 3 motors per leg. Initial work to develop the an analytical inverse kinematics solution for a single leg was simple. The following equations were obtained for each joint.
Following the single leg case, a general torso model was developed with a torso frame and 4 local hip frames. Using a roll/pitch/yaw transformation matrix on the torso frame, the distance from the centroid to the origin of an hip frame could be determined. Given an additional vector input from the torso centroid to the foot target position, vector math could be used to determine the necessary (x,y,z) inputs to the individual local hip frames to achieve a specified torso orientation output. These values were then used in the previously determined IK solutions to allow for full torso orientation with a very simple

Theta1 Solution

Theta2 Solution

Theta3 Solution

Full Torso IK solution
MECHANICAL:
The mechanical design of ARGOS was constrained primarily around the cheap hobby servos used for all 12 joints. These motors were only capable of outputting a peak 1.1Nm torque, thus the design was scaled around these motor to ensure adequate power for movement.

Sample Calculations for Scale / Leg Sizing
After general scale of the project was developed, the leg design started. Given the selected motors low torque, additional inertial effects were avoided by placing the motors as close together as possible. This initial leg design consisted of a 4-bar style linkage (bottom right), however this soon led to restrictive issues with joint limits and also prevented easy placement of a supporting bearing on the end of the leg, leading to bending and unwanted play in the joints. To fix this, an alternative belt design (bottom left) was created. This allowed for unrestricted range of motion, and allowed for the placement of an additional supporting bracket to reduce loading.

PATH PLANNING / CONTROLS:
Traditional quadruped robot walking gaits often rely on a high level path policy that includes a gait strategy and trajectory planner. A main gait library is programmed with a library of gaits such as walking, trotting, etc. These predefined gaits coordinate the general trajectory of each leg. Due to the scope once again, I was unable to develop a real-time trajectory and path planning generator, and instead had to settle for creating some test demo walking gaits. These walking gaits were generated in Blender 3D and helped provide a barebones demonstration of the robots potential.
First Walking Test:
Roll Pitch Yaw Test:


While not to the caliber of Boston Dynamics quite yet, the current system does include some slight dynamic adjustments utilizing the IMU. Given the kinematic structure developed, the local foot vectors are functions of roll/pitch/yaw commands. Thus, a control loop can be created where the system constantly aims to drive the IMU readings all to zero. These changing outputs will then drive the local foot vectors and all subsequent joint angles. This approach is fun, but definitely lacking in scalability. It only works for flat level ground, which will not always be the case. Future controls plans include impedance control, which will aim to drive the measured contact forces on all four legs to be the same. However, this isn't currently possible with the cheap servo motors, so better (and more expensive) motors are needed to properly implement something like this.
SOFTWARE:
Full source code can be found here on github.
Argos is controlled via an STM32 breakout board to allow for high speed processing. A GCC-makefile based environment was used to build and compile the code onto the board via the built in ST-Link debugger.
This project was my first chance at getting to work with I²C protocols. Specifically, the main motor driver used was a PCA9685 which allows a 16 channel PWM output. Plenty of arduino libraries existed for this board given its popularity with other makers. However since this project was based in the STM32 environment, I took it as a chance to familiarize myself with how to develop and communicate with I²C devices. I was able to read through the datasheet and pull together the register list with all the necessary register addresses I needed. Using the STM's built in HAL I²C commands, I got all the I2c read/writes working. Once the PMW output parameters were all set, a wrapper 'motor' type was made to handle and used to implement higher level function calls.
The current software layout is very bare bones, and provides the mainly basic movements. Time constraints to finish all the build and assembly prior to software development meant that this section was unfortunately cut short. The current system however is a beneficial foundation for further development.