I created a ROS Noetic package that grabs data from some cameras and performs pose estimation of objects in the field of view (using OpenCV). Simultaneously, IMU data is measured and fused with these poses (using GTSAM). These fused poses are then sent to a Unity project that runs on Windows.
My aim is to somehow package my pose estimation ROS package such that it can easily be installed on new computers using a simple installer. Currently, the setup I use is as follows
- Windows 10 (a requirement as the Unity project runs on Windows)
- ROS Noetic installed using a mamba environment (see here)
- GTSAM installed using the default installation guide. This however was by no means a smooth process and I had to manually copy .dll files to the right location (due to my ROS installation into a mamba environment I think)
- Other simple dependencies easily installable using
pip
- Some ros nodes in Python and some in C++
So far I have it working on one PC but it cannot be easily ported to other machines. What would be the most elegant solution to achieve an easily deployable and self-contained standalone application? Is this even feasible or should I try to reduce the dependencies? I was already thinking that I could potentially move away from ROS and use Python's multiprocessing
library to facilitate things, but this would require a major code rewrite and would not allow for easy integration of the C++ node that performs sensor fusion using GTSAM.
Some ideas I had include
- Using
pyinstaller
to package some of the dependencies (like here). However, I don't know how it would work with the C++ packages in this case - Use a Windows or Ubuntu based Docker container with all the dependencies. However, here I don't know how I would easily use the cameras and other sensors such that their data is sent to Docker. Additionally, I would have to send the data to Unity somehow
- Using some sort of other packaging tool like NSIS (I found this using a quick google search, but have never done any packaging in this way before)
- Port the entire software to Ubuntu as there packaging seems to bit easier from what I read. Unity would run on a different computer in this case and the data would be transmitted via the network.
Is any of this realistic? Any input would be appreciated!