r-io suiter-io suiteuse case docs
← Barbecue
Barbecue / Guided scenario

Henri at the barbecue

A garden party told by nine sensor values. The pool opens, the barbecue is lit, and a child, Henri, walks from the far side of the house to the grill, then to the pool: each measurement wakes 2L rules that draw danger zones, compute a risk from Henri’s distance, then raise burn, drowning and death alerts. The story is followed in the 3D view of r-ioplay, with the camera behind Henri, and in r-iota.

What this scenario demonstrates

No actuality is planned in this story: the timeline only holds sensor values, each one emitted at its date and held until the next. Everything else is deduced by 2L rules written on the edges of the model: an activation condition on Generated_By, a susceptibility condition on Is_Susceptible_To, an impact condition on Impacts.

A rule is woken up by the nodes it reads in its conditions. Because the burn rule reads Henri’s position, each GPS value re-evaluates it and the probability follows the distance: 0 at the edge of the zone, 1 at the 1.5 m threshold.

The maps show things in the order they happen: Henri walks first, and what his new position creates (a risk, an alert) only appears when he arrives.

Video

The whole story in four minutes

The scenario played from start to finish on a running r-io, narrated in English or French. Pick the audio language and turn the subtitles on or off below the video, or download the MP4: it carries both narrations and both subtitle tracks.

01 · Step

Open the project, the scenario and the 3D view

The Barbecue project models a garden: a house, a barbecue and a swimming pool 17.5 m apart, a child named Henri Martinez who carries a phone (with a GPS) and a watch (with a cardiac rhythm and a temperature sensor), a water level sensor in the pool and a thermal sensor on the grill. When the story begins, Henri stands on the other side of the house, away from both the pool and the barbecue.

  1. In r-ioga, load Barbecue from the Projects workspace, then open Project List.
  2. Launch r-iosemit, r-ioplay and r-iota from the Applications column of the project row. Keep r-ioplay and r-iota open for the whole story, without reloading them.
  3. In r-iosemit, select the game scenario Henri barbecue story.
  4. In r-ioplay, choose 3D Henri's land in the MAP selector, open the Camera menu and click 3rd on Henri’s line: the camera settles behind Henri and will follow him.

ResultThe timeline shows nine dates from 10:05 to 10:45, each with a sensor value card: Water Level = 1, Barbecue thermal sensor = 60, six positions of GPS of Henri Martinez (the last one with an altitude of −1.5 m), then Cardiac Rythm Sensor of Henri Martinez = 0. r-iota shows No alert detected. The Camera button of the 3D view reads Camera · 3rd person. While the camera follows Henri, the view can still be adjusted with the MOVE / LOOK / ALT / ZOOM panel, the keyboard or the mouse (left drag to turn around him, right drag to shift, wheel to zoom); ⌂ returns to the default view. While it follows Henri, the view can still be adjusted: the MOVE, LOOK and ALT / ZOOM buttons, the keyboard and the mouse (left drag to turn around Henri, right drag to shift the view, wheel to zoom) all act on it, and ⌂ restores the default view.

02 · Step

Open the pool and light the barbecue

The first two values turn the two hazards on. The water level crosses 0.8: the Submersion potentiality becomes active. The grill temperature crosses 50: High Temperature becomes active. Their rules also give each hazard its reach with setRadius.

  1. In r-iosemit, click Next step (10:05, water level 1).
  2. Click Next step again (10:10, thermal sensor 60).

ResultA zone of 10 m appears around the pool, then a zone of 6 m around the barbecue, drawn live as hatched ground in the 3D view (they are visible in the next captures). Henri has not moved and is outside both zones: no risk, r-iota still shows No alert detected.

03 · Step

Henri enters the barbecue zone

Henri walks around the house and stops just inside the 6 m zone, 5.5 m from the grill, then halfway between the edge of the zone and the barbecue, at 3 m. The burn rule computes the probability linearly between the edge of the zone and the 1.5 m threshold: (6 − 5.5) / (6 − 1.5) ≈ 0.11, then (6 − 3) / (6 − 1.5) ≈ 0.67.

  1. Click Next step (10:15) and watch Henri walk to the edge of the zone.
  2. Click Next step (10:20): Henri moves to the middle of the zone.

ResultThe camera follows Henri along his way. Only when he arrives does the risk Henri risks getting burned become visible, together with its objective Prevent Henri risks getting burned: its marker lies at Henri’s feet in 3D, and a permanent label follows him on the 2D maps, ⚠ 11 % then ⚠ 67 %. r-iota shows 1 SURE ALERTS: a risk that must be prevented is an incident too. Everything Henri carries moves with him, including the watch and its sensors.

04 · Step

Too close: the burn alert

Henri is now 1 m from the grill, under the 1.5 m threshold. The risk has become a fact: the rule freezes the risk and activates the alert Henri burns, and the objective Treat Henri burns is activated with it.

  1. Click Next step (10:25).
  2. Look at the 3D view, then at the r-iota detection panel.

ResultThe risk marker and its label disappear and the alert takes their place: r-iota still shows Alerts require a strategy with 1 SURE ALERTS, now Treat Henri burns. The objective carries its activation date, which is how r-iota knows the incident started after the beginning of the crisis.

05 · Step

Henri approaches the pool

Henri leaves the grill for the pool. He first stops at the very edge of the 10 m submersion zone, 9.7 m from the pool, then halfway between this edge and the water. The drowning risk follows the same shape as the burn risk, with a 7 m threshold: (10 − 9.7) / (10 − 7) = 0.10, then 0.55.

  1. Click Next step (10:30).
  2. Click Next step (10:35).

ResultHenri is in danger of drowning appears when Henri arrives, with a ⚠ 10 % then ⚠ 55 % label on the 2D maps. r-iota counts 2 SURE ALERTS: the burn alert and the drowning risk.

06 · Step

Henri falls into the pool

The next position is in the water, close to the edge of the pool, and it is the only one of the story that carries an altitude: −1.5 m. isInside is true: the drowning alert replaces the risk.

  1. Click Next step (10:40) and watch Henri in the 3D view.

ResultHenri walks to the pool and sinks steadily during the last meters, down to 1.5 m under the surface. The risk marker disappears, Henri drowns becomes active on the pool, and the burn alert is frozen: r-iota is back to 1 SURE ALERTS.

07 · Step

Henri’s heart stops

The cardiac rhythm sensor of Henri’s watch reads 0. The 2L rule activates Henri is dead: Henri is frozen and his corpse takes his place. The CEP rule of the watch raises Bradycardia detected on Watch of Henri Martinez at the same time.

  1. Click Next step (10:45).
  2. Look at the r-iota detection panel and map.

Resultr-iota counts 3 SURE ALERTS: Henri drowns, Henri is dead and the bradycardia, all located on the pool. FIND SOLUTION(S) is available to look for a response. Henri’s avatar has left the 3D view: the camera stays where it was.

08 · Step

Go back in time

The timeline can be played backwards. Before each step, the state of the whole project is memorised; going back restores it, and Henri walks his way back in the 2D and 3D views.

  1. Click Previous step: Henri comes back to life, in the water.
  2. Drag the white playhead of the timeline to the left, to 10:20 for example: everything played after that date is undone.
  3. Click Restart to return to the beginning of the story.

ResultEach step back removes what the step had created: alerts, risks and zones disappear, the r-iota counter follows (3, 1, 2, 2, 1, 1, 1, 0, 0), Henri rises from the pool and walks backwards along his path. After Restart, Henri is behind the house again, the two hazards are off and r-iota shows No alert detected: the story can be replayed without restarting anything.

Going further

Behind the scenes: the 2L rules

The burn risk is driven by the susceptibility condition of the edge between the risk and High Temperature. The grammar has no parentheses, so the computation goes through intermediate variables. The distance to Henri is written in the if itself: that is what subscribes the rule to Henri’s moves.

Node henri = findNodeInstance("Kid", "Henri Martinez");
Node barbecue = findNodeInstance("Good", "Barbecue");
if(henri != null && highTemperature.isActive() && actualityBurns.isFreeze()
   && henri.getGeoloc().getPosition().distanceTo(barbecue.getGeoloc().getPosition()) <= highTemperature.getGeoloc().radius) {
	Float distance = henri.getGeoloc().getPosition().distanceTo(barbecue.getGeoloc().getPosition());
	Float zoneRadius = highTemperature.getGeoloc().radius;
	if(distance > 1.5) {
		Float remaining = zoneRadius - distance;
		Float span = zoneRadius - 1.5;
		riskBurns.probability = remaining / span;
		riskBurns.active();
	}
}

distanceTo returns meters (haversine); isInside tests a position against a zone. To write your own story, plan sensor values in the r-iosemit timeline: a value is held until the next one and the STORY mode can narrate it. For a GPS value, the Planned sensor value dialog offers the latitude and longitude, an Altitude in meters (0 by default) and a world map whose ✕ marker can be dragged or placed with a click; a GPS value can also target a place of the model.

Barbecue / Scénario guidé

Henri au barbecue

Une fête au jardin racontée par neuf valeurs de capteurs. On ouvre la piscine, on allume le barbecue, et un enfant, Henri, part de l’autre côté de la maison pour rejoindre le gril, puis la piscine : chaque mesure réveille des règles 2L qui dessinent les zones de danger, calculent un risque selon la distance d’Henri, puis lèvent les alertes de brûlure, de noyade et de décès. L’histoire se suit dans la vue 3D de r-ioplay, caméra dans le dos d’Henri, et dans r-iota.

Ce que montre ce scénario

Aucune actualité n’est planifiée dans cette histoire : la frise ne contient que des valeurs de capteurs, chacune émise à sa date et maintenue jusqu’à la suivante. Tout le reste est déduit par des règles 2L écrites sur les arêtes du modèle : condition d’activation sur Generated_By, condition de susceptibilité sur Is_Susceptible_To, condition d’impact sur Impacts.

Une règle est réveillée par les nœuds qu’elle lit dans ses conditions. Comme la règle de brûlure lit la position d’Henri, chaque valeur GPS la réévalue et la probabilité suit la distance : 0 au bord de la zone, 1 au seuil de 1,5 m.

Les cartes montrent les choses dans l’ordre où elles arrivent : Henri marche d’abord, et ce que sa nouvelle position crée (un risque, une alerte) n’apparaît qu’à son arrivée.

Vidéo

Toute l’histoire en quatre minutes

Le scénario joué de bout en bout sur un r-io en marche, commenté en français ou en anglais. Choisissez la langue de l’audio et activez ou non les sous-titres sous la vidéo, ou téléchargez le MP4 : il contient les deux narrations et les deux pistes de sous-titres.

01 · Étape

Ouvrir le projet, le scénario et la vue 3D

Le projet Barbecue modélise un jardin : une maison, un barbecue et une piscine à 17,5 m l’un de l’autre, un enfant nommé Henri Martinez qui porte un téléphone (avec un GPS) et une montre (avec un capteur de rythme cardiaque et un de température), un capteur de niveau d’eau dans la piscine et un capteur thermique sur le gril. Au début de l’histoire, Henri se tient de l’autre côté de la maison, loin de la piscine comme du barbecue.

  1. Dans r-ioga, charger Barbecue depuis le Projects workspace, puis ouvrir Project List.
  2. Lancer r-iosemit, r-ioplay et r-iota depuis la colonne Applications de la ligne du projet. Garder r-ioplay et r-iota ouverts pendant toute l’histoire, sans les recharger.
  3. Dans r-iosemit, sélectionner le scénario de jeu Henri barbecue story.
  4. Dans r-ioplay, choisir 3D Henri's land dans le sélecteur MAP, ouvrir le menu Camera et cliquer sur 3rd sur la ligne d’Henri : la caméra se place dans le dos d’Henri et le suivra.

RésultatLa frise affiche neuf dates de 10:05 à 10:45, chacune avec une carte de valeur capteur : Water Level = 1, Barbecue thermal sensor = 60, six positions de GPS of Henri Martinez (la dernière avec une altitude de −1,5 m), puis Cardiac Rythm Sensor of Henri Martinez = 0. r-iota affiche No alert detected. Le bouton Camera de la vue 3D indique Camera · 3rd person. Pendant que la caméra suit Henri, la vue reste réglable avec le panneau MOVE / LOOK / ALT / ZOOM, le clavier ou la souris (glisser gauche pour tourner autour de lui, glisser droit pour décaler, molette pour zoomer) ; ⌂ rend la vue par défaut. Pendant qu’elle suit Henri, la vue reste réglable : les boutons MOVE, LOOK et ALT / ZOOM, le clavier et la souris (glisser gauche pour tourner autour d’Henri, glisser droit pour décaler la vue, molette pour zoomer) agissent sur elle, et ⌂ rétablit la vue par défaut.

02 · Étape

Ouvrir la piscine et allumer le barbecue

Les deux premières valeurs allument les deux dangers. Le niveau d’eau franchit 0,8 : la potentialité Submersion devient active. La température du gril franchit 50 : High Temperature devient active. Leurs règles donnent aussi à chaque danger sa portée, avec setRadius.

  1. Dans r-iosemit, cliquer sur Next step (10:05, niveau d’eau 1).
  2. Cliquer de nouveau sur Next step (10:10, capteur thermique 60).

RésultatUne zone de 10 m apparaît autour de la piscine, puis une zone de 6 m autour du barbecue, dessinées en direct sous forme de sol hachuré dans la vue 3D (elles sont visibles sur les captures suivantes). Henri n’a pas bougé et reste hors des deux zones : aucun risque, r-iota affiche toujours No alert detected.

03 · Étape

Henri entre dans la zone du barbecue

Henri contourne la maison et s’arrête juste à l’intérieur de la zone de 6 m, à 5,5 m du gril, puis à mi-chemin entre le bord de la zone et le barbecue, à 3 m. La règle de brûlure calcule la probabilité de façon linéaire entre le bord de la zone et le seuil de 1,5 m : (6 − 5,5) / (6 − 1,5) ≈ 0,11, puis (6 − 3) / (6 − 1,5) ≈ 0,67.

  1. Cliquer sur Next step (10:15) et regarder Henri marcher jusqu’à la lisière de la zone.
  2. Cliquer sur Next step (10:20) : Henri avance au milieu de la zone.

RésultatLa caméra suit Henri tout au long de son trajet. C’est seulement à son arrivée que le risque Henri risks getting burned devient visible, avec son objectif Prevent Henri risks getting burned : son marqueur est posé aux pieds d’Henri en 3D, et une étiquette permanente le suit sur les cartes 2D, ⚠ 11 % puis ⚠ 67 %. r-iota affiche 1 SURE ALERTS : un risque à prévenir est lui aussi un incident. Tout ce que porte Henri se déplace avec lui, montre et capteurs compris.

04 · Étape

Trop près : l’alerte de brûlure

Henri est maintenant à 1 m du gril, sous le seuil de 1,5 m. Le risque est devenu un fait : la règle gèle le risque et active l’alerte Henri burns, et l’objectif Treat Henri burns s’active avec elle.

  1. Cliquer sur Next step (10:25).
  2. Regarder la vue 3D, puis le panneau de détection de r-iota.

RésultatLe marqueur de risque et son étiquette disparaissent et l’alerte prend leur place : r-iota affiche toujours Alerts require a strategy avec 1 SURE ALERTS, désormais Treat Henri burns. L’objectif porte sa date d’activation : c’est ainsi que r-iota sait que l’incident a commencé après le début de la crise.

05 · Étape

Henri s’approche de la piscine

Henri quitte le gril pour la piscine. Il s’arrête d’abord en lisière de la zone de submersion de 10 m, à 9,7 m de la piscine, puis à mi-chemin entre cette lisière et l’eau. Le risque de noyade suit la même forme que le risque de brûlure, avec un seuil de 7 m : (10 − 9,7) / (10 − 7) = 0,10, puis 0,55.

  1. Cliquer sur Next step (10:30).
  2. Cliquer sur Next step (10:35).

RésultatHenri is in danger of drowning apparaît à l’arrivée d’Henri, avec une étiquette ⚠ 10 % puis ⚠ 55 % sur les cartes 2D. r-iota compte 2 SURE ALERTS : l’alerte de brûlure et le risque de noyade.

06 · Étape

Henri tombe dans la piscine

La position suivante est dans l’eau, près du bord de la piscine, et c’est la seule de l’histoire à porter une altitude : −1,5 m. isInside est vrai : l’alerte de noyade remplace le risque.

  1. Cliquer sur Next step (10:40) et regarder Henri dans la vue 3D.

RésultatHenri marche jusqu’à la piscine et s’enfonce régulièrement sur les derniers mètres, jusqu’à 1,5 m sous la surface. Le marqueur de risque disparaît, Henri drowns devient active sur la piscine, et l’alerte de brûlure est gelée : r-iota revient à 1 SURE ALERTS.

07 · Étape

Le cœur d’Henri s’arrête

Le capteur de rythme cardiaque de la montre d’Henri lit 0. La règle 2L active Henri is dead : Henri est gelé et son cadavre prend sa place. La règle CEP de la montre lève en même temps Bradycardia detected on Watch of Henri Martinez.

  1. Cliquer sur Next step (10:45).
  2. Regarder le panneau de détection et la carte de r-iota.

Résultatr-iota compte 3 SURE ALERTS : Henri drowns, Henri is dead et la bradycardie, toutes situées sur la piscine. FIND SOLUTION(S) permet de chercher une réponse. L’avatar d’Henri a quitté la vue 3D : la caméra reste où elle était.

08 · Étape

Remonter le temps

La frise se joue aussi à l’envers. Avant chaque pas, l’état de tout le projet est mémorisé ; reculer le restaure, et Henri refait son chemin en marche arrière dans les vues 2D et 3D.

  1. Cliquer sur Previous step : Henri revient à la vie, dans l’eau.
  2. Faire glisser vers la gauche la réglette blanche de la frise, jusqu’à 10:20 par exemple : tout ce qui a été joué après cette date est défait.
  3. Cliquer sur Restart pour revenir au début de l’histoire.

RésultatChaque pas en arrière retire ce que le pas avait créé : alertes, risques et zones disparaissent, le compteur de r-iota suit (3, 1, 2, 2, 1, 1, 1, 0, 0), Henri remonte de la piscine et parcourt son trajet à reculons. Après Restart, Henri est de nouveau derrière la maison, les deux dangers sont éteints et r-iota affiche No alert detected : l’histoire peut être rejouée sans rien redémarrer.

Pour aller plus loin

En coulisses : les règles 2L

Le risque de brûlure est porté par la condition de susceptibilité de l’arête entre le risque et High Temperature. La grammaire n’a pas de parenthèses : le calcul passe donc par des variables intermédiaires. La distance à Henri est écrite dans le if lui-même : c’est ce qui abonne la règle aux déplacements d’Henri.

Node henri = findNodeInstance("Kid", "Henri Martinez");
Node barbecue = findNodeInstance("Good", "Barbecue");
if(henri != null && highTemperature.isActive() && actualityBurns.isFreeze()
   && henri.getGeoloc().getPosition().distanceTo(barbecue.getGeoloc().getPosition()) <= highTemperature.getGeoloc().radius) {
	Float distance = henri.getGeoloc().getPosition().distanceTo(barbecue.getGeoloc().getPosition());
	Float zoneRadius = highTemperature.getGeoloc().radius;
	if(distance > 1.5) {
		Float remaining = zoneRadius - distance;
		Float span = zoneRadius - 1.5;
		riskBurns.probability = remaining / span;
		riskBurns.active();
	}
}

distanceTo renvoie des mètres (haversine) ; isInside teste une position par rapport à une zone. Pour écrire votre propre histoire, planifiez des valeurs de capteurs dans la frise de r-iosemit : une valeur est maintenue jusqu’à la suivante et le mode STORY peut la raconter. Pour une valeur GPS, la boîte Planned sensor value propose la latitude et la longitude, une Altitude en mètres (0 par défaut) et une carte du monde dont le marqueur ✕ se déplace à la souris ou se pose d’un clic ; une valeur GPS peut aussi viser un lieu du modèle.