Current Projects
Spirit 40 Robot Control (2023-Current)
I have developed control algorithms to control a Ghost Robotics Spirit 40 robot for locomotion and robotic sensing applications. All lower level code and behaviors are written in C++. All controllers were written by me with inspiration and assistance from collaborators. Some additional functions, like pseudo-inverse calculations, were borrowed from collaborators.
I have developed the following behaviors for Spirit:
Stand - I have developed a basic standing behavior to stand Spirit in a 4 leg stand using floating torso assumptions. The robot is sent a commanded center of mass position and orientation in X,Y,Z and Roll, Pitch, and Yaw. This command is then sent through a PID controller to control robot orientation and a Cascade PID controller to control robot position. The resulting center of mass wrench of forces and torques are distributed through a pseudo-inverse matrix of toe positions to give desired toe forces in X,Y, and Z on each leg to reach the desired wrench.
Three Leg Stand - I have been able to extend the basic stand behavior to solve the robot floating torso with only three legs. Thus the robot is able to maintain a tripod stand and use the non-standing leg for scientific applications
Stand and Poke - In a 3 leg stand, the robot can take the leg not in operation and use it to poke into the ground beneath it. This action logs toe positional data along with force data to understand characteristics of the surface it is poking into. This is the main scientific behavior that spirit can currently achieve. While the robot is doing this stand and poke behavior, the leg poking has its own PID controller controlling its desired position and giving a resulting toe force in X,Y,Z to command the leg. This toe force is then fed back into the Cascade PID for robot position as well as PID for robot orientation as an external disturbance so the overall robot control loop can respond accordingly.
Crawl - I have been able to create a basic crawling behavior that essentially builds on the Stand and Poke behavior previously described. The robot sets itself up in a 3 leg stand and then a PID controller is activated on the disabled leg to move it forward. It then moves back to a 4 leg stand and re-orientates the body of the robot to lift up the next leg. It then continues this action to achieve a slow crawling motion. This behavior eventually fails due to poor gains set on the robot as some of the motors have internally burned out due to heavy use changing the plant of the system. Additional gain tuning must occur to achieve a more stable crawl.
The following is a recording of my stand and poke behavior implemented in a field setting at Mount Hood, Oregon
The following is a recording of my crawling behavior implemented in a lab setting, and its ultimate failure.