What I did last week
Worked on kinematics and set up testing environment.
What I did this week
My work this week was centered around finishing the kinematics module and installing Linux on an old laptop I have.
Due to some roadblocks, we have had to switch which FPGA we are using in our system. Originally we were using the AMD Kria which has the ability to run ROS and has reasonably powerful embedded scalar cores. We have transitioned to using the AMD Ultra96v2 which does not have as powerful scalar cores and does not have the same ROS functionality. Therefore in order to make the transition we need additional scalar cores and have chosen to use a laptop for this purpose.
The laptop we are using is an x86 Mac which we needed to install Linux on in order to run ROS. We had previously attempted to use a KVM but the hypervisor calls add too much overhead when we are handling perception data. Installing Linux on Macs can be non-trivial as Apple includes a T2 security chip which will prevent naive attempts at installing another OS. Luckily there exists open source Linux distros that have been tweaked to circumvent this. After some debug related to the WIFI and Bluetooth drivers, I was able to install Linux and the packages we need for our system onto the laptop. This laptop will be the center of our system integration in the following week.
This week I also continued work on kinematics. This involved a partial rewrite of the forward kinematics module in order to use a more robust version of rotation and translation matrices. The inverse kinematics problem is solved analytically by computing angles for 2 link systems and then computing the difference in angles to find the angle of the third link. This module will be calibrated beginning tomorrow.
What I plan to do next week
System integration, calibration, and debug.
Learning Reflection
Before this project I knew some basic principles of robotics but not to the level of depth that I do now. In order to learn about this I have read many academic papers on robotics in general as well as in more specific areas like motion planning and kinematics. In order to implement RRT and A* I was able to use my learning from the research papers as well as pseudocode that is publicly available on Wikipedia.
I have also found Wikipedia to be an extremely helpful tool for reviewing the mathematical and geometric equations that are used in kinematics. Luckily I am currently taking a course on Discrete Differential Geometry so my general knowledge is up to date. Textbooks and literature from this course have proved to be invaluable general knowledge and significantly reduced the learning curve.
Kinematics is the area in which I have learned the most. This was necessary as I have implemented a custom forward kinematics solver, analytic inverse kinematics solver, and a graphical simulation environment. In order to do so I watched a series of lectures at MIT as well as reviewed the available course notes. I also found the lecture notes from a robotics class at CMU and this robotics textbook helpful.
Finally I was able to review the lecture notes and other resources from 18-643 in order to get up to speed on FPGAs.