Among the many projects I've worked on, one of the most enjoyable ones was the development of a two-axis parallel robot for Phoenix Industries. This small robot was designed for picking small plastic building blocks, a fun activity for children. Those who successfully picked building blocks from this robot were rewarded with keeping the items for free. In this project, I collaborated as an electronics and embedded systems developer, focusing on the electronic components of the robot. The mechanical system, on the other hand, was developed by the mechanical team at Phoenix Industries.
Although it may appear to be a small project, there was a considerable amount of work involved. One of the most challenging tasks was calculating the inverse kinematics of the robot, which was achieved through the use of straightforward trigonometry. Below, I will explain the approach I took to accomplish this.
Initially, I attempted to calculate the inverse kinematics using Python, and once I verified its accuracy, I converted the code into Arduino code. This approach allowed me to ensure that the inverse kinematics were functioning correctly on the ESP32 platform. To control the motors, I employed the AccelStepper library.
As the next step, I programmed the Arduino to control the robot using a joystick interface, while also powering the system with a 24V power supply. Writing the Arduino code for this task was relatively straightforward for me, as I have accumulated about 5 years of experience working with Arduino platforms
To control the robot along its axes, we have utilized a Sony PlayStation 3 controller, which works wirelessly with an ESP32 microcontroller. To integrate the PS3 controller with the ESP32 via Bluetooth, I used a library called ESP32-PS3 from GitHub. For the best performance, I utilized both cores of the ESP32: one core for reading Bluetooth data from the controller and the other for controlling the motors and calculating inverse kinematics.