-
Notifications
You must be signed in to change notification settings - Fork 2
Designing your Scenario
Your scenario consists of your network topology and the messages that communicate across this topology. To define your scenario, identify the ROS2 messages that flow between robots and the network configuration of your swarm. Then construct a CSV scenario file for configuring and modeling this scenario.
Your CSV scenario file defines publishers and subscribers by role, defines robots by role, and defines the stations, links, and other network properties for your swarm. The file is broken into sectioins, where each section has a section title, section header, and scenario information for that section. Publishers, Subscribers, and Robots define the ROS2 messages and the roles the robots in your swarm will take on. The other sections define your network configuration and settings for Mininet-WiFi.
-
Publishers - Defines publisher subscriptions by role. Also defines the QoS policy for publishing the subscription. Publisher entries have this format:
Publisher, Role, Subscription, Frequency, Size, History, Depth, Reliability, Durability
-
Subscribers - Defines subscriber subscriptions by role. Also defines the QoS policy for subscribing to the subscription. Subscriber entries have this format:
Subscriber, Role, Subscription, History, Depth, Reliability, Durability
-
Robots - Defines robot names and the role the robots will take:
Robot, Name, Role
History, depth, reliability, and durability define the QoS policy, see https://index.ros.org/doc/ros2/Concepts/About-Quality-of-Service-Settings/. Here is the QoS syntax for scenario files:
-
History
controls history depth. Modes arekeep_all
andkeep_last
. Forkeep_last
, useDepth
. -
Depth
defines history depth whenHistory
mode iskeep_last
. -
Reliability
regulates reliability of data received. Modes arereliable
andbest_effort
. Forreliable
, DDS will track transmissions and attempt to repair lost transmissions. Forbest_effort
, DDS will not track transmissions and will not attempt to repair lost transmissions. -
Durability
provides durability by transmitting previously transmitted data to readers that join late. Modes aretransient_local
andvolatile
.
-
Stations - Station definitions for each robot such as location for fixed-location stations:
Station, Name, param=value, ...
For example settings, see
addStation
in the examples in the mininet-wifi repository. -
Links - Radio link information for the network link on each robot:
Link, Name, param=value, ...
For example settings, see
addLink
in the examples in the mininet-wifi repository. -
Propagation Model - The radio signal propagation model:
Propagation Model, param=value, ...
See
setPropagationModel
in the examples in the mininet-wifi repository. -
Mobility Model - The mobility model:
Mobility Model, param=value, ...
See
setMobilityModel
in the examples in the mininet-wifi repository.Alternative to Mobility Model, we can define start and stop points for individual robots using
Start Mobility
,Mobility
, andStop Mobility
, see example usage in the mininet-wifi repository. -
Plot Graph - How to plot the real-time mobility graph:
Plot Graph, param=value, ...
See
plotGraph
in the examples in the mininet-wifi repository.
Here is the mininet_testbed's example swarm defined at ~/gits/mininet_testbed/scenarios/example1.csv
. It defines one ground station that publishes odometry data and four red team robots that subscribe to odometry data:
# Publisher, Role, Subscription, Frequency, Size, History, Depth, Reliability, Durability
Publisher, GS, odometry, 10, 500, keep_last, 0, reliable, volatile
# Subscribers, Role, Subscription, History, Depth, Reliability, Durability
Subscriber, red_team, odometry, keep_last, 0, reliable, volatile
# Robot, Name, Role
Robot, R1, GS
Robot, R2, red_team
Robot, R3, red_team
Robot, R4, red_team
Robot, R5, red_team
# Station, Name, param=value, ...
Station, R1, range=100, position=0;0;0
Station, R2, range=100, position=1;0;0
Station, R3, range=100, position=0;1;0
Station, R4, range=100, position=-1;0;0
Station, R5, range=100, position=0;-1;0
# Link, Name, param=value, ...
Link, R1, cls=adhoc, intf=R1-wlan0, ssid=adhocNet, mode=g, channel=5, ht_cap=HT40+
Link, R2, cls=adhoc, intf=R2-wlan0, ssid=adhocNet, mode=g, channel=5, ht_cap=HT40+
Link, R3, cls=adhoc, intf=R3-wlan0, ssid=adhocNet, mode=g, channel=5, ht_cap=HT40+
Link, R4, cls=adhoc, intf=R4-wlan0, ssid=adhocNet, mode=g, channel=5, ht_cap=HT40+
Link, R5, cls=adhoc, intf=R5-wlan0, ssid=adhocNet, mode=g, channel=5, ht_cap=HT40+
Propagation Model, model=logDistance, exp=4
Plot Graph, min_x=-2, min_y=-2, max_x=2, max_y=2
The above setup is sufficient for configuring a topology with stations. You may code any network configuration that Mininet-WiFi supports using ROS2 properties in a scenario file and Network properties in a Python code file. The robot names in your scenario file must match names used in the code, for example sta1
.
-
ROS2 Properties: Define your publishers, subscribers, and robots using the scenario properties for these, described above.
-
Network Properties: Define your network topology using Python code. As a starting point, please see the examples in the
mininet-wifi/examples
directory. Here are the steps:-
Look for examples of configurations similar to your target scenario in the
mininet-wifi/examples
directory. Network property setup happens in thetopology
function. -
Modify the topology or pick an existing topology.
-
Remove the bottom port that starts the command line interpreter (CLI) and stops the network. These lines might look as follows:
info("*** Running CLI\n") CLI_wifi(net) info("*** Stopping network\n") net.stop()
-
Add this line at the bottom of the
topology
function to return the network object back tomininet_runner
so it can start the robots:return net
Once your Python file is set up, invoke
mininet_runner.bash
passing it the-t "args..."
argument indicating that the topology comes from your code.An example file is provided at
mininet_testbed/scenarios/adhoc.py
. Invoke it as follows:./mininet_runner.bash scenarios/adhoc.csv zah -t "scenarios/adhoc.py -a"
-