Wireless Control Bus (WCB) is a concurrent transmissions (CTX) based protocol
stack tailored to event-triggered control (ETC), one of the most promising
aperiodic control paradigms in the literature.
By operating in conjunction with ETC and carefully orchestrating CTX floods,
WCB timely and dynamically adapts the network operation to the control demands:
it minimizes the network overhead during quiescent, steady-state periods, while
ensuring timely and reliable reactions when required by the event-triggered
controller to retain control performance.
Experimental results show that ETC over WCB can achieve the same control performance
of periodic control at a fraction of the energy costs, thus unlocking substantial
energy savings.
The Wireless Control Bus: Enabling Efficient Multi-hop Event-Triggered Control with Concurrent Transmissions, Matteo Trobinger, Gabriel de Albuquerque Gleizer, Timofei Istomin, Manuel Mazo, Amy L. Murphy, and Gian Pietro Picco. In ACM Transaction on Cyber-Physical Systems (TCPS) 6.1 (2022). PDF
We implement WCB for the TI's CC2538 SoC, targeting the Zolertia Firefly board. Our prototype is built atop a Contiki OS port of Glossy for this SoC. Glossy network flooding is exploited in WCB as a primitive to build fast and reliable event detection, sensor readings collection, and dissemination of actuation commands.
The WCB code can be adapted to work with different hardware platforms (e.g., the TMote Sky platform), or to be emulated in Cooja. Please contact us if you need a version of the WCB code compatible with TMote Sky nodes and Cooja.
We extensively evaluated WCB by using a cyber-physical testbed emulating a water distribution system (implemented in MATLAB/Simulink) controlled over a real-world large-scale multi-hop wireless network. A detailed description of our real-time network-in-the-loop experimental setup can be found in the paper.
The WCB code has the following directory structure:
-
apps/deployment
to statically set the nodes logical IDs given their IEEE addresses; -
apps/wcb-test
WCB application logic and control related functions; -
contiki
Contiki source tree; -
cyber-physical_testbed/WIS
emulated water irrigation system, with and without measurement noise; -
cyber-physical_testbed/orchestrator
to manage the interactions between the emulated plant model and the real wireless sensor network; -
dev/cc2538
overridden SoC specific files of Contiki; -
exp/example
example configuration of the WCB protocol; -
net/glossy
Glossy implementation; -
net/wcb
WCB implementation and default configuration; -
platform/zoul
overridden Firefly node specific files of Contiki; -
test-tools
utility scripts to build WCB from a configuration file and parse WCB logs.
The instructions to configure and compile WCB for Zolertia Firefly nodes are reported below.
-
Install the ARM tool chain (the ARM GCC version used in the development and testing of WCB is 9.2.1)
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
-
Clone the WCB repository
git clone https://github.com/d3s-trento/wcb.git
-
Get Contiki submodules.
git submodule update --init --recursive
Before compiling WCB, nodes should have IDs assigned. To guarantee that every node has
a unique node ID, a static mappings between node IDs and IEEE addresses is
done, following the same approach proposed in lwb-cc2538.
Node IDs can be statically set in apps/deployment/deployment.c
as follows.
struct id_addr {
uint16_t id;
uint8_t ieee_addr[IEEE_ADDR_LEN];
};
static struct id_addr id_addr_list[] = {
{ 1, {0x00, 0x12, 0x4B, 0x00, 0x18, 0xD6, 0xF7, 0x9C}},
{ 2, {0x00, 0x12, 0x4b, 0x00, 0x14, 0xb5, 0xd9, 0x76}},
{ 3, {0x00, 0x12, 0x4B, 0x00, 0x18, 0xD6, 0xF3, 0x84}},
{ 4, {0x00, 0x12, 0x4B, 0x00, 0x18, 0xD6, 0xF3, 0xEE}},
{ 5, {0x00, 0x12, 0x4B, 0x00, 0x18, 0xD6, 0xF7, 0x92}},
{0, {0, 0, 0, 0, 0, 0 ,0, 0}}
};
To discover the IEEE addresses of your devices, you can use the following command
python contiki/tools/cc2538-bsl/cc2538-bsl.py -p <serial port>
which should output something similar to what follows:
Opening port /dev/tty.SLAB_USBtoUART, baud 500000
Connecting to target...
CC2538 PG2.0: 512KB Flash, 32KB SRAM, CCFG at 0x0027FFD4
Primary IEEE Address: 00:12:4B:00:14:B5:D8:F1
To conveniently build WCB from a configuration file we encourage you to exploit the
test_tools/simgen.py
script. It reads the parameter set(s) defined in
params.py
and, for each set of parameters, builds a binary.
The exp/example/params.py
file offers a good starting point for defining your
parameter set and the list of nodes participating in the experiment.
Upon running python ../../test_tools/simgen.py
, the simgen.py
script
creates one or several subdirectories (if they don't exist) named after the
individual parameter sets defined in the params.py
file and puts there the
binaries compiled from apps/wcb-test
. You can directly exploit such binaries to
run your experiments.
Although we tested the code extensively, it is considered a research prototype that likely contains bugs. We take no responsibility for and give no warranties in respect of using this code.