0
$\begingroup$

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!

$\endgroup$
1
  • 1
    $\begingroup$ I think I might have an answer for your 1st point (How to load c++ package). You can create a lib of the file(s) used, get the path of the lib, and then create a python file to call function from the created C++ lib. Not sure if it will work or not. You can give it a shot. $\endgroup$
    – aarsht7
    Commented May 7 at 14:59

1 Answer 1

0
$\begingroup$

I think Docker could be a solution for easy portability between machines.

$\endgroup$
2
  • $\begingroup$ Yeah I was also considering Docker but the limitation is that a camera is not easily connect to my knowledge (requires at least a VM), at least when using Windows, right? $\endgroup$ Commented May 7 at 18:01
  • $\begingroup$ Yes, correct. I am thinking other way to do it by forwarding your camera stream over rtps instead $\endgroup$ Commented May 8 at 15:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.