I’m working on the Neurorobotics Platform and we’re starting to work on a Jupyter Notebook Python based alternate interface for our graphical collab app.

We’ve had some initial success interfacing with the existing REST services for OIDC -> our own running on backend servers (hosted on server VMs like .os.bbp.epfl.ch), but we’re reaching the point where we kind of need to interact with ROS (http://www.ros.org/about-ros/) services running on the remote backends and it would give the users a bit more flexibility and experiment power than the graphical frontend.

Unfortunately, ROS (like Nest) does not provide a standalone Python interface. You need to install the entire ROS C++ stack and packages on the backend for the rospy package to be accessible. For the graphical frontend, we’re able to use the pure JavaScript websocket based library, but that’s not really an option for the Jupyter Notebook setup (or at least not a pleasant option). We currently build and deploy RHEL modules for our backends/cluster nodes to load, is it possible to provide ROS as a pre-installed option similar to Nest?

I still need to investigate if it’s possible for us to reach the backend on the specific ROS port, so there’s other stuff to consider, but please let me know if there’s a reason it would be completely impossible on the Jupyter Notebook end.

short answer, it’s not impossible. We can install software on the base image on user request, but we have first to make sure there are no conflicts with the current installed software (because we do not support multiple images, yet)
The image where Jupyter notebooks are running is Debian, is that ok for you? if so, do you think it’s enough to install one of these packages http://www.ros.org/install/ or you need to somehow customize it and necessarily build it from source?

I will add the request to our backlog and we’ll let you know as soon as we start working on that.

On additional thing to consider, from a security standpoint: Unless ROS gives you some way of authenticating the notebook and encrypting the traffic you’ll need an intermediate service to provide these security mechanisms.

This would probably mean writing a ROS controller REST service so that your unsecured network traffic doesn’t happen on the open internet.

The image where Jupyter notebooks are running is Debian, is that ok for you? if so, do you think it’s enough to install one of these packages http://www.ros.org/install/ or you need to somehow customize it and necessarily build it from source?

On Debian it’s actually easier, though there are a bunch of dependencies that have to be installed as well:

and we would just need the most basic ‘ros--ros-base’. Though we also unfortunately have other custom messages and things that we build in Jenkins. I will have to investigate our options a bit further and can get back to you.

On additional thing to consider, from a security standpoint: Unless ROS gives you some way of authenticating the notebook and encrypting the traffic you’ll need an intermediate service to provide these security mechanisms.

I agree, unfortunately it’s looking like we may have to figure out how to use the websocket interface from Python. I will look into this further and see what is actually feasibly.