I worked with one other student to program the Atlas V5 URDF climbing a ladder in a generic Rviz world. I generated and parameterized the ladder, encoding it into the original Atlas URDF and worked to animate the arms and the body moving with respect to the world.
Skills: This project made use of Python, ROS, tf2 broadcasters, xacros, MATLAB
Teammates: Galilea von Ruden
Timeline: November-December 2021
The course had covered animation of fixed 7DOF robotic arms and obstacles, but this system was far more complex than something we had done in class. There were a few key challenges associated with this project.
- First, animating all of the limbs at once and getting the timing correct.
- Second, moving the entire animated robot in the world frame while keeping the ladder fixed.
- Third, making the movements look realistic and avoiding joint collisions.
For the first, we began by breaking down the individual joints and moving those from their initial “standing” position to the rungs on the ladder.
Atlas alone has 30 degrees of freedom, and we had to reduce this to the specified end-of limb positions. A natural breakdown was to split each of the joints at the pelvis. URDFs contain a “tree” of information: a map of how each joint is connected to the others. By specifying the location of every limb with respect to the pelvis, we were able to get 6 DOF for each leg and 7 DOF for each arm. We further simplified the problem by keeping the back stationary while climbing, so there were 6 DOF for each limb. The other 2 DOFs were associated with the head and not connected to the body of the robot.
To handle timing, we used the tf2 broadcaster to send each of the joint positions in order.
The tf2 broadcaster also solved timing issues for the second challenge and kept the stationary limbs from moving in the world frame. The empty “world” frame was the reference for the ladder and for the robot. We determined all the joint positions with respect to the pelvis, then sent all of those to rviz with respect to the world frame.
Last, we played with a number of variables including ladder spacing, limb speed, and joint starting position to ensure our climbing animation looked as realistic as possible.