Here is a short selection of my favorite software:
- PyBind is a perfect way to combine the ease of prototyping in Python with the performance of c++. It allows the use of c++ object in python and python objects in c++, or it translates between native data structures like lists, tuples and dictionaries (in this case, the data is copied). I like that I can choose between the ease of use and performance, unlike in boost::python. I also like the intuitive way data ownership is handled. Pybind is an exemplar use of modern c++ and shows how far c++ came from its roots.
- ImGui is an Immidiate Mode Graphical User Interface library in c++. Forget button or text box objects and layout management, creating a button in ImGui boils down to “if (ImGui::Button(“Save”) == true)“. You can create a bunch of gui elements, which will appear in you window. These can be drag and dropped to anywhere, and ImGui will remember the position next time you lunch the app. ImGui is totally environment agnostic, the only setup required is to tell it how to do basic drawing (lines, text) in your graphical environment. The disadvantage of using immediate mode GUI is that you have to build up the whole gui at every frame you draw, which can take up some computation.
- ROS: Robotic Operating System can be described as a publish-subscribe communication framework with a crazy amount of tools and utilities. There are tools for recording, filtering and replaying messages, a visualisation tool (RViz), logging tools, service management tools and much more. Unfortunately ROS is not a lightweight framework, it has a lot of dependencies, and it even has its own package building system built on top of CMake.