Collaborated with Ari Rosner
In this project, my partner and I programmed Boston Dynamics' Atlas robot as a boxing robot. We used ROS with visualization in Rviz and have a GUI to take user-input moves. Particular requirements that we imposed included being able to have as many custom user inputs as possible to make this robot as realistic to being a functional sparring robot as possible. We also wanted to give the user as much flexibility with the moves as possible without being worried about singularities, so we programmed a number of primary and secondary tasks to make the movements look as realistic as possible and prevent many singularities (i.e. straight limbs, impossible configurations).
Atlas in Rviz with the GUI. Gray sphere in the center moves with the punch location and is where Atlas aims its punch.
Boston Dynamics’ Atlas robot is a 1.8-meter (6 ft) robot with 30 degrees of freedom (DOFs). We ultimately had 5 kinematic chains; two for the arms (6 DOF each), two for the legs (6 DOF each), and one for the head (4 DOF). The general implementation is based on several movement functions, any of which are called by the GUI. The movement functions are called the GUI, which then sends a signal to the robot via a publisher function. The GUI allows for the user to input the time it takes for Atlas to complete the move. It also allows the user to choose Atlas's punch location.
Each of these movement functions implements different types of kinematics. For example, the bow and dodge movements implement direct angle changes whereas the punch movements use inverse kinematics to move the hand to a certain position while following a specific trajectory. The kick movements use inverse kinematics to calculate a set of final joint angles from a desired final position. The main difference between the kick and punch movements’ inverse kinematics algorithms is that kick makes a straight line in joint space whereas punch makes a straight line in position or world space.
One particular singularity that we handle is in the kick. Technically, when Atlas stands with its legs straight (i.e. all leg joint angles are zero), it is in a singularity. Previously, when performing the kick movement, Atlas would lock into this singularity and kick with its knee locked back. We solved this by moving the kick in joint space and starting the knee joint from a non-zero joint angle (i.e. away from the singularity). By starting the knee joint out of the singularity and having it aim for a particular joint position (as described above in the algorithm section), we avoided the singularity and were able to make the kick look more realistic with a bent knee.