Discussion: ROS2 on mobile devices

Hello everybody,

I’m curious if there is any updates more than a year later.
@Dario @spiderkeys specifically :wink:




we have been running ROS2 on Android with no issues. We have been using Java and C++ bindings. For backend we used the experimental Zenoh backend in client mode, because it has better support for routed networks.
We built everything from source ourselves.

Kind regards,


We’re currently working on a project featuring dedicated Android tablets used as HMI devices. Tablets are connected with robots over dedicated Wi-Fi links, with micro-ROS glueing the two worlds. The HMI itself is written in C++ and SDL2 with only the bare minimum of platform-specific gunk, with a specific goal of making it easy to adapt to other platforms if / when needed.

Overall I think this is a very workable and cost-efficient approach for many non-critical uses. Not to mention the user’s familiarity aspect, which means a lot more than I initially thought it would.

1 Like

Amazing. Would you have a public project demonstrating that, please?

Hi @victorpaleologue,

sorry about the late reply. We don’t have a public demo yet, but I presented about this topic (Mobile Gateways on ROS2) at the Zenoh Summit: Mobile Gateways for ROS2 Systems with Zenoh - YouTube

Kind regards,

Hi all,
I’m currently trying to port ROS-Mobile-Android to ROS2.
some widgets are already working!


Hi @spiderkeys did anything ever come of your plans to build a Qt based GUI using ROS2, and if so did it ever go open source?

Im currently trying to get ROS2 working on android with Qt and it causing me to question my life choices :stuck_out_tongue:

1 Like

Hi @indeedhat,

For a number of reasons, we ended up building our Qt GUI applications using pure DDS, instead of ROS2. On the ROS2 side, we define our messages using .idl instead of .msg and reuse those same IDL files in our GUI app, such that it can communicate with our ROS2 applications without any issues.

We use conan to define and package all dependencies for the application, which makes it fairly trivial to compile and deploy libs for any platform/architecture. For Linux, we bundle everything in an AppImage, so the user doesn’t need to install anything, beyond having a stock Ubuntu 20.04-or-later system.

You might find this approach a bit easier to reason about, and it should work just fine for Android, though the downside is that if you actually depend on any specific ROS2 packages (like geometry2 or something), it won’t really solve that for you. We made the decision early on to keep our GUI application pretty much completely agnostic of ROS2, such that it could be easily adapted to work with other comm protocols and vehicle frameworks.

1 Like

Thank you for the information that is really helpful. Ill take a look at the pure DDS approach.

Ill have to look through our workspaces to make sure but i don’t think that we rely on any ros2 specific packages off the top of my head so this may well be the solution.

Thanks again

I think I have a goid, quick, and clean idea …
I am trying to run ros2 on my termux proot-distro ubuntu for days, it is not running, I had permussion problems on my unrooted system, mainly because of the way ros2 uses the network, and since I am not a professional programmer, I could not go editing the code using lib getifaddrs().
It is a great idea for robot professionals/hoppiests to be able to use ros2 on an android device that is a pocket carried small device, with higher availability than labtop.
If anyone intetestwd in my approuch (proot) I am glad to share my experience here or anywhere. I think I am only one step from having it runnig seamlessly, the only obstacle I still have is a permission denial, i.e:
getifaddrs: Permission denied
After this error received when calling any node, it seems that things are going well, but in fact the nodes and topics cannot intercommunicate, and no messages are received by listener from the talker, also the turtle demo is not moving by keyboard buttons.
I beliave having any of debian or ubuntu proot machine inside android termux is the easiest solution to have ros2 of any version running with almost full android cpu speed.
If I solve my permission problem it is also easy for me to create a script to have it all installed with one termux command.