Modern Roboticist's Tools
Here is a list of software, IDE, Libraries, etc. that I often use for robotic software development.
Frameworks and Tools:
ROS 2 (Robot Operating System): ROS 2 is an open-source software framework for robot software development. It provides a set of libraries and tools to help developers create complex robot applications. ROS 2 learning curve for beginners might be steep but in my opinion, it is worthwhile. Now, if you have worked with just any real robot, you have realized that it is a quite tedious task to get everything to run smoothly. You will probably have Lidars, Cameras, Ultrasonics, Radars, etc. Can you imagine the chaos of dealing with all these sensors that are manufactured by a variety of companies without a standard interface and communication? ROS 2 is the successor of the original ROS which has proven to be more stable and reliable for safety-critical systems.
VSCODE: I gotta admit, I have been such a hater of Microsoft and its stance against open-source back in the day. But maybe time to look at Microsoft more positively as they have been trying hard to come to terms with open-source. Their free IDE VSCode is top-quality software that I have been using for years now. The feature that amazes me most is, how easy it is to work with docker containers under VSCode. Also, there is a plugin for almost anything on the marketplace.
DOCKER: The containers are super useful to ship and distribute complex software without a headache. Especially when you deal with GPU-based Neural Networks. Some implementations will work with a very specific version of CUDA, cudann, or Nvidia driver. You already know how painful it is to match all the compatible Nvidia tools to run a damn neural network :()
Overleaf/Latex Editor: If you need to work on a publication or technical report or really just a PDF document, you really gotta use LATEX, I find Overleaf to be very useful as it is running on your browser, plus the grammar checkers such as Grammarly can be activated on your browser which makes it easy to catch spelling mistakes.
SimpleScreenRecorder: Occasionally, you may need to record your screen to show some cool visualizations to someone. I find SimpleScreenRecorder to be very reliable, You will be able to install it easily on Ubuntu machines with apt-get.
Favorite Libraries;
OMPL: State-of-the-art sampling-based motion planners for robots collected elegantly here. I love the abstract interface.
OpenCV: Classic, working with images? look no further than OpenCV.
PCL: Here is a chatGPT joke about point clouds; Why did the point cloud go to therapy? Because it had too many outlier points and needed to learn how to fit better with the rest of the data. DISCLAIMER: The joke is not mine. Honestly, PCL never lets you down if you are working with point clouds.
Eigen: Who is gonna say it? Without Eigen, some industries might have gone bankrupt :()
gdb and Valgrind debuggers: I might write a short tutorial in the future about these two, these debuggers are life savers while developing code with C++. C++ will not forgive you and your mistakes! You will spend 20% of your time writing the actual code, and %100 of the time debugging the code and trying to figure out where is the bug.
TF: This ROS 2 package is awesome, the complex transform tree of a robot is no easy task to handle, TF does this for you and It transforms an object from one frame to any other frame.
If my programming code functions properly, I have a fondness for the C++ language. However, when it fails, I feel like I'm in an arranged marriage with it. Although Rust is receiving a lot of attention, many including myself, are not immediately jumping on the Rust bandwagon. We may reconsider if there are comparable libraries and tools that work well with Rust. Until that time, I am committed to using C++. While I find Python to be a delightful language, it lacks the speed necessary for complex robotic algorithms that require processing point clouds of 40K in under 50ms.
I will keep updating this page as I come across more interesting tools, that you as a "modern" roboticist need.