Spaces:
Runtime error
Runtime error
| <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> | |
| <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/mml-chtml.js"> | |
| </script> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <meta property="og:title" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> | |
| <meta property="og:description" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> | |
| <meta property="og:type" content="website"> | |
| <meta property="og:site_name" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> | |
| <meta name="twitter:card" content="summary_large_image"> | |
| <meta name="twitter:title" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> | |
| <meta name="twitter:description" | |
| content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> | |
| <meta name="twitter:image" content="./mfiles/figs/intro.png" /> | |
| <link rel="shortcut icon" href="mfiles/favicon.png"> | |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"> | |
| <link rel="stylesheet" href="css/simple-grid.css"> | |
| <title>DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control</title> | |
| </head> | |
| <body> | |
| <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script> | |
| <script> | |
| const videos = document.querySelectorAll('.carousel-item video'); | |
| videos.forEach(video => { | |
| video.addEventListener('touchstart', (e) => { | |
| e.stopPropagation(); | |
| }); | |
| }); | |
| </script> | |
| <div class="jumbotron"> | |
| <div class="container"> | |
| <div class="row mt-5"> | |
| <div class="col-12 center mb-3"> | |
| <h1> | |
| <img src="mfiles/favicon.png" height="80px" style="margin-right: 5px"></img> | |
| <b>DynaMo</b>: In-Domain Dynamics Pretraining for Visuo-Motor Control | |
| </h1> | |
| <div class="row mt-3 mb-3"> | |
| <div class="col-4 hidden-sm"></div> | |
| <div class="col-2 center"> | |
| <a style="text-decoration: none" href="https://arxiv.org/abs/2409.12192"> | |
| <h3 style="color: #F5A803">Paper</h3> | |
| </a> | |
| </div> | |
| <div class="col-2 center"> | |
| <a style="text-decoration: none" href="https://github.com/jeffacce/dynamo_ssl"> | |
| <h3 style="color: #F5A803">Code</h3> | |
| </a> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="center" style="flex: 0 0 15%; white-space: nowrap;"> | |
| <p class="center"><a href="https://jeffcui.com/" style="color: #333447">Zichen Jeff Cui</a></p> | |
| </div> | |
| <div class="center" style="flex: 0 0 15%; white-space: nowrap;"> | |
| <p class="center"><a href="https://www.ri.cmu.edu/ri-people/hengkai-pan/" style="color: #333447">Hengkai Pan</a></p> | |
| </div> | |
| <div class="center" style="flex: 0 0 15%; white-space: nowrap;"> | |
| <p class="center"><a href="https://aadhithya14.github.io/" style="color: #333447">Aadhithya Iyer</a></p> | |
| </div> | |
| <div class="center" style="flex: 0 0 15%; white-space: nowrap;"> | |
| <p class="center"><a href="https://siddhanthaldar.github.io/" style="color: #333447">Siddhant Haldar</a></p> | |
| </div> | |
| <div class="center" style="flex: 0 0 15%; white-space: nowrap;"> | |
| <p class="center"><a href="https://lerrelpinto.com" style="color: #333447">Lerrel Pinto</a></p> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="col-12 center" style="white-space: nowrap;"> | |
| <p class="center" style="font-size: larger;"> <b>New York University</b> </p> | |
| </div> | |
| </div> | |
| <div class="row mt-3"> | |
| <div class="col-12 center img"> | |
| <img class="center" src="mfiles/figs/intro.png" style="width:100%"></img> | |
| </div> | |
| </div> | |
| <!--Abstract--> | |
| <div class="row mt-3"> | |
| <div class="col-12"> | |
| <h2 class="center m-bottom">Abstract</h2> | |
| <p> | |
| Imitation learning has proven to be a powerful tool for training complex visuomotor | |
| policies. However, current methods often require hundreds to thousands | |
| of expert demonstrations to handle high-dimensional visual observations. A key | |
| reason for this poor data efficiency is that visual representations are predominantly | |
| either pretrained on out-of-domain data or trained directly through a behavior | |
| cloning objective. In this work, we present <b>DynaMo</b>, a new in-domain, | |
| self-supervised method for learning visual representations. Given a set of expert | |
| demonstrations, we jointly learn a latent inverse dynamics model and a forward | |
| dynamics model over a sequence of image embeddings, predicting the next frame | |
| in latent space, without augmentations, contrastive sampling, or access to ground | |
| truth actions. Importantly, DynaMo does not require any out-of-domain data such | |
| as Internet datasets or cross-embodied datasets. On a suite of six simulated and real | |
| environments, we show that representations learned with DynaMo significantly | |
| improve downstream imitation learning performance over prior self-supervised | |
| learning objectives, and pretrained representations. Gains from using DynaMo | |
| hold across policy classes such as Behavior Transformer, Diffusion Policy, MLP, | |
| and nearest neighbors. Finally, we ablate over key components of DynaMo and | |
| measure its impact on downstream policy performance. | |
| </p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="container"> | |
| <div class="row"> | |
| <div class="col-12"> | |
| <h2 class="center mb-3">Method</h2> | |
| <p><a style="color: #00A2FF; font-weight: bold;">DynaMo</a>, a new self-supervised method for pretraining visual encoders for downstream visuomotor control.</p> | |
| <p> | |
| The key insight of our method is that we can learn a good visual representation for control by modeling the dynamics on | |
| demonstration observations, without requiring augmentations, contrastive sampling, or access to the ground truth | |
| actions. Given a sequence of raw visual observations, we jointly train the encoder, a latent inverse dynamics model, | |
| and a forward dynamics model. We model the actions as unobserved latents, and train all models end-to-end with a | |
| consistency loss on the forward dynamics prediction. We use a ResNet18 encoder, and causally masked transformer encoders | |
| for the inverse and forward dynamics models. The architecture is illustrated below. | |
| </p> | |
| </div> | |
| </div> | |
| <div class="col-12 center img"> | |
| <img class="center" src="mfiles/figs/model_arch.png" style="width:100%"></img> | |
| </div> | |
| <small>Embedding nearest neighbor matches. (Top) The nearest | |
| neighbor matches visualized in pixel space. (Bottom) Matches visualized in a top-down view. We see that the DynaMo | |
| representation captures task-relevant features (end effector, block, and target locations in this case), whereas prior | |
| work fixates on the large robot arm.</small> | |
| <div> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/blockpush/nn_probe.MP4" type="video/mp4"> | |
| </video> | |
| </div> | |
| </div> | |
| <!--Videos--> | |
| <div class="container mt-5"> | |
| <div class="row"> | |
| <div class="col-12"> | |
| <h2 class="center mb-3">Real-world robot rollouts</h2> | |
| <p> | |
| Rollouts with the DynaMo representation on the Allegro Manipulation environment, and the xArm Kitchen environment. | |
| We use a nearest neighbor policy for the Allegro environment, and BAKU with VQ-BeT for the xArm Kitchen environment. | |
| </p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="body-content" style="padding-bottom: 150px;"> | |
| <div class="container"> | |
| <div class="grid-display"> | |
| <h4> Allegro: pick up the sponge (4x) </h4> | |
| <p> Dataset size: 543 frames </p> | |
| <div id="indicator0" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> | |
| <div class="carousel-indicators"> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="1" aria-label="Slide 2"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="2" aria-label="Slide 3"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="3" aria-label="Slide 4"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="4" aria-label="Slide 5"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="5" aria-label="Slide 6"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="6" aria-label="Slide 7"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="7" aria-label="Slide 8"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="8" aria-label="Slide 9"></button> | |
| <button type="button" data-bs-target="#indicator0" data-bs-slide-to="9" aria-label="Slide 10"></button> | |
| </div> | |
| <div class="carousel-inner"> | |
| <div class="carousel-item active"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-1.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-2.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-3.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-4.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-5.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-6.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-success-7.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-fail-8.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-fail-9.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-sponge-fail-10.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Failure</h4> | |
| </div> | |
| </div> | |
| </div> | |
| <button class="carousel-control-prev" type="button" data-bs-target="#indicator0" data-bs-slide="prev"> | |
| <span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Previous</span> | |
| </button> | |
| <button class="carousel-control-next" type="button" data-bs-target="#indicator0" data-bs-slide="next"> | |
| <span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Next</span> | |
| </button> | |
| </div> | |
| <h4> Allegro: pick up the teabag (4x) </h4> | |
| <p> Dataset size: 1034 frames</p> | |
| <div id="indicator1" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> | |
| <div class="carousel-indicators"> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="1" aria-label="Slide 2"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="2" aria-label="Slide 3"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="3" aria-label="Slide 4"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="4" aria-label="Slide 5"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="5" aria-label="Slide 6"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="6" aria-label="Slide 7"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="7" aria-label="Slide 8"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="8" aria-label="Slide 9"></button> | |
| <button type="button" data-bs-target="#indicator1" data-bs-slide-to="9" aria-label="Slide 10"></button> | |
| </div> | |
| <div class="carousel-inner"> | |
| <div class="carousel-item active"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-success-1.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-success-2.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-success-3.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-success-4.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-success-5.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-fail-6.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-fail-7.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-fail-8.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-fail-9.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-teabag-fail-10.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> | |
| </div> | |
| </div> | |
| </div> | |
| <button class="carousel-control-prev" type="button" data-bs-target="#indicator1" data-bs-slide="prev"> | |
| <span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Previous</span> | |
| </button> | |
| <button class="carousel-control-next" type="button" data-bs-target="#indicator1" data-bs-slide="next"> | |
| <span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Next</span> | |
| </button> | |
| </div> | |
| <h4> Allegro: open the microwave oven (10x) </h4> | |
| <p> Dataset size: 735 frames </p> | |
| <div id="indicator2" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> | |
| <div class="carousel-indicators"> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="1" aria-label="Slide 2"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="2" aria-label="Slide 3"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="3" aria-label="Slide 4"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="4" aria-label="Slide 5"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="5" aria-label="Slide 6"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="6" aria-label="Slide 7"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="7" aria-label="Slide 8"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="8" aria-label="Slide 9"></button> | |
| <button type="button" data-bs-target="#indicator2" data-bs-slide-to="9" aria-label="Slide 10"></button> | |
| </div> | |
| <div class="carousel-inner"> | |
| <div class="carousel-item active"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-1.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-failure-2.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-3.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-4.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-5.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-6.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-7.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-8.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-9.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/hand/hand-microwave-success-10.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> | |
| </div> | |
| </div> | |
| </div> | |
| <button class="carousel-control-prev" type="button" data-bs-target="#indicator2" data-bs-slide="prev"> | |
| <span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Previous</span> | |
| </button> | |
| <button class="carousel-control-next" type="button" data-bs-target="#indicator2" data-bs-slide="next"> | |
| <span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Next</span> | |
| </button> | |
| </div> | |
| <h4> xArm Kitchen Tasks (real-time) </h4> | |
| <div id="indicator3" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> | |
| <div class="carousel-indicators"> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="1" aria-label="Slide 2"></button> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="2" aria-label="Slide 3"></button> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="3" aria-label="Slide 4"></button> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="4" aria-label="Slide 5"></button> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="5" aria-label="Slide 6"></button> | |
| <button type="button" data-bs-target="#indicator3" data-bs-slide-to="6" aria-label="Slide 7"></button> | |
| </div> | |
| <div class="carousel-inner"> | |
| <div class="carousel-item active"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/get-tea-success.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Take the tea bottle from the fridge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/get-water-success.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Take the vitamin water from the fridge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/get-water-fail.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Take the vitamin water from the fridge<br>Failure</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/get-yogurt-success.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Take the yogurt from the fridge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/put-yogurt-success.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Put the yogurt into the fridge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/put-ketchup-success.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Put the ketchup into the fridge<br>Success</h4> | |
| </div> | |
| </div> | |
| <div class="carousel-item"> | |
| <video class="img" style="height: 600" muted autoplay loop controls> | |
| <source src="mfiles/env/kitchen/put-ketchup-fail.mp4" type="video/mp4"> | |
| </video> | |
| <div> | |
| <h4 class="carousel-caption with-backdrop">Put the ketchup into the fridge<br>Failure</h4> | |
| </div> | |
| </div> | |
| </div> | |
| <button class="carousel-control-prev" type="button" data-bs-target="#indicator3" data-bs-slide="prev"> | |
| <span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Previous</span> | |
| </button> | |
| <button class="carousel-control-next" type="button" data-bs-target="#indicator3" data-bs-slide="next"> | |
| <span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> | |
| <span class="visually-hidden">Next</span> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <footer> | |
| </footer> | |
| </body> | |
| </html> | |