Rosbridge in docker: Unable to load the manifest for package

asked 2020-02-11 06:49:17 -0500

dekichan gravatar image

updated 2020-02-11 08:06:50 -0500

Hello,

the situation is as follows. I run rosbridge (ROS Kinetic) in its own Docker container (I'm trying to dockerize as much of ROS as possible), and other nodes in different containers. In other nodes I have sourced the development workspace (source /workspace/devel/setup.bash, they share the same volume mounts), but in rosbridge I did not since the files are not mounted there.

Ros bridge setup in docker-compose:

ros-bridge:
    image: mypkg/ros-bridge:latest
    container_name: ros-bridge
    build: ./resources/docker/ros-bridge/Dockerfile
    environment:
        - ROS_HOSTNAME=ros-bridge
        - ROS_MASTER_URI=http://ros:11311
    command: roslaunch --wait rosbridge_server rosbridge_websocket.launch
    ports:
        - 127.0.0.1:9090:9090
    depends_on:
        - ros

Other nodes have setups similar to this:

ros-runner:
    image: ros:kinetic
    container_name: ros-runner
    environment:
        # - ROS_HOSTNAME=ros-runner
        - ROS_MASTER_URI=http://ros:11311
    ports:
        - 127.0.0.1:9092:9090
    volumes:
        - ./resources/ros:/wrkspace
        - ./resources/docker/ros-base/ros_entrypoint.sh:/ros_entrypoint.sh
    depends_on:
        - ros
        - ros-bridge

There are custom message ( and service) definitions in /wrkspace. So when I try to send these custom messages (or services) via rosbridge I get the error mentioned in the title:

ros-bridge      | [ERROR] [1581345009.192822]: [Client 0] [id: advertise:/bridge_launcher:1] advertise: Unable to load the manifest for package launcher. Caused by: launcher

/bridge_launcher is the topic and launcher is a package where the message is defined. I know that this error happens because the /wrkspace is not mounted to rosbridge container.

Is it possible to somehow share message types without mounting the same volume to ROS bridge too?

edit retag flag offensive close merge delete

Comments

1

Your question title suggests you receive an error message when you try to start this.

But I don't see any error message in your question text. If you do get one, please share it.

As to your question: you'll have to allow rosbridge access to the message definitions somehow. That does not mean you'd have to use the same workspace necessarily, as long as the workspace rosbridge "sees" contains the messages it needs.

You could share just the package containing the messages for instance.

This would be one case where having messages (and services and actions) in a separate package is highly advantageous.

gvdhoorn gravatar image gvdhoorn  ( 2020-02-11 07:00:41 -0500 )edit

You're right, I edited the question slightly so it includes the error message. Just to be sure: you'd recommend to put message, service and action definitions in a special package, and then to distribute this package to all the nodes, while having packages that contain the logic only in the containers where nodes need them?

dekichan gravatar image dekichan  ( 2020-02-11 08:11:06 -0500 )edit

Yes.

That is best practice regardless of whether you're using Docker or any other deployment technology.

Consider the package with the messages, services and actions as your public ROS API.

gvdhoorn gravatar image gvdhoorn  ( 2020-02-11 09:42:28 -0500 )edit