FIROS with Turtlesim and Orion Context-Broker

We will quickly set up a running example of FIROS with the turtlesim_node. It is expected, that you already have installed ROS, turtlesim, a functional Orion Context Broker and followed the Installation instruction explained in the Installation-section to be able to execute rosrun firos core.py.

In this example we will show you how to run two FIROS instances on the same machine looping the messages endlessly between the Context-Broker and the ROS-World.

Configuration-Folder for two FIROS instances

Before executing any commands you need to create two configuration folders. In this example we will create two folders config_1 and config_2. Each of the configuration folder do have the following files with the following content:

config.json :

{
    "environment": "test",
    "test": {
        "contextbroker": {
            "address": "localhost",
            "port": 1026
        }
    }
}

whitelist.json :

{}

NOTE config.json: The Context-Broker runs locally, so the configuration should be fine for you, as long as your Context-Broker is also locally.

Inside config_1 we add the file topics.json with the following content:

{
    "/turtle1/cmd_vel": ["geometry_msgs/Twist", "publisher"],
    "/turtle1/pose": ["turtlesim/Pose", "subscriber"]
}

and for config_2 the following swapped content:

{
    "/turtle1/cmd_vel": ["geometry_msgs/Twist", "subscriber"],
    "/turtle1/pose": ["turtlesim/Pose", "publisher"]
}

Executing tree should give you the follwing structure:

.
├── config_1
│   ├── config.json
│   ├── topics.json
│   └── whitelist.json
└── config_2
    ├── config.json
    ├── topics.json     # Publisher/Subscriber should be swapped here
    └── whitelist.json

Execution of roscore, turtlesim and the Context-Broker

To start the roscore simply exeute:

roscore


To start the Orion Context-Broker (via the docker-compose.yml) execute:

docker-compose up

You should be able to access localhost:1026/v2/entities which should print an empty list.


To run turltesim, do the following:

rosrun turtlesim turtlesim_node


You can check whether everything is running fine by executing:

rostopic list

You should get the following output:

/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

Starting the FIROS instances

Now that everything is set up, you can start a firos instance as follows:

rosrun firos core.py --conf ./config_1

In this case we need to set a specific configuration folder since we created one specifically for this example.

This creates a topic /firos which you can observe via rostopic list. You can also check localhost:1026/v2/subscriptions and observe an entry of an subscription of FIROS.

You can even check localhost:10100 to see that FIROS is telling you that it is actually running.


For the second instance of FIROS it is not enough to just execute:

rosrun firos core.py --conf ./config_2

Since the port 10100 on the machine and the topic firos in the ROS-World is already occupied by the other firos instance.

To execute another instance we need to change those values, which can be done with:

rosrun firos core.py --conf ./config_2 -P 10101 --ros-node-name firos2

You should now observe that the second instance receives a lot of messages by the Context-Broker. It is also observable how many messages are sent from the Context-Broker to this FIROS-instance in localhost:1026/v2/subscriptions.


You can also check out locahost:1026/v2/entites. There you can observe the Entity/Robot turtle1 with its topics cmd_vel and pose in json-format

Neverending loop

Note: You can kill the terminal for turtlesim. In this case the two FIROS instances still continue to send the messages to each other. It is also observable that via rostopic echo /turtle1/pose the topic pose is still published through the second FIROS instance. This behaviour is intentional, since for this example we artificially created such a message loop.

Demonstration

Below is a quick demonstration of the above described example. On the top left, roscore, the Orion-ContextBroker and Turtlesim is started. On the top-right a Web-Browser shows the content of the Orion-ConextBroker. The console on the bottom right shows information about the ROS-World. the other two consoles individually start FIROS. At the end: Turtlesim is stopped and you can observe that the two FIROS-Instances are still sending Messages to each other (see: Neverending loop).

Demonstration

Note: The small Demonstration above uses the old configuration files (robots.json), which was redesigned into topics.json. Also, newer Versions of the Orion Context-Broker do not send updates to Firos, when no data changed.

Troubleshooting:

No Messages are sent between the two FIROS-instances

If this is the case. Please check your firewall-configuration (or disable the firewall temporarily, for a quick sanity check). It can also be a Orion Context-Broker version, which does not send an update to the second firos instance. In this case, the message is only sent ones.