HARP6
2025-08-01
Project repositoryOverview
HARP6 or Hexa-Articulated Research Platform is my first step into experimental robotics, aimed at exploring the basics of the topics in detail, from building a simulation, ending at the system integration challenge. I wanted to go through a structured and thought out system engineering task.
Simulation
I started the project in a virtual environment, by developing a simulation of the hexapod. The aim was to implement the inverse kinematics, play around with the definitions of the robot's reference frame to figure out an intuitive API, implement a dynamic gait with speed and gait type control. I've built the entirety in Python, using matplotlib for visualizations.
Starting in simulation was came with great benefits, the visualization helped me find so many bugs in inverse kinematics, that without physical hardware (that I didn't have at the time) I wouldnt be able to find. I could also confirm the results visually and use the outputs for unit tests in the IK engine for HARP6.
To account for robot's body RPY I didn't want to derive additional IK equations, so I used an approach of changing the reference frames. In my implementation, the target position of the foot is always defined with respect to the mounting point of the joint. Rotating the body, while keeping the target foot position the same, is eqivalent to rotating the target position of the foot around the anti-parallel axis. So I am just applying additional rotations to the target positions of the robot's feet in order to solve for body RPY.
The robotic platform
Next came the time to build the physical platform. I wanted to use this opportunity to learn technologies I was interested in, but didn't have a good use case for yet, as well as some of the tools from the typical robotics tech stack. This lead me to:
- Build the system on top of FreeRTOS
- Integrate it with the ROS2 ecosystem, by running the robot as a micro-ROS node
- Build it for the RPi Pico microcontrollers
- Use the C language
- Have a completely separate, dependency-free inverse kinematic library
- Test where possible
As far as design choices go, I am a big proponent of modularity and this approach fits that preference well. My tasks could be completely separated and only communicate via queues, the IK library could be also compiled for the usual x86_64 for testing on GitLab and integrating the project into ROS2 could give me a convenient way of controlling the platform.
CAD model
Currently I completed the first iteration of the mechanical design of HARP. I hate printing tricky parts that either require weird printing orientations, that need support material in tiny crevices or on the visible surfaces, screwing up the finish. Standard printing orientations were a priotity to me while designing all of the parts. As of now I only need to optimize the coxa mounting bracket for easy and convenient printing. Unfortunately, I currently don't have an access to my 3D printer and this is basically a version 0.0 of the design, that has arbitrarily chosen mounting hole diamaters without proper countersinks. The model is largely parametrized from the lengths of the limbs, through tolerances for the critical mounting surfaces, ending at the relative positioning and orientation of the servos. The early version will have a perforated mounting plate on top for easier development.
While I already completed a large part of the project there it is still ongoing. Some leftover tasks:
- Switch from serial to wireless UDP
- Write the servo driver
- PCB for power and signal distribution, power regulator for servos.