What I did last week
Wrote script to control and communicate with robotic arm
Worked on kinematics
What I did this week
This week I implemented forward kinematics for the arm as well as implemented a simulator that allows us to visualize the arm in the 3D plane. This involves calculating rotation matrices and a lot of hand drawings and geometry to ensure correctness.
I went to Home Depot and bought two 1/4” thick MDF boards. There boards are about 2′ x 4′ and we were able to use some wood clamps I had to hold them together, creating a 4′ x 4′ state space. We mounted the robotic arm in the middle and are done with our baseline setup.
Using this setup, I was able to correlate the arm in the simulator with the arm actual arm. This allowed me to verify that axis, angles, and measurements int he simulator align with what we have in reality.
Next steps include transitioning from forward kinematics to inverse kinematics. I believe this transition should be relatively smooth because I have already built the simulator and ensured its correctness. I have already done a lot of the math for the inverse kinematics on paper already as well.
What I plan to do next week
Complete inverse kinematics.
Matt has taken over SMA* but run into some bottlenecks. When I am done with kinematics I will transition to code optimization.
Testing and Validation
The majority of the work I have done so far has been with regards to the software implementation of our algorithms, the robotic arm control, and the kinematics.
The RRT and A* algorithms are implemented in C but I have created python bindings for them that make it significantly easier to run and test. Because of this we have been able to run these algorithms on different state spaces and check their ability to converge and to find a correct path. Now that we have have created our actual setup we have decided on a state space that is 128 * 128 * 128 voxels (~2 million total). Further testing has showed we must optimize the software implementation more if we want to converge on paths in a reasonable time. The number of iterations needed for RRT to converge increases as we increase the size of the state space. With a 64 * 64 * 64 voxel state space we achieved paths in 10,000 iterations but in the 128 * 128 * 128 state space it requires 100,000 (note that each iteration takes two steps and that not every iteration is successful in adding a node to the RRT graph). This first example completes in roughly 4 minutes while the second example takes about 20 minutes. We must increase the speed of a single iteration significantly.
Testing with regards to the arm controller and the kinematics has been done via a graphical simulator I developed. This simulator allows us to compare the supposed angles of the arm in the state space with the positions they are in in actuality. This testing was completed before the interm demo and was done to ensure the correctness of our implementation. Things appear to be working for now and there are minimal concerns with regards to the speed of these operations.